ich bin seit zwei Monaten dabei mein erstes VBA Programm für Excel zu schreiben. Nun muss ich meine erste Frage loswerden.
Mein Programm war gut bestückt mit globalen Variablen. Seitdem ich gelesen habe, dass man globale Variablen stets vermeiden sollte, versuche ich dies mit Übergabe von Argumenten usw. zu erreichen.
Jedoch zweifel ich in meinem Fall an dessen Sinnhaftigkeit.
In meinem Programm werden einige Variablen aus einer Excel Tabelle eingelsen, die immer mal wieder Verwendung finden.
Zwei Hauptmakros, die auf einander aufbauen, steuern das Programm.
Die Hauptprozedur_1 wird durch ein CommandButton als erstes ausgeführt. Darauf aufbauend kann man Hauptprozedur_2 mit verschiedenen Eingangsparametern durch Aufruf mit einem zweiten CommandButton testen.
Zunächst war die Struktur ungefär so:
Dim intX as integer ' global
With ThisWorkbook.Worksheets("Parameter")
intX = .Range("I6").Value
Dim VariableName() as double ' global
Dim ...
Sub Hauptprozedur_1()
Call sub1_1 ' hier wird intX benötigt
Call sub1_2
Call sub1_3 ' hier wird intX benötigt
Call sub1_4 ' hier wird intX benötigt
Call sub1_5 ' hier wird intX benötigt
' hier wurde "VariableName" erzeugt
End Sub
Sub Hauptprozedur_2()
' in der Prozedur wird intX auch immer mal wieder benötigt
' zudem werden aber auch Ergebnisse (VariableName) aus Hauptprozedur_1 benötigt
' da die Hauptprozedur_2 ja mit einem eigenem CommandButton aufgerufen wird, muss ich doch _
diese '"VariableName" global definieren?
End Sub
Wie soll ich dieses Problem denn jetzt lösen. Folgende "Lösung" würde doch auch nicht viel ä _ndern oder:
' keine globalen Variablen
Sub Hauptprozedur_1()
Dim intX as integer ' nicht merh global, aber trotzdem ständig im Speicher oder?
With ThisWorkbook.Worksheets("Parameter")
intX = .Range("I6").Value
Dim VariableName() as double ' nicht merh global
Dim ...
....
Call sub1_1(intX) ' hier wird intX benötigt
Call sub1_2
Call sub1_3(intX) ' hier wird intX benötigt
Call sub1_4(intX) ' hier wird intX benötigt
Call sub1_5(intX) ' hier wird intX benötigt
' hier wurde "VariableName" erzeugt
End Sub
Sub Hauptprozedur_2()
' in der Prozedur wird intX auch immer mal wieder benötigt.
Dim intX as integer ' Variable wird nochmal deklariert und dessen Wert eingelesen
With ThisWorkbook.Worksheets("Parameter")
intX = .Range("I6").Value
....
' zudem werden aber auch Ergebnisse (VariableName) aus Hauptprozedur_1 benötigt
' da die Hauptprozedur_2 ja mit einem eigenem CommandButton aufgerufen wird, muss ich doch _
diese '"VariableName" global definieren?
End Sub
Es ergeben sich zwei Fragen.
1. Was mache ich mit einer Variable wie intX? Zweimal deklarieren?
Und vor allen Dingen: Ändert das was? Ist intX im zweiten BEispiel nicht auch immer im Speicher und das Programm wird dadurch auch nicht schneller?
2. Wie gehe ich mit einer Variablen wie "VariableName" um, die in einer Prozedur erstellt wird, jedoch in einer anderen wieder gebraucht wird?
Das ganze ist leider etwas lang geworden.
Ich hoffe ihr könnt mir helfen, da ich mir schon seit Wochen darüber den Kopf zerbreche!
Danke.