トップページ >
Excel >
VBA >
コントロールの状態をチェックする
コントロールの状態をチェックする
UserForm上にたくさんのチェックボックスを配置したとします。[OK]ボタンをクリックしたときに、どの項目がオンになっているかを調べるときは、コントロールをひとつずつチェックするのではなく、すべてのコントロールを返すControlsコレクションを使いましょう。たとえば次のようなケースです。
コマンドボタンをクリックしたときに、どのチェックボックスがオンになっているかを調べるには次のようにします。
Private Sub CommandButton1_Click()
Dim c, buf As String
For Each c In Controls
If Left(c.Name, 8) = "CheckBox" Then
If c.Value Then buf = buf & c.Caption & vbCrLf
End If
Next c
MsgBox buf & "がオンです"
End Sub
Controlsコレクションは、フォーム上に配置されているすべてのコントロールを返します。上記の場合は、5つのチェックボックスと1つのコマンドボタンです。コントロールを配置すると、一般的には「CheckBox1」や「CommandButton1」のような名前がつけられますので、その名前(Nameプロパティ)を調べることで、それが何のコントロールかを判断できます。
たかがこれしきのことをするのに、クラスを使って疑似コントロール配列を作るまでもありません。
もしチェックボックスのコントロール名が「CheckBox」で始まっていなかったら?そしたら判定できません。だから、判定したいコントロールの名前は、Controlsコレクションで取得することを前提にして、あらかじめ統一しておくんです。先頭に「chk」という識別文字をつけるだけでもいいでしょう。「chk住所」「chk氏名」みたいにね。それくらいの手間は惜しまないでくださいな。
[目次]に戻る