以美国格式访问Excel VBA日期

时间:2017-03-01 17:59:11

标签: excel vba excel-vba access

我正在尝试使用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日所需的内容。

我已经在我的电脑上查看了我的日期显示设置,据我所知,我的地区是英国,日期格式是英国,我从未在我的电脑上看过美国风格日期!

这里发生了什么,我该如何解决?

谢谢,

畚箕

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) & ")"