我有一个VBA代码,用于检查用户输入的年份和月份是否有数据,并由此决定向用户发送哪个查询。这是代码:Sub macro1()
Dim dbs As DAO.Database
Dim qdf As DAO.QueryDef
Dim qdf2 As DAO.QueryDef
Dim year As Integer
Dim month As Integer
Set dbs = CurrentDb
Set qdf = dbs.QueryDefs("äëðñåú äåöàåú")
Set qdf2 = dbs.QueryDefs("äëðñåú äåöàåú àí àéï èåøðéø áçåãù")
year = InputBox("What year would you want to get data from?")
month = InputBox("What month would you want to get data from")
If Not IsNull(DLookup("[÷åã èåøðéø]", "[àãîéðñèøöéä ùì úçøåéåú]", "DateDiff('m', [úàøéê çæøä îäèåøðéø], DateSerial(" & year & ", " & month & ", 1)) = 0")) Then
qdf.Parameters("[äëðñ ùðä]") = year
qdf.Parameters("[äëðñ çåãù]") = month
DoCmd.OpenQuery "äëðñåú äåöàåú", acViewNormal, acReadOnly
Else
qdf2.Parameters("äëðñ ùðä") = year
qdf2.Parameters("äëðñ çåãù") = month DoCmd.OpenQuery "äëðñåú äåöàåú àí àéï èåøðéø áçåãù", acViewNormal, acReadOnly
End If
End Sub
代码完美无缺,除了它没有输入查询的年份和月份,这意味着用户需要输入两次数据,并且他可以在第二次输入不同的数据,这不能解决问题。我认为主要原因是两个查询都是从其他查询构建的(因为在1个查询中关系是复杂的)
qdf.Parameters
集合仅在使用qdf.Execute
调用查询时有效。
如果你正在使用DoCmd.OpenQuery
,你应该使用DoCmd.SetParameter
设置参数。请注意,在调用第一个DoCmd.OpenQuery
后需要再次设置它们:
DoCmd.SetParameter "[äëðñ ùðä]", year
DoCmd.SetParameter "[äëðñ çåãù]", month
DoCmd.OpenQuery "äëðñåú äåöàåú", acViewNormal, acReadOnly