ユーザーフォームの入力項目を一括クリアするプログラム(VBA)
入力用のユーザーフォームなどだと、転記が終わった後には入力内容をクリアしたいですよね。
そうした時には、入力項目を一括でクリアできるプログラムを作っておくと便利です。
今回紹介するコードは入力項目の数や種類に影響されないため、どんなユーザーフォームに対しても使用できます。
汎用的なプロシージャにしているので、ライブラリとして使ってみてください。
入力項目を一括クリアするプログラム
Public Sub CtrlsClear(ctrls As Controls, Optional blListClear As Boolean = False)
'ユーザーフォームの入力項目をすべてクリア
'blListClear:Trueの場合はコンボボックスとリストボックスの候補もクリア
'コントロールコレクション(Controls)から1つずつ取り出してクリア
Dim ctrl As Control
For Each ctrl In ctrls
Select Case TypeName(ctrl)
Case "TextBox", "RefEdit"
ctrl.Value = ""
Case "CheckBox", "OptionButton", "ToggleButton"
ctrl.Value = False
Case "ComboBox", "ListBox"
ctrl.Value = ""
If blListClear Then ctrl.Clear
End Select
Next
End Sub
'/////呼び出し方法(ユーザーフォーム)/////
Private Sub CommandButton1_Click()
'クリックイベントなどでCtrlsClearプロシージャを呼び出す
Call CtrlsClear(Me.Controls)
'コンボボックス/リストボックスの候補もクリアしたい場合
Call CtrlsClear(Me.Controls, True)
End Sub
CtrlsClearが入力項目を一括で削除するプロシージャです。
呼び出し方法のようにCall CtrlsClear(Me.Controls)とするとユーザーフォームの入力項目を削除することができます。
Call CtrlsClear(Me.Controls, True)とすると、コンボボックス/リストボックスの候補も削除することができます。
画像のように次の7つの入力項目をすべてクリアすることができます。
(画像ではコンボボックス/リストボックスの候補もクリアしてします)
- テキストボックス
- コンボボックス
- リストボックス
- チェックボックス
- ラジオボタン
- トグルボタン
- RefEdit
解説
ユーザーフォームの入力項目はすべてコントロールコレクションに含まれます。
そのため、コントロールコレクションを引数ctrlsとして受け取っています。
'コントロールコレクション(Controls)から1つずつ取り出してクリア
Dim ctrl As Control
For Each ctrl In ctrls
Select Case TypeName(ctrl)
Case "TextBox", "RefEdit"
ctrl.Value = ""
Case "CheckBox", "OptionButton", "ToggleButton"
ctrl.Value = False
Case "ComboBox", "ListBox"
ctrl.Value = ""
If blListClear Then ctrl.Clear
End Select
Next
このコードがメインの処理をしている部分で、コントロールコレクションから1つずつコントロールを取り出し、その種類(TypeName)に応じて分岐処理をさせています。
テキストボックスとRefEditについてはValueを""とします。
チェックボックス、オプションボタン、トグルボタンについてはValueをFalseとします。
コンボボックス、リストボックスもValueを""とするのですが、これらには選択候補があります。
そのため、If blListClear Then ctrl.Clearの部分にてblListClearがTrueの場合のみ候補もクリアしています。