Excel - VBA - Static Variable
Hi,
wie muss man es anstellen, damit im Excel VBA eine Variable dauerhaft gefüllt bleibt?
Ziel
Ich will eine Public Function schreiben, welche als Tabellen-Funktion verwendet werden soll.
Also
Nur will ich jetzt rechenintensive Zwischenergebnisse, welche in dieser Funktion anfallen und für alle nachfolgenden Funktionsaufrufe identisch sind, für den nächsten Aufruf der Funktion beibehalten, damit ich diese nicht noch einmal berechnen muss.
Versuche
Ich habe es mit einer Variable auf Modul-Ebene versucht. Sie ist bei jedem Aufruf der Funktion über das Tabellenblatt wieder leer.
Ich habe es mit einer Static Variable innerhalb der Funktion versucht. Aber auch diese ist bei jedem Aufruf der Funktion über das Tabellenblatt wieder leer.
Wie muss ich sowas unter Excel VBA anstellen?
E.
Edit:
"Einfache" Werte könnte ich irgendwo auf einer Tabelle zwischenlagern, ich weiß. Unschön, aber es würde funktionieren.
Ich habe hier aber komplexere Objekte, welche das betrifft.
wie muss man es anstellen, damit im Excel VBA eine Variable dauerhaft gefüllt bleibt?
Ziel
Ich will eine Public Function schreiben, welche als Tabellen-Funktion verwendet werden soll.
Also
- ein Modul erstellt,
- dort eine Public Function erstellt und
- diese Funktion in der Tabelle benutzt.
Nur will ich jetzt rechenintensive Zwischenergebnisse, welche in dieser Funktion anfallen und für alle nachfolgenden Funktionsaufrufe identisch sind, für den nächsten Aufruf der Funktion beibehalten, damit ich diese nicht noch einmal berechnen muss.
Versuche
Ich habe es mit einer Variable auf Modul-Ebene versucht. Sie ist bei jedem Aufruf der Funktion über das Tabellenblatt wieder leer.
Ich habe es mit einer Static Variable innerhalb der Funktion versucht. Aber auch diese ist bei jedem Aufruf der Funktion über das Tabellenblatt wieder leer.
Wie muss ich sowas unter Excel VBA anstellen?
E.
Edit:
"Einfache" Werte könnte ich irgendwo auf einer Tabelle zwischenlagern, ich weiß. Unschön, aber es würde funktionieren.
Ich habe hier aber komplexere Objekte, welche das betrifft.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 644693
Url: https://administrator.de/forum/excel-vba-static-variable-644693.html
Ausgedruckt am: 31.03.2025 um 14:03 Uhr
7 Kommentare
Neuester Kommentar
Hallo,
mehr als eine Public-Variable in einem Modul gibt es nicht in VBA.
https://www.vba-tutorial.de/variablen/lebensdauer.htm
Du kannst aber statt einer Variable eine Funktion verwenden welche den Wert in eine Zelle, Registry oder Datei schreibt.
Stefan
mehr als eine Public-Variable in einem Modul gibt es nicht in VBA.
https://www.vba-tutorial.de/variablen/lebensdauer.htm
Option Explicit
Public ueberall As Boolean
Du kannst aber statt einer Variable eine Funktion verwenden welche den Wert in eine Zelle, Registry oder Datei schreibt.
Stefan
Zitat von @emeriks:
Na doch, es gibt noch Static Varaiblen. Doch das funktioniert offenbar nur innerhalb "eines Laufs" (Runtime).
Ne, Static ist wie Public aber auf die Funktion begrenzt. Quasi ein lokal public.Na doch, es gibt noch Static Varaiblen. Doch das funktioniert offenbar nur innerhalb "eines Laufs" (Runtime).
Während Public überall aufrufbar ist.
Sobald Excel seine Runtime beendet kommen alle Variablen in die Tonne.
Das nütz mir nur nichts bei komplexeren Objekten.
Vieleicht ist Excel als VBA Runtime dafür nicht optimal?Ein C++ Programm gegenüber VBA ist ungefähr 100-1000 mal schneller in der Ausführung.
Du könntest versuchen mit alloc Speicher zu allozieren und Dir in einer Zelle nur den Pointer merken.
Habe ich in VBA noch nie probiert.
Stefan
Roger
Die MS-Programme haben teilweise eine merkwürdige Auffassung was "Ende der Ausführung" bedeutet.
Ich habe verschiedene Module in Outlook VBA wo ich Public Variablen verwende.
Beim debuggen deaktviere ich die Teile die funktionieren und eine zeitlang bleiben diese Variablen erhalten.
Aber nach einer gewissen Zeit sind die auf einmal leer. Mal nach 3 Aufruffen und mal nach 15.
Mehr Tipps habe ich nicht.
Viel Erfolg
Sobald Excel seine Runtime beendet kommen alle Variablen in die Tonne.
In Outlook VBA funktioniert das aber mit Modul-Variablen.Ich habe verschiedene Module in Outlook VBA wo ich Public Variablen verwende.
Beim debuggen deaktviere ich die Teile die funktionieren und eine zeitlang bleiben diese Variablen erhalten.
Aber nach einer gewissen Zeit sind die auf einmal leer. Mal nach 3 Aufruffen und mal nach 15.
Mehr Tipps habe ich nicht.
Viel Erfolg

Hab das hier mal so nachgestellt:
Public Variable in "DieseArbeitsmappe"
Dann zwei Funktionen die im Codeabschnitt des ersten Tabellenblattes liegen und einmal die Variable setzen und auch abfragen
Zwischen den Aufrufen der beiden Subs bleibt der Inhalt der Variablen so lange erhalten bis man Excel wieder schließt, auch die Abfrage aus weiteren anderen Tabellenblättern oder Modulen ist kein Problem, das sollte dir doch reichen oder nicht??
Gruß j
Public Variable in "DieseArbeitsmappe"
Dann zwei Funktionen die im Codeabschnitt des ersten Tabellenblattes liegen und einmal die Variable setzen und auch abfragen
Zwischen den Aufrufen der beiden Subs bleibt der Inhalt der Variablen so lange erhalten bis man Excel wieder schließt, auch die Abfrage aus weiteren anderen Tabellenblättern oder Modulen ist kein Problem, das sollte dir doch reichen oder nicht??
Gruß j