面倒なフォームのクリアをまとめて簡単に出来る方法 ~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

上記以外のリストボックス等のコントロールでも同様に名前のルール化さえしっかりしていればいくらでも応用が利きます。

以上、今回はフォームのオブジェクトをクリアする汎用的なコードについてでした。

今回のサンプルファイルは以下のリンクからダウンロード可能です。