Home HomeXLimits - Hauptseite


Limitationen in VBA- und VB-Projekten

Inhaltsübersicht

Allgemeines über Limitationen in VBA- und VB-Projekten

Übersicht der Limitationen in VBA- und VB-Projekten

   Projekt-Limitationen

   Programmcode-Limitationen

   Daten-Limitationen

   Formular-Limitationen

   Steuerelement-Limitationen

   Systemressourcen-Limitationen

Bezeichner-Limitationen in einer DBCS-Umgebung

Systemvoraussetzungen für Visual Basic-Anwendungen


Allgemeines über Limitationen in VBA- und VB-Projekten

Visual Basic-Projekte (VB-Projekte) und Visual Basic für Applikationen-Projekte (VBA-Projekte) besitzen eine ganze Reihe Limitationen, die ich auf dieser Seite vorstellen möchte.

Da der in Microsoft Office-Programmen integrierte VBA-Editor (VBE/Visual Basic Environment) und die Entwicklungsumgebung von Visual Basic (VB IDE/Visual Basic Integrated Development Environment) sehr viele Gemeinsamkeiten besitzen, gelten die hier beschriebenen Limitationen sowohl für die Visual Basic IDE als auch für den VBA-Editor, sofern nicht anders vermerkt. Die Spezifikationen für Steuerelemente dagegen unterscheiden sich praktisch in allen Merkmalen, weil diese Elemente aus technischer Sicht ganz verschieden implementiert sind. Diese Limitationen werden daher auf der separaten Themenseite Limitationen von UserForms und Controls vorgestellt.

Informationen über verwandte Themen finden Sie hier:

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 von UserForms und Controls stehen auf dieser Seite:
Limitationen von UserForms und Controls

To Top

 


Übersicht der Limitationen in VBA- und VB-Projekten

Projekt-Limitationen

In diesem Kapitel werden die Limitationen für Projekte vorgestellt.

To Top


Projektmerkmale

» Ein einzelnes Projekt kann bis zu ca. 32'000 Identifiers (Bezeichner, d.h. nicht-reservierte Schlüsselwörter) besitzen, die unter anderem Formulare, Steuerelemente, Module, Variablen, Konstanten, Prozeduren, Funktionen und Objekte umfassen.

» Variablennamen können maximal 255 Zeichen lang sein. Namen für Formulare, Steuerelemente, Module und Klassen dürfen bis zu 40 Zeichen lang sein.

» Visual Basic besitzt keine Limitation bezüglich Anzahl unterschiedlicher Objekte in einem Projekt.

» In Visual Basic können beliebig viele Projekte gleichzeitig geöffnet sein. Die maximale Anzahl ist nur durch die verfügbaren Systemressourcen begrenzt.

» Eine als ausführbare Datei (exe-Datei) kompilierte Visual Basic-Anwendung benötigt zur Ausführung die Visual Basic Runtime-DLL (MSVBVM50.DLL bei einer Visual Basic 5.0-Anwendung; MSVBVM60.DLL bei einer Visual Basic 6.0-Anwendung). Es können maximal 50 Visual Basic-Anwendungen gleichzeitig auf die gleiche Runtime-DLL zugreifen.

To Top


Zusammenfassung / Übersicht

Merkmal Spezifikation
Maximale Anzahl Identifier (Bezeichner) in einem Projekt 32'000 Bezeichner
Maximale Länge von Variablennamen 255 Zeichen
Maximale Länge von Objektnamen 40 Zeichen
Maximale Anzahl unterschiedlicher Objekte in einem Projekt Unbegrenzt
Maximale Anzahl gleichzeitig geöffnete Projekte Durch die verfügbaren Systemressourcen begrenzt
Maximale Anzahl gleichzeitig ausführbare Visual Basic-Anwendungen 50 Anwendungen
Maximale Länge von VB-Projektnamen 40 Zeichen
Maximale Länge von VBA-Projektnamen 128 Zeichen

 

Fehlermeldung "Projekt enthält zu viele Prozedur-, Variablen- und Konstantennamen" (Excel 97 Visual Basic-Referenz)

In einem Projekt werden die Namen der Prozeduren, Variablen, Konstanten und Parameter in einer Namenstabelle gespeichert. Für diesen Fehler gibt es die folgende Ursache und Lösung:

· Die Namenstabelle des Projekts enthält mehr als 32'768 Namen.

Die Namenstabelle enthält möglicherweise temporäre Duplikate. Komprimieren Sie die Tabelle, indem Sie das Projekt auf einem Datenträger speichern und schliessen. Sollte das Problem weiterhin bestehen, reduzieren Sie die Zahl der Namen, indem Sie lokale Variablennamen in mehreren Prozeduren wiederverwenden und anschliessend die Tabelle komprimieren, indem Sie das Projekt speichern, schliessen und erneut öffnen.

To Top


Programmcode-Limitationen

In diesem Kapitel werden die Limitationen für Programmcode vorgestellt.

To Top


Codezeilen

» Die Codemenge, die in ein Modul (Form, Klasse oder Standard) geladen werden kann, beträgt maximal 65'534 Zeilen.

» Eine einzelne Codezeile kann bis zu 1'023 Bytes lang sein.

» Einer Codezeile können bis zu 256 Leerzeichen vorangestellt werden (Texteinzug).

» Eine logische Codezeile kann bis zu 24 Zeilenfortsetzungszeichen besitzen (ein Leerzeichen, das von einem Unterstrich '_' gefolgt wird; englisch 'line-continuation character'). Folglich kann eine logische Zeile aus maximal 25 physischen Zeilen bestehen.

» Bei 25 physischen Zeilen à 1'023 Bytes kann eine logische Codezeile somit bis zu 25'575 Zeichen lang sein.

Es kann sein, dass eine Codezeile von der Visual Basic Entwicklungsumgebung beziehungsweise vom VBA-Editor nicht akzeptiert wird, obwohl keine der obigen Limitationen erreicht ist. In diesen Fällen ist gewöhnlich die Codezeile zu komplex. Das bedeutet, dass die Anweisung aufgrund ihrer Komplexität nicht interpretiert werden kann. Bereits bei der Eingabe des Codes erscheint diese Fehlermeldung:

Fehlermeldung "Anweisung zu komplex"
Abbildung: Fehlermeldung "Anweisung zu komplex"

To Top


Prozeduren, Typen und Variablen

» Es gibt keine Limitation in Bezug auf die maximale Anzahl Prozeduren pro Modul.

» Ein Prozedurname darf bis zu 255 Zeichen lang sein.

» Jede Prozedur kann bis zu 64 KB Programmcode enthalten. Wenn eine Prozedur diese Limitation überschreitet, tritt ein Kompilierungsfehler auf. Sie können diesen Fehler beheben, indem Sie extrem grosse Prozeduren in mehrere kleine Prozeduren aufteilen. Hier der Kompilierungsfehler:

Fehlermeldung "Prozedur zu gross" (Excel 97 Visual Basic-Referenz)

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

·    Der kompilierte Code für diese Prozedur umfasst mehr als 64 KB.

Teilen Sie diese und andere grosse Prozeduren in zwei oder mehrere kleinere Prozeduren auf.

» Visual Basic verwendet interne Tabellen, in denen die Namen der Bezeichner (Identifier) von Prozeduren, Variablen, Konstanten usw. abgelegt werden. Jede Tabelle ist limitiert auf 64 KB.

To Top


DLL Deklarationen-Tabelle (DLL Declare Table)

» Jedes Formular- und Codemodul besitzt eine interne Tabelle genannt DLL Declare Table, in der eine Struktur der DLL-Einsprungspunkte (DLL Entry Point) gespeichert ist. Ein Einsprungpunkt ist der Name einer DLL-Prozedur oder der Ordinalwert, der die Prozedur darstellt.

» Jede Struktur belegt durchschnittlich ca. 40 Bytes in der Tabelle.

» Die DLL Declare Table kann maximal 64 KB gross sein.

» Bei ca. 40 Byte pro Deklaration und einer maximalen Tabellengrösse von 64 KB sind somit ungefähr 1'500 Deklarationen pro Modul möglich.

 


Projektnamen-Tabelle (Project Name Table)

» Die gesamte VB-Anwendung besitzt eine interne Tabelle, in der sämtliche Namen des Projektes abgelegt sind. Diese Tabelle wird Project Name Table genannt. Zu den in der Tabelle gespeicherten Namen gehören:
- Namen von Konstanten
- Namen von Variablen
- Namen von benutzerdefinierten Typen
- Namen von Modulen
- Namen von DLL Prozedur-Deklarationen

» Es existiert keine Grenze bezüglich der maximalen Grösse der Projektnamen-Tabelle. Die Tabelle kann insofern beliebig viele Einträge aufnehmen.

» Die in der Tabelle eingetragenen Namen sind immer eindeutig, unter Berücksichtigung der Gross-/Kleinschreibung. Es gibt somit keine Duplikate.

» Die Tabelle kann Einträge enthalten, die zusammen bis zu 32 KB gross sind.

» Wenn die Tabellenlimitation von 32 KB erreicht ist, müssen Sie private Bezeichner (Identifier) in mehreren Modulen benutzen, damit die Anzahl verschiedene Bezeichner reduziert und dadurch die Grenze von 32 KB nicht mehr überschritten wird.

To Top


Import-Tabelle (Import Table)

» Jede Referenz auf einen Bezeichner eines anderen Moduls erzeugt einen Eintrag in der internen Import-Tabelle (Import Table).

» Ein solcher Referenz-Eintrag in der Import-Tabelle ist mindestens 24 Bytes lang.

» Die Tabelle kann maximal 64 KB gross sein.

» Bei einer angenommenen durchschnittlichen Eintrag-Länge von 32 Bytes und einer maximalen Tabellengrösse von 64 KB sind somit ca. 2'000 Referenzen pro Modul möglich.

To Top


Moduleinträge-Tabelle (Module Entries Table)

» Es existiert eine interne Tabelle namens Module Entries Table. In dieser Tabelle ist vermerkt, welche Module zum Projekt gehören.

» Die Tabelle kann bis zu 64 KB gross sein.

» Pro eingetragenes Modul werden ca. 125 Bytes benötigt.

» Bei ca. 125 Bytes pro Modul und einer maximalen Tabellengrösse von 64 KB sind somit ungefähr 400 Module pro Projekt möglich.

» Microsoft Access: Ein Access-Projekt kann bis zu 1'000 Module enthalten.

To Top


Daten-Limitationen

In diesem Kapitel werden die Limitationen für Daten vorgestellt.

To Top


Formularmodul-, Standardmodul- und Klassenmodul-Daten

» The data segment (that is, the data defined in the Declarations section) of the VBA module of any form or module in Visual Basic can be up to 64K. This data segment contains the following data:

To Top


Prozeduren, Typen und Variablen

» Wenn eine Prozedur oder ein Modul die 64 KB-Grenze überschreitet, erscheint sofort ein Kompilierungsfehler.

 

» If a procedure or module exceeds the 64K code limit, Visual Basic generates a compile-time error.

» If you define a procedure that has more than 64K of local variables defined, you get the error "Too many local nonstatic variables."

Fehlermeldung "Zu viele lokale, nichtstatische Variablen" (Excel 97 Visual Basic-Referenz)

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:

·    Der erforderliche Gesamtspeicher für die lokalen, nichtstatischen Variablen und Compiler-generierten temporären Variablen überschreitet 32 KB.

Deklarieren Sie, wo dies möglich ist, einige der Variablen mit der Static-Anweisung. Static-Variablen behalten im Gegensatz zu nichtstatischen Variablen zwischen den Prozeduraufrufen ihren Wert, weil ihnen verschiedene Speicherressourcen zugeordnet werden.

» If you define a module that has more than 64K of module-level variables defined, or if you define a User-Defined Type larger than 64K, you get the error "Fixed or static data can't be larger than 64K".

 

Fehlermeldung "Unveränderliche oder statische Daten können maximal 64 KB umfassen" (Excel 97 Visual Basic-Referenz)

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:

·    Sie haben versucht, mehr als 64 KB für Daten auf Modulebene zu reservieren.

Verringern Sie die deklarierte Datenmenge. Obwohl Daten auf Modulebene 64 KB nicht überschreiten dürfen, können Zeichenfolgen variabler Länge und Datenfelder auf Modulebene diesen Wert überschreiten.

·    Sie haben versucht, mehr als 64 KB für statische Daten auf Prozedurebene im Modul zu reservieren.

Verringern Sie die deklarierte Datenmenge dieses Typs. Statische Daten aus allen Prozeduren in einem Modul sind zusammengenommen auf maximal 64 KB beschränkt (nicht auf 64 KB pro Prozedur). Statische Zeichenfolgen variabler Länge und Datenfelder können diesen Wert überschreiten.

·    Die Grösse eines benutzerdefinierten Typs überschreitet 64 KB.

Verringern Sie die Grösse des benutzerdefinierten Typs. Die Grösse eines benutzerdefinierten Typs entspricht im allgemeinen der Summe der einzelnen Elementgrössen. Auf einigen Plattformen können Lücken zwischen den Elementen entstehen, um die Elemente an Wortgrenzen auszurichten. Wenn Sie einen benutzerdefinierten Typ in einem anderen benutzerdefinierten Typ verschachteln, muss ausserdem die Grösse des eingeschlossenen Typs bei der Grösse des neuen Typs berücksichtigt werden.

·    Sie haben versucht, in einer Prozedur eine Variable eines benutzerdefinierten Typs zu deklarieren, die mehr als 32 KB erfordert.

Obwohl die Grössenbeschränkung für Variablen benutzerdefinierter Typen auf Modulebene 64 KB beträgt, dürfen Variablen eines benutzerdefinierten Typs in Prozeduren nicht grösser als 32 KB sein. Verkleinern Sie die Variable des benutzerdefinierten Typs, oder verwenden Sie eine Variable auf Modulebene.

·    Die Länge einer in einer Prozedur deklarierten Zeichenfolge überschreitet 65'464 Zeichen.

Verkürzen Sie die Zeichenfolge fester Länge. Bei Zeichenfolgen variabler Länge gilt diese Einschränkung nicht.

If you encounter this error, you can avoid it by breaking extremely large procedures into several smaller procedures, or by moving module-level declarations into another module.

 

Fehlermeldung "Zu viele Variablen auf Modulebene" (Excel 97 Visual Basic-Referenz)

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:

·    Der erforderliche Gesamtspeicher für alle Variablen auf Modulebene in diesem Modul überschreitet 64 KB.

Dies stellt die Speichergrenze für dieses Modul dar. Sie können gegebenenfalls einige der Variablen als Public in einem anderen Modul deklarieren, oder, wenn einige Variablen auf Modulebene nur in einer Prozedur verwendet werden, können Sie sie in dieser Prozedur deklarieren. Wenn Sie Variablen auf Modulebene deklariert haben, weil sie zwischen Prozeduraufrufen ihren Wert behalten sollen, können diese auch in der Prozedur, in der sich der Verweis befindet, als Static deklariert werden.

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

» An array declared as a variable doesn't contribute to the entire size of the array; only the array descriptor counts toward the 64K limit. So it is acceptable, for example, to have a declaration such as Dim x(1000000) As Byte either in a procedure or at module level. Out of memory problems occur, however, if you declare a large, fixed-size array in a record, then declare instances of those records as variables.

To Top


Benutzerdefinierte Typen (User-Defined Types)

» No variable of a user-defined type can exceed 64K, although the sum of variable-length strings in a user-defined type may exceed 64K (variable-length strings occupy only 4 bytes each in the user-defined type; the actual contents of a string are stored separately). User-defined types can be defined in terms of other user-defined types, but the total size of the types cannot exceed 64K.

To Top


Stapelspeicher (Stack Space)

» Arguments and local variables in procedures take up stack space at run time. Module-level and static variables do not take up stack space because they are allocated in the data segment for forms or modules. Any DLL procedures you call use this stack while they are executing.

» Visual Basic itself uses some of the stack for its own purposes, such as storing intermediate values when evaluating expressions.

» Total available stack size for Visual Basic is one megabyte (1MB) per thread. A stack may grow beyond this, however, if there is adjacent free memory.

To Top


Formular-Limitationen (Forms/UserForms)

Da die Formular-Limitationen in Visual Basic (VB) sich zu denen in Visual Basic für Applikationen (VBA) stark unterscheiden, werden sie auf einer separaten Themenseite ausführlich vorgestellt:

Weitere Informationen

Limitationen von UserForms und Controls

To Top


Steuerelement-Limitationen (Controls)

Auch bei den Limitationen der Steuerelemente in Visual Basic und Visual Basic für Applikationen gibt es nur wenige Gemeinsamkeiten. Sie werden daher ebenfalls auf einer separaten Themenseite vorgestellt:

Weitere Informationen

Limitationen von UserForms und Controls

To Top


Systemressourcen-Limitationen

Some limitations on Visual Basic, and the applications you create with it, are imposed by Microsoft Windows. These limitations may change when you install a different version of Microsoft Windows.

To Top


Windows-Ressourcen (Windows Resources)

Every open window uses some system resources (data areas used by Microsoft Windows). If you run out of system resources, the run-time error "Windows is running low on available resources" occurs. You can check the percentage of system resources remaining by choosing About in the Windows Explorer Help menu in Windows 95/98 and Windows NT 4.0 or later. Applications can also call the Windows API GetFreeSystemResources to reclaim system resources, close windows (such as open forms and Code windows, as well as windows in other applications), and exit running applications.

Weitere Informationen

Excel und Systemressourcen

To Top


Zusätzliche Informationen

Jede einzeilige Textbox belegt im Datensegment 136 Byte Speicher. In der VISUAL BASIC 3.0 Umgebung sind beim Start des obigen Beispiel-Programms noch ca. 25432 Byte frei. Dieser Wert ist bei dem selben Programm als EXE Datei grösser, deshalb können dort auch mehr Textboxen angezeigt werden.

To Top

 


Bezeichner-Limitationen in einer DBCS-Umgebung

DBCS characters are not supported in any of the following identifiers:

To Top

 


Systemvoraussetzungen für Visual Basic-Anwendungen

The following hardware and software is required for Visual Basic applications:

To Top


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

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