【发布时间】:2015-09-16 20:06:31
【问题描述】:
我使用了我在这个网站上找到的这段代码的变体,它运行良好。我的问题是,我无法理解在定义 qdf 后立即将其设置为空的原因。显然它不会破坏这个过程,一切正常,但在我未经训练的眼睛看来,它不应该。为什么在代码中,为什么不清空变量的SQL代码,什么都不导出到excel?
Sub Export()
Dim cdb As DAO.Database, qdf As DAO.QueryDef
Set cdb = CurrentDb
Const xlsxPath = "redacted 1"
' create .xlsx file if it doesn't already exist, and add the first worksheet
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "Ledger Data by Channel", xlsxPath, True
'file exists now, so this will add a second worksheet to the file
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "Premium Reserves", xlsxPath, True
Set qdf = cdb.CreateQueryDef("Reserve-from Wakely", _
"SELECT * FROM [redacted 4] UNION SELECT * FROM [PAI ALR] UNION SELECT * FROM [Prior Month PAI DAC]")
Set qdf = Nothing
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "redacted 2", xlsxPath, True
DoCmd.DeleteObject acQuery, "Reserve-from Wakely"
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "redacted 3", xlsxPath, True
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "Claims Data", xlsxPath, True
Set cdb = Nothing
End Sub
【问题讨论】:
-
一个 QueryDef 被创建然后被销毁,但它不再被引用;它不是工作代码的一部分。这三个事件(声明、设置、设置为空)可以被删除并且什么都不会改变。这可能是编码人员正在探索并放弃支持
DoCmd.TransferSpreadsheet ...的一种途径。 -
...对于一般的“我必须将内容设置为
Nothing”问题,请参阅When should an Excel VBA variable be killed or set to Nothing?。
标签: vba