Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1472to1476
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Einzelne statische Variable leeren, geht das?

Einzelne statische Variable leeren, geht das?
15.02.2016 16:43:39
Daniel
Hallo
kann man per Code eine Statische Variable innerhalb einer Funktion leeren oder zurücksetzen?
als im Prinzip folgendes machen

Sub Test()
a = meineFunktion()
b = meineFunktion()
c = meineFunktion()
Zähler zurücksetzen
d = meineFunktion()
e = meineFunktion()
f = meineFunktion()
end Sub
Function meineFunktion() as Long
Static Zähler as Long
Zähler = Zähler + 1
meineFunktion = Zähler
End Function

dh die Variable d soll nicht den nächsten Wert 4 erhalten, sondern ab d soll wieder mit 1 angefangen werden.
Im Realproblem geht's um ein Datenfeld, welches nicht bei jedem Funktionsaufruf befüllt werden soll, sondern nur beim ersten mal.
Trotzdem ist zu bestimmten Zeitpunkten eine Neubefüllung erforderlich, daher müsste das Datenfeld "von aussen" geleert werden.
Gruß Daniel

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Einzelne statische Variable leeren, geht das?
15.02.2016 18:06:03
Hajo_Zi
Hallo Daniel,
man sollte keine Umlaute in Variablen benutzen. Variablen sollten Definiert werden.
Zähler=0

AW: Einzelne statische Variable leeren, geht das?
15.02.2016 19:28:03
Daniel
Hallo Hajo
funktioniert so direkt leider nicht, da die Variable Zähler (oder mit deiner Korrektur Zaehler) im Makro Test nicht bekannt ist.
hier mal der Code nach deinen vorgaben überarbeitet:
Sub Test()
Dim a, b, c, d, e, f
a = meineFunktion()
b = meineFunktion()
c = meineFunktion()
Zaehler = 0
d = meineFunktion()
e = meineFunktion()
f = meineFunktion()
Debug.Print a, b, c, d, e, f
End Sub
Function meineFunktion() As Long
Static Zaehler As Long
Zaehler = Zaehler + 1
meineFunktion = Zaehler
End Function
mein Wunschergebnis für das Debug.Print wäre 1 2 3 1 2 3
das momentane Ergebnis ohne Rücksetzen des Zählers ist 1 2 3 4 5 6
Gruß Daniel

Anzeige
Lies meine AW! owT
15.02.2016 19:30:16
Luc:-?
:-?

AW: Einzelne statische Variable leeren, geht das?
15.02.2016 19:34:42
Hajo_Zi
warum sollte ich weiter Antworten. Meine Tipps werden nicht komplett umgesetzt.
Ich hatte geschrieben alle Variablen sollten definiert werden.
Warum einige als Variant definiert werden muss uns nicht klar sein.
Gruß Hajo

AW: Einzelne statische Variable leeren, geht das?
15.02.2016 22:40:03
Daniel
Hi Hajo
Nun, es wird auch nicht funktionieren, wenn ich a-e nicht als Variante, sondern konkret deklariere.
Die Deklaration dieser Variablen ist für das Problem unerheblich.
Gruß Daniel

Neben dem, was Hajo zu bedenken gibt, ...
15.02.2016 18:13:16
Luc:-?
…noch Folgendes, Daniel;
ja, das ist möglich, muss aber exakt definiert sein. Da im Bsp 6 Variablen mit Zählerständen gefüllt wdn und bei d wieder mit 1 begonnen wdn soll, aber stets dieselbe Fkt aufgerufen wird, muss dieser ein Argument mitgegeben wdn, was die Static-Variable der Fkt beim d-Aufruf zurücksetzt. Dafür reicht ein optionaler Wahrheitswert.
Gruß, Luc :-?
Besser informiert mit …

Anzeige
AW: Neben dem, was Hajo zu bedenken gibt, ...
15.02.2016 22:36:15
Daniel
Hi Luc
Danke das wäre eine Variante, hatte aber die Folge, dass ich die Formel in unterschiedlichen Versionen verwenden muss, dass wollte ich jetzt eigentlich vermeiden, aber wenn es nicht anders geht..
Gruß Daniel

Wieso Formel, ...
16.02.2016 00:45:36
Luc:-?
…Daniel,
in deinem Bsp sehe ich 6 separate EinzelAufrufe der Fkt. Warum sollen die alle gleich aussehen? Das hat doch hier keinen Vorteil!
Luc :-?

AW: Wieso Formel, ...
16.02.2016 07:53:23
Daniel
Hi Luc
Ich verwende die Formel auch als UDF in einer Tabelle und da wird sie natürlich in viele Zellen gleichzeitig mit dem selben Formeltext geschrieben.
Jetzt habe ich das Problem, dass ich die Formel in mehreren Spalten einsetzen muss und dazwischen eben die statischen Variablen zurück setzten muss.
Wenn ich das manuell mache, klicke ich vor dem erneuten Einfügen auf den Rücksetzen-Button.
Jetzt wollte ich den Vorgang automatisieren und brauche dazu dieses Rücksetzen der Variablen, ohne dass der Makrolauf gestoppt und die Userforms geschlossen werden (so wie es beim Einsatz von END passieren würde)
Gruß Daniel

Anzeige
Dann mach das FktsArgument doch von der ...
16.02.2016 12:36:49
der
…Einsatzspalte abhängig, Daniel;
macht man doch bei XlStandardFktt auch!
Luc :-?

AW: Dann mach das FktsArgument doch von der ...
16.02.2016 13:24:51
der
Hi
das bringt nichts, wenn die Statischen Variablen nicht zurückgesetzt werden.
die Realfunktion ist im Prinzip ein beschleunigter Verweis für unsortierte Daten mit mehrfach vorkommenden Suchbegriffen (listgengrösse c.a. 20.000 Zeilen für Quell und Zieldatei).
Der Trick für die Beschleunigung liegt hauptsächlich darin, dass die Daten nicht für jede Formel erneut eingelesen werden wie in den Excelstandardfunktionen, sondern nur einmalig bei der ersten Verwendung in ein statisches Dictionary gelesen werden.
Ist dieses Dictionary vorhanden, wird es nur noch ausgelesen ohne das die Datenquelle erneut eingelesen wird.
Dh wenn ich eine neue Datenquelle einlesen will, muss ich erst das Dictionary löschen, damit es neu erstellt wird.
Gruß Daniel

Anzeige
AW: Einzelne statische Variable leeren, geht das?
15.02.2016 20:13:47
Gerd
Hallo Daniel,
nein, so nicht. Wenn du in der Büchse etwas schrauben möchtest, musst du sie erst öffnen um reinzukommen
u. das Werkzeug mitbringen. So sind die Naturgesetze. :-)
Gruß Gerd

AW: Einzelne statische Variable leeren, geht das?
15.02.2016 22:46:16
Daniel
Naja, ich hatte gehofft, das das Werkzeug um diese Büchse zu öffnen in VBA schon irgendwie mitgeliefert wird, trotzdem Danke für die klare Aussage.
Gruß Daniel

AW: Einzelne statische Variable leeren, geht das?
15.02.2016 23:49:06
Mullit
Hallo,
das geht eigentlich ganz locker, indem Du Deine Variable modulweit deklarierst:
Option Explicit

Private llngZähler As Long

Public Sub Test()
Dim a As Long, b As Long, c As Long, d As Long, e As Long, f As Long
a = meineFunktion()
b = meineFunktion()
c = meineFunktion()

Call Zähler_zurücksetzen

d = meineFunktion()
e = meineFunktion()
f = meineFunktion()

Debug.Print a, b, c, d, e, f
End Sub

Public Function meineFunktion() As Long
llngZähler = llngZähler + 1
meineFunktion = llngZähler
End Function

Public Sub Zähler_zurücksetzen()
  llngZähler = 0
End Sub


VBA/HTML - CodeConverter für Office-Foren
AddIn für Excel/Word 2000-2010 - komplett in VBA geschrieben von Lukas Mosimann
Projektbetreuung durch mumpel



Code erstellt und getestet in Office 12

Gruß, Mullit

Anzeige
AW: Einzelne statische Variable leeren, geht das?
16.02.2016 07:41:43
Daniel
Hallo Mullit
Danke.
Ja das wäre ein möglicher Workaround.
Die Funktion ist bei mir eine Standardfunktionen und da wollte ich sie so unverändert wie möglich über nehmen
Gruß Daniel

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige