2013-03-06 83 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

如果您能夠導入命名範圍而不是工作表,那就可以。我有一個每天導入工作表名稱是日期(每天更改)的電子表格,但表格是命名的範圍。

如果它不是一個命名範圍,您可以創建代碼來創建命名範圍,保存,然後導入您創建的範圍。

相關問題