DoCmd.TransferSpreadsheet中用acTable作为AcDataTransferType是否为简单导入?
问题解答
直接给出结论:这段代码里的第二个操作本质就是和第一个完全一致的Excel数据导入操作,具体原因如下:
从VBA枚举的实际数值来看:
acImport属于AcDataTransferType枚举,对应数值为0;而acTable属于AcObjectType枚举,对应数值同样是0。在旧版本的Access VBA中,若传入的枚举名称不属于当前参数要求的枚举类型,但数值匹配,代码会正常执行——因为VBA最终是依据枚举的数值来识别操作类型的。结合上下文逻辑分析:代码先删除了
FCT_NEW表,紧接着调用TransferSpreadsheet,目标就是这个刚被删除的表名,这和第一个导入逻辑(删表→导入重建)完全一致,显然是要从Excel文件导入数据到Access的新表中。这本质是旧代码里的笔误:原本应该写
acImport,但误写成了acTable,只是因为两者数值相同,才没有触发报错,实际执行的还是导入操作。
附上对照代码片段:
If ExistTable("S_NEW") Then DoCmd.DeleteObject acTable, "S_NEW" DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "S_NEW", _ tmpPATH & Dir(tmpPATH & "S2_*.xlsm "), True, "DF_GRID_1" DoEvents If ExistTable("FCT_NEW") Then DoCmd.DeleteObject acTable, "FCT_NEW" DoCmd.TransferSpreadsheet acTable, acSpreadsheetTypeExcel9, "FCT_NEW", _ tmpPATH & Dir(tmpPATH & "Fct*.xlsx "), True DoEvents
内容的提问来源于stack exchange,提问作者nick.kuijpers
相关产品推荐
相关产品推荐

