【问题标题】:Access reading Excel VBA date in US format访问以美国格式读取 Excel VBA 日期
【发布时间】: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")。

标签: excel vba ms-access


【解决方案1】:

在查询中使用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) & ")"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 2017-06-28
    • 2014-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多