【问题标题】:Access VBA for loop (date)访问 VBA for 循环(日期)
【发布时间】:2018-02-27 17:02:05
【问题描述】:

我已尝试在访问 VBA 中循环从 2011/12/04 到 2011/12/10 的数据。但是当我尝试运行代码时会出现“3075”的错误。我无法弄清楚我的代码的问题在哪里。希望你能帮我解决这个问题!

Private Sub createQry()

'Create Query in Access
Dim db As DAO.Database
Set db = CurrentDb
Dim qdf As DAO.QueryDef
Dim newSQL As String




For d = DateSerial(2011, 12, 4) To DateSerial(2011, 12, 10)


newSQL = " SELECT TAXIDATA.HkDt, TAXIDATA.DevID, TAXIDATA.HkTm, TAXIDATA.Lat, TAXIDATA.Lon, TAXIDATA.FlagDown" 'sql code
newSQL = newSQL & "FROM TAXIDATA"
newSQL = newSQL & "WHERE(((TAXIDATA.HkDt) = #" & d & "#))"
newSQL = newSQL & " ORDER BY TAXIDATA.HkDt, TAXIDATA.DevID, TAXIDATA.HkTm; "


Set qdf = db.CreateQueryDef(d, newSQL)                  'd = name of the query

'Export the Access query into excel

Dim XL As Excel.Application
Dim wbTarget As Workbook

Dim queryD As QueryDef
Dim RecordA As Recordset

Set queryD = CurrentDb.QueryDefs(d)
Set RecordA = queryD.OpenRecordset()

Set XL = CreateObject("Excel.application")

Set wbTarget = XL.Workbooks.Open("C:\Users\user\Desktop\Data\123.xlsx")    ' location of the workbook

wbTarget.Worksheets(d).Cells.ClearContents                         ' name of the worksheets in the workbook

wbTarget.Worksheets(d).Cells(1.1).CopyFromRecordset RecordA

wbTarget.Save

wbTarget.Close
Set wbTarget = Nothing
Set XL = Nothing
Set queryD = Nothing



   Debug.Print Days  'Prints the "Days" value in the immediate window.
Next d


End Sub

【问题讨论】:

  • 错误3075出现在哪里?如果是在执行查询时,请尝试将d 格式化为日期格式。
  • FROMWHERE 前面需要一个空格,例如 ORDER BY

标签: vba loops ms-access for-loop


【解决方案1】:

这真的不太可能与for 循环有关。 可能的罪魁祸首是您的查询:

将 newSQL 赋值更改为:

newSQL = " SELECT TAXIDATA.HkDt, TAXIDATA.DevID, TAXIDATA.HkTm, TAXIDATA.Lat, TAXIDATA.Lon, TAXIDATA.FlagDown" 'sql code
newSQL = newSQL & " FROM TAXIDATA"
newSQL = newSQL & " WHERE TAXIDATA.HkDt = #" & Format(d, "yyyy/MM/dd") & "#"
newSQL = newSQL & " ORDER BY TAXIDATA.HkDt, TAXIDATA.DevID, TAXIDATA.HkTm; "

这修复了以下错误:

  1. 缺少空格(在第 3 行和第 4 行添加了空格)
  2. 未指定日期格式,第 3 行添加格式功能(有效格式为 yyyy/MM/ddMM/dd/yyyy,未指定将根据区域设置导致错误

下次请先调试你的SQL,如果你有很多错误,我可能会错过。

【讨论】:

  • 1) 括号很好(除了 WHERE 子句后的空格)——这是查询编辑器使用的格式。 2) 未格式化的日期不会引发错误。它根本不会返回所需的结果。
  • @KostasK。谢谢,少了一个右括号。不过,只是过度使用它们。对于第 2 点,它不会导致错误(第 1 点会),但在我看来仍然是一个错误(程序不会按预期运行)。
  • @KostasK.:埃里克是对的。您必须将格式应用于日期值,否则它将被转换为 Windows 设置定义的任何内容。
  • @Gustav 确实,从未争论过,我只是说它不会引发运行时错误。事实证明,这是错误定义的问题。
  • @KostasK。啊,我明白了。不,它不会引发错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-29
  • 1970-01-01
  • 1970-01-01
  • 2016-02-28
相关资源
最近更新 更多