如何在VBA中的DLookup中传递日期变量?

时间:2013-08-21 20:49:30

标签: vba ms-access ms-access-2007 access-vba

非常简单的问题。我要求用户输入日期。我使用该日期的月份来查找月份名称(5月为5月,6月为6月等)。我有一个名为months的ref表,其中包含month_id和month_name(1-enero,2-febrero等)的西班牙语。我在VBA写这个:

Dim FileDate as Date
Dim DateString as String

DateString = InputBox("Enter the file date in MM/DD/YYYY format", "Title")
FileDate = DateValue(DateString)
monthname = DLookup("[month_name]", "[months]", "Format(Month(FileDate),'0') = [month_id]")

但这给了我错误。如果我使用Date()而不是FileDate,它正常工作。我错误地传递了变量吗?

1 个答案:

答案 0 :(得分:1)

Microsoft Access SQL中的文字日期格式为#dd / mm / yyyy#。 See microsoft's documentation here

还有一个问题是您发送字符串“Format(Month(FileDate),'0')”而不是变量FileDate的值。 Access不知道“FileDate”是什么,只有VBA知道。所以你应该将FileDate的值连接到你的字符串。

如果你有一个变量variable = "foo"并且想要将它在字符串中传递给像DLookup这样的东西,你会写"String " & variable而不是"String variable"。这是如此DLookup得到“String foo”而不是“字符串变量”。

因此,当您将条件作为字符串传递时,例如使用Dlookup,您应该使用字符串连接用两个#符号包围变量的值。

monthname = DLookup("[month_name]", "[months]", "#" & FileDate & "# = [month_id]")

修改

当然,我想念你原来的问题。因为您只使用月份作为标准,例如:

monthname = DLookup("[month_name]", "[months]", Month(FileDate) & " = [month_id]")