我有一个VBA代码,该代码检查用户输入的年份和月份中是否有数据,并以此确定发送用户的查询。 这是代码: 子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个查询中关系很复杂)
答案 0 :(得分:1)
qdf.Parameters
集合仅在使用qdf.Execute
调用查询时有效。
如果您使用的是DoCmd.OpenQuery
,则应该使用DoCmd.SetParameter
设置参数。请注意,调用第一个DoCmd.OpenQuery
后需要再次设置它们:
DoCmd.SetParameter "[äëðñ ùðä]", year
DoCmd.SetParameter "[äëðñ çåãù]", month
DoCmd.OpenQuery "äëðñåú äåöàåú", acViewNormal, acReadOnly