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

时间:2018-08-16 12:42:59

标签: vba ms-access

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

MethodCall(arg1, out string arg2);

查询条件为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 ,因为这里唯一的选择是调用函数。

但是似乎无法获取传递给查询2、3等的日期吗?

2 个答案:

答案 0 :(得分: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

由于执行这两个查询的代码相同,因此您可以使用循环结构(例如,使用查询名称数组,然后以这种方式执行)。

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

答案 1 :(得分:0)

这是我要怎么做:

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()