我正在尝试将同一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'不是本地对象,请检查您的网络连接或联系服务器管理员。
正如您所看到的,它正在删除工作表名称后面的感叹号,并使用引号做一些时髦的事情。这是怎么回事?
我无法重命名工作簿中的工作表,因为它们已经分发给将要填写它们的人。
谢谢!
答案 0 :(得分:0)
一个字符串表达式,它是有效的单元格范围或电子表格中范围的名称。此参数仅适用于导入。将此参数留空以导入整个电子表格。导出到电子表格时,必须将此参数留空。如果输入范围,导出将失败。
如果你刚刚
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导入了工作表及其所需的范围,而不是允许它替换“!”。带有“ $”。
希望这对您有所帮助。