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

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 177991 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Dieser Artikel ist eine Übersetzung des folgenden englischsprachigen Artikels der Microsoft Knowledge Base:
177991 XL: Limitations of Passing Arrays to Excel Using Automation
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.
Alles erweitern | Alles schließen

Auf dieser Seite

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:
http://www.microsoft.com/partner/referral
Weitere Informationen zur Kontaktaufnahme mit Microsoft und zu verfügbaren Supportoptionen finden Sie auf der folgenden Website von Microsoft:
http://support.microsoft.com/default.aspx?scid=fh;DE;CNTACTMS
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

Eigenschaften

Artikel-ID: 177991 - Geändert am: Sonntag, 18. September 2011 - Version: 3.0
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Excel 97 Standard Edition
  • Microsoft Excel 95 Standard Edition
  • Microsoft Office 2000 Developer Edition
Keywords: 
kbautomation kbinfo KB177991
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

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