访问VBA - 将日期变量从函数传递到子



>我有多个查询使用相同的日期,只想询问用户一次

Public Sub runappends()
Dim getmyparameter As Date
Call getmyparameter1(getmyparameter)
DoCmd.OpenQuery "Append to Current Quarter Counts 1", acViewNormal, acAdd
DoCmd.OpenQuery "Append to Current Quarter Counts 2", acViewNormal, acAdd

End Sub

Public Function getmyparameter1(getmyparameter As Date)

getmyparameter = CDate(InputBox("enter date greater than"))

End Function

查询条件=>getparameter1(),因为此处的唯一选项是调用函数。

但是似乎无法将日期传递给查询 2,3 等?

我建议使用DAO.QueryDef,而不是使用OpenQuery方法。这将使您的代码简单得多。

我假设您的 2 个查询有一个日期参数。对于这个答案,我假设参数称为pDate。所以你可以做这样的事情:

Public Sub RunAppends()
Dim db as DAO.Database, qdf as DAO.QueryDef
Dim dateParam as Date
set db = CurrentDB
' you can move this to a separate function if you really want,
' but it's only 1 line, so there's not really a reason to.
dateParam = CDate(InputBox("Enter date:"))
set qdf = db.QueryDefs("Append to Current Quarter Counts 1")
qdf.Parameters("pDate").Value = dateParam
qdf.Execute dbFailOnError
set qdf = db.QueryDefs("Append to Current Quarter Counts 2")
qdf.Parameters("pDate").Value = dateParam
qdf.execute dbFailOnError
' cleanup your objects
set qdf = Nothing
set db = Nothing
End Sub

由于执行 2 个查询的代码是相同的,因此您可以使用循环结构(例如,有一个查询名称数组,并以这种方式执行它们(。

我还建议您更改查询名称:通常,应避免在对象名称中包含空格。您还可以使用匈牙利语表示法来澄清这些是查询---类似于qAppendToCurrentQuarterCounts1qAppendToCurrentQuarterCounts2。然后我也想知道这两个查询之间的区别是什么,因为它们的名字如此相似......

以下是我的做法:

Public myparameter As Date
Public Function getmyparameter() as Date
getmyparameter=myparameter
End Function
Public Sub setmyparameter()
myparameter=CDate(InputBox("enter date greater than"))
End Sub

使用Call setmyparameter询问用户查询条件中的日期和getmyparameter()

最新更新