- ベストアンサー
ExcelVBAについて質問します、宜しくお願いします。
ExcelVBAについて質問します、宜しくお願いします。 UserForm にいろいろなコントロールが有るのですが。 「質問-1」 ・下記の様なプログラムで、読んでくるコントロールの順番は何で決まるのですか? ・TabIndexで決まる様でもない様ですが。 For Each MyControl In Me.Controls char = MyControl.Name ・・・・・・・ Next 「質問-2」 LabelコントロールはTabIndexまたはTabStopは無効なのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
それなら、 コンボボックスのオブジェクト名は「"Comb" + 連番」 テキストボックスのオブジェクト名は「"Text" + 連番」 という風に規則を作っておいてこんなコードを書けば良いです。 無駄なコントロールをループで回さなくて済みますし。 Sub Test() Dim cnt As Integer 'コンボボックスのチェック For cnt = 1 To 2 With Me.Controls("Comb" & cnt) If .Value = "" Then .SetFocus MsgBox "未入力です。", vbExclamation + vbOKOnly Exit Sub End If End With Next 'テキストボックスのチェック For cnt = 1 To 2 With Me.Controls("Text" & cnt) If .Value = "" Then .SetFocus MsgBox "未入力です。", vbExclamation + vbOKOnly Exit Sub End If End With Next MsgBox "入力されていました。", vbInformation + vbOKOnly End Sub
その他の回答 (2)
- crossgate
- ベストアンサー率65% (78/119)
>(1)ユーザフォームにデザインモードで追加した順 >これは、コントロールの配置をそのままで自由に後から変更出来ないのでしょうか? はい。 少なくともExcel2002と2003では変えられないです。 2007以降は分かりません。 (XML形式なら何とかなるんだろうか?) >もし出来ないとすれば、初めから考えて配置しなければならないという事ですか いえ、普通はそんなもの意識しませんよ。 ループの中で取得できるコントロールの順番が決まっていないとダメ、という理由があるのでしょうか?
補足
回答ありがとうございました。 >ループの中で取得できるコントロールの順番が決まっていないとダメ、という理由があるのでしょうか? フォーム上の数多くのコントロールの中で (1)コンボボックス2個とテキストボツクス4個の入力の有無と値の確認をする。 (2)その順番をComb1→Comb1→Text1→Text2・・・・とする こんな理由で、前記の様なコーテイングをしました。 今回の様な目的を満たす、良い方法が有りましたらお聞かせ下さい。
- crossgate
- ベストアンサー率65% (78/119)
>「質問-1」 (1)ユーザフォームにデザインモードで追加した順 (2)ユーザフォームのInitializeイベントで追加した順 (3)「(1)」も「(2)」も両方ある場合は「(1)→(2)」の順 >「質問-2」 はい。無効です。 Labelですから。
補足
回答ありがとうございます。 ・プログラムで全てのコントロールのプロパテイを読んだ時、エラーが出たので疑問に思いました ・「質問-2」は承知しました。 「質問-1」についてもう少しお願いします。 (1)ユーザフォームにデザインモードで追加した順 これは、コントロールの配置をそのままで自由に後から変更出来ないのでしょうか? もし出来ないとすれば、初めから考えて配置しなければならないという事ですか
お礼
ありがとうございます。 私のこだわりがあったようです。 (1)For Each...Nextにこだわった (2)プログラムの行数を出来るだけ短くしたかった (3)「"Comb入金"」...「"Text金額"」様な形でプログラムを組んで来た 今回もありがとうございました。