
アクセスのフォームの、フォームヘッダーに検索用テキストボックスとコンボボックスがあり、
詳細エリアにレコードソース(コントロールソース)に紐付いたテキストボックスが複数あります。
フォームヘッダーのフィルタを解除するコマンドを実行して、
フォームヘッダーのテキストボックスとコンボボックスをnullにしたいのですが、
vbaで「もしフォームヘッダーなら」ってするにはどうすればいいでしょうか?
フォームヘッダーのコントロール名も詳細エリアのコントロール名も
区別のないコントロール名でなのでコントロール名で条件分岐をすることは不可能です。
Private Sub フィルタを解除コマンド_Click()
Dim ctl As Control
For Each ctl In Me.Controls
If (ctl.ControlType = acTextBox) Or (ctl.ControlType = acComboBox) Then
'ここで、もしフォームヘッダーにコントロールがあるのならってしたい
Me.Controls(ctl.Name) = Null
End If
Next ctl
Me.Form.FilterOn = False
End Sub
このコードに付け加えてくれませんか?
Debug.Print ctl.Name
でコントロール名を取得するとフォームヘッダーも詳細もどちらのコントロール名も取得されてしまいます。
On Error Resume Next
以外でお願いします。

No.1ベストアンサー
- 回答日時:
> vbaで「もしフォームヘッダーなら」ってするにはどうすればいいでしょうか?
コントロールの「Section」プロパティを確認すればOkです。
Private Sub フィルタを解除コマンド_Click()
Dim ctl As Control
For Each ctl In Me.Controls
If (ctl.ControlType = acTextBox) Or (ctl.ControlType = acComboBox) Then
'フォーム ヘッダは「1」(『詳細』は「0」、フォームフッターは「2」)
If (ctl.Section = 1) Then
'Valueプロパティを使用して、直接入力できます
'(さらに、Valueプロパティは省略可能なので「ctl = Null」でもOk)
ctl.Value = Null
End If
End If
Next ctl
Me.Form.FilterOn = False
End Sub
なお、操作対象がフォームヘッダのみなのでしたら、ループ対象を「Me.Controls」と
する代わりに、「Me.Section(1).Controls」とした方が、ループを行うコントロールが
フォームヘッダ内のコントロールに限定される分、効率的です。
(コントロールのSectionプロパティによる分岐も不要化します)
Private Sub フィルタを解除コマンド_Click()
Dim ctl As Control
'「Me.Section(n)」の「n」は、上のコントロールのSectionプロパティの値と同じ
For Each ctl In Me.Section(1).Controls
If (ctl.ControlType = acTextBox) Or (ctl.ControlType = acComboBox) Then
ctl.Value = Null
End If
Next ctl
Me.Form.FilterOn = False
End Sub
・・・以上です。
For Each ctl In Me.Section(1).Controls
これにしちゃえば、無駄にループしなくていいですね。
いくつもの方法のご提示、ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
access vbaにてテンポラリーテーブルが作りたいです。
Access(アクセス)
-
どこにもフォーカスを当てたくない
Access(アクセス)
-
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
-
4
ACCESSで値を代入できないとは?
Visual Basic(VBA)
-
5
新規レコード行を非表示にしたい
Access(アクセス)
-
6
Access 起動時、ウィンドウを最大化したいです
Access(アクセス)
-
7
Access サブフォームでの選択行の取得
その他(データベース)
-
8
AccessのFormの設定で、開いた時に必ず最大化で表示する方法が分からず困っています
Access(アクセス)
-
9
Accessのコンボボックスでリストが選択できない
Word(ワード)
-
10
ラベルとテキストボックスのグループ化を解除したい
Access(アクセス)
-
11
ACCESSの書式(小文字が大文字に変わる)
PowerPoint(パワーポイント)
-
12
ACCESSでテーブルにあるチェックボックスを一括でYesにする方法を教えてください
Access(アクセス)
-
13
MS Accessでフォームの「開く時」と「読込み時」のイベントの違い
Access(アクセス)
-
14
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
15
Accessのマクロでモジュールを実行させたい。
Access(アクセス)
-
16
accessVBA 「フォームが見つかりません」
その他(データベース)
-
17
テキストボックスにクエリ結果を表示させたい
その他(データベース)
-
18
フォームウィンドウを最前面に表示したい(ACCESS)
Microsoft ASP
-
19
アクセスで数値型のフィールドにNullをいれたい
その他(データベース)
-
20
リストボックスのプロパティ「複数選択」の「標準」「拡張」の違い
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
'ckbl' コントロールは作成され...
-
EXCELでactivexコントロールを...
-
Excel VBA で Richtextboxを使...
-
エクセル・VBA CheckBoxのオブ...
-
カメラスクロールするのを動画...
-
Groupboxの配下のコントロール...
-
コントロールを移動できない
-
ユーザーフォームで動的(Me.Con...
-
VBでアニメーションGIFを表示す...
-
DLL不要のソフト製作方法につい...
-
ActiveXコントロールはどこへい...
-
なかなか、Zオーダーが理解で...
-
OCXって何ですか?
-
ExcelVBAでListViewが使用できない
-
カレンダーコントロールの使用...
-
VB6.0 コマンドボタンを追加し...
-
DataGridView、1セルに複数コ...
-
フォーカスのあるコントロール
-
Excelコマンドボタン名を変数に...
-
VBAのフォームでTextBoxがいっ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBAでオプションボタン...
-
エクセル・VBA CheckBoxのオブ...
-
カメラスクロールするのを動画...
-
EXCELでactivexコントロールを...
-
VBA ユーザーフォームの Keypre...
-
'ckbl' コントロールは作成され...
-
ExcelVBAでListViewが使用できない
-
チェックボックスをオンにした...
-
ユーザーフォームで動的(Me.Con...
-
chr関数の呼び出しで「プロ...
-
全てのオブジェクトのプロパテ...
-
vb.netで画面のコントロールId...
-
間違えて配置してしまったコン...
-
Excel VBA で Richtextboxを使...
-
VBAのフォームでTextBoxがいっ...
-
OCXって何ですか?
-
C# Form上に配置されたコントロ...
-
エクセル コントロールツール...
-
変数をコントロール型で使用す...
-
Groupboxの配下のコントロール...
おすすめ情報