XL: Ограничения на передачу массивов в Excel с помощью автоматизации

Переводы статьи Переводы статьи
Код статьи: 177991 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

В этой статье

Аннотация

В данной статье описаны ограничения при передаче массивов Лист Microsoft Excel и макросы с помощью автоматизации. Если эти ограничения При превышении появляется ошибок во время выполнения кода автоматизации.

Дополнительная информация

Корпорация Майкрософт предлагает примеры программного кода только для иллюстрации и гарантии или подразумеваемых, включая, но не ограничиваясь ими, подразумеваемые гарантии товарности или пригодности для определенной цели. В данной статье предполагается, что вы знакомы с языком программирования рассчитаны и средства, используемые для создания и отладки. Специалисты службы технической поддержки Майкрософт могут пояснить конкретной процедуры, но они будут изменять примеры для реализации дополнительных возможностей или удовлетворения конкретных потребностей.
Имеют ограниченный опыт программирования, необходимо обратиться к сертифицированному партнеру корпорации Майкрософт или консультационной службы корпорации Майкрософт. Для получения дополнительных сведений посетите следующие веб-узлы корпорации Майкрософт:

Сертифицированных партнеров Майкрософт: https://partner.microsoft.com/rus/partner?countrycode=ru-ru

Служба Майкрософт- http://support.Microsoft.com/gp/advisoryservice

Для получения дополнительных сведений о вариантах поддержки, доступных и обратитесь в корпорацию Майкрософт посетите следующий веб-узел корпорации Майкрософт: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 класса Range
Максимум число элементов в массиве, который можно передать в Excel с помощью Excel Функция ТРАНСП — 4095. При превышении этого предела, появляется следующее сообщение об ошибке:
Ошибка выполнения "1004":
Поменять местами метод класса приложения не удалось
Б.

Максимальное количество элементы массива — 4095. При превышении этого ограничения может появиться следующее сообщение об ошибке:
Ошибка выполнения "1004":
Запустить метод класса приложения не удалось
Примечание: При передаче многомерный массив не появляется сообщение об ошибке, но Excel макрос не будет выполняться, когда общее число элементов превышает 4095.

C:

При определении параметра массива в макрос Microsoft Excel, он должен быть определен как переменная типа Variant или вы получите следующее сообщение об ошибке При попытке запустить макрос с помощью автоматизации:
Ошибка выполнения "1004":
Не удается найти макрос<macro name=""><b00></b00></macro>
Для пример, предположим, что имя макроса в Microsoft 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 класса Range
E:

Максимум число элементов в массиве равно 5461. При превышении этого ограничения появится следующее сообщение об ошибке:
Ошибка выполнения "1004":
Метод класса приложения не удалось запустить
F:

Максимум число элементов в массиве ограничено объемом доступной памяти или Excel Максимальный размер листа (65536 строк столбцов X 256). Тем не менее максимальное число элементы массива, который можно передать в Excel с помощью транспонирования Excel функция является 5461. Если это ограничение превышено, появляется следующее сообщение об ошибке сообщение об ошибке:
Ошибка выполнения "13":
Несоответствие типов
G:

Максимальное число элементов массива ограничен только объемом доступной памяти. Кроме того, не нужно определять в качестве параметра Переменная типа Variant в макросов Microsoft Excel. Тем не менее если требуется передать массив ByVal, необходимо определить параметр как переменная типа Variant, как показано в Сноска c данной статьи. Вы получите ошибку времени выполнения 13, тип" Несоответствие"ошибку, если переменная не определена как Variant.

ВЫСОТА:

При передаче аргумента ByRef автоматизации вне процесса сервер, например Microsoft Excel, выполняется маршалинг данных между автоматизации контроллер (или клиентом) и сервером, так как они выполняются в отдельных процессах. Это означает, что когда массив передается в Excel с помощью ByRef, копия массива Отправлено адресного пространства Excel. После выполнения процедуры Excel, копия Этот массив передается обратно клиенту. Несмотря на то, что это возможным для передачи аргументы, с помощью ByRef сервер вне процесса, он не очень эффективно. На другой стороны, при использовании сервера в процессе автоматизации (динамической компоновки Библиотека (DLL)) и передать аргумент ByRef, это очень эффективный со времени нет выполняется маршалинг. На сервере используется тот же массив в память, как клиент. Это возможно, поскольку сервер выполняет в адресном пространстве, что клиент.

Из-за таких как маршалинг с сервером вне процесса Microsoft Excel, целесообразнее передавать массив ByVal вместо ByRef. Таким образом, только одна копия передается в Microsoft Excel и Microsoft Excel не нужно передавать копию назад для клиента. Чтобы передать массив ByVal макросов Excel, необходимо определить параметр в макрос Microsoft Excel как переменная типа Variant. Смотри подстрочное примечание c выше в в данной статье в качестве примера.

Пример процедуры Visual Basic

Следующие примеры Microsoft Visual Basic для приложений Sub процедуры показывают, как для подстановки массивов в Excel. Первые две процедуры показывают, как для заполнения диапазона ячеек на листе при передаче массива на лист диапазон. В третьей процедуре показано, как передать массив макросов Microsoft Excel.

С каждого примера используются следующие объявления:
Явный параметр
Частные xlApp как объект
Частные xlBook как объект
Частные xlSheet как объект
Передача одномерным массивом диапазон листа:
   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
				
Передача двухмерный массив в диапазон ячеек:
   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
				
Процедура AcceptArray в модуле внутри C:\MyBook.xls примерно так:
   Option Explicit

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

Ссылки

Дополнительные сведения о массивах и Excel см следующие статьи базы знаний Майкрософт:
166342 XL97: Максимальный размер массива в Microsoft Excel 97

153307 Методические УКАЗАНИЯ: Вызов макросов Microsoft Excel, которые принимают параметры

153090 Как передать массив Visual Basic в лист Excel
Для получения дополнительных сведений о получении справки по Visual Basic для Приложения, обратитесь к следующей статье Microsoft Knowledge Base:
163435 VBA: Ресурсы для разработчиков Visual Basic для приложений

Свойства

Код статьи: 177991 - Последний отзыв: 18 сентября 2011 г. - Revision: 5.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Excel 97 Standard Edition
  • Microsoft Excel 95 Standard Edition
  • Microsoft Office 2000 Developer Edition
Ключевые слова: 
kbautomation kbinfo kbmt KB177991 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:177991

Отправить отзыв

 

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