あるフォーム内に存在するコントロールの中で、任意に選択した種類のコン
トロールの内容だけをクリアする関数を説明します。
● 準備 ●
標準モジュールに新規プロシージャを作成して、以下のコードを記述して下
さい。
● サンプル ●
'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は
整数値で指定して下さい。
|