後学のために、実現したいこと の条件だとどのように記述すればよいかご教示願います。
例えばループ処理を使う場合。
vba
1 Private Sub 登録する_Click ( )
2
3 'バリデーション処理の結果が False である場合
4 If IsValidRequiredControls = False Then
5 'プロシージャを抜ける
6 Exit Sub
7 End If
8
9 '新規レコードに移動する
10 DoCmd . GoToRecord , , acNewRec
11
12 End Sub
13
14 '入力必須項目のバリデーション用関数
15 Private Function IsValidRequiredControls ( ) As Boolean
16 On Error GoTo Err_IsValidRequiredControls
17
18 '既定の戻り値を False とする
19 IsValidRequiredControls = False
20
21 '入力必須項目とするコントロールの名前のリスト(カンマ区切り)を定数として定義
22 Const RequiredControlNames As String = "店舗番号,店舗名,〒,住所,電話,FAX"
23
24 '入力必須項目がない場合
25 If RequiredControlNames = "" Then
26 '戻り値を True に
27 IsValidRequiredControls = True
28 'プロシージャを抜ける
29 Exit Function
30 End If
31
32 Dim varArray As Variant
33 Dim varItem As Variant
34 Dim ctlTarget As Access . Control
35
36 '入力必須コントロール名のリストを1次元配列に変換
37 varArray = Split ( RequiredControlNames , "," , , vbBinaryCompare )
38
39 '配列の各要素を順次参照する
40 For Each varItem In varArray
41 '現在の要素の値と同じ名前のコントロールを参照
42 Set ctlTarget = Me . Controls ( varItem )
43 'そのコントロールの値が Null または空文字列である場合
44 If Nz ( ctlTarget . Value , "" ) = "" Then
45 Debug . Print "コントロール[" & varItem & "]の値が Null または空文字列"
46 'エラーメッセージを返す
47 MsgBox "備考以外は入力必須項目です。" , vbExclamation , "入力不備"
48 '戻り値を False としたままプロシージャを抜ける
49 Exit Function
50 End If
51 Set ctlTarget = Nothing
52 Next
53
54 '全てのチェックをクリアした場合は True を返す
55 IsValidRequiredControls = True
56
57 '終了処理
58 Exit_IsValidRequiredControls :
59
60 'プロシージャを抜ける
61 Exit Function
62
63 'エラー時処理
64 Err_IsValidRequiredControls :
65
66 'エラー発生時の戻り値も False とする
67 IsValidRequiredControls = False
68
69 Dim strErrCaption As String
70 Dim strErrMsg As String
71
72 strErrCaption = "実行時エラー(" & Me . Name & ".IsValidRequiredControls)"
73
74 strErrMsg = Err . Number & ": " & Err . Description
75
76 Debug . Print strErrMsg
77
78 strErrMsg = "必須項目の入力チェック中に下記のエラーが発生しました。" & vbCrLf & _
79 strErrMsg
80
81 'エラーメッセージの表示
82 MsgBox strErrMsg , vbCritical , strErrCaption
83
84 End Function
当初の記述の問題点が知りたいです。
店舗マスターテーブルのフィールドは、数値型 の店舗番号、
短いテキスト型 の店舗名・〒(郵便番号)・住所・電話番号・FAX番号・備考です。
店舗番号 + 店舗名 + 〒 + 住所 + 電話 + FAX + 備考
実行時エラー"13",型が一致しません と表示が出ます。
数値データと文字列データで加算処理を行なおうとしたからです。
VBA ランゲージリファレンス: + 演算子
If: One expression is a numeric data type and the other is a String
Then: A Type mismatcherror occurs.