如何使用 Visual Basic 或 VBA Excel 資料 ADOX

文章翻譯 文章翻譯
文章編號: 303814 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

結論

ActiveX 資料物件延伸模組的資料定義語言和安全性 (ADOX) 可以讓 ActiveX 資料物件 (ADO) 開發人員都存在在資料存取物件 (DAO) 來以程式設計方式操作資料庫]、 [資料表]、 [欄位] 和 [其他資料庫物件的能力。Jet 4.0 版,可支援 Jet 引擎使用的桌面資料庫以外的 Microsoft Access 的 ISAM 驅動程式,Microsoft OLE DB 提供者發行後 ADO 開發人員已能夠使用 ADO 和 ADOX Microsoft Excel 活頁簿和工作表。

不過,因為 Excel 工作表不是一般的資料庫,ADO 有一些限制與 Excel 搭配使用時。在特別許多 ADOX 方法可能是不運作或提供未預期的結果,使用時才使用 Excel。本文記載許多 ADOX 和 Excel 的限制。如需詳細資訊關於使用 ADO 使用 Excel 的按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項:
257819如何使用 ADO Visual Basic 或 VBA Excel 資料
本文分為下列各節:

注意: 這個測試,如本文已在 Microsoft Windows 2000 Server Service Pack 2 (SP2) 上進行 Microsoft 資料存取元件 (MDAC) 2.6 SP1、 Microsoft Visual Basic 6 SP5 與 Microsoft Excel 2002 (XP)。這份文件可能不認可或討論使用者可能會看到的視窗]、 [MDAC]、 [Visual Basic] 或 [Excel 版本不同的行為差異的。

其他相關資訊

ADOX 類別目錄

在 ADOX 物件模型 類別目錄 物件代表一個資料庫,或在 Excel 活頁簿的大小寫。
  • 您可以使用 ADO 連線 物件或連接的字串來建立或開啟 類別目錄 物件。下列程式碼範例會說明如何開啟 ADOX 型錄 為 Book1.xls:
    Dim cat As ADOX.Catalog
    Set cat = New ADOX.Catalog
    cat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=" & App.Path & "\book1.xls;Extended Properties=Excel 8.0"
    					
  • 目錄 物件已 建立 方法,但是並沒有 刪除 方法。

建立為類別目錄

您不能使用 ADOX 目錄 物件的 建立 方法來建立新的 Excel 活頁簿。如果嘗試執行這項操作,您會收到下列錯誤訊息:
這種類型的物件不支援作業。
然而,您就可以藉由為您的類別目錄指定新的活頁簿檔案名稱,並將至少一個資料表附加到使用下面討論的技術 「 新類別目錄建立新的 Excel 活頁簿。這個方法會用您所建立作為 ADOX 資料表之工作表建立新的活頁簿,亦即不會新增預設指定給新的 Excel 活頁簿,透過 Excel 選項] 對話方塊的空白工作表的數量。

ADOX 資料表

ADOX 資料表 物件對應到其中一個可以做為資料的容器在 Excel 物件 (也就是工作表或範圍)。

建立資料表

您可以使用 ADOX 若要在 Excel 中建立新的資料表。因為您無法建立資料表,而不需要也建立資料行,"ADOX Columns 」 區段中會出現程式碼範例。
  • 建立新的 ADOX 資料表建立新的工作表] 和 [新的具名的範圍新工作表上具有名稱指定。新的已命名的範圍跨越欄名。範例如果您建立資料表 (工作表) 與兩個資料行已命名的範圍定義為 MyTable 的 MyTable 名為 MyTable! $ A $ 1: $ B $ 1 還會建立。
  • 您可以指定資料表名稱,其中包含一個空格 ; ADOX 不過,空格取代您建立工作表] 和 [範圍名稱中底線。
  • 為活頁簿後面在 Excel 選項中指定為新的活頁簿的空白工作表中預設的數量中最後一個工作表建立新的工作表。
  • 如果嘗試建立新的資料表,在 Excel 中開啟活頁簿時您會收到下列錯誤訊息:
    未指定的錯誤。
  • 如果嘗試建立有定義的資料行的資料表它似乎成功,但是事實上執行任何動作會建立。
  • 如果嘗試變更現有的資料表名稱您會收到下列錯誤訊息:
    這種類型的物件不支援作業。

刪除資料表

您不能使用 ADOX 刪除資料表 (工作表),或 ADOX 建立名為 Excel 的範圍。
  • 如果嘗試刪除工作表 (MyTable $) 它出現錯誤,不會成功,但工作表仍會保留在活頁簿中。您可以呼叫 Delete 方法重複而不會發生錯誤,但不會有任何效果。
  • 如果嘗試刪除範圍 (MyTable) 它出現錯誤,不會成功,但是範圍仍會保留在活頁簿中。然而,如果嘗試刪除範圍的第二次您會收到錯誤 3265:
    無法在集合中找到項目,對應要求的名稱或序數。
  • 如果嘗試刪除已命名的範圍它會已命名的範圍定義完整保留,但刪除範圍中的任何資料。

ADOX 資料行

ADOX 資料行對應到資料行或在資料庫中的欄位,且整齊對應到 Excel 工作表的資料行。

ADO 資料型別與 Excel 一起使用

ADO 能夠辨識您可用來建立資料行的 Excel 資料來源中的六個資料型別:

  • adDouble,輸入 5
  • adDate,輸入 7
  • adCurrency,鍵入 6
  • adBoolean,鍵入 11
  • adVarWChar,鍵入 202
  • adLongVarWChar (「 備忘錄 」) 鍵入 203

一般的資料行

  • 只要資料表並不包含任何資料列中,您可以將其他資料行附加到先前建立的資料表。
  • 您可以指定包含空格的資料行名稱。
  • ADOX 一定會建立前面加一個單引號 ('),例如 'F1',欄 1 上的欄標題 ' Col2。不過,這不稍後造成問題,因為沒有在引號擷取名稱。

建立資料表時建立資料行

建立資料行時的效果最佳 ADOX 建立新的資料表的同時完成。

下列程式碼會建立一個新的資料表 (工作表),其中包含兩個資料行 (一個數字和一個文字):
    Dim cat As ADOX.Catalog
    Dim tbl As ADOX.Table
    Dim col As ADOX.Column
    Set cat = New ADOX.Catalog
    cat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
	"Data Source=" & App.Path & "\book1.xls;Extended Properties=Excel 8.0"
    Set tbl = New ADOX.Table
    tbl.Name = "TestTable"
    Set col = New ADOX.Column
    With col
        .Name = "Col1"
        .Type = adDouble
    End With
    tbl.Columns.Append col
    Set col = Nothing
    Set col = New ADOX.Column
    With col
        .Name = "Col2"
        .Type = adVarWChar
    End With
    tbl.Columns.Append col
    cat.Tables.Append tbl
				

在現有的工作表中建立資料行

將資料行附加到一個已存在,空白工作表會產生不尋常的結果。當第一 ADOX 欄附加到資料表的資料行集合時,ADOX 先建立名為 F1 在工作表的欄 A 中的資料行行首,並再建立工作表的欄 B 中的 [新的 ADOX 資料行行首。因此,ADOX 將附加至兩個新的資料行的程式碼會產生三個資料行行首。如果嘗試刪除此不想要它出現成功,從資料行集合之前附加第一 ADOX 欄的第一欄,但是仍然建立不必要的資料行。

刪除資料行

您無法刪除資料行從 Excel 中有 ADOX 表格。
  • 如果欄中都沒有資料這似乎不會發生錯誤,會成功,但資料行和資料行行首保留。
  • 如果欄位中包含資料刪除作業就會失敗並下列的錯誤訊息:
    無效的作業。

變更現有的資料行的資料型別

資料行已被附加至一個資料表,如果您嘗試將其.Type 屬性設定為不同的資料型別後您會收到下列的錯誤訊息:
在此內容中不允許作業。

新增資料到 Excel 資料表和資料行

當您在 Visual Basic 設計環境中測試使用 Excel 的 ADO 程式碼時,您執行資料錄集作業的第一次您可能會收到下列錯誤訊息:
選取作業系統不支援的定序順序。
您可以忽略此錯誤訊息 ; 此錯誤不會發生編譯應用程式之後。如需詳細資訊按一下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項:
246167PRB: 自動分頁對 Excel XLS 第一次開啟 ADODB 資料錄集的順序錯誤

新增資料到 Excel ADOX 所建立的資料行

當您使用 ADO 來插入或修改資料表和您已在使用 ADOX 的 Excel 中建立的資料行中的資料時,ADO 會檢查您所指定的那些資料行的資料型別雖然它是不清除 [儲存此資訊。
  • 所有的文字字串值會儲存前面加一個單引號。不過,這不稍後導致問題,因為沒有在引號擷取值。
  • 如果想插入到文字資料行定義為數值或數字的資料行中的文字字串就會收到錯誤 80040e21:
    多重步驟操作發生錯誤。 請檢查每個狀態值。

將資料加入至一般 Excel 資料行

當您使用 ADO 來插入或修改 Excel 工作表] 或 [不建立或使用 ADOX 修改的範圍中的資料時,沒有限制會在您可以插入的資料型別上強制執行。
  • 文字字串會儲存沒有上述單引號記號中。
  • 數字出現靠左對齊。在 Excel 2002 中的數字是與警告數字儲存成文字的 [智慧標籤標示出來。這可能會造成問題稍後當您使用資料時尤其資料已在 Excel 中儲存的數值分析。

使用 SQL CREATE、 ALTER 和 DROP 陳述式

透過 ADO 連線],產生相同的結果作為對應上面所述的 ADOX 方法,可對 Excel 資料庫物件執行 CREATE、 ALTER,以及 DROP Microsoft SQL 資料定義語言 (DDL) 陳述式。

結論

  • ADOX 最適合使用 Excel 當新的資料表,且其資料行建立在同一時間。
  • ADO 時的效果最佳使用 Excel 資料使用 ADOX 所建立的工作表中儲存該資料。

屬性

文章編號: 303814 - 上次校閱: 2004年7月13日 - 版次: 2.2
這篇文章中的資訊適用於:
  • Microsoft Data Access Components 2.0
  • Microsoft Data Access Components 2.1
  • Microsoft Data Access Components 2.5
  • Microsoft Data Access Components 2.6
  • Microsoft Data Access Components 2.7
關鍵字:?
kbmt kbdatabase kbhowto kbiisam KB303814 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:303814
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com