質問編集履歴
1
全て入力後に「質問をする」ボタンを押したが画面が切り替わっただけで投稿されず、再度開きなおして「質問をする」を押すと入力途中のものが投稿されたため編集しました。
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
VBA
|
1
|
+
VBAフォーム 未入力チェック処理の書き方
|
test
CHANGED
@@ -1,43 +1,67 @@
|
|
1
1
|
### 前提・実現したいこと
|
2
2
|
|
3
|
-
申込書をフォームで作成しているのですが、登録ボタンを押した際に未入力項目がないかをチェックする処理の書き方に
|
3
|
+
申込書をExcelのフォームで作成しているのですが、登録ボタンを押した際に未入力項目がないかをチェックする処理の書き方に悩んでいます。
|
4
|
+
|
5
|
+
|
6
|
+
|
7
|
+
|
4
8
|
|
5
9
|
|
6
10
|
|
7
11
|
### 発生している問題・エラーメッセージ
|
8
12
|
|
13
|
+
未入力の項目があれば項目名をMsgBoxに表示さたいので下記のように考えました
|
9
14
|
|
15
|
+
```VBA
|
16
|
+
|
17
|
+
Dim msg As String ' MsgBoxに表示する未入力の項目名
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
If Me.Text_Name.Value = "" Then msg="・名前"& vbCrLf
|
22
|
+
|
23
|
+
If Me.Text_Tel.Value = "" Then msg="・電話番号"& vbCrLf
|
10
24
|
|
11
25
|
```
|
12
26
|
|
13
|
-
If Me.Text_Name.Value = "" Then msg="・名前"& vbCrLf
|
14
|
-
|
15
|
-
```
|
16
|
-
|
17
|
-
項目数
|
27
|
+
しかし項目数が30ほどあるのでこの書き方では非効率なのではないかと思いました。
|
18
|
-
|
19
|
-
### 該当のソースコード
|
20
28
|
|
21
29
|
|
22
30
|
|
23
|
-
```ここに言語名を入力
|
24
31
|
|
25
|
-
ソースコード
|
26
|
-
|
27
|
-
```
|
28
32
|
|
29
33
|
|
30
34
|
|
31
35
|
### 試したこと
|
32
36
|
|
37
|
+
オブジェクト名が「ツールの種類_項目名」なので、ForEach文で回そうと思い下記を考えました。
|
33
38
|
|
39
|
+
```VBA
|
34
40
|
|
35
|
-
|
41
|
+
Dim Ctrl As Control ' MsgBoxに表示する未入力の項目名
|
36
42
|
|
37
43
|
|
38
44
|
|
39
|
-
|
45
|
+
For Each Ctrl In Me.Controls
|
40
46
|
|
47
|
+
Select Case Ctrl.Name
|
41
48
|
|
49
|
+
Case "Text_Name"
|
42
50
|
|
51
|
+
msg="・名前"& vbCrLf
|
52
|
+
|
43
|
-
|
53
|
+
Case "Text_Tel"
|
54
|
+
|
55
|
+
msg="・電話番号"& vbCrLf
|
56
|
+
|
57
|
+
・
|
58
|
+
|
59
|
+
・
|
60
|
+
|
61
|
+
・
|
62
|
+
|
63
|
+
Next Ctrl
|
64
|
+
|
65
|
+
```
|
66
|
+
|
67
|
+
僕の中ではこの書き方が見やすく速度的にもよい?のかと思いますが、他に効率の良い処理の書き方があれば教えていただきたいです。
|