0

因此,我拥有的以下 VBA 代码将根据等于一月的 Combo1 值重新查询表单。最终,我将在 Combo 值中有 X 年,并且只想显示基于每年的所有记录。

是否可以添加额外的 VBA 代码以使用查询中的条件,而不是有 X 数量的查询并根据年份重新查询它们。

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语句)

因此,假设您的数据存储在一个名为的表中,该表tblMyData具有名为month(String, month name) 和year(Numeric, Integer) 的列(仅示例)。您可以通过这种方式在 VBA 中生成 SQL 查询:

...
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

我对你想要完成的事情只有一个模糊的想法。向我们展示来自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在组合的更新后事件中执行。

于 2013-01-30T19:44:29.687 回答