2011-10-19 101 views
1

在Access 2003中,我用於導入由第三方提供給我們的特殊xls文件。我爲此使用了ADODB,這非常合適。使用Access VBA 2010處理Excel數據

ADODB不再是Access 2007/2010中的一個選項,我不認爲您可以使用DAO或ADO「查詢」電子表格。

那麼,有沒有其他的選擇?

+1

「ADODB不再是Access 2007/2010中的一個選項」....不......誰告訴你的? –

回答

0

我不認爲你可以使用DAO或ADO「查詢」電子表格。

您確實可以使用ADO和OLE DB訪問接口(Jet,無論)來查詢Excel工作簿。有關更多詳細信息,請參見this MSDN article

ADODB不再在Access 2007/2010的選項,

這是不是這樣的。我認爲你一定誤解了一些東西,考慮到在Access中有關「ADO vs DAO」的互聯網上有很多廢話,這並不奇怪。

我不完全確定當ADO經典被引入到Access2000社區時發生了什麼,但似乎很多老前輩都留下了受傷的自我/驕傲。微軟的營銷信息實際上是「DAO現在是舊的工作方式,ADO是新的。」在MS的蓄意舉動中,新的引擎功能通常只能通過ADO獲得。

由於長期以來Access + DAO粉絲的反應,通常情況下,固體倉位受到威脅。這通常採取的形式是「扔足夠的泥,有些會堅持。」剛到達AccessLand的人們會被混合的信息弄糊塗。在新聞組中,有抱負的訪問MVP模擬了現有訪問MVP的反ADO立場。

在200和2007版本之間,Access產品在引擎方面變得有點過時了,它的責任已交給了SQL Server團隊,他們已經放棄了所有實際目的:他們試圖使它符合入門級標準SQL-92受到Windows團隊的阻撓,其組件依賴於面向標準的功能。 ADO經典隊也同樣被解散。與Office套件有效共享VBA庫的Visual Basic COM因VB.NET而誕生,而ADO.NET誕生了,

Access2007團隊再次震動了一切。他們通過採用私有分支從SQL Server和Windows團隊中回收引擎。他們放棄了用戶級別的安全性,可能是因爲這對他們來說太複雜了。他們添加了可能違反1NF的多值類型。勇敢的東西!儘管可以通過爲Access創建新的OLE DB提供程序來滿足ADO classic的某些功能,但其他功能則不能。例如,對ADO中多值數據類型的完全支持(例如,通過SQL進行更新)將需要更改Access團隊不擁有的ADO經典庫。

由於DAO由Access所有,新版本(稱爲ACEDAO)獲得了舊的ADO經典庫所缺少的新OLE DB提供程序的功能(儘管ADO需要在64位機器上使用引擎)。然而,他們沒有做的是追溯修復DAO以適應只進入ADO的Access2000時代的功能。

當然,Access團隊將ACEDAO推廣爲一等公民。當然,長期的Access + DAO粉絲很高興:「ADO已經被棄用,轉而支持ADO.NET」,他們說。事實上,最終的結果是混合包。詳情請參閱this thread

0

在Access的VBA項目中,單擊工具/參考,然後找到「Microsoft Excel 14.0 Object Library」。這將使您可以訪問所有的VBA Excel對象,以便您可以對電子表格執行任何操作。

正如其他人所說,在表上運行查詢不是一個選項。如果你習慣於從數據庫的角度思考考慮對模板進行檢查以確保標題匹配,那麼你很可能擁有一個很好的文件。然後,一旦您驗證了文檔安裝程序,SQL就會將帶有記錄的行插入到Access數據庫中的表中,然後從那裏運行您的查詢。請在這裏寫你的SQL代碼:

SQL Statement Help

如果你想獲得更先進的在VBA,如果你的文件很小,你可以運行通過建立與制定者/吸氣對象的搜索和記錄存儲到一個集合類然後遍歷它與你正在尋找的數據。

我在一些項目中這樣做,我知道這些列表很小,當我真的只想讀取數據並運行一些真正的基本計算(如計算特定小部件的數量和將計數放在報告上。集合類對此非常有用。這裏有一個很好的鏈接,在集合上一些更多的信息:

Collections in Visual Basic

祝你好運!