面倒なフォームのクリアをまとめて簡単に出来る方法 ~Access~
Accessで入力フォームを作成する時には欠かせない入力クリア機能。
テキストボックスやコンボボックスが多い場合は一つ一つのコントロールを指定してNullやFalseをセットするのが面倒と言う事はありませんか?
今回はそんな時に利用すると便利な、コントロールをまとめてクリアできるVBAコードをご紹介します。
まずはコントロールの名前をルール化しましょう
例えばテキストボックスの場合は[txb???]、コンボボックスの場合は[cmb???]、チェックボックスの場合は[chk???]とコントロールの先頭にそれぞれの種類別に識別できるルールを設定しましょう。
※コントロール名は皆様、各々のルールで構いません。
クリアボタンのイベント プロシージャ
クリアボタンの[クリック時]のイベントプロシージャは以下のコードを参考にして下さい。
'************************* 'クリアボタン クリック時 '************************* Private Sub cmdClear_Click() '確認メッセージ出力 Response = MsgBox("画面をクリアしますか。", _ vbYesNo + vbQuestion + vbDefaultButton1, "クリアサンプルフォーム") If Response <> vbYes Then DoCmd.CancelEvent SendKeys "{ESC}", False Exit Sub End If 'クリア処理を呼び出す Call ClearObj End Sub
クリア用の汎用コード
'************************* '以下クリア処理 '************************* Public Sub ClearObj() Dim myObj As Object 'コントロールClearループ For Each myObj In Me 'テキストボックス(Nullをセット) If myObj.Name Like "txb*" _ Then myObj.Value = Null End If 'コンボボックス(Nullをセット) If myObj.Name Like "cmb*" _ Then myObj.Value = Null End If 'オプションボタン(フレーム内をクリア) If myObj.Name Like "flm*" _ Then myObj.Value = Null End If 'チェックボックス(Falseをセット) If myObj.Name Like "chk*" _ Then myObj.Value = False End If Next End Sub
VBAコードの解説
テキストボックスにNullをセットする場合ですが、上記サンプルコードの10行目~13行目で実行しています。
ここではコントロール名の先頭にtxbが付与されたものは全てNullをセットするようにしています。
If myObj.Name Like "txb*" Then 'コントロール名がtxbかチェック myObj.Value = Null 'Nullをセットしている End If
応用例
数値用のテキストボックスの場合は0をセットしたい場合もありますよね?
その場合はコントロール名に数値用の名前を付与すれば良い訳ですね。(以下はコントロール名をtxbNumにした場合)
If myObj.Name Like "txbNum*" Then 'コントロール名がtxbNumかチェック myObj.Value = 0 '0をセット End If
上記以外のリストボックス等のコントロールでも同様に名前のルール化さえしっかりしていればいくらでも応用が利きます。
以上、今回はフォームのオブジェクトをクリアする汎用的なコードについてでした。
今回のサンプルファイルは以下のリンクからダウンロード可能です。