访问VBA for循环(日期)

时间:2017-09-19 03:48:03

标签: vba loops ms-access for-loop

我已尝试将访问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

1 个答案:

答案 0 :(得分:0)

这与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,未指定将导致错误,具体取决于区域设置
  3. 请下次尝试调试您的SQL,如果您有很多错误,我可能会错过错误。