フォーム内のコントロールの内容をクリアする

  あるフォーム内に存在するコントロールの中で、任意に選択した種類のコン
トロールの内容だけをクリアする関数を説明します。


● 準備 ●
  標準モジュールに新規プロシージャを作成して、以下のコードを記述して下
さい。

● サンプル ●

'ClearCtl関数用の列挙型パラメータ
Public Enum ClearType
    clNull = 1
    clBlank = 2
    clSpace = 3
End Enum

'【引数説明】
'FromNam        :フォーム名。省略した場合はアクティブフォームが対象になる
'myControlType  :コントロールタイプ。Accessの定数か数値で指定する
'                 省略した場合はテキストボックスになる
'                   テキストボックス = acTextBox  = 109
'                   コンボボックス   = acComboBox = 111
'ClearType      :クリアするコントロールに代入する値
'                   clNull  :Null値でクリアする
'                   clBlank :長さ0の文字列でクリアする
'                   clSpace :スペース埋めでクリアする
Public Function ClearCtl(Optional FormName As String = "", _
                         Optional myControlType As Integer = acTextBox, _
                         Optional ClearType As ClearType = clNull)
    On Error GoTo Func_Err:
    Dim Ctl As Control

    'フォーム名の判別
    If FormName = "" Then
        FormName = Screen.ActiveForm.Name
    End If

    'クリアのためのループ処理
    For Each Ctl In Forms(FormName).Controls
        'コントロールの種類を判別
        If Ctl.ControlType = myControlType Then
            'クリアタイプ別の処理
            Select Case ClearType
                Case clNull
                    Ctl = Null
                Case clBlank
                    Ctl = ""
                Case clSpace
                    Ctl = Space(Len(Ctl))
            End Select
        End If
    Next

'終了処理
Func_Exit:
    Set Ctl = Nothing
    Exit Function

Func_Err:
    MsgBox "Error Number : " & Err.Number & vbCrLf & Err.Description
    GoTo Func_Exit:
End Function


● 動作確認 ●

  新規フォーム[フォーム1]を作成し、テキストボックス[テキスト1]、コンボ
ボックス[コンボ1]、コマンドボタン[コマンド1] [コマンド2]を作成する。
  [コマンド1]のOnClick/クリック時イベントに、以下のコードを記述する。
  ------------------------------------------------------------
  Private Sub コマンド1_Click()
      Call ClearCtl("フォーム1", acTextBox, clSpace)
  End Sub
  ------------------------------------------------------------

  [コマンド2]のOnClick/クリック時イベントに、以下のコードを記述する。
  ------------------------------------------------------------
  Private Sub コマンド2_Click()
      Call ClearCtl("フォーム1", acComboBox, clNull)
  End Sub
  ------------------------------------------------------------

  フォームビューに変更し、テキストボックス・コンボボックスに適当な値を
入力してからコマンドボタンをクリックする。
  クリックしたコマンドボタンに応じて、テキストボックスがスペースで埋め
られ、コンボボックスがNull値でクリアされていることを確認する。


● 詳細 ●

  サンプルでは、フォームオブジェクトのControlsコレクションを利用して、
For Eacl...Next構文でControlオブジェクトを順番に処理することで、コント
ロールの値を一括してクリアしています。VBAではVBのようにコントロール配列
が使えないため、複数のコントロールに対して同じ処理を一括して行う場合、
For Eacl...Next構文を使用することが一般的です。
  またEnumステートメントを使用することにより、関数のパラメータを定数で
選択することが出来るようになっています。
  このサンプル関数は、特に非連結フォームのコントロールをクリアする時に
役立つでしょう。


■■ 注意 ■■
  Access97にはEnumステートメントが実装されていません。ですからAccess97
以前のバージョンでサンプルを実行する場合、Enumブロックを削除し、Select
Case部分のEnumMemberを整数に置きかえ、関数呼び出し時の引数ClearTypeは
整数値で指定して下さい。

Access97/2000



戻る


Excel Word Access VBA! モーグ