Sie sind zurzeit offline. Es wird auf die erneute Herstellung einer Internetverbindung gewartet.

XL: Beschränkungen beim Weitergeben von Arrays an Excel mithilfe der Automatisierung

Dieser Artikel ist eine Übersetzung des folgenden englischsprachigen Artikels der Microsoft Knowledge Base:
177991 XL: Limitations of Passing Arrays to Excel Using Automation
Zusammenfassung
Dieser Artikel behandelt die Beschränkungen beim Weitergeben von Arrays an Microsoft Excel-Arbeitsblätter und Makros mithilfe der Automatisierung. Wenn diese Beschränkungen überschritten werden, erhalten Sie möglicherweise Meldungen über Laufzeitfehler in Ihrem Automatisierungscode.
Weitere Informationen
Die Verwendung der hier aufgeführten Informationen, Makro- oder Programmcodes geschieht auf Ihre eigene Verantwortung. Microsoft stellt Ihnen diese Informationen sowie Makro- und Programmlistings ohne Gewähr auf Richtigkeit, Vollständigkeit und/oder Funktionalität sowie ohne Anspruch auf Support zur Verfügung. Die zur Verfügung gestellten Makro- und Programmierungsbeispiele sollen lediglich exemplarisch die Funktionsweise des Beispiels aufzeigen. Die Spezialisten vom Microsoft Software Service können bei der Erläuterung der Funktionalität bestimmter Prozeduren helfen, jedoch werden sie diese Beispiele nicht in Bezug auf eine erweiterte Funktionalität verändern, noch werden sie Prozeduren entwickeln, die auf Ihre besonderen Bedürfnisse zugeschnitten sind. Wenn Sie über begrenzte Programmiererfahrungen verfügen, wenden Sie sich an einen von Microsoft zertifizierten Partner. Weitere Informationen über von Microsoft zertifizierte Partner finden Sie auf der folgender Website von Microsoft: Weitere Informationen zur Kontaktaufnahme mit Microsoft und zu verfügbaren Supportoptionen finden Sie auf der folgenden Website von Microsoft: Beim Weitergeben von Arrays an Microsoft Excel mithilfe der Automatisierung gelten - je nach der installierten Excel-Version und je nachdem, ob Sie den Bereich an an einen Arbeitsblattbereich oder als Argument an ein Makro weitergeben - die folgenden Beschränkungen. Einzelheiten entnehmen Sie den entsprechenden Fußnoten in der folgenden Tabelle.
   Version von             Weitergabe des Arrays an     Weitergabe des Array an   Microsoft Excel         Arbeitsblattbereich          Makro (Prozedur)   --------------------------------------------------------------------------   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				

Fußnoten

A:

Die maximale Anzahl von Elementen in dem Array liegt bei ungefähr 6550. Wenn Sie diese Grenze überschreiten, wird mindestens eine der folgenden Fehlermeldungen angezeigt:
Nicht genügend Arbeitsspeicher
1005: Die Value-Eigenschaft des Range-Objektes kann nicht festgelegt werden.
Die maximale Anzahl von Elementen in dem Array, das Sie mithilfe der Transpose-Funktion an Excel weitergeben können, liegt bei 4095. Wenn Sie diese Grenze überschreiten, wird folgende Fehlermeldung angezeigt:
Laufzeitfehler '1004':
Die Transpose-Methode des Application-Objektes konnte nicht ausgeführt werden.
B:

Die maximale Anzahl von Elementen in dem Array liegt bei 4095. Wenn Sie diese Grenze überschreiten, wird möglicherweise folgende Fehlermeldung angezeigt:
Laufzeitfehler '1004':
Die Run-Methode des Application-Objektes konnte nicht ausgeführt werden.
Hinweis: Beim Weitergeben eines mehrdimensionalen Arrays wird möglicherweise keine Fehlermeldung angezeigt, aber das Excel-Makro wird nicht ausgeführt, wenn die Gesamtzahl der Elemente 4095 überschreitet.

C:

Beim Festlegen des Arrayparameters in dem Excel-Makro muss dieser als Variable vom Typ "Variant" festgelegt werden, andernfalls wird eine ähnliche Fehlermeldung wie die folgende angezeigt, wenn Sie das Makro mithilfe der Automatisierung ausführen:
Laufzeitfehler '1004':
<Makroname> nicht gefunden.
Nehmen Sie beispielsweise an, der Name des Makros in Excel sei "AcceptArray". Das folgende Beispiel zeigt, wie das Array in dem Excel-Makro festgelegt sein muss:
   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:

Die maximale Anzahl von Elementen in dem Array liegt bei 5461. Wenn Sie diese Grenze überschreiten, wird mindestens eine der folgenden Fehlermeldungen angezeigt:
Laufzeitfehler '1004':
Die Transpose-Methode des Application-Objektes konnte nicht ausgeführt werden.
-oder-
Laufzeitfehler '1005':
Die Value-Eigenschaft des Range-Objektes kann nicht festgelegt werden.
E:

Die maximale Anzahl von Elementen in dem Array liegt bei 5461. Wenn Sie diese Grenze überschreiten, wird folgende Fehlermeldung angezeigt:
Laufzeitfehler '1004':
Die Run-Methode des Application-Objektes konnte nicht ausgeführt werden.
F:

Die maximale Anzahl von Elementen in dem Array ist durch den verfügbaren Speicher oder durch die maximale Größe des Excel-Arbeitsblattes beschränkt (65536 Zeilen und 256 Spalten). Die maximale Anzahl von Elementen in dem Array, das Sie mithilfe der Excel-Funktion zum Transponieren an Excel weitergeben können, liegt jedoch bei 5461. Wenn Sie diese Grenze überschreiten, wird folgende Fehlermeldung angezeigt:
Laufzeitfehler '13':
Typenkonflikt
G:

Die maximale Anzahl von Elementen in dem Array ist nur durch den verfügbaren Speicher begrenzt. Sie müssen auch den Parameter in dem Excel-Makro nicht als Variable vom Typ "Variant" festlegen. Wenn Sie jedoch das Array "ByVal" weitergeben möchten, müssen Sie den Parameter als Variable vom Typ "Variant" festlegen, wie in dem zuvor in diesem Artikel aufgeführten Beispiel in der Fußnote C. Wenn Sie für die Variable nicht den Typ "Variant" festlegen, wird der Laufzeitfehler 13 ("Typenkonflikt") gemeldet.

H:

Beim Weitergeben eines "ByRef"-Arguments an einen deaktivierten Automatisierungsserver, beispielsweise Excel, wird zwischen dem Automatisierungscontroller (oder Client) und dem Server ein Marshalling der Daten durchgeführt, da diese in getrennten Prozessen ausgeführt werden. Dies bedeutet: Wenn ein Array mithilfe des Arguments "ByRef" an Excel weitergegeben wird, wird eine Kopie des Arrays an den Adressraum von Excel gesendet. Nachdem die Excel-Prozedur ausgeführt wurde, wird eine Kopie des Arrays an den Client zurückgegeben. Dies ermöglicht zwar die Weitergabe von Argumenten mithilfe des Arguments "ByRef" an einen deaktivierten Server, doch dieser Vorgang ist nicht sehr effizient. Andererseits ist dies bei der Verwendung eines prozessinternen Automatisierungsserver (Dynamic-Link Library, DLL) und beim Weitergeben eines "ByRef"-Arguments, sehr effizient, da hierbei kein Marshalling ausgeführt wird. Der Server verwendet dasselbe Array wie der Client. Dies ist möglich, da der Server in demselben Adressraum wie der Client ausgeführt wird.

Aufgrund des Marshalling mit einem deaktivierten Server wie Excel, ist es effizenter, das Array "ByVal" anstelle von "ByRef" weiterzugeben. Auf diese Weise wird nur eine Kopie an Excel weitergegeben und Excel muss die Kopie nicht an den Client zurückgeben. Um ein Array "ByVal" an ein Excel-Makro weiterzugeben, müssen Sie den Parameter in dem Excel-Makro als eine Variable vom Typ "Variant" weitergeben. Lesen Sie hierzu das Beispiel in der zuvor in diesem Artikel erwähnten Fußnote C.

Visual Basic-Beispielprozeduren

Die folgenden Beispiele für Subprozeduren in Microsoft Visual Basic für Applikationen zeigen, wie Arrays an Excel weitergegeben werden. Die ersten beiden Prozeduren zeigen wie Sie einen Zellbereich in einem Arbeitsblatt ausfüllen, indem Sie Sie ein Array an einen Arbeitsblattbereich weitergeben. Die dritte Prozedur zeigt, wie Sie ein Array an ein Excel-Makro weitergeben.

Die folgenden Deklarationen werden für jedes Beispiel verwendet:
Option Explicit
Private xlApp As Object
Private xlBook As Object
Private xlSheet As Object
Weitergeben eines eindimensionalen Arrays an einen Arbeitsblattbereich:
   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				
Weitergeben eines zweidimensionalen Arrays an einen Arbeitsblattbereich:
   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				
Weitergeben eines Arrays als Argument an ein Excel-Makro:
   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				
Die AcceptArray-Prozedur innerhalb eines Moduls unter "C:\EigeneArbeitsmappe.xls" sieht ungefähr so aus:
   Option Explicit   Public Sub AcceptArray(ByVal myarray As Variant)      MsgBox "Size of first dimension: " & UBound(myarray, 1)   End Sub				
Informationsquellen
Weitere Informationen über Arrays und Excel finden Sie in folgenden Artikeln der Microsoft Knowledge Base:
75376 XL: Maximum Array Size in Microsoft Excel

153307 HOWTO: Call Microsoft Excel Macros that Take Parameters

153090 How To Pass a Visual Basic Array to an Excel Worksheet
Weitere Informationen dazu, wie Sie Hilfestellung in Bezug auf Visual Basic für Applikationen erhalten können, finden Sie im folgenden Artikel der Microsoft Knowledge Base:
163435 VBA: Programming Resources for Visual Basic for Applications
8.0 ole
Bitte beachten Sie: Bei diesem Artikel handelt es sich um eine Übersetzung aus dem Englischen. Es ist möglich, dass nachträgliche Änderungen bzw. Ergänzungen im englischen Originalartikel in dieser Übersetzung nicht berücksichtigt sind. Die in diesem Artikel enthaltenen Informationen basieren auf der/den englischsprachigen Produktversion(en). Die Richtigkeit dieser Informationen in Zusammenhang mit anderssprachigen Produktversionen wurde im Rahmen dieser Übersetzung nicht getestet. Microsoft stellt diese Informationen ohne Gewähr für Richtigkeit bzw. Funktionalität zur Verfügung und übernimmt auch keine Gewährleistung bezüglich der Vollständigkeit oder Richtigkeit der Übersetzung.
Eigenschaften

Artikelnummer: 177991 – Letzte Überarbeitung: 09/18/2011 11:35:00 – Revision: 3.0

  • Microsoft Excel 2000 Standard Edition
  • Microsoft Excel 97 Standard Edition
  • Microsoft Excel 95 Standard Edition
  • Microsoft Office 2000 Developer Edition
  • kbautomation kbinfo KB177991
Feedback