传递到使用自动化的 Excel 的阵列 XL: 限制

注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。

点击这里察看该文章的英文版: 177991
本文已归档。它按“原样”提供,并且不再更新。
概要
本文讨论了在将数组传递给 Microsoft Excel 工作表和宏使用自动化功能的限制。如果超过这些限制,在自动化代码中可能会收到运行时错误。
更多信息
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:_FITTED

最大的数组中的元素数是 5461。如果超出了此限制您会收到以下错误消息之一:
运行时错误 '1004':
转置失败的应用程序类的方法
-或者-
运行时错误"1005":
无法设置范围类的 Value 属性
E:

最大的数组中的元素数是 5461。如果超出了此限制您会收到以下错误消息:
运行时错误 '1004':
运行失败的应用程序类的方法
F:

数组中元素的最大数量受可用内存或在 Excel 工作表最大大小 (65536 行 X 256 列)。但是,您可以将传递给 Excel 的数组中元素的最大数量是 5461 使用 Excel 的转置函数。如果超出了此限制您会收到以下错误消息:
运行时错误"13":
类型不匹配
g:

最大数组中的元素数目仅受可用内存。此外,您不必将参数定义为 Variant 变量中 Excel 宏。但是,如果要将该数组传递 ByVal,您必须作为 Variant 变量,如在本文内上文中的脚注 C 中的示例中定义参数。如果没有定义该变量作为一个 variant 类型值,您将得到一个运行时错误 13,"类型不匹配"的错误。

高:

当一个进程外自动化传递参数 ByRef 时服务器,如 Excel,数据的封送处理之间自动完成控制器 (或客户端) 和服务器,因为它们在单独的进程中运行。这意味着当数组传递给 Excel 使用 ByRef,数组的副本发送到 Excel 的地址空间。Excel 过程运行之后,该数组的副本被传递回客户端。尽管这不会允许传递到进程外服务器使用 ByRef 参数,它不是很有效。另一方面时使用的进程内自动化服务器 (一个动态链接库 (DLL)),并传递参数 ByRef,, 这是非常有效,因为没有封送处理完成。服务器使用相同的数组在内存中作为客户端。这是可能的因为服务器与客户端在同一地址空间中运行。

由于与进程外服务器 (如 Excel) 封送处理,它是更有效的方法传递数组的 ByRef 而不是 ByVal。此的方法只能有一个副本被传递到 Excel,Excel 没有将该副本传递回客户端。数组 ByVal 传递了 Excel 宏,您必须作为 Variant 变量中 Excel 宏定义参数。请参阅本文前面的示例的脚注 C。

示例 Visual Basic 过程

以下示例 Microsoft Visual Basic 的应用程序 Sub 过程显示如何将数组传递给 Excel。前两个过程显示如何通过将数组传递给工作表区域填充工作表上的单元格区域。第三个过程演示如何将数组传递给一个 Excel 宏。

与每个示例使用下面的声明:
显式的选项
私有 xlApp As Object
私有 xlBook As Object
私有 xlSheet As Object
将 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 知识库中下面的文章:
166342XL97: Microsoft Excel 97 中的最大数组大小

153307HOWTO: 调用带参数的 Microsoft Excel 宏

153090如何将一个 Visual Basic 数组传递给一个 Excel 工作表
有关帮助您使用 vba 的应用程序的详细信息请参阅 Microsoft 知识库中下面的文章:
163435VBA: 为应用程序的 Visual Basic 编程资源
8.0 ole

警告:本文已自动翻译

属性

文章 ID:177991 - 上次审阅时间:12/05/2015 08:13:46 - 修订版本: 3.6

Microsoft Excel 2000 标准版, Microsoft Excel 97 标准版, Microsoft Excel 95 标准版, Microsoft Excel 95a, Microsoft Excel 5.0c, Microsoft Office 2000 Developer Edition

  • kbnosurvey kbarchive kbmt kbautomation kbinfo KB177991 KbMtzh
反馈