質問編集履歴

1

全て入力後に「質問をする」ボタンを押したが画面が切り替わっただけで投稿されず、再度開きなおして「質問をする」を押すと入力途中のものが投稿されたため編集しました。

2021/08/23 03:25

投稿

D0NKAMA
D0NKAMA

スコア28

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
- 項目数30ほどある
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
- ### 補足情報(FW/ツールのバージョンなど)
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
+ 僕の中ではこの書き方が見やすく速度的にもよい?のかと思いますが、他に効率の良い処理の書き方があれば教えていただきたいです。