Excel 工作表名称不允许使用 VBA 将数据导入 Access - DAO

Posted

技术标签:

【中文标题】Excel 工作表名称不允许使用 VBA 将数据导入 Access - DAO【英文标题】:Excel Sheet Name does not allow to import data into Access using VBA - DAO 【发布时间】:2013-02-21 09:13:10 【问题描述】:

我的目标是将一些数据从 Excel 文件导入 Access DB。为了做到这一点,我像这样使用 DAO:

Debug.Print "Starting process to import the " & numberOfDaysToImport & " missing days"
Set sourceDB = OpenDatabase(c_sourceFile_austrianNetImports, False, True, "Excel 8.0;")
DoEvents
Set rs = sourceDB.OpenRecordset(c_sqlRetrieveAustriaNetImports)
Debug.Print "Recordset Field Count = " & rs.Fields.Count

c_source_austrianNetImportsc_sqlRetrieveAustriaNetImports 分别是字符串变量,包含 Excel 源文件的路径和用于检索数据的 SQL Select 语句。

我的问题是,当 Excel 源文件的工作表名称以下划线结尾时,SQL Select 查询不起作用并且 VBA 崩溃。例如,如果我要从中检索数据的工作表称为 EEX_EXC_Scheduled_PWR_AUT_H1_A_c_sqlRetrieveAustriaNetImportsSELECT * FROM [EEX_EXC_Scheduled_PWR_AUT_H1_A_$A1:H65536] 然后 VBA 崩溃并显示消息

运行时错误“3011”Microsoft jet 数据库引擎找不到对象“EEX_EXC_Scheduled_PWR_AUT_H1_A_$A1:H65536”确保该对象存在并且您正确拼写了它的名称和路径名。

如果我通过删除最后的下划线来修改工作表和 SQL 语句的名称,那么它可以工作。我也尝试使用打开记录集

Set rs = sourceDB.OpenRecordset("Sheet$13")

但我仍然收到相同的错误消息。

我不允许修改工作表的名称。如何使用原始名称(末尾包含 _ 的名称)获取数据?

谢谢。

【问题讨论】:

我在网上看到几个线程有类似的问题,但没有真正的解决方案。有人认为他们通过压缩和修复数据库来修复它。 【参考方案1】:

您应该能够以不同的名称保存电子表格。我在导入 CSV 文件时这样做,但实际上使用 Excel 文件更容易:

bRename = false
while right(c_source_austrianNetImports) = "_" ' rename workbook
    c_source_austrianNetImports = left(c_source_austrianNetImports,len(c_source_austrianNetImports-1)
    bRename = True
wend 
if bRename then 
    ActiveWorkbook.SaveAs c_source_austrianNetImportst, xlWorkbookNormal 
endif

【讨论】:

【参考方案2】:

如果您能够导入命名范围而不是工作表,则可以。我有一个每天导入的电子表格,其中工作表的名称是日期(每天更改),但表格是一个命名范围。

如果不是命名范围,您可以创建代码来创建命名范围,保存,然后导入您创建的范围。

【讨论】:

以上是关于Excel 工作表名称不允许使用 VBA 将数据导入 Access - DAO的主要内容,如果未能解决你的问题,请参考以下文章

使用 VBA 获取 Excel 选项卡名称并复制到 Access 表

使用Excel VBA,如何将某一个工作表保存到新建的Excel中?

Excel VBA - 创建一个宏,将活动工作表名称插入另一个工作表单元格的论坛中

vba excel怎么获取指定工作表的行数、列数

Excel VBA - 组合宏以重命名工作表和宏以在一个宏中合并工作表

如何刷新数据透视图