0

したがって、次の VBA コードは、1 月に等しい Combo1 値に基づいてフォームを再クエリします。最終的に、コンボ値に X 年があり、各年に基づいてすべてのレコードのみを表示したいと考えています。

X個のクエリを使用する代わりに、クエリから基準を使用するために追加のVBAコードを追加し、年に基づいてそれらを再クエリすることは可能ですか?

Private Sub Combo1_AfterUpdate()

If Combo1.Value = "2013" Then
[Form_Main Form].RecordSource = "Main_Form_Query"
[Form_Main Form].Requery
End If

End Sub
4

3 に答える 3

3

実行時にクエリを作成できます (覚えておいてください: アクセスのクエリ オブジェクトは単なる SQL ステートメントです)。

したがって、データが(String, month name) および(Numeric, Integer)というtblMyData列を持つというテーブルに格納されていると仮定しましょう(単なる例です)。次の方法で、VBA で SQL クエリを生成できます。monthyear

...
Dim strSQL as String
...
strSQL = "SELECT * FROM tblMyData " & _
         "WHERE month='" & ComboMonth.Value & "' " & _
         "  AND year=" & ComboYear.Value ";"
...
[Form_Main Form].RecordSource = strSQL
[Form_Main Form].Requery
...

これがお役に立てば幸いです。

于 2013-01-30T19:55:39.170 に答える
1

別の方法でフォームを開きます。

 DoCmd.OpenForm "MyForm",,,"MyYear=2013"

または

 DoCmd.OpenForm "MyForm",,,"MyYear=" & Me.MyCombo

テーブルまたはクエリのMyYearが数値であると仮定します。そうでない場合は、一重引用符を使用できます。

一般的な考え方は、すべてのレコードを含むフォームを使用し、OpenFormのWhere引数を使用して、表示するレコードを指定することです。レポートでも同じことができます。

于 2013-01-30T19:43:54.080 に答える
1

あなたが達成しようとしていることについて、私には漠然とした考えしかありません。からの SQL を表示すると役立つ場合がありますMain_Form_Query。その間、フォームの.Filterプロパティを使用して必要なことを実行できるかどうかを検討してください。

フォームのレコード ソースに という名前のテキスト フィールドが含まれている場合、fiscal_yearコンボ ボックスで選択した年に基づいて表示される行をフィルター処理できます。

Private Sub Combo1_AfterUpdate()
    ' .Value is the default property, so not required after Me.Combo
    Me.Filter = "fiscal_year = '" & Me.Combo1 &  "'"
    Me.FilterOn = True
End Sub

さらに別の方法として、 のコンボ値を参照することもできますMain_Form_Query

WHERE
       Forms!YourForm!Combo1 Is Null
    OR some_field = Forms!YourForm!Combo1 

次にMe.Requery、コンボの After Update イベントで行います。

于 2013-01-30T19:44:29.687 に答える