You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 21:06:19