Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

sizeof VBA classes

Forumthread: sizeof VBA classes

sizeof VBA classes
12.03.2026 21:05:23
Thomas
Hallo
ich bin in VBA vergeblich auf der Suche für eine Art SizeOf-Funktion und zwar für eine VBA class

Ich mach relativ viel mit classes, aber nun bekomme ich eine recht lange Liste, ca 1000-5000 Einträge, die ich peu a peu abarbeiten, aber für spätere oder Zwischendrinsortierung wenn möglich im Speicher halten will und nach Abarbeitung der ganzen Liste dann die Ergebnisse ausgeben will.
Dazu würde mir jeder Listeneintrag, der sich dann noch zusätzliche Daten von extern lädt eine Klasseninstanz bilden, ich am Ende also ein Array aus bis zu 5000 Klassen hab.

Allerdings bin ich mir nicht sicher, was ich da an Arbeitsspeicher brauche (im Privatbereich hat man genug, in der Firma nicht immer), und dazu möchte ich gern wissen, was eine Class an Arbeitsspeicher benötigt. Wenn das zu viel wäre, müsst ich die Arbeitsschritte aufteilen.
Dazu suche ich eine Art sizeof-Funktion.
Len funktioniert für classes nicht
Kennt jemand so was?
Thomas
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: sizeof VBA classes
12.03.2026 21:40:09
xlKing
Hi Thomas,

was du suchst, gibt's in VBA m.W. nicht. Du musst das schon selbst zusammenrechnen. Jede Klasse enthält im Modulkopf Variablen, die deren Eigenschaften speichern. Wenn du also eine Eigenschaft vom Typ Date und eine vom Typ Long hast sind das schon mal 12 Byte (8 + 4), Dazu kommen z.B. Name-Eigenschaften vom Typ String die bei einer typischen Maximal-Länge von 20 Zeichen nochmal 30 Byte ausmachen. Addiere also alle Speichervariablen der Klasse (8+4+30) Addiere dann nochmal 4 Byte für den eigentlichen Objektverweis obendrauf der dann in deinem Array oder einer Collection abgelegt wird und multipliziere das Ergebnis mit 5000. im Beispiel mindestens 225 MB (230.000 / 1024). Das ist dein Arbeitsspeicher.

Welcher Datentyp wieviel Speicher benötigt, gehört zu den Grundkenntnissen und steht u.a. hier: https://learn.microsoft.com/de-de/office/vba/language/reference/user-interface-help/data-type-summary

Gruß Mr. K.
Anzeige
AW: sizeof VBA classes
13.03.2026 00:14:34
snb
[Quote]Ich mach relativ viel mit classes, aber nun bekomme ich eine recht lange Liste, ca 1000-5000 Einträge, die ich peu a peu abarbeiten, aber für spätere oder Zwischendrinsortierung wenn möglich im Speicher halten will und nach Abarbeitung der ganzen Liste dann die Ergebnisse ausgeben will. [/Quote].

5000 Einträge ist sehr wenig.
Ich fürchte du verwendest 'Klassen' wo du die nicht brauchst.
Es wäre besser deine konkrete Aufgabe zu schildern; dann kònnen wir die effizienste Methode vorschlagen (mit oder ohne KLassen, Arrays, Funktionen usw.)
Anzeige
AW: sizeof VBA classes
13.03.2026 01:03:22
Yal
Moin,

Ich bin bei snb: 5000 Instanzen (=Objekte) einer Klasse, deutet darauf ihn, dass Du für jeden Datensatz einen Objekt instanziert. Es ist eventuell nicht die günstigste Konstellation.

Wenn es um reine Datentransformation geht, könnte man probieren, mit Power Query zu arbeiten. Es wäre wesentlich leichter und in Wartung einfacher.
Das ist aber meinerseits eine blind Beratung, da wir über den Usecase nichts wissen.

5000 Objekte sind mit 8GB auf alle Fälle zu bewältigen, es sei denn anderen Prozesse den Arbeitsspeicher vermüllen.

VG
Yal
Anzeige
AW: sizeof VBA classes
12.03.2026 21:50:07
Thomas
Danke
das hab ich befürchtet, und das wär auch mein Ansatz gewesen. Ich hab mit Sicherheit ein bis drei Strings, ein Array mit 30 longs und eins mit 30 dates.
Deren Size hatt ich als Minimum.
Was ich halt nicht weiß, ist, wie all die in der Klasse implementierten Funktionen, Propertys usw. zu Buche schlagen, ist das nur der Objectverweis von Dir oder schlagen die weiter zu?
Bei reinen Types wärs klar, aber ich mach das halt in Klassen, um eben all die Daten mit Funktionen zu verarbeiten. Intuitiv hätt ich vermutet, dass eine Klasse mit einer Methode weniger Speicher brauch als eine Klasse mit 20 Methoden, ganz abgesehen von den Gettern und Lettern. Und in dem Bezug bin ich blank
Thomas
Anzeige
AW: sizeof VBA classes
12.03.2026 22:54:19
xlKing
Die in Klassen verwendeten Funktionen und Properties schlagen nicht weiter zu Buche. Sie übergeben nur Argumente speichern aber selbst keine Werte. Wenn du diese unbedingt dazurechnen willst, kannst du pro Prozedur vernachlässigbar einmalig einen Wert vom Typ LongPtr (also Long bei 32-Bit- und LongLong bei 64-Bit-Systemen) annehmen. Dieser wert wird von Windows verwaltet und stellt den Pointer dar, den du mit AddressOf ermitteln kannst. Da AddressOf eine Prozedur in einem allgemeinen Modul erwartet, funktioniert dieses Beispiel nicht mit Prozeduren in Klassenmodulen. Ich gehe aber davon aus, dass diese auch einen Pointer haben.

Sub Test()

Debug.Print getPointer(AddressOf Test)
Debug.Print getPointer(AddressOf Test2)
Debug.Print getPointer(AddressOf getPointer)
End Sub
Sub Test2(x As Long, y As Double)
'Irgendwas
End Sub
Function getPointer(Prozedurname As LongPtr) As LongPtr
getPointer = Prozedurname
End Function


Aber wie gesagt, diese werden von einem anderen Prozess verwaltet und benötigen natürlich auch Speicher wo die entsprechenden Nummern abgelegt werden. Aber eben nicht 5000 mal, sondern nur einmalig pro Prozedur. AddressOf ist natürlich nicht für solche Spielereien (wie mein Beispiel) vorgesehen sondern übergibt im Normalfall die entsprechende Prozedur (also den Pointer) an einen Windows-API-Prozess um per VBA auf bestimmte Windows-Messages reagieren zu können.

Gruß Mr. K.
Anzeige
AW: sizeof VBA classes
12.03.2026 23:07:13
xlKing
Du solltest natürlich ganz allgemein noch etwas Arbeitsspeicher für Windows, Excel und sonstige Hintergrundprogramme übrig lassen. Auch wenn Windows in der Lage ist Speicher auf die Festplatte (oder von mir aus auf die SSD) auszulagern, wenn der Arbeitsspeicher knapp wird, so ist dies letztlich doch langsamer. Also versuche, den nicht bis zum letzten Byte aufzufüllen. Eventuell kannst du, anstelle die Daten in die Klassen einzulesen, bereits mit Excel-Eigenen Funktionen arbeiten. Das spart Zeit und Speicher.
Anzeige
AW: sizeof VBA classes
13.03.2026 10:26:52
Thomas
Jo... das is klar.... und um eben das abzuschätzen, hätt ich was gesucht, was mir den Speicherverbrauch berechnen kann. Ich muss Ausgangsdaten einlesen, dazu von externer Quelle zusätzliche Daten mit dazunehmen und innerhalb der Klasse mit dieser Datenkombi dann weitere Kennzahlen berechnen, die ich der Einfachheit halber lieber im Speicher halten würde (auch im Sinne von Sortierungen) statt irgendwo zwischenzuspeichern und dann wieder auszulesen. Wenn der Speicher knapp wäre oder halt auch von Fall zu Fall gehe ich über diese Zwischenspeicherung; solange ich aber nicht so viel brauch, hätt ichs im Speicher gelassen.

Danke, das hilft aber schon mal als Info
Thomas
Anzeige
Anzeige
Anzeige
Live-Forum - Die aktuellen Beiträge
Datum
Titel
14.05.2026 13:31:09
14.05.2026 09:50:42
13.05.2026 19:14:18