我正在尝试使用Excel中的变量从Excel VBA中运行查询,但Access将我的日期转换为美国格式:
Sub upload()
Last = ActiveSheet.UsedRange.Rows.Count
Dim LastOrderDate As Date
Dim LastOrderDateYear As Integer
Dim LastOrderDateMonth As Integer
Dim LastOrderDateDay As Integer
FirstOrderDate = Range("D" & Last)
FirstOrderDDate = DateSerial(Year(FirstOrderDate), Month(FirstOrderDate), Day(FirstOrderDate))
'Import Data to Benji's Ecommerce Database
ssheet = Application.ActiveWorkbook.FullName
Set acApp = CreateObject("Access.Application")
acApp.OpenCurrentDatabase ("X:\ECommerce Database.accdb")
acApp.Visible = True
acApp.UserControl = True
acApp.DoCmd.RunSQL "DELETE * FROM [OrdersDetailed] WHERE [OrderDate] >= #" & FirstOrderDDate & "#"
acApp.CloseCurrentDatabase
acApp.Quit
Set acApp = Nothing
End Sub
例如,使用变量01/03/2017,它使用03/01/2017并删除2017年1月3日之后的所有内容,而不是2017年3月1日所需的内容。
我已经在我的电脑上查看了我的日期显示设置,据我所知,我的地区是英国,日期格式是英国,我从未在我的电脑上看过美国风格日期!
这里发生了什么,我该如何解决?
谢谢,
畚箕
答案 0 :(得分:0)
在查询中使用DateSerial()
。始终使用DateSerial()
。它永远不会让你失望。您希望SQL看起来像这样:
DELETE * FROM [OrdersDetailed] WHERE [OrderDate] >= DateSerial(2020, 01, 02)
因此您的VBA应该是:
"DELETE * FROM [OrdersDetailed] WHERE [OrderDate] >= DateSerial(" & Year(FirstOrderDDate) & ", " & Month(FirstOrderDDate) & ", " & Day(FirstOrderDDate) & ")"