2010-10-28 129 views
0

我需要使用Excel中的VBA在訪問中加載Excel工作簿並將其傳送到數據庫。如何使用Excel VBA將Excel XLS轉換爲Access MDB

Dim acc As New Access.Application 
acc.OpenCurrentDatabase "C:\Test.xls" 

我得到的遠和Excel崩潰,必須重新啓動。我的計劃是使用以下方法,但我無法實現這一目標。

acc.DoCmd.TransferDatabase 

任何想法?我已經搜索了幾天,並沒有得到任何結果。

*編輯:感謝迄今爲止的回覆
不幸的是,我絕對必須使用Excel VBA。有一個Excel電子表格有一堆空列,被Jet引擎識別爲定義的列,實際上> 255(或者它> 256?)太多。我不想因任何原因打開Excel工作表(這在網絡上花費的時間太長)。我沒有選擇或選擇正確格式化或清理它。正如你所說的那樣,將XLS電子表格轉換爲訪問內部的MDB數據庫很容易,但這不是一種選擇。就像我說過的,我需要在Excel中使用VBA來操作訪問對象,以將XLS工作簿轉換爲MDB數據庫;一旦我有了,剩下的就是蛋糕。非常感謝!我喜歡這個網站。

+3

爲什麼你必須使用Excel來做到這一點?看來,Microsoft建議從Access加載Excel文件。 – bernie 2010-10-28 17:33:02

+2

這是一個打印錯誤acc.OpenCurrentDatabase「C:\ Test.xls」?當然,你的意思是acc.OpenCurrentDatabase「C:\ Test.'mdb'」? – Fionnuala 2010-10-28 19:26:44

+1

Brettville,歡迎來到StackOverflow。你能編輯你的問題,並給我們更多的細節?你能一步一步地告訴我們你想做什麼嗎?您是否試圖將Excel工作表導入Access數據庫? – PowerUser 2010-10-28 20:58:00

回答

1

如果您能夠在Microsoft Access中使用VBA,則此任務很簡單;例如: -

DoCmd.TransferSpreadsheet , , _ 
"tblImportFromExcel","C:\path\to\myfile.xls", True, "A1:B200" 

TransferSpreadsheetdocumentation

+0

我同意這是最簡單的,但不能讓原來的海報只是製作和控制Excel中的Access對象? – PowerUser 2010-10-28 19:29:12

+0

@power:發表一個答案;如果有代碼示例,我會贊成它! :-) – bernie 2010-10-28 19:31:29

0

Adam Bernier建議的解決方案出現了什麼問題(PowerUser增加了關於在Excel中使用訪問對象的問題);你最後的評論是在這些建議之後,你沒有回覆。

Dim acc As New Access.Application 
acc.OpenCurrentDatabase "C:\Test.mdb" 

acc.DoCmd.TransferSpreadsheet _ 
    TransferType:=acImport, _ 
    Spreadsheettype:=acSpreadsheetTypeExcel8, _ 
    TableName:="tblImportFromExcel", _ 
    Filename:="C:\path\to\myfile.xls", _ 
    HasFieldNames:=True, _ 
    Range:="A1:B200" 

(根據需要調整,特別是HasFieldNames和Range)。如果這不起作用,那麼你的Excel表格可能有些問題。

我能想到的唯一其他事情(但這意味着打開文件)是將Excel表格保存爲XML,並通過XSLT以更合適的格式轉換值,然後導入生成的XML。但是這可能是矯枉過正的(你的文件有多複雜,你需要多久才需要導入)。

HTH 安德烈亞斯

+0

它需要來自Excel內的Excel – DontFretBrett 2011-03-24 22:40:23

+0

@bretville,這是Excel中的_is_(儘管如果它來自例如Word,它並沒有什麼區別。只要確保在VBA中已經設置了對MS Access的引用你可以使用它的對象模型,你有沒有試過這個例子? – 2011-05-25 09:52:06