Home HomeXLimits - Hauptseite


Limitationen im VBA-Editor (VBE)

Inhaltsübersicht

Allgemeines über Limitationen im VBA-Editor

Übersicht der VBA-Editor-Limitationen

Anmerkungen zu VBA-Editor-Limitationen

Fehlermeldungen des VBA-Editors infolge Überschreiten einer Limitation


Allgemeines über Limitationen im VBA-Editor

Auch der in den Microsoft Office-Programmen integrierte VBA-Editor (VBE) unterliegt gewissen Limitationen, die es zu beachten gilt.

Wenn Sie in verschiedenen Microsoft Office-Programmen wie beispielsweise Excel, Word oder PowerPoint programmieren, sollten Sie beachten, dass die VBA-Editoren dieser Office-Programme zum Teil unterschiedliche Spezifikationen besitzen. Dies, obwohl alle Programme ein und denselben VBA-Editor benutzen.

Weitere Informationen über VBA-verwandte Themen finden Sie auf diesen Seiten:

Weitere Informationen

Alle Limitationen in Excel-VBA und im Excel-Objektmodell finden Sie hier:
Limitationen in Excel-VBA und -Objektmodell

Alle Limitationen im VBA-Editor von Microsoft Excel finden Sie hier:
Limitationen im VBA-Editor (VBE)

Alle Limitationen in VBA und VB werden hier vorgestellt:
Limitationen in VBA und VB

Die Limitationen in den Projekten finden Sie hier:
Limitationen in VBA- und VB-Projekten

Die Limitationen von UserForms und Controls stehen auf dieser Seite:
Limitationen von UserForms und Controls

Bei einigen Spezifikationen ist ein spezieller Vermerk angebracht, beispielsweise "Keine Angabe" oder "Inoffiziell". Was dieser bedeutet, wird hier erklärt:

Weitere Informationen

Vermerke bei Spezifikationen

Diese Seite ist auch als Acrobat PDF-Dokument erhältlich. Mehr dazu erfahren Sie hier:

Themenseiten als PDF-Dokumente

To Top

 


Übersicht der VBA-Editor-Limitationen

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 Länge des Passwortes eines VBA-Projektes", welche die ID 17 besitzt, aufrufen möchten, müssen Sie lediglich im Adressfeld Ihres Browsers den Zusatz "#L17" an die URL der vorliegenden Seite http://www.xlam.ch/xlimits/vbe.htm anhängen. Die vollständige Adresse lautet somit "http://www.xlam.ch/xlimits/vbe.htm#L17".

 

Limitationen im VBA-Editor

Die nachfolgende Tabelle zeigt 28 Limitationen und Spezifikationen des VBA-Editors.

ID Merkmal (Limitation) Spezifikation
1 Maximale Anzahl Steuerelemente auf einem Benutzerformular (UserForm) Excel 97:    Unbegrenzt
Excel 2000: Unbegrenzt

Excel 2002: Unbegrenzt
Excel 2003: Unbegrenzt

Word 97:    Unbegrenzt
Word 2000: Unbegrenzt
Word 2002: Unbegrenzt
Word 2003: Unbegrenzt

PowerPoint 97:    Unbegrenzt
PowerPoint 2000: Unbegrenzt
PowerPoint 2002: Unbegrenzt
PowerPoint 2003: Unbegrenzt

Es spielt keine Rolle, welche Steuerelemente sich auf dem Benutzerformular befinden, sprich ob es Schaltflächen, Bezeichnungsfelder, Textfelder oder andere Steuerelemente sind. Die maximal Anzahl ist immer unbegrenzt.

Diese Limitation gilt ausschliesslich für VBA-Benutzerformulare, also nicht für Benutzerformulare von Visual Basic 5.0 oder 6.0. Visual Basic-Formulare können maximal 254 Steuerelemente aufnehmen beziehungsweise maximal so viele, wie Systemressourcen zur Verfügung stehen (siehe auch Anmerkung V1).

Achtung!
Beachten Sie unbedingt die Limitation ID 2 "Maximale Anzahl Steuerelemente eines Benutzerformulares, die mit VBA direkt angesprochen werden können", weil nicht sämtliche Steuerelemente eines Benutzerformulares direkt referenziert werden können.

Anmerkung des Autors:
Ich habe in Microsoft Excel 97 schon Benutzerformulare erstellt, die mehr als 600 Steuerelemente enthielten.

2 Steuerelemente eines Benutzerformulares, die mit VBA direkt angesprochen werden können Excel 97:     Steuerelemente 1 bis 411
Excel 2000: Steuerelemente 1 bis 411
Excel 2002: (Keine Angabe)
Excel 2003: (Keine Angabe)

Word 97:    Steuerelemente 1 bis 411
Word 2000: Steuerelemente 1 bis 411
Word 2002: (Keine Angabe)
Word 2003: (Keine Angabe)

PowerPoint 97:    Steuerelemente 1 bis 411
PowerPoint 2000: Steuerelemente 1 bis 411
PowerPoint 2002: (Keine Angabe)
PowerPoint 2003: (Keine Angabe)

Dieses Problem betrifft die Microsoft Office-Programme Excel, Word und PowerPoint der Version 97 und 2000. Ob das Problem auch in den Office-Versionen 2002/XP und 2003 existiert, ist unklar, da es keine Informationen seitens Microsoft gibt. Nebenbei erwähnt gibt es weder ein Service Pack noch einen Hotfix für dieses Problem.

Wenn man ein Steuerelement, welches nach dem 411-ten Steuerelement hinzugefügt wurde, im VBA-Code direkt referenziert (z.B. UserForm1.LabelXY.Caption ="") und diese Anweisung dann ausführt, stürzt das Office-Programm sofort ab. Es spielt keine Rolle, welcher Steuerelement-Typ angesprochen wird (Schaltfläche, Bezeichnungsfeld, Textfeld etc.). Wenn Sie beispielsweise das erste der UserForm hinzugefügte Steuerelement löschen und dann das 412-te Steuerelement direkt ansprechen, erfolgt kein Programmabsturz, da durch die Löschung das 412-te hinzugefügte Steuerelement intern neu die Nummer 411 besitzt.

Dieses Problem lässt sich umgehen, indem die Controls-Auflistung benutzt wird. Das 412-te Steuerelement kann dadurch mit UserForm1.Controls(411).Caption = "" indirekt referenziert werden (der Controls-Index beginnt bei 0, daher 411). Auch For-Each-Schleifen funktionieren fehlerfrei.

Weitere Informationen zu den möglichen Umgehungslösungen finden Sie in Anmerkung V1.

Siehe auch Limitation-ID 1.

3 Maximale Länge eines Modulnamens (Codename) Excel 97:    31 Zeichen
Excel 2000: 31 Zeichen

Excel 2002: 31 Zeichen
Excel 2003: 31 Zeichen

Word 97:    31 Zeichen
Word 2000: 31 Zeichen
Word 2002: 31 Zeichen
Word 2003: 31 Zeichen

PowerPoint 97:    31 Zeichen
PowerPoint 2000: 31 Zeichen
PowerPoint 2002: 31 Zeichen
PowerPoint 2003: 31 Zeichen

Diese Limitation gilt für Objekte (Modul "DieseArbeitsmappe" und Arbeitsblattmodule in Excel; Modul "ThisDocument" in Word) sowie für Module (Codemodule, Klassenmodule und Benutzerformulare) von VBA-Projekten.

Bei Überschreiten dieser Limitation treten folgende Fehlermeldungen auf:
- Excel: Fehlermeldung "Unzulässiger Eigenschaftswert" bei Objekt "DieseArbeitsmappe"
- Word: Fehlermeldung "Interner Fehler" bei Objekt "ThisDocument"
- Alle Office-Programme: Fehlermeldung "Kein zulässiger Objektname: <Name>" bei Modulen

In Visual Basic-Projekten hingegen können Modulnamen bis zu 40 Zeichen lang sein.

Weitere Informationen zu VBA- und VB-Projekten finden Sie auf der Seite Limitationen in VBA- und VB-Projekten.

4 Maximale Länge eines Projektnamens Excel 97:    128 Zeichen
Excel 2000: 128 Zeichen

Excel 2002: 128 Zeichen
Excel 2003: 128 Zeichen

Word 97:    128 Zeichen
Word 2000: 128 Zeichen
Word 2002: 128 Zeichen
Word 2003: 128 Zeichen

PowerPoint 97:    128 Zeichen
PowerPoint 2000: 128 Zeichen
PowerPoint 2002: 128 Zeichen
PowerPoint 2003: 128 Zeichen

In Visual Basic-Projekten dagegen kann der Projektname maximal 40 Zeichen lang sein.

Weitere Informationen zu VBA- und VB-Projekten finden Sie auf der Seite Limitationen in VBA- und VB-Projekten.

5 Maximale Länge eines Prozedurnamens in Excel-VBA Excel 97:    255 Zeichen
Excel 2000: 255 Zeichen

Excel 2002: 255 Zeichen
Excel 2003: 255 Zeichen

Achtung:
Das Feld "Makroname" auf dem Excel-Dialogfenster "Makro" kann maximal 255 Zeichen darstellen. Wenn ein Projekt zwei zwei gleichnamige Prozeduren enthält (in verschiedenen Modulen; was erlaubt ist), so versucht Excel, Datei- und Modulname dem Prozedurnamen voranzustellen, damit eindeutig erkennbar ist, wo sich die beiden Prozeduren befinden. Bei einem sehr langen Prozedurnamen wird die Kombination aus Datei-/Modul-/Prozedurname länger als 255 Zeichen, was zum sofortigen Absturz von Microsoft Excel führt! Aus diesem Grund sollte man nicht übermässig lange Prozedurnamen verwenden. Das gilt auch für Dateinamen und Modulnamen.

Siehe auch Limitation-ID 6.

6 Maximale Länge eines Prozedurnamens in Word-VBA Word 97:    80 Zeichen
Word 2000: 80 Zeichen

Word 2002: 80 Zeichen
Word 2003: 80 Zeichen

Anmerkung des Autors:
Die Spezifikation von 80 Zeichen ist meiner Meinung nach falsch, obwohl sie einer Microsoft-Dokumentation entnommen wurde. Man kann problemlos Prozedurnamen von bis zu 255 Zeichen Länge verwenden. Das kann man auch selber überprüfen, indem man ganz einfach testhalber einen mehr als 80 Zeichen langen Prozedurnamen benutzt. Es treten weder Fehler noch irgend welche andere Probleme auf. Aus technischer Sicht ist es meiner Ansicht nach eigentlich nur logisch, dass 255 Zeichen lange Prozedurnamen funktionieren. Auch Microsoft Excel erlaubt derartige Prozedurnamen; und Microsoft Word und Microsoft Excel besitzen den gleichen VBA-Editor bzw. den gleichen VBA-Sprachinterpreter.

Siehe auch Limitation-ID 5.

7 Maximale Anzahl von Rückgängig-Stufen im VBA-Editor VBA-Editor Excel 97:    20 Stufen
VBA-Editor Excel 2000: 20 Stufen
VBA-Editor Excel 2002: 20 Stufen (Inoffiziell)

VBA-Editor Excel 2003: 20 Stufen (Inoffiziell)

VBA-Editor Word 97:    20 Stufen
VBA-Editor Word 2000: 20 Stufen
VBA-Editor Word 2002: 20 Stufen (Inoffiziell)

VBA-Editor Word 2003: 20 Stufen (Inoffiziell)

VBA-Editor PowerPoint 97:    20 Stufen
VBA-Editor PowerPoint 2000: 20 Stufen
VBA-Editor PowerPoint 2002: 20 Stufen (Inoffiziell)

VBA-Editor PowerPoint 2003: 20 Stufen (Inoffiziell)

Genau genommen besitzt der VBA-Editor zwei voneinander unabhängige Undo-Speicher, die je 20 Befehle aufnehmen können. Der eine Undo-Speicher ist für Codemodule zuständig und der andere für Benutzerformulare. Das bedeutet, dass im Grunde genommen insgesamt 40 Aktionen rückgängig gemacht werden können.

Die Anzahl von 20 Stufen im VBA-Editor ist fest im Programm abgelegt und somit nicht veränderbar. In der Anwendung Microsoft Excel selbst stehen standardmässig 16 Rückgängig-Ebenen zur Verfügung, wobei diese Anzahl anhand eines Windows Registry-Eintrages geändert werden kann.

Informationen zur Rückgängig-Limitation in Microsoft Excel finden Sie unter Limitation-ID 40: Maximale Anzahl von Rückgängig-Stufen.

Weitere Informationen siehe Artikel xllimit9 'Anzahl von Rückgängig-Ebenen'.

8 Maximale Länge des Codes im Visual Basic Script Editor von Outlook 97 32 KB

Bei einer durchschnittlichen Länge einer Codezeile von 25 Zeichen erreicht man die 32 KB Grenze nicht, selbst wenn man 1'000 Zeilen Code programmiert. Das Limitationsproblem kann anhand eines Hotfixes behoben werden. Zudem wurde dieses Problem in Outlook 97 Version 8.02 behoben.

9 Maximale Länge einer Zeichenfolge fester Länge in Access 2000-VBA 65'535 Bytes
10 Maximale Länge einer Zeichenfolge fester Länge in Excel-VBA Excel 97:    65'529 Zeichen, ca. 64 KB, ca. 216
Excel 2000: 65'529 Zeichen, ca. 64 KB, ca. 216
Excel 2002: 65'529 Zeichen, ca. 64 KB, ca. 216 (Inoffiziell)

Excel 2003: 65'529 Zeichen, ca. 64 KB, ca. 216 (Inoffiziell)

In mehreren Dokumentationen steht, dass eine Zeichenfolge fester Länge bis zu 65'529 Zeichen lang sein kann. Diese Information ist meiner Meinung nach falsch. In Microsoft Excel 97 beispielsweise kann die Zeichenfolge maximal 65'526 Zeichen lang sein. Wird eine grössere Zahl in der Variablendeklaration verwendet, erscheint der Fehler "Fehler beim Kompilieren: Ungültige Länge für Zeichenfolge fester Länge".

11 Maximale Länge einer Zeichenfolge variabler Länge in Excel-VBA Excel 97:    ca. 2 Milliarden, 231
Excel 2000: ca. 2 Milliarden, 231
Excel 2002: ca. 2 Milliarden, 231 (Inoffiziell)

Excel 2003: ca. 2 Milliarden, 231 (Inoffiziell)
12 Maximale Länge einer Zeichenfolge variabler oder fester Länge in Word-VBA Word 97:    65'280 Zeichen, ca. 64 KB, ca. 216
Word 2000: 65'280 Zeichen, ca. 64 KB, ca. 216
Word 2002: 65'280 Zeichen, ca. 64 KB, ca. 216 (Inoffiziell)

Word 2003: 65'280 Zeichen, ca. 64 KB, ca. 216 (Inoffiziell)

In einem Microsoft Knowledge Base-Artikel ist angegeben, dass eine Zeichenfolge fester Länge maximal 65'280 Zeichen lang sein darf. Diese Information ist meiner Meinung nach falsch. In Microsoft Word 97 beispielsweise kann die Zeichenfolge bis zu 65'526 Zeichen lang sein. Wird eine grössere Zahl in der Variablendeklaration verwendet, erscheint der Fehler "Fehler beim Kompilieren: Ungültige Länge für Zeichenfolge fester Länge".

13 Maximale Anzahl Argumente, die einem Makro, einer Sub-Prozedur oder einer Funktion übergeben werden können in Excel-VBA Excel 97:    30 Argumente
Excel 2000: 30 Argumente
Excel 2002: 30 Argumente

Excel 2003: 30 Argumente

Siehe auch Limitation-ID 14.

14 Maximale Anzahl Argumente, die einer Sub-Prozedur oder einer Funktion übergeben werden können in Word-VBA Word 97:    20 Argumente
Word 2000: 20 Argumente
Word 2002: 20 Argumente (Inoffiziell)

Word 2003: 20 Argumente (Inoffiziell)

Laut den offiziellen Produkt-Spezifikationen von Microsoft Word ist es tatsächlich so, dass maximal 20 Argumente übergeben werden können. Das ist eigentlich überraschend, weil Microsoft Excel bis zu 30 Argumente verarbeiten kann; und Microsoft Word und Microsoft Excel besitzen den gleichen VBA-Editor bzw. den gleichen VBA-Sprachinterpreter.

Siehe auch Limitation-ID 13.

Weitere Informationen über Microsoft Word- und Word-VBA-Limitationen siehe Seite Limitationen in Microsoft Word.

15 Maximale Anzahl Zeichen, die während der Makroaufzeichnung in eine Zelle oder in ein eingebettetes Objekt eingegeben werden können Excel 97:    255 Zeichen
Excel 2000: 255 Zeichen
Excel 2002: 255 Zeichen (Inoffiziell)

Excel 2003: 255 Zeichen (Inoffiziell)

Wenn während der Makroaufzeichnung mehr als 255 Zeichen in eine Zelle eingetragen werden, erscheint die Fehlermeldung "Kann nicht aufzeichnen". Die Eingabe wird von Excel zwar entgegengenommen, aber der dazugehörende VBA-Code nicht generiert.

Bei Objekten tritt die Fehlermeldung nicht konsequent auf. Bei Eingabe eines mehr als 255 Zeichen langen Textes in ein Textfeld (Symbolleiste "Zeichnen") wird der VBA-Code fehlerlos generiert (Anmerkung des Autors: Allerdings ist das Textfeld kein eingebettetes Objekt im eigentlichen Sinne). Bei Eingabe eines langen Textes in ein Textfeld der Steuerelement-Toolbox (Symbolleiste "Steuerelement-Toolbox") erscheint keine Fehlermeldung. Es wird aber auch kein VBA-Code generiert.

Informationen zur verwandten Excel-Limitation finden Sie unter Limitation-ID 129: Maximale Anzahl Zeichen, die während der Makroaufzeichnung in eine Zelle eingetragen werden können.

16 Länge des Schlüssels des Passwortes eines VBA-Projektes Excel 97:    40 Bit
Excel 2000: 40 Bit
Excel 2002: 40 Bit (Inoffiziell)

Excel 2003: 40 Bit (Inoffiziell)

Passwörter von VBA-Projekten verwenden eine 40 Bit-Verschlüsselung.

17 Maximale Länge des Passwortes eines VBA-Projektes Excel 97:    32 Zeichen
Excel 2000: 32 Zeichen
Excel 2002: 32 Zeichen

Excel 2003: 32 Zeichen

Word 97:    32 Zeichen
Word 2000: 32 Zeichen
Word 2002: 32 Zeichen

Word 2003: 32 Zeichen

PowerPoint 97:    32 Zeichen
PowerPoint 2000: 32 Zeichen
PowerPoint 2002: 32 Zeichen

PowerPoint 2003: 32 Zeichen

Wenn Sie versuchen mit der Brute Force-Technik ein Passwort herauszufinden (d.h. Durchprobieren sämtlicher Zeichenkombinationen), so werden Sie eine nicht-lineare Zunahme der benötigten Zeit feststellen, je länger das Passwort ist.

Ein interessantes Beispiel dazu finden Sie in Anmerkung V2.

18 Tab-Schrittweite Excel 97:    1 bis 32 Leerzeichen
Excel 2000: 1 bis 32 Leerzeichen
Excel 2002: 1 bis 32 Leerzeichen
Excel 2003: 1 bis 32 Leerzeichen

Word 97:    1 bis 32 Leerzeichen
Word 2000: 1 bis 32 Leerzeichen
Word 2002: 1 bis 32 Leerzeichen
Word 2003: 1 bis 32 Leerzeichen

PowerPoint 97:    1 bis 32 Leerzeichen
PowerPoint 2000: 1 bis 32 Leerzeichen
PowerPoint 2002: 1 bis 32 Leerzeichen
PowerPoint 2003: 1 bis 32 Leerzeichen

Weitere Informationen siehe Anmerkung V3.

19 Maximale Anzahl Leerzeichen vor einem VBA-Befehl Excel 97:    256 Leerzeichen
Excel 2000: 256 Leerzeichen
Excel 2002: 256 Leerzeichen
Excel 2003: 256 Leerzeichen

Word 97:    256 Leerzeichen
Word 2000: 256 Leerzeichen
Word 2002: 256 Leerzeichen
Word 2003: 256 Leerzeichen

PowerPoint 97:    256 Leerzeichen
PowerPoint 2000: 256 Leerzeichen
PowerPoint 2002: 256 Leerzeichen
PowerPoint 2003: 256 Leerzeichen

Wenn in einer Codezeile mehr als 256 Leerzeichen vor einem VBA-Befehl stehen, wird der VBA-Befehl automatisch auf die nächste Zeile geschrieben.

20 Breite/Höhe des Formularrasters Excel 97:    2 bis 60 Rastereinheiten
Excel 2000: 2 bis 60 Rastereinheiten
Excel 2002: 2 bis 60 Rastereinheiten
Excel 2003: 2 bis 60 Rastereinheiten

Word 97:    2 bis 60 Rastereinheiten
Word 2000: 2 bis 60 Rastereinheiten
Word 2002: 2 bis 60 Rastereinheiten
Word 2003: 2 bis 60 Rastereinheiten

PowerPoint 97:    2 bis 60 Rastereinheiten
PowerPoint 2000: 2 bis 60 Rastereinheiten
PowerPoint 2002: 2 bis 60 Rastereinheiten
PowerPoint 2003: 2 bis 60 Rastereinheiten

21 Maximale Zeilenlänge im Direktfenster Excel 97:    1'023 Zeichen
Excel 2000: 1'023 Zeichen
Excel 2002: 1'023 Zeichen
Excel 2003: 1'023 Zeichen

Word 97:    1'023 Zeichen
Word 2000: 1'023 Zeichen
Word 2002: 1'023 Zeichen
Word 2003: 1'023 Zeichen

PowerPoint 97:    1'023 Zeichen
PowerPoint 2000: 1'023 Zeichen
PowerPoint 2002: 1'023 Zeichen
PowerPoint 2003: 1'023 Zeichen

22 Maximale Schriftgrösse im Codefenster Excel 97:    23 Punkte
Excel 2000: 23 Punkte
Excel 2002: 23 Punkte
Excel 2003: 23 Punkte

Word 97:    23 Punkte
Word 2000: 23 Punkte
Word 2002: 23 Punkte
Word 2003: 23 Punkte

PowerPoint 97:    23 Punkte
PowerPoint 2000: 23 Punkte
PowerPoint 2002: 23 Punkte
PowerPoint 2003: 23 Punkte

23 Maximale Länge eines Seitentitels in der Werkzeugsammlung Excel 97:    30'000 Zeichen
Excel 2000: 30'000 Zeichen
Excel 2002: 30'000 Zeichen
Excel 2003: 30'000 Zeichen

Word 97:    30'000 Zeichen
Word 2000: 30'000 Zeichen
Word 2002: 30'000 Zeichen
Word 2003: 30'000 Zeichen

PowerPoint 97:    30'000 Zeichen
PowerPoint 2000: 30'000 Zeichen
PowerPoint 2002: 30'000 Zeichen
PowerPoint 2003: 30'000 Zeichen

Siehe auch Limitation-ID 24.

24 Maximale Länge einer Seiten-Steuerelement-Info in der Werkzeugsammlung Excel 97:    30'000 Zeichen
Excel 2000: 30'000 Zeichen
Excel 2002: 30'000 Zeichen
Excel 2003: 30'000 Zeichen

Word 97:    30'000 Zeichen
Word 2000: 30'000 Zeichen
Word 2002: 30'000 Zeichen
Word 2003: 30'000 Zeichen

PowerPoint 97:    30'000 Zeichen
PowerPoint 2000: 30'000 Zeichen
PowerPoint 2002: 30'000 Zeichen
PowerPoint 2003: 30'000 Zeichen

Siehe auch Limitation-ID 23.

25 Maximale Anzahl Seiten in der Werkzeugsammlung Excel 97:    mindestens 50 Seiten
Excel 2000: mindestens 50 Seiten
Excel 2002: mindestens 50 Seiten
Excel 2003: mindestens 50 Seiten

Anmerkung des Autors:
Sehr wahrscheinlich kann die Werkzeugsammlung erheblich mehr als 50 Seiten besitzen. Die maximale Anzahl findet man nur durch Ausprobieren heraus. Da kaum irgend jemand mehr als ungefähr 10 Seiten benutzen wird, habe ich meinen Test bei 50 Seiten abgebrochen.

26 Höchste erlaubte Kontext-ID für die Hilfedatei Excel 97:    2'147'483'647 (Long Integer)
Excel 2000: 2'147'483'647 (Long Integer)
Excel 2002: 2'147'483'647 (Long Integer)
Excel 2003: 2'147'483'647 (Long Integer)
27 Maximale Länge des Schriftartennamens der in Codefenstern verwendeten Schriftart Excel 97:    Je nach Buchstabenbreite unterschiedlich
Excel 2000: Je nach Buchstabenbreite unterschiedlich
Excel 2002: Je nach Buchstabenbreite unterschiedlich
Excel 2003: Je nach Buchstabenbreite unterschiedlich

Die Schriftart wird im Optionenfenster, Registerseite "Editor-Format" im Kombinationsfeld "Schriftart" festgelegt. Da das Feld eine Proportionalschrift verwendet, ist die maximale Länge des Schriftartennamens unterschiedlich. Bei vielen schmalen Zeichen (z.B. Buchstaben i, l und j) kann der Name länger sein als bei vielen breiten Zeichen (z.B. Buchstaben w und m).

28 Maximale Länge eines Überwachungsausdrucks Excel 97:    1'023 Zeichen
Excel 2000: 1'023 Zeichen
Excel 2002: 1'023 Zeichen
Excel 2003: 1'023 Zeichen

To Top

 


Anmerkungen zu VBA-Editor-Limitationen

Nachfolgend finden Sie Zusatzinformationen über verschiedene wichtige Limitationen im VBA-Editor.

To Top


[V1]  Maximale Anzahl Steuerelemente auf einem Benutzerformular
Ein VBA-Benutzerformular kann praktisch unbegrenzt viele Steuerelemente aufnehmen. In Bezug auf das Ansprechen von Steuerelementen mittels VBA gibt es jedoch eine wichtige Limitation in den Microsoft Office-Programmen Excel, Word und PowerPoint der Version 97 und 2000 (Anmerkung des Autors: Ob auch Microsoft Office XP/2002 und 2003 betroffen sind, konnte noch nicht herausgefunden werden):

Obwohl praktisch unbegrenzt viele Steuerelemente auf einem Benutzerformular angeordnet werden dürfen, können nur die ersten 411 Steuerelemente, die hinzugefügt wurden, mit VBA-Code direkt angesprochen werden können. Wird im Code ein Steuerelement direkt referenziert, welches nach dem 411. Steuerelement hinzugefügt wurde, so stürzt Microsoft Excel sofort ab.

Eine direkte Referenzierung erfolgt über den Objektnamen, also z.B. "TextBox450" bei einem TextBox-Steuerelement.

Die Anzahl Steuerelemente eines Benutzerformulares können Sie unter anderem im Direktfenster des VBA-Editors anhand der Anweisung

?UserForm1.Controls.Count

sehr einfach abfragen. Beachten Sie bitte, dass durch diese Abfrage das VBA-Projekt vorübergehend in den Ausführungsmodus (Run Time Mode) versetzt wird. Das bedeutet, dass das Initialize-Ereignis der UserForm ausgelöst und der in dieser Ereignisprozedur enthaltene Programmcode ausgeführt wird. Das Terminate-Ereignis dagegen wird nicht ausgeführt, und auch andere Formular-Ereignisse wie Form_Activate, Form_Deactivate und Form_QueryClose bleiben unbeachtet. Sie sollten den in der Prozedur Form_Initialize stehenden Programmcode zuerst auskommentieren (am einfachsten über die VBA-Editor-Schaltfläche "Block auskommentieren") oder auf der ersten Codezeile die Anweisung "Exit Sub" einfügen, damit der Programmcode nicht ausgeführt wird. Das Einschalten des Entwurfsmodus zeigt in diesem Fall keine Wirkung (er deaktiviert normalerweise Ereignisse), da die Abfrage im Direktfenster den Laufzeitmodus aktiviert und somit den Entwurfsmodus ausschaltet.

Es existieren mehrere Lösungsvarianten, wie man das Problem mit der direkten Steuerelement-Referenzierung beheben bzw. umgehen kann:

1. Verteilen Sie die Steuerelemente auf mehrere Benutzerformulare
Verschieben Sie so lange Steuerelemente auf andere, neue Benutzerformulare, bis das Formular weniger als 412 Steuerelement besitzt. Bei 411 oder weniger Steuerelementen tritt die oben beschriebene Problematik nicht auf.

2. Reorganisieren Sie die Reihenfolge der Steuerelemente
Verschieben Sie diejenigen Steuerelemente in die Zwischenablage, die Sie nicht mit VBA-Code ansprechen. Fügen Sie anschliessend die Controls aus der Zwischenablage in Benutzerformular ein. Dadurch ändert sich die Reihenfolge der hinzugefügten Steuerelemente. Wenn Sie beispielsweise zuerst ein Bezeichnungsfeld und danach ein Textfeld der UserForm hinzufügen, besitzt das Bezeichnungsfeld die Nummer 1 und das Textfeld die Nummer 2 in der internen Reihenfolge der hinzugefügten Controls. Wird das Bezeichnungsfeld ausgeschnitten, erhält das Textfeld die Nummer 1, da das ehemalige Steuerelement mit der Nummer 1 nicht mehr existiert. Wenn Sie dann das Bezeichnungsfeld aus der Zwischenablage wieder einfügen, erhält es automatisch die Nummer 2 (bzw. es wird ans Ende der internen Steuerelement-Liste gestellt).

Oft befinden sich auf einem Benutzerformulare mehrere Steuerelemente, die nicht aktiv im VBA-Code angesprochen werden, da sie nur zur Ausgabe von statischen Daten verwendet werden. Es handelt sich dabei gewöhnlich um Steuerelemente vom Typ Bezeichnungsfeld (Label) und Anzeige (Image). Angenommen das Bezeichnungsfeld "Label67" wird nicht im Programmcode angesprochen, so kann es via Zwischenablage ausgeschnitten und neu eingefügt werden. Bei diesem Control spielt es nämlich keine Rolle, ob es das 67-ste, das 412-te oder das 600-ste hinzugefügte Steuerelement ist.

Mit dieser VBA-Prozedur können Sie den Control-Index eines bestimmten Steuerelementes herausfinden (Beispiel "Label67"):

Sub GetControlIndex()
  Dim intControl As Integer
  For intControl = 0 To UserForm1.Controls.Count - 1
    If UserForm1.Controls(intControl).Name = "Label67" Then
      MsgBox "Label67: Index " & CStr(intControl)
      Exit Sub
    End If
  Next intControl

End Sub

Wenn die angezeigte Indexnummer kleiner als 411 ist und das Benutzerformular mehr als 411 Steuerelemente enthält, kann "Label67" wie oben beschrieben ausgeschnitten und neu eingefügt werden.

3. Verwenden Sie die indirekte Steuerelement-Referenzierung
Sie können sämtliche Steuerelemente eines Benutzerformulares indirekt ansprechen, ohne dass das Office-Programm abstürzt. Die indirekte Referenzierung erfolgt anhand der Controls-Auflistung, indem man den Control-Index angibt. Beispielsweise diese Anweisung funktioniert fehlerfrei:

UserForm1.Controls(450).Text = "Hallo"

- oder -

UserForm1.Controls.Item(450).Text = "Hallo"

Die Zuweisung des Textes "Hallo" ist allerdings nur möglich, wenn es sich beim Control mit dem Index 450 um ein Steuerelement handelt, welches die Eigenschaft "Text" kennt (i.d.R. Steuerelement-Typ "TextBox"). Beachten Sie zudem, dass der Index bei 0 beginnt, d.h. dass das Control mit dem Index 450 das 451-ste Control auf dem Benutzerformular darstellt.

Auch For-Each-Schleifen funktionieren problemlos. Hier ein Beispiel zum Ausgeben der Steuerelement-Namen:

Sub GetControlNames()
  Dim ctlControl As Control
  For Each ctlControl In UserForm1.Controls
    MsgBox ctlControl.Name
  Next
End Sub

Da jedes Steuerelement über die Name-Eigenschaft verfügt, funktioniert die obige Prozedur ohne Fehler. Wenn Sie auf eine Eigenschaft zugreifen möchten, die nicht bei jedem Steuerelement vorhanden ist, müssen Sie prüfen, um was für einen Typ Steuerelement es sich handelt. Mit der TypeName-Funktion kann der Typ eines Steuerelementes festgestellt werden. Das folgende Beispiel zeigt, wie man Bezeichnungsfelder, Schaltflächen und Textfelder korrekt behandelt:

Sub GetControlTextOrCaption()
  Dim ctlControl As Control
  For Each ctlControl In UserForm1.Controls
    If TypeName(ctlControl) = "TextBox" Then
      MsgBox ctlControl.Text
    ElseIf TypeName(ctlControl) = "Label" Or TypeName(ctlControl) = "CommandButton" Then
      MsgBox ctlControl.Caption
    End If
  Next
End Sub

Hinweis
Das Exportieren und Importieren einer UserForm bringt keinen Erfolg, da sich dadurch die Reihenfolge der auf einem Benutzerformular hinzugefügten Steuerelemente nicht ändert. Auch das Bereinigen des VBA-Projektes mit den Tools Code Cleaner oder vbClear hilft nicht.

Die beiden erwähnten Tools sind Freeware-Programme und können auf der Downloadseite heruntergeladen werden:

 Hier gehts zur Downloadseite

Anmerkung
In Visual Basic-Projekten kann ein Formular (Form) maximal 254 Steuerelemente enthalten, sofern keine so genannten Steuerelement-Arrays verwendet werden. Jedes Steuerelement-Array kann bis zu 32'768 Steuerelemente aufnehmen.

Weitere Informationen über Steuerelemente in Visual Basic-Projekten erhalten Sie hier:

Weitere Informationen

Limitationen von UserForms und Controls

To Top


[V2]  Maximale Länge des Passwortes eines VBA-Projektes
Je nach Länge des gewählten Passwortes nimmt der Zeitaufwand zum Ausprobieren sämtlicher möglichen Zeichenkombinationen überproportional zu.

Ausprobieren aller Kombinationsmöglichkeiten
Nehmen wir einmal an, als gültige Zeichen für das Passwort sind alle Buchstaben, Ziffern und 10 Sonderzeichen (Plus-Zeichen, Bindestrich usw.) zugelassen. Das ergibt 46 verschiedene mögliche Zeichen: 26 Buchstaben (A-Z), 10 Ziffern (0-9) sowie 10 Sonderzeichen.

Als Performance zum Durchprobieren der Kombinationen nehmen wir einen Durchsatz von 100 Möglichkeiten pro Sekunde an, was zwar ein eher optimistischer Wert ist, aber mit sauber programmiertem VBA-Code und einer schneller CPU erreicht werden kann. Gäbe es also 1'000 Möglichkeiten für das Zusammensetzen der zugelassenen Zeichen für ein Passwort, so würde man 10 Sekunden benötigen, um alle Kombinationen auszuprobieren. Es gibt allerdings bedeutend mehr als nur 1'000 Möglichkeiten, wie die folgenden Rechenbeispiele zeigen.

Zweistelliges Passwort
Ein zweistelliges Passwort umfasst 2'116 Kombinationsmöglichkeiten (=46*46 bzw. 46^2).
Das Ausprobieren aller Kombinationen dauert 21.16 Sekunden.

Dreistelliges Passwort
Ein dreistelliges Passwort umfasst 97'336 Kombinationsmöglichkeiten (=46*46*46 bzw. 46^3).
Das Ausprobieren aller Kombinationen dauert 973.36 Sekunden oder 16.22 Minuten.

Vierstelliges Passwort
Ein vierstelliges Passwort umfasst 4'477'456 Kombinationsmöglichkeiten (=46*46*46*46 bzw. 46^4).
Das Ausprobieren aller Kombinationen dauert 44'774.56 Sekunden oder 746.24 Minuten oder 12.43 Stunden.

Fünfstelliges Passwort
Ein fünfstelliges Passwort umfasst 205'962'976 Kombinationsmöglichkeiten (=46*46*46*46*46 bzw. 46^5).
Das Ausprobieren aller Kombinationen dauert 2'059'629.76 Sekunden oder 34'327.16 Minuten oder 572.12 Stunden oder 23.83 Tage.

Sechsstelliges Passwort
Ein sechsstelliges Passwort umfasst 9'474'296'896 Kombinationsmöglichkeiten (=46*46*46*46*46*46 bzw. 46^6).
Das Ausprobieren aller Kombinationen dauert 94'742'968.96 Sekunden oder 1'579'049.48 Minuten oder 26'317.49 Stunden oder 1'096.56 Tage oder 3.01 Jahre.

Zehnstelliges Passwort
Ein zehnstelliges Passwort umfasst 42'420'747'482'776'576 Kombinationsmöglichkeiten (=46^10).
Das Ausprobieren aller Kombinationen dauert 424'207'474'827'765.76 Sekunden oder 7'070'124'580'462.76 Minuten oder 117'835'409'674.37 Stunden oder 4'909'808'736.43 Tage oder 13'455'030.78 Jahre.

Fünfzehnstelliges Passwort
Ein fünfzehnstelliges Passwort umfasst 8'737'103'395'697'172'336'050'176 Kombinationsmöglichkeiten (=46^15).
Das Ausprobieren aller Kombinationen dauert 2'770'517'312'182'005.43 Jahre.
Anmerkung: Würde man jede Kombination in eine Zelle eines Excel-Tabellenblattes eintragen (ein Tabellenblatt umfasst 16'777'216 Zellen; 256 Spalten * 65'536 Zeilen), so würde man über 520'771'944'266'389'151 Tabellenblätter füllen.

Schlussbemerkung
Die obigen Beispiele gehen davon aus, dass 46 verschiedene Zeichen für ein Passwort erlaubt sind. Wäre auch nur ein einziges Zeichen mehr erlaubt, also insgesamt 47 Zeichen, so würde man zusätzliche 1'054'745'356'140'029.14 Jahre benötigen, d.h. total 3'825'262'668'322'034.57 Jahre, um ein fünfzehnstelliges Passwort durchzuprobieren.

In der Realität können nicht nur 46 bzw. 47 Zeichen verwendet werden sondern ca. 72 verschiedene Zeichen, da die 26 Buchstaben A bis Z in Gross- und Kleinschrift geschrieben werden können.

To Top


[V3]  Erlaubte Tab-Schrittweite
Wird eine Schrittweite gewählt, die nicht im Bereich von 1 bis 32 liegt, erscheint folgende Fehlermeldung:

Tab-Schrittweite
Abbildung: Tab-Schrittweite muss im Bereich von 1 bis 32 liegen

To Top

 


Fehlermeldungen des VBA-Editors infolge Überschreiten einer Limitation

Allgemeines

Vor allem wenn ein VBA-Projekt zu gross wird oder zu viele Variablen enthält, tritt eine Fehlermeldung auf. Der VBA-Editor kennt in diesem Zusammenhang sechs verschiedene Fehlermeldungen, die nachfolgend vorgestellt werden.

To Top


Meldung: "Unveränderliche oder statische Daten können maximal 64 KB umfassen"

Konstante und statische Daten umfassen nicht automatische Variablen, Zeichenfolgen fester Länge und Datenfelder fester Grösse. Für diesen Fehler gibt es die folgenden Ursachen und Lösungen:

To Top


Meldung: "Zu viele lokale, nichtstatische Variablen"

Lokale, nichtstatische Variablen sind Variablen, die in einer Prozedur definiert und bei jedem Aufruf der Prozedur neu initialisiert werden. Für diesen Fehler gibt es die folgende Ursache und Lösung:

To Top


Meldung: "Die Zielmarke kann nicht angesprungen werden; Schleife, Select Case oder If-Block ist zu gross"

Prozeduren dürfen von Anfang bis Ende maximal 64 KB umfassen, aber da Sprünge innerhalb einer Prozedur vorwärts oder rückwärts erfolgen können, sind derartige Sprünge auf 32'767 Bytes in beiden Richtungen beschränkt. Für diesen Fehler gibt es die folgenden Ursachen und Lösungen:

To Top


Meldung: "Prozedur zu gross"

Der kompilierte Code einer Prozedur darf 64 KB nicht überschreiten. Für diesen Fehler gibt es die folgende Ursache und Lösung:

To Top


Meldung: "Zu viele Variablen auf Modulebene"

Variablen auf Modulebene werden im Deklarationsabschnitt eines Moduls vor den Prozeduren des Moduls deklariert. Für diesen Fehler gibt es die folgende Ursache und Lösung:

Anmerkung
Der verfügbare Speicherplatz kann bei den unterschiedlichen Betriebssystemen variieren.

To Top


Meldung: "Nicht genügend Speicher. Einige Überwachungsausdrücke können gelöscht worden sein"

Wenn Ihrem System nicht mehr genügend Speicher zur Verfügung steht, wird Speicherplatz durch Löschen von Überwachungsausdrücken bereitgestellt, damit die Ausführung fortgesetzt werden kann. Für diesen Fehler gibt es die folgende Ursache und Lösung:

Wenn Sie Ihre Arbeit fortsetzen möchten, entfernen Sie alle nicht benötigten Elemente aus dem Speicher, einschliesslich nicht benötigter Anwendungen, Projekte oder Module, die geladen sein könnten.

To Top


Haben Sie Fragen, Anregungen oder einen Fehler entdeckt?
Kontakt zum Autor

Zuletzt aktualisiert am 26.01.2006 / 19:00 Uhr
Zuletzt kontrolliert am 22.12.2008 / 07:00 Uhr
© 2002-2009 by Philipp von Wartburg, Schweiz
Alle Rechte vorbehalten