Limitationen in Excel-VBA und -Objektmodell
Allgemeines
über Limitationen in Excel-VBA und -Objektmodell
Übersicht der
Limitationen in Excel-VBA und -Objektmodell
Anmerkungen zu
Excel-VBA-Limitationen
Allgemeines über Limitationen in Excel-VBA und Excel-Objektmodell
Auf dieser Seite werden 38 Limitationen in der Programmiersprache VBA von Microsoft Excel (auch Excel-VBA genannt) und im Objektmodell von Microsoft Excel vorgestellt. Limitationen, die in Microsoft Excel generell existieren und demzufolge auch für Excel-VBA gelten, werden hier nicht explizit erwähnt.
Hier finden Sie weitere Limitationen:
Weitere Informationen Alle
Limitationen in Microsoft Excel finden Sie hier: Alle
Limitationen im VBA-Editor von Microsoft Excel finden Sie hier: Alle
Limitationen in Projekten erhalten Sie hier: Die
Limitationen in der Programmiersprache VBA/VB finden Sie hier: Die
Spezial-Limitationen von Arrays und Matrizen werden hier vorgestellt: |
Bei einzelnen Spezifikationen ist ein spezieller Vermerk angebracht, beispielsweise "Keine Angabe" oder "Inoffiziell". Was dieser bedeutet, wird hier erklärt:
Weitere Informationen |
Diese Seite ist auch als Acrobat PDF-Dokument erhältlich. Mehr dazu erfahren Sie hier:
Übersicht der Limitationen in Excel-VBA und -Objektmodell
Tipp:
Direktes Aufrufen einer Limitation
Sämtliche in der nachstehenden Tabelle aufgeführten Limitationen besitzen so
genannte Textmarken und können daher direkt aufgerufen werden. Wenn Sie beispielsweise
die Limitation "Maximale Anzahl Quellzellen, die bei 'AutoFill' markiert sein
dürfen", welche die ID 16 besitzt, aufrufen möchten, müssen Sie lediglich im
Adressfeld Ihres Browsers den Zusatz "#L16" an die URL der vorliegenden Seite http://www.xlam.ch/xlimits/excelvba.htm
anhängen. Die vollständige Adresse lautet somit "http://www.xlam.ch/xlimits/excelvba.htm#L16".
Limitationen in Excel-VBA und im Excel-Objektmodell
Die nachfolgende Tabelle enthält alle derzeit bekannten Limitationen auf, die in Microsoft Excel-VBA und im Microsoft Excel-Objektmodell existieren.
| ID | Merkmal (Limitation) | Spezifikation |
| 1 | Maximale Anzahl Elemente in einem Array | Excel
97: Durch den verfügbaren Speicher begrenzt Excel 2000: Durch den verfügbaren Speicher begrenzt Excel 2002: Durch den verfügbaren Speicher begrenzt Excel 2003: Durch den verfügbaren Speicher begrenzt Auszug aus einer
Beschreibung von Microsoft: Weitere Informationen siehe Anmerkung 1. Informationen über die Spezifikation "Durch den verfügbaren Speicher begrenzt" finden Sie auf der Seite Excel-Arbeitsspeicher. Weitere Informationen über Array-Limitationen finden Sie auf der Seite Limitationen von Arrays, Matrizen und Matrixformeln. |
| 2 | Maximale Anzahl Array-Elemente, die mit der "Transpose"-Methode von einer benutzerdefinierten Tabellenfunktion zurückgegeben werden können | Excel 95: 5'461
Elemente Excel 97: 5'461 Elemente Excel 2000: 5'461 Elemente Excel 2002: 5'461 Elemente Excel 2003: 5'461 Elemente Werden mehr als 5'461 Elemente mit Transpose zurückgegeben, erscheint in einzelnen von der Funktion benutzten Zellen der Fehler "#WERT!". Dieses Problem wurde für Microsoft Excel 2000 durch den Service Release Microsoft Office SR-1/SR-1a behoben, wobei nach Installation des Updates noch ein neuer Registry-Eintrag von Hand erfasst werden muss. Achtung: Nur der Fehler wurde korrigiert. Mit Transpose können nach wie vor maximal 5'461 Array-Elemente verarbeitet werden. Weitere Informationen siehe Anmerkung 1. Weitere Informationen über Array-Limitationen finden Sie auf der Seite Limitationen von Arrays, Matrizen und Matrixformeln. |
| 3 | Maximale Anzahl Array-Elemente, die mit der "Transpose"-Methode verarbeitet werden können, wenn es um eine gewöhnliche Funktion handelt | Excel 95: 5'461
Elemente Excel 97: 5'461 Elemente Excel 2000: 5'461 Elemente Excel 2002: 5'461 Elemente Excel 2003: 5'461 Elemente Wenn mehr als 5'461 Elemente der Transpose-Methode übergeben werden, erscheint der Laufzeitfehler 13 "Typen unverträglich" (engl. "Type Mismatch"). Weitere Informationen siehe Anmerkung 1. Weitere Informationen über Array-Limitationen finden Sie auf der Seite Limitationen von Arrays, Matrizen und Matrixformeln. |
| 4 | Maximale Anzahl Dimensionen eines Arrays | 60 Dimensionen Weitere Informationen über Array-Limitationen finden Sie auf der Seite Limitationen von Arrays, Matrizen und Matrixformeln. |
| 5 | Maximale Länge eines Textes, der in die Zwischenablage (Clipboard) übertragen werden kann | Excel 97: 31'737
Zeichen Excel 2000: 31'737 Zeichen Excel 2002: 31'737 Zeichen Excel 2003: 31'737 Zeichen Diese Limitation gilt generell für Windows, da die Windows-Zwischenablage keine Texte mit einer Länge von mehr als 31'737 Zeichen aufnehmen kann. Weitere Informationen siehe Artikel xllimit3 'Maximale Länge des Zellinhaltes'. |
| 6 | Maximale Länge des Textes in einem eingebetteten TextBox-Objekt | Excel 97: ca. 2'000 Zeichen
(2 KB) (oder 10'240 Zeichen?) Excel 2000: ca. 2'000 Zeichen (2 KB) (oder 10'240 Zeichen?) Excel 2002: (Keine Angabe) Excel 2003: (Keine Angabe) Diese Limitation gilt für MSForms TextBox-Objekte. Die auf einem Visual Basic-Benutzerformular verwendete TextBox dagegen kann Texte von bis zu 64 KB Grösse enthalten (ca. 65'536 Zeichen). Weitere Informationen siehe Limitationen der Textbox und des Textfeldes in Microsoft Excel. |
| 7 | Maximale Anzahl Zeichen, die bei einer eingebetteten TextBox mit der "Characters"-Methode angesprochen werden können | Excel 97: 255 Zeichen Excel 2000: 255 Zeichen Excel 2002: 255 Zeichen Excel 2003: 255 Zeichen Wenn mehr als 255 Zeichen in eine TextBox eingetragen werden sollen, so funktioniert die Zuweisung mit "TextBox1.Characters.Text = "<Mehr als 255 Zeichen>" nicht. Man muss den einzutragenden Text in maximal 255 Zeichen lange Zeichenfolgen aufteilen. Weitere Informationen siehe Anmerkung 3. |
| 8 | Maximale Anzahl Zeichen, die im TextFrame einer AutoForm mit der "Characters"-Methode angesprochen werden können | Excel 97: 255 Zeichen Excel 2000: 255 Zeichen Excel 2002: 255 Zeichen Excel 2003: 255 Zeichen Weitere Informationen siehe Anmerkung 3. |
| 9 | Maximale Anzahl Zeichen, die über das "Characters"-Objekt einer Zelle mit der "Insert"- und "Delete"-Methode verarbeitet werden kann | Excel 97: (Keine
Angabe) Excel 2000: 255 Zeichen Excel 2002: (Keine Angabe) Excel 2003: (Keine Angabe) Wenn ein Text mit mehr als 255 Zeichen mit der Insert- und Delete-Methode verarbeitet wird, erscheint der Laufzeitfehler 1004 "Insert/Delete method of Characters class failed". Die Limitation ist bei allen Excelversionen ausser Excel 2000 mit "Keine Angabe" spezifiziert. Dies, weil diese Limitation gemäss einem Microsoft Knowledge Base-Artikel anscheinend nur für Excel 2000 gilt bzw. zu einem Laufzeitfehler führt. Weitere Informationen siehe Anmerkung 3. |
| 10 | Maximale Anzahl Zeichen, die von der "Len"-Funktion von VBA für die "Text"-Eigenschaft einer Zelle zurückgegeben werden | Excel 97: 1'024
Zeichen Excel 2000: 1'024 Zeichen Excel 2002: 1'024 Zeichen Excel 2003: 1'024 Zeichen Mit der Len-Funktion von VBA wird die Länge einer Zeichenfolge abgefragt, beispielsweise "MsgBox Len(strText)". Len kann auch auf einen Zelltext angewendet werden, d.h.beispielsweise "MsgBox Len(ActiveCell.Text)", wobei eine wichtige Einschränkung zu beachten ist: Auch wenn ein Zelltext mehr als 1'024 Zeichen enthält, gibt die Len-Funktion das Ergebnis 1'024 zurück. Um die korrekte Länge eines Zellinhaltes zu ermitteln, muss man die Value-Eigenschaft der Zelle verwenden. Die Value-Eigenschaft besitzt keine Limitation bezüglich Anzahl Zeichen. Die Anweisung "MsgBox Len(ActiveCell.Value)" beispielsweise gibt die korrekte Anzahl Zeichen zurück. Siehe auch Limitation-ID 11. |
| 11 | Maximale Anzahl Zeichen, die von der "Len"-Funktion für die "Text"-Eigenschaft der "Characters"-Methode eines Objekt zurückgegeben werden | Excel 97: 255 Zeichen Excel 2000: 255 Zeichen Excel 2002: 255 Zeichen Excel 2003: 255 Zeichen Die Len-Funktion liefert als Ergebnis die Zahl 255, auch wenn der Text mehr als 255 Zeichen lang ist. Die Abfrage "MsgBox Len(ActiveSheet.Shapes(1).TextFrame.Characters.Text)" zeigt als Resultat den Wert 255 bei einer beispielsweise 500 Zeichen enthaltenden TextBox. Der Grund für diese falsche Ergebnis liegt nicht bei der Len-Funktion sondern bei der Characters-Methode, die generell nur 255 Zeichen verarbeiten kann. Siehe auch Limitation-ID 10. |
| 12 | Maximale Anzahl Zeichen, die mit "NoteText" einem Kommentar zugewiesen werden können | Excel 97: 255 Zeichen Excel 2000: 255 Zeichen Excel 2002: 255 Zeichen Excel 2003: 255 Zeichen Mit der NoteText-Methode des Range-Objektes kann man einer Zelle einen neuen Kommentar hinzufügen oder einen vorhandenen Zellkommentar ändern. Wenn der bei NoteText angegebene Text mehr als 255 Zeichen lang ist, wird der Zellkommentar nicht angelegt bzw. geändert, wobei jedoch keine Fehlermeldung (kein Laufzeitfehler) auftritt. Siehe auch Limitation-ID 13. |
| 13 | Maximale Anzahl Zeichen, die mit "Comment.Text" bei Zell-Kommentaren verarbeitet werden können | Excel 97: 32'767
Zeichen Excel 2000: 32'767 Zeichen Excel 2002: 32'767 Zeichen (Inoffiziell) Excel 2003: 32'767 Zeichen (Inoffiziell) Siehe auch Limitation-ID 12. |
| 14 | Maximale Anzahl Zeichen, die mit "Comment" bei Szenario-Kommentaren verarbeitet werden können | Excel 97: 255 Zeichen Excel 2000: 255 Zeichen Excel 2002: 255 Zeichen (Inoffiziell) Excel 2003: 255 Zeichen (Inoffiziell) |
| 15 | Maximale Anzahl Zeichen, die mit "AutoFill" verwendet werden können | Excel 97: 255 Zeichen Excel 2000: 255 Zeichen Excel 2002: 255 Zeichen Excel 2003: 255 Zeichen Siehe auch Limitation-ID 16. |
| 16 | Maximale Anzahl Quellzellen, die bei "AutoFill" markiert sein dürfen | Excel 97: 32'760
Zellen Excel 2000: 32'760 Zellen Excel 2002: 32'760 Zellen Excel 2003: 32'760 Zellen Mit der AutoFill-Methode des Range-Objektes können die Zellen eines Zellbereiches auf Basis eines bestimmten Quellbereiches ausgefüllt werden. Der Quellbereich darf maximal 32'760 Zellen umfassen. Wenn mehr als 32'760 Zellen verwendet werden, erscheint der Laufzeitfehler 1004 "Die AutoFill-Methode des Range-Objektes ist fehlerhaft". Siehe auch Limitation-ID 15. |
| 17 | Maximale Anzahl Zeilen/Datensätze, die mit dem DataGrid-Control angezeigt werden können | 65'535 Zeilen/Datensätze |
| 18 | Maximale Anzahl Zeilen/Datensätze, die mit dem MSHFlexGrid-Control angezeigt werden können | 65'535 Zeilen/Datensätze (oder 2'048?) Hinweis: |
| 19 | Maximale Länge eines SQL-Strings | 16'379 Zeichen Bei mehr als 16'379 Zeichen erscheint der Fehler "Syntax Error". Dieses Problem kann mit einem separaten Hotfix behoben werden, der in keinem Service Release/Pack enthalten ist. |
| 20 | Maximale Anzahl Zeichen, die mit VBA in einer Zelle ersetzt werden können | Excel 97: 1'024
Zeichen Excel 2000: 911 Zeichen Excel 2002: 911 Zeichen Excel 2003: (Keine Angabe) Die Spezifikation für Excel 2000 und Excel 2002 ist meiner Meinung nach doch erstaunlich, da in Microsoft Excel 97 die Grenze erst bei 1'024 Zeichen liegt. In Excel 2000 erscheint bei mehr als 911 Zeichen die Fehlermeldung "Formel ist zu lang" und die gewünschten Zeichen werden nicht ersetzt. In Excel 2002 erscheint keine Fehlermeldung. Die Zeichen werden jedoch ebenfalls nicht ersetzt. Hinweis: Weitere Informationen siehe Artikel xllimit4 'Maximale Länge von Formeln'. |
| 21 | Maximale Anzahl Zeichen eines Feldes, das aus einer Textdatei importiert wurde | Excel 97: Unbegrenzt Excel 2000: 911 Zeichen Excel 2002: Unbegrenzt Excel 2003: (Keine Angabe) Besitzt ein Feld mehr als 911 Zeichen, so werden die restlichen Zeichen beim Import der Textdatei abgeschnitten. Dieses Problem wurde erst in Micorosoft Excel 2002 behoben. Für Microsoft Excel 2000 gibt es weder ein Service Pack noch einen Hotfix zum Beheben des Problems. Hinweis: |
| 22 | Maximale Länge eines Textes, der mit der "Justify"-Methode verarbeitet werden kann | Excel 97: 255 Zeichen Excel 2000: 255 Zeichen Excel 2002: 255 Zeichen Excel 2003: 255 Zeichen Ein Zelltext länger als 255 Zeichen wird einfach abgeschnitten, ohne dass eine Fehlermeldung erscheint. |
| 23 | Maximale Anzahl von COM Interface Requests unter Windows 95 und Windows 98 | Excel 97: 64 KB Excel 2000: 64 KB Excel 2002: 64 KB Excel 2003: 64 KB Das Überschreiten dieser Limitation führt zum 'Hängen' der Anwendung (d.h. sie gibt keine Rückmeldung mehr) oder zu einer Fehlermeldung wie "Nicht genügend Ressourcen" oder "Nicht genügend Speicher". Anmerkung des Autors: Q216400 PRB: Cross-Process COM Automation Hangs Client App on Win95/Win98 |
| 24 | Maximale Anzahl inneinander verschachtelter Fliesskomma-Ausdrücke | 8 verschachtelte Ausdrücke Diese Beschränkung gilt generell in allen 32-Bit Windows-Betriebssystemen. Bei Überschreiten dieser Limitation in einem VBA-Programm wird der Laufzeitfehler 16 "Ausdruck zu komplex" angezeigt. |
| 25 | Maximale Länge eines mit "MsgBox" angezeigten Meldungstextes | ca. 1'024 Zeichen Je nach Breite der im Mitteilungstext verwendeten Zeichen können auch weniger als 1'024 Zeichen dargestellt werden. Werden viele schmale Zeichen, z.B. die Buchstaben 'i' oder 'l' benutzt, wird bedingt durch die eingesetzte Proportionalschrift mehr Text als bei Benutzung vieler breiter Zeichen, z.B. bei 'w' oder 'm', angezeigt. |
| 26 | Maximale Anzahl Zeichen, die in das Dialog-Eingabefeld der "InputBox"-Funktion eingegeben werden können | Excel 97: 255 Zeichen Excel 2000: 255 Zeichen Excel 2002: 255 Zeichen Excel 2003: 255 Zeichen |
| 27 | Anzahl in einer Programmschleife erstellbarer Kopien eines Arbeitsblattes | Excel 97: Ungefähr 24
Arbeitsblattkopien Excel 2000: Durch den verfügbaren Speicher begrenzt Excel 2002: Durch den verfügbaren Speicher begrenzt Excel 2003: Durch den verfügbaren Speicher begrenzt Es ist nicht möglich, eine genauere Angabe als "ungefähr 24 Arbeitsblätter" zu machen, da die tatsächliche Anzahl von der Länge des Namens des zu kopierten Blattes abhängig ist. Je länger der Blattname ist, desto weniger Kopien können in einer Programmschleife erstellt werden. Weitere Informationen siehe Anmerkung 2. Informationen über die Spezifikation "Durch den verfügbaren Speicher begrenzt" finden Sie auf der Seite Excel-Arbeitsspeicher. |
| 28 | Anzahl Felder, die mit der "CopyFromRecordset"-Methode eingelesen werden können | Excel 97: ca. 4'096
Felder (mit DAO) Excel 2000: Unlimitiert (mit ADO), ca. 4'096 Felder (mit DAO) Excel 2002: Unlimitiert (mit ADO), ca. 4'096 Felder (mit DAO) Excel 2003: Unlimitiert (mit ADO), ca. 4'096 Felder (mit DAO) In Microsoft Excel 97 kann die "CopyFromRecordset"-Methode des "Range"-Objektes mit einer DAO-Datenquelle verwendet werden. In diesem Fall existiert die Limitation, dass maximal ca. 4'096 Felder eingelesen werden können. Ab Microsoft Excel 2000 können neben DAO- auch ADO-Datenquellen verwendet werden. Bei ADO-Datenquellen existiert die Limitation meines Wissens nicht. |
| 29 | Maximale Länge des in "Application.UserName" gespeicherten Excel-Benutzernamens | Excel 97: 54 Zeichen Excel 2000: 52 Zeichen Excel 2002: (Keine Angabe) Excel 2003: (Keine Angabe) Die maximale Länge des Benutzernamens ist in Microsoft Excel 2000 tatsächlich genau zwei Zeichen kürzer als in Excel 97 (Anmerkung des Autors: Persönlich getestet in den beiden erwähnten Excelversionen). Der Grund für diesen Unterschied ist nicht bekannt. Wenn Sie "Application.UserName" eine Zeichenfolge von mehr als 54 Zeichen (Excel 97) bzw. 52 Zeichen (Excel 2000) Länge zuweisen, wird die Zeichenfolge zwar entgegengenommen, aber die überzähligen Zeichen ohne Fehlermeldung abgeschnitten. Der Benutzername, genauer gesagt die UserName-Eigenschaft, kann nicht leer sein. Beim Zuweisen einer leeren Zeichenfolge ("") wird automatisch der Default-Benutzername verwendet. Sowohl UserName als auch das Eingabefeld im Optionen-Dialog enthalten daraufhin den Default-Benutzernamen. In der Windows-Registry jedoch ist kein Name eingetragen. Dies hat zur Folge, dass beim nächsten Starten von Microsoft Excel ein Dialogfeld mit dem Titel "Benutzername" erscheint, in welchem Sie Name und Initialen eingeben müssen. Der Benutzername wird im Optionen-Dialogfenster auf der Registerseite "Allgemein" festgelegt. Bei jedem Öffnen einer Arbeitsmappe wird dieser Name in die Exceldatei der Mappe (xls-Datei) geschrieben. Und zwar auch dann, wenn man die Mappe nicht speichert. Der Benutzername ist in der Datei im BIFF-Record mit der Bezeichnung WRITEACCESS (ID 5C hex/92 dec) abgelegt. Dieser Record könnte einen Benutzernamen mit bis zu 109 Zeichen Länge aufnehmen. Es werden jedoch nur 54 bzw. 52 Zeichen beansprucht. Wahrscheinlich sind die restlichen Stellen als Reserve für die Unicode-Darstellung gedacht. Ein Unicode-Zeichen benötigt generell 2 Bytes. Bei 54 Zeichen somit 108 Bytes. |
| 30 | Maximale Länge des Suchkriterium-Namens bei der "Delete"-Methode des "FileFind"-Objektes (Excel für Macintosh) | Excel 98 (Mac): 31
Zeichen Excel 2001 (Mac): 31 Zeichen Excel X (Mac): 31 Zeichen (Inoffiziell) Excel 2004 (Mac): 31 Zeichen (Inoffiziell) |
| 31 | Anzahl Zellen, die geändert werden können, ohne dass der Mauszeiger flackert | Excel 97: 63 Zellen Excel 2000: 63 Zellen Excel 2002: 63 Zellen Excel 2003: 63 Zellen Diese eher ungewöhnliche Spezifikation bedeutet folgendes: |
| 32 | Maximale Länge eines Textes, der mit der "Find"-Methode gesucht werden kann | Excel 97: 255 Zeichen Excel 2000: 255 Zeichen Excel 2002: 255 Zeichen Excel 2003: 255 Zeichen Wenn man für das What-Argument der Find-Methode einen mehr als 255 Zeichen langen Text angibt, erscheint der Laufzeitfehler 1004 "Die Find-Eigenschaft des Range-Objektes kann nicht zugeordnet werden". |
| 33 | Erlaubter Spaltenindex bei der "Columns"-Eigenschaft | Excel 97: -254 bis 256 Excel 2000: -254 bis 256 Excel 2002: -254 bis 256 Excel 2003: -254 bis 256 Ein Tabellenblatt enthält grundsätzlich 256 Spalten. Jede Spalte besitzt einen Index (1 bis 256). Zum Ansprechen einer Spalte kann die "Columns"-Eigenschaft verwendet werden. Die Anweisung "MsgBox Columns(1).Width" zeigt die Breite der Spalte 1 (=Spalte A), und "MsgBox Columns(256).Width" zeigt die Breite der Spalte 256 (=Spalte IV). Columns akzeptiert jedoch nicht nur Zahlen von 1 bis 256, sondern auch die Zahl 0 und sogar negative Zahlen von -1 bis -254. Weitere Informationen siehe Anmerkung 4. |
| 34 | Maximale Länge des mit der "Evaluate"-Methode auszuwertenden Excel-Namens | Excel 97: 255 Zeichen Excel 2000: 255 Zeichen Excel 2002: 255 Zeichen Excel 2003: 255 Zeichen Mit der "Evaluate"-Methode kann man einen beliebigen Microsoft Excel-Namen auswerten, der eine A1-Bezugsart, einen bzw. mehrere Bereiche, einen definierten Namen oder einen externen Bezug darstellt. Zurückgegeben wird ein Objekt oder ein Wert. Der Evalutate übergebene Name kann bis zu 255 Zeichen lang sein. |
| 35 | Maximale Länge einer Matrixformel, die mit der "FormulaArray"-Eigenschaft angesprochen werden kann | Excel 97: 255 Zeichen Excel 2000: 255 Zeichen Excel 2002: 255 Zeichen Excel 2003: 255 Zeichen Zellformeln dürfen in Microsoft Excel gewöhnlich bis zu 1'024 Zeichen lang sein. Das gilt auch für Matrixformeln, die über die Benutzeroberfläche in eine Zelle eingegeben werden. Matrixformeln, die mit VBA einer Zelle zugewiesen werden, können hingegen wegen eines Bugs maximal 255 Zeichen lang sein. Auch das Abfragen einer Matrixformel mit VBA funktioniert nicht korrekt, wenn die Formel mehr als 255 Zeichen lang ist. Weitere Informationen siehe Artikel xllimit4 'Maximale Länge von Formeln'. |
| 36 | Maximale Länge des Anwendungsfenstertitels von Excel ("Application.Caption") | Excel 97: 256 bzw. 200
Zeichen Excel 2000: 256 bzw. 200 Zeichen Excel 2002: 256 bzw. 200 Zeichen Excel 2003: 256 bzw. 200 Zeichen Zuweisen mit Application.Caption: 200 Zeichen Wenn man eine Zeichenfolge länger als 200 Zeichen zuweist, werden die überzähligen Zeichen automatisch abgeschnitten. Es tritt kein Laufzeitfehler auf. Ist Im Windows Task-Manager werden nur höchstens 255 Zeichen der maximal 256 Zeichen angezeigt. |
| 37 | Maximale Länge des Fenstertitels bei der "GetOpenFilename"- und "GetSaveAsFilename"-Methode | Excel 97: 255 Zeichen Excel 2000: 255 Zeichen Excel 2002: 255 Zeichen Excel 2003: 255 Zeichen |
| 38 | Maximale Länge der Schaltflächenbeschriftung bei der "GetOpenFilename"- und "GetSaveAsFilename"-Methode (nur Excel für Macintosh) | Excel 98 (Mac): 255
Zeichen Excel 2001 (Mac): 255 Zeichen Excel X (Mac): 255 Zeichen Excel 2004 (Mac): 255 Zeichen |
Anmerkungen zu Excel-VBA-Limitationen
Nachfolgend finden Sie Zusatzinformationen zu verschiedenen Limitationen in Excel-VBA.
[1] Maximale Anzahl Array-Elemente bei der Transpose-Methode
Wieso liegt die maximale Anzahl Elemente bei genau 5'461? Meistens besitzen doch Limitationen eine in der Computerwelt häufig vorkommende Zahl wie zum Beispiel 32, 255, 1'024, 32'767 oder 65'536! Die Frage, weshalb die maximale Anzahl bei exakt 5'461 Elementen liegt, hat mich in der Tat sehr lange beschäftigt.
Alle 16-bit Excelversionen (z.B. Excel 4.0):- Array-Definition wird in einem 64 KB Speichersegment
abgelegt (64 KB = 65'536 Bytes)
- Wert ist in 20 Bits gespeichert
- 3'276 Elemente (65'536 Byte / 20 Bits = 3'276.80 = 3'276)
Ältere 32-bit Excelversionen (z.B. Excel 7.0):
- Array-Definition wird in einem 64 KB Speichersegment
abgelegt (64 KB = 65'536 Bytes)
- Wert ist in 24 Bits gespeichert
- 2'730 Elemente (65'536 Byte / 24 Bits = 2'730.66 = 2'730)
Neuere 32-bit Excelversionen (ab Excel 95):
- Array-Definition wird in zwei 64 KB Speichersegmenten
abgelegt (64 KB = 65'536 Bytes)
- Wert ist in 24 Bits gespeichert
- 5'461 Elemente (2 * 65'536 Byte / 24 Bits = 5'461.33 = 5'461)
Die Transpose-Methode wird immer dann benötigt, wenn ein sogenanntes Column-Array zurückgegeben werden soll, d.h. ein Datenfeld, das genau 1 Spalte und >1 Zeilen enthält. Es handelt sich somit um ein eindimensionales Array, dessen Elemente auf die Zellen einer einzelnen Spalte transponiert werden müssen.
Die Transponierung ist notwendig, da die Zellen einer Tabelle grundsätzlich von links nach rechts und dann von oben nach unten indexiert sind; und nicht von oben nach unten und dann von links nach rechts. Die Indizes sehen somit folgendermassen aus:
Zeile 1: Zelle A1=Index 1, Zelle B1=Index 2,
Zelle C1=Index 3, ... , Zelle IV1=Index 256
Zeile 2: Zelle A2=Index 257, Zelle B2=Index 258, ... , Zelle
IV2=Index 512
Zeile 3: Zelle A3=Index 513, ... , Zelle IV3=Index 768
Zeile 4: Zelle A4=Index 769, ... , Zelle IV4=Index 1024
usw.
Ein Column-Array für die Spalte A mit 4 Elementen wird mittels Transpose auf die vier untereinander stehenden Zellen 1, 257, 513 und 769 verteilt.
TODO: Umgehungsmöglichkeit mit selbstentwickelter VBA-Funktion
Function TransposeDim(v As Variant) As
Variant
Dim X As Long, Y As Long, Xupper As Long, Yupper As Long
Dim tempArray As Variant
Xupper = UBound(v, 2)
Yupper = UBound(v, 1)
ReDim tempArray(Xupper, Yupper)
For X = 0 To Xupper
For Y = 0 To Yupper
tempArray(X, Y) = v(Y, X)
Next Y
Next X
TransposeDim = tempArray
End Function
[2] Anzahl erstellbare Arbeitsblatt-Kopien
Dieser Artikel folgt in Kürze...
Siehe auch Artikel "Maximale Länge eines Arbeitsblattnamens" (xllimit24).
[3] Maximale Anzahl mit der Characters-Methode verarbeitbare Zeichen
Die Characters-Methode besitzt allgemein betrachtet eine Limitation von maximal 255 Zeichen. Diese Begrenzung hat zur Folge, dass man der Text-Eigenschaft Zeichenfolgen von höchstens 255 Zeichen Länge zuweisen kann. Man kann diese Einschränkung umgehen, indem man den zuzuweisenden Text in Blöcke à maximal 255 Zeichen aufteilt.
Sub FillTextFrame()
Dim objTextBox As Shape
Dim strText As String
Dim intChars As Integer
strText = String$(888, "Z")
Set objTextBox = ActiveSheet.Shapes.AddTextbox(1, 10, 10, 200, 200)
For intChars = 1 To Len(strText) Step 250
objTextBox.TextFrame.Characters(intChars, 250).Text =
Mid$(strText, intChars, 250)
Next intChars
Set objTextBox = Nothing
End Sub
[4] Erlaubter Spaltenindex bei der Columns-Eigenschaft
Bei der Columns-Eigenschaft können nicht nur die Zahlen von 1 und 256 sondern auch Zahlen von 0 bis -254 angegeben werden.
Beispiele:
| Abfrage von | Ergebnis |
| Columns(1).Width | Breite der Spalte 1 (=A) |
| Columns(256).Width | Breite der Spalte 256 (=IV) |
| Columns(0).Width | Laufzeitfehler 1004 |
| Columns(257).Width | Laufzeitfehler 1004 |
| Columns(1).Columns(1).Width | Breite der Spalte 1 (=A) |
| Columns(1).Columns(256).Width | Breite der Spalte 256 (=IV) |
| Columns(256).Columns(1).Width | Breite der Spalte 256 (=IV) |
| Columns(256).Columns(0).Width | Breite der Spalte 255 (=IU) |
| Columns(0).Columns(256).Width | Laufzeitfehler 1004 |
| Columns(256).Columns(-1).Width | Breite der Spalte 254 (=IT) |
| Columns(256).Columns(-254).Width | Breite der Spalte 1 (=A) |
| Columns(-254).Columns(256).Width | Laufzeitfehler 1004 |
| Columns(2).Columns(0).Width | Breite der Spalte 1 (=A) |
Haben Sie Fragen,
Anregungen oder einen Fehler entdeckt?
Kontakt zum Autor
Zuletzt aktualisiert am
4.05.2006 / 17:00 Uhr
Zuletzt kontrolliert am 22.12.2008 / 07:00 Uhr
© 2002-2009 by Philipp von Wartburg, Schweiz
Alle Rechte vorbehalten