XL: 的將陣列傳遞至 Excel 使用自動化的限制

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

在此頁中

結論

本文將告訴您將陣列傳遞至 Microsoft Excel 工作表和巨集使用自動化的限制。如果超過這些限制,可能會在您的 Automation 程式碼中收到執行階段錯誤。

其他相關資訊

Microsoft 僅,為了說明提供程式設計範例,不提供任何明示或默示的保證,包括但不是限於適售性以及適合某特定用途之默示擔保責任。本文假設您已熟悉我們所示範的程式設計語言,以及用來建立和偵錯程序的工具。Microsoft 技術支援工程師可以協助解釋特定程序的功能,但它們不會修改這些範例以提供附加功能或建構程序,以符合您的特定需求。
如果您有限制程式設計經驗,您可以連絡 Microsoft 認證合作夥伴或 Microsoft 諮詢服務。如需詳細資訊請造訪下列 Microsoft] 網站:

Microsoft 認證合作夥伴-https://partner.microsoft.com/global/30000104

Microsoft 摘要報告服務-http://support.microsoft.com/gp/advisoryservice

如需有關可用的支援選項,以及有關如何連絡 Microsoft 的詳細資訊,請造訪下列 Microsoft 網站: http://support.microsoft.com/default.aspx?scid=fh;EN-US;CNTACTMS當將陣列傳遞至使用自動化的 Microsoft Excel,下列限制適用,Excel] 和 [到工作表範圍或您所是否傳遞陣列] 做為巨集引數的版本而定。如需詳細資訊表格後的適當註腳,請參閱。
   Version of          Passing Array to     Passing Array to
   Microsoft Excel     Worksheet Range      Macro (Procedure)
   ----------------------------------------------------------

   5.0                        A                B,C

   7.0 (Excel 95)             D                E,C,H

   8.0 (Excel 97)             F                G,H

   9.0 (Excel 2000)           F                G,H

				

註腳

a:

陣列中元素的數目上限是大約 6550。如果您超過此限制時,您會收到一或多個下列的錯誤訊息:
記憶體用完
1005: 無法設定 Value 屬性的範圍類別
您可以傳遞至 Excel 使用 Excel 調換函式在陣列中元素的數目上限是 4095。如果您超過此限制時,您會收到下列的錯誤訊息:
執行階段錯誤 '1004':
調換失敗的應用程式類別的方法
B:

陣列中元素的數目上限是 4095。如果您超過此限制時,可能會收到下列錯誤訊息:
執行階段錯誤 '1004':
執行失敗的應用程式類別的方法
注意: 當傳遞多維陣列,您可能不會收到錯誤訊息,但 Excel 巨集將不執行時的元素總數超過 4095。

c:

Excel 巨集中定義陣列參數時, 必須定義為 Variant 變數,或者當您嘗試執行巨集使用自動化,會收到下列的錯誤訊息:
執行階段錯誤 '1004':
找不到巨集 < 巨集名稱 >
比方說假設您在 Excel 中的巨集的名稱是 AcceptArray。以下是如何在 Excel 巨集必須定義陣列的範例:
   Public Sub AcceptArray(ByVal myarray As Variant)
      ' You can pass the parameter either ByVal or ByRef.
      ' To determine the number of elements in the array, use
      ' the UBound function.
   End Sub
				
D:

陣列中元素的數目上限是 5461。如果超過此限制,您會收到下列錯誤訊息之一:
執行階段錯誤 '1004':
調換失敗的應用程式類別的方法
-或者-
執行階段錯誤 '1005':
無法設定 Value 屬性的範圍類別
E:

陣列中元素的數目上限是 5461。如果您超過此限制時,您會收到下列的錯誤訊息:
執行階段錯誤 '1004':
執行失敗的應用程式類別的方法
F:

最大的陣列中的項目數目會受到可用的記憶體或在 Excel 工作表最大大小 (65536 列 X 256 欄)。但是,您可以傳遞至 Excel 的陣列中的元素數目最大使用 Excel 調換函式是 5461。如果您超過此限制時,您會收到下列的錯誤訊息:
執行階段錯誤 '13':
型別不相符
G:

陣列中的項目最大數目僅受限於可用記憶體。而且,您沒有該參數定義為 Variant 變數在 Excel 巨集。不過,如果您想要傳遞陣列 ByVal,您必須為 Variant 變數,例如本文稍早的註腳 C 中定義參數。如果沒有定義為 Variant 變數,會發生執行階段錯誤 13,類型不符 」 的錯誤。

H:

傳遞 ByRef 引數至程序外自動化時伺服器,如 Excel,封送處理的資料完成 [自動化之間控制站 (或用戶端) 和伺服器,因為它們在個別的處理序中執行。這表示當陣列傳遞至 Excel 使用 ByRef,陣列的副本會傳送到 Excel 的位址空間。Excel 程序執行後陣列的複本會傳遞至用戶端。雖然這並允許傳遞至程序外伺服器使用 ByRef 引數,並不很有效率。在另一方面時使用的程序中自動化伺服器 (一個動態連結程式庫 (DLL)) 和您傳遞 ByRef 引數,, 這是很有效率,因為沒有封送處理完成。伺服器正在使用相同的陣列在記憶體中為用戶端。這是可能的因為伺服器會在相同的位址空間,為用戶端。

因為的封送處理與程序外伺服器如 Excel,會傳遞陣列代替 ByRef ByVal 更有效率。這種方式只有一個複本會傳遞至 Excel,而且 Excel 也沒有將傳回給用戶端的複本。若要將陣列 ByVal 傳遞至 Excel 巨集,您必須定義在 Excel 巨集的參數為 Variant 變數請參閱本文前面的範例註腳 C。

範例 Visual Basic 事件程序

下列範例 Microsoft Visual Basic 的應用程式 Sub 程序將示範如何將陣列傳遞至 Excel。前兩個程序將示範如何藉由將陣列傳遞至工作表範圍填入工作表上的儲存格範圍。第三個程序將示範如何將陣列傳遞至 Excel 巨集。

與每個範例搭配使用,下列宣告:
外顯的選項
為物件的私用 xlApp
為物件的私用 xlBook
為物件的私用 xlSheet
將 1 維陣列傳遞至工作表範圍:
   Public Sub OneDimension()
      Const size = 5461
      Dim myarray(1 To size) As Integer
      Set xlApp = CreateObject("Excel.Application")
      xlApp.Visible = True
      Set xlBook = xlApp.Workbooks.Add
      Set xlSheet = xlBook.Worksheets("Sheet1")
      xlSheet.Cells(1, 1).Resize(size, 1).Value = _
         xlApp.Application.Transpose(myarray)
   End Sub
				
2 維陣列傳遞至工作表範圍:
   Public Sub TwoDimension()
      Const size = 2730
      Dim myarray(1 To size, 1 To 2) As Integer
      ' Number of elements = 2730 * 2 = 5460.
      Set xlApp = CreateObject("Excel.Application")
      xlApp.Visible = True
      Set xlBook = xlApp.Workbooks.Add
      Set xlSheet = xlBook.Worksheets("Sheet1")
      xlSheet.Cells(1, 1).Resize(size, 2).Value = myarray
   End Sub
				
當作一個引數傳遞陣列至 Excel 巨集:
   Public Sub RunExcelMacro()
      Const size = 5461
      Dim myarray(1 To size) As Integer
      Set xlApp = CreateObject("Excel.Application")
      xlApp.Visible = True
      Set xlBook = xlApp.Workbooks.Open("C:\MyBook.xls")
      xlApp.Run "AcceptArray", myarray
   End Sub
				
內 C:\MyBook.xls 模組內的 [AcceptArray 程序類似下列:
   Option Explicit

   Public Sub AcceptArray(ByVal myarray As Variant)
      MsgBox "Size of first dimension: " & UBound(myarray, 1)
   End Sub
				

?考

如需有關陣列和 Excel 的詳細資訊,請參閱下列文件 「 Microsoft 知識庫 」 中:
166342在 Microsoft Excel 97 中 XL97: 最大的陣列大小

153307HOWTO: 呼叫採用參數的 Microsoft Excel 巨集

153090如何將 Visual Basic 陣列傳遞至 Excel 工作表
如需有關如何取得應用程式的說明與 Visual Basic 的詳細資訊,請參閱 「 Microsoft 知識庫 」 中下列文:
163435VBA: 應用程式的 Visual Basic 程式設計資源

屬性

文章編號: 177991 - 上次校閱: 2007年3月29日 - 版次: 3.6
這篇文章中的資訊適用於:
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Excel 97 Standard Edition
  • Microsoft Excel 95 Standard Edition
  • Microsoft Excel 95a
  • Microsoft Excel 5.0c
  • Microsoft Office 2000 Developer Edition
關鍵字:?
kbmt kbautomation kbinfo KB177991 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:177991
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