フォームヘッダーのコントロールを解除する方法
- VBAを使用して、フォームヘッダーにあるテキストボックスとコンボボックスをnullにする方法を教えてください。
- フォームヘッダーと詳細エリアにあるコントロールのコントロール名が同じであり、コントロール名での条件分岐ができないため、他の方法が必要です。
- On Error Resume Next以外の方法で、フォームヘッダーのコントロールを解除する方法を教えてください。
- ベストアンサー
もしフォームヘッダーにコントロールがあるのなら
アクセスのフォームの、フォームヘッダーに検索用テキストボックスとコンボボックスがあり、 詳細エリアにレコードソース(コントロールソース)に紐付いたテキストボックスが複数あります。 フォームヘッダーのフィルタを解除するコマンドを実行して、 フォームヘッダーのテキストボックスとコンボボックスを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 以外でお願いします。
- QSMXIIWEMDSGZ
- お礼率100% (39/39)
- オフィス系ソフト
- 回答数1
- ありがとう数1
- みんなの回答 (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 ・・・以上です。
関連するQ&A
- Accessのコントロールの数え方
Access 2003のコントロールについてお教えください。 フォーム1というフォームにチェックボックスがいくつも配置されています。 チェックボックスがいくつ配置されているか知る方法はあるのでしょうか? また、いくつのチェックボックスにチェックが入っているか知る方法はあるでしょうか? ネットで検索したところ、下記のコードが約にたつような気がするのですが、どうやって活用すればよいのかがわかりません・・・・ For Each ctl In Me.Controls With ctl If .ControlType = acTextBox Then 'コントロールの種類がテキストボックスなら値をNull(空)に設定 .Value = Null End If End With Next ctl わかりでしたらお教えください。よろしくお願いします。
- ベストアンサー
- その他MS Office製品
- コントロールタイプを絞ってループしたい
アクセスのフォーム上のコントロールをループする際に テキストボックスだけ絞ってループしたいのですが Sub Sample() Dim myFormName As String Dim ctl As Control myFormName = "フォーム1" For Each ctl In Forms(myFormName).Controls If ctl.ControlType = acTextBox Then End If Next ctl End Sub これだとテキストボックスの量が多くて、2秒くらいかかるのですが For Each ctl In Forms(myFormName).Controls この時点で、テキストボックスだけ絞る方法はありますか? For Each ctl In Forms(myFormName).ControlType(acTextBox) こうするとエラーになりました。 ご教授よろしくお願いします。
- ベストアンサー
- その他MS Office製品
- テキストボックスなら空白にする
フォームにテキストボックス2つとコンボボックス2つを設置して、 規定値に値を設定し、 Private Sub cb_テキストボックスなら空白にする_Click() Dim ctl As Control For Each ctl In Me.Controls If ctl.ControlType = acTextBox Then ctl.Value = Empty End If Next ctl End Sub としたのですが何も起こりません。 空白にするにはどうすればいいでしょうか? あと、 ctl.Valueと打つ時に、 ドットの後に、Valueが一覧に出てきませんでした。 それが原因で空白にならないのでしょうか? ご回答よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- アクセスのサブフォームの値のチェック
Accessのサブファームにある、コンボボックスの値をチェックしたいので、下記のようにしてみました。 Dim ctl As Control For Each ctl In Me.Controls If ctl.ControlType = acSubform Then msgbox Forms!メインフォーム名!サブフォームコントロール名.Form!コントロール名 End If Next すると、サブフォームの現在選択しているコンボボックスの値しか表示されません。 現在表示されているサブフォームのコンボボックスの値すべてを表示させるにはどうすればいいのでしょうか。よろしくお願います。
- 締切済み
- オフィス系ソフト
- VBAでコントロールの数をカウント。結果が違う
Access 2003のフォームについてお教えください。 フォームデザインビューで、「Form1」にテキストボックスが1つ配置されています。 レコードソースは連結されているので、フォームビューで見ると現在10のテキストボックスが フォームには表示されています。 やりたい事 フォームビューで見た時のコントロールの数をカウントしたい。ここでは、「10」という 結果が欲しいです。 そこで下記のコードを書き実行しましたが、「1」としか表示されません。 デザインビューで見ると、テキストボックスの数は1なので、それが表示 されている感じがします。 フォームビューで見た時のコントロールの数を数えるにはどのようにしたらよいでしょうか? Private Sub Form_Load() Dim ctl As Control Dim counter As Integer On Error Resume Next counter = 0 For Each ctl In Me.Controls 'コントロールがチェックボックスか判別 If TypeOf ctl Is TextBox Then counter = counter + 1 End If Next ctl msgbox counter End Sub
- ベストアンサー
- Visual Basic
- アクセス コントロール名が変わった
テキストボックスのコントロール名は「2013年」なのに、 そのコントロールをダブルクリックしてイベントプロシージャーを作ったら Private Sub Ctl2013年_DblClick(Cancel As Integer) End Sub になったのですが、なぜCtlが付いてしまったのでしょうか? 「2013年」というコントロール名はやめたほうがいいですか?
- ベストアンサー
- オフィス系ソフト
- サブフォームからメインフォームの絞込をしたい
サブフォームの項目からメインフォームの絞込をおこないたいのですが、うまくいきません やりたいこととデータベースの状況は以下のとおりです メインフォームに「会社名」があり、サブフォームにその会社の「ブランド名」(一社に対し複数存在する)とその「業種」(1つのブランドにつき1つ)がある。 メインフォーム----会社名(テキスト) サブフォーム--ブランド名(テキスト)----業種(コンボボックス) 【やりたい事】 サブフォームにある業種をメインフォーム上のフィルタ用コンボボックスで選択し、選択した 業種を持つ会社名のみ表示したい(たとえばケーキを扱うA社とD社、Z社のみメインフォームで表示するようにする) 【コード】 現在以下のようなコードを作成しています。 テキスト欄に「業種」を打ち込み、コマンドボタンを押して絞り込む ※本当はコンボボックスで選択したいのですが・・・ Private Sub コマンドボタン名_Click() Me![サブフォームのパーツ名].Form.Filter = "[コンボボタン-業種] Like '*" & Me.テキスト欄 & "*'" Me![サブフォームのパーツ名].Form.FilterOn = True Exit_コマンドボタン名_Click: Exit Sub End Sub 作成しましたが、レコードを移動するたびにパラメータ入力のポップアップがでてきます フィルターもかからず、絞込が全くできていません どなたか詳しい方ご教授よろしくお願いいたします
- ベストアンサー
- オフィス系ソフト
- テキストボックスかコンボボックスを条件としたい
フォーム上のコントロールを取得する時に、 「テキストボックスかコンボボックスなら」としたいのですが、VBAコードがわかりません。 ************************************************************ Sub Sample() Dim myCtrl As Control Dim myForm As String myForm = "フォーム1" For Each myCtrl In Forms(myForm).Controls If myCtrlのタイプがテキストボックス Or コンボボックス Then Debug.Print myCtrl.Name End If Next End Sub ************************************************************ に修正していただけますか? ControlType プロパティを使うと思うのですが、使い方がわかりません。 ご回答よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- コンボBOXで抽出した値をテキストBOXに表示したい
入力用フォームで注文フォームを作成しているのですが、コンボBOXで商品Noを抽出し、テキストBOXに商品名を表示したいのですが、 Private Sub コンボ1_AfterUpdate() Me!テキスト1 = Me!コンボ1.column(1) End Sub と入力したのですが、他の行にも同じ商品名が表示されます。 商品NoをコンボBOXで指定し、数量を手入力という入力フォームを作成したいのです。 作成方法を教えてください。 よろしくおねがいします
- ベストアンサー
- オフィス系ソフト
- 引数にコントロール名を使用したい
Excelのシート上にあるコンボボックスの値に応じて オートフィルタを制御したいと考えています。 コンボボックスは複数あるので、サブルーチン化した いのですが、コントロール名を引数として使用すると 「オブジェクトが必要です」と表示されます。 Sub 抽出(テーブル名,フィールド名,コントロール名) Range(テーブル名).AutoFilter フィールド名, コントロール名.Value End Sub Private Sub cb条件_Click() Call 抽出("テーブル1", 1, "コントロール1") End Sub
- ベストアンサー
- Visual Basic
お礼
For Each ctl In Me.Section(1).Controls これにしちゃえば、無駄にループしなくていいですね。 いくつもの方法のご提示、ありがとうございます。