【发布时间】:2017-03-01 17:59:10
【问题描述】:
我正在尝试在 Excel VBA 中使用 Excel 中的变量运行查询,但 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 日。
我检查了我电脑上的日期显示设置,据我所知,我的地区是英国,日期格式是英国,我从来没有在我的电脑上看到过美国风格的日期!
这是怎么回事,我该如何解决?
谢谢,
本吉
【问题讨论】:
-
具体设置日期格式
FORMAT(FirstOrderDate,"dd/mm/yyyy) -
@BenjiKnightsJohnson 代码没有问题,您只需要控制日期的格式即可。首先确保在您的 Excel 文件中,日期是真正的日期而不是文本。对于文本,只需在单元格中编写一个公式,然后在其中一个日期上加 1,您应该会得到一个日期作为结果,如果是文本,您会收到错误。
-
我应该把格式放在哪里?我尝试创建一个使用该格式定义的新变量:FirstOrderDDDate = Format(FirstOrderDDate, "dd/mm/yyyy") 并尝试将其包含在 SQL 代码中,例如:acApp.DoCmd.RunSQL "DELETE * FROM [OrdersDetailed ] WHERE [OrderDate] >= #" & Format(FirstOrderDDate, "dd/mm/yyyy") & "#" 但从 1 月 3 日起,这两个数据仍在删除...
-
我终于找到了如何做到这一点。彼得你几乎是对的,不确定这是否是一个错字,但我需要将 Excel 变量格式化为 mm/dd/yyyy(而不是 mm 和 dd 与彼得相反。所以具体来说我所做的是:LastOrderDate = Excel VBA 中的 Format(Range("D2"), "mm/dd/yyyy hh:mm:ss")。