我设置了一个Access 2010数据库,用于跟踪工作时间。我在表单上有一个按钮,其中包含以下VBA:
Private Sub cmdExport_Click()
Dim myUser As String
myUser = Environ("Username")
DoCmd.OutputTo acOutputQuery, "ExportTime", "ExcelWorkbook(*.xlsx)", "C:\Users\" & myUser & "\Desktop\Time" & Format(Me.txtStartDate, "yyyymmdd") & "-" & Format(Me.txtEndDate, "yyyymmdd") & ".xlsx", False, "", , acExportQualityPrint
End Sub
该按钮使用以下定义导出名为ExportTime的已保存查询:
SELECT MYTIME.MYDATE, MYTIME.ID, MYTIME.CM, MYTIME.MYDESCRIP, MYTIME.MYHOURS
FROM CM RIGHT JOIN MYTIME ON CM.ID = MYTIME.CM
WHERE (((MYTIME.MYDATE)>=[Forms]![ExportTime]![txtStartDate] And (MYTIME.MYDATE)<=[Forms]![ExportTime]![txtEndDate]))
ORDER BY MYTIME.MYDATE, MYTIME.CM;
按下按钮成功将时间导出到Excel电子表格,正如我想要的那样。
问题是运行此操作后,查询定义消失。命名查询仍在已保存查询的列表中,但其定义更改为
SELECT;
这似乎经常发生。我已将查询定义复制到文本文件中,因此当我想再次导出时间时,我可以将其粘贴回来。尽管如此,我仍然难以理解为什么定义会消失。
非常感谢任何想法或建议。
答案 0 :(得分:0)
我使用已保存的导出规范来完成此任务,并在VBA中使用:
CurrentProject.ImportExportSpecifications("<name of export specification>").Execute False
我不确定这种情况下的查询是否可以引用表单字段;我将这些值复制到TempVars中并且有效。