2013-03-06 26 views
4

我的目标是将某些数据从Excel文件导入到Access DB中。为了做到这一点,我使用DAO这样的:Excel工作表名称不允许使用VBA将数据导入到Access中 - 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") 

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

我不允许修改工作表的名称。我怎样才能使用原始名称(最后包含_的那个)获取数据?

谢谢。

+0

我在网上看到了一些类似问题的线程,但没有真正的解决方案。一个人认为他们通过压缩和修复他们的数据库来修复它。 – 2013-03-06 14:47:40

回答

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 
0

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

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

相关问题