为什么Access会更改doCmd.TransferSpreadsheet中的范围?

时间:2016-11-01 20:49:24

标签: vba ms-access import

我正在尝试将同一Excel工作簿的各种副本中的各种范围自动导入Access。

导致错误的相关代码行是:

        DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12Xml, "ApplicationLevelSummary_In", "C:\Users\gfunk\Desktop\unserved2.xlsx", True, "'BPO Use Only'!A3:Z11"

错误是:

  

Microsoft Access数据库引擎找不到对象''仅限BPO使用'$ A3:Z11'。确保对象存在,并且您正确拼写其名称和路径名称。如果''仅限BPO使用'$ A3:Z11'不是本地对象,请检查您的网络连接或联系服务器管理员。

正如您所看到的,它正在删除工作表名称后面的感叹号,并使用引号做一些时髦的事情。这是怎么回事?

我无法重命名工作簿中的工作表,因为它们已经分发给将要填写它们的人。

谢谢!

3 个答案:

答案 0 :(得分:0)

来自DoCmd.TransferSpreadsheet

上的文档
  

一个字符串表达式,它是有效的单元格范围或电子表格中范围的名称。此参数仅适用于导入。将此参数留空以导入整个电子表格。导出到电子表格时,必须将此参数留空。如果输入范围,导出将失败。

如果你刚刚

DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12Xml, "ApplicationLevelSummary_In", "C:\Users\gfunk\Desktop\unserved2.xlsx", True

C:\Users\gfunk\Desktop\unserved2.xlsx已经存在,然后它将被放入名为ApplicationLevelSummary_In的新工作表的A1中

如果您需要将数据转到特定范围,我建议您改用COM自动化。它仍然很快,但它没有任何一个班轮。

答案 1 :(得分:0)

原来它不喜欢单引号或范围内的美元符号。一旦我删除它们并将整个字符串作为扁平字符串传递,它就可以正常工作。

答案 2 :(得分:0)

我想我已经找到了解决此问题的答案。我在用Access替换“!”时遇到了同样的问题。我在传递给DoCmd.TransferSpreadsheet例程的Range:=参数的范围字符串中带有“ $”的字符。最后,我尝试将工作表名称和地址范围分成两个不同的字符串,并用“!”将它们连接起来,如下所示:

strSheetName = "MySheet"
strRange = "A1:Q789"

DoCmd.TransferSpreadsheet _
  TransferType:=acImport, _
  SpreadsheetType:=acSpreadsheetTypeExcel12Xml, _
  TableName:="tblImport", _
  FileName:=strFilename, _
  HasFieldNames:=True, _
  Range:=strSheetName & "!" & strRange

我成功说服Access导入了工作表及其所需的范围,而不是允许它替换“!”。带有“ $”。

希望这对您有所帮助。