Variable an sub übergeben

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: Variable an sub übergeben
von: P-Quest :-)
Geschrieben am: 26.07.2015 12:46:03

Hallo,
ich weiss, dass ich eine Variable, die ich in einer Sub1 definiert habe an eine untergeordnete Sub2 übergeben kann, indem ich diese direkt mit
Call Sub(Variable)
aus Sub1 aufrufe.
Jetzt habe ich aber den Fall, dass ich eine Sub1 komplett abgeschlossen habe. Innerhalb dieser Sub wurde der Blattname (strName) definiert und für das Tabellenblatt vergeben.
Mit einer weiteren Schaltfläche sollen nun weitere Aktionen (Sub2) gestartet werden, für die ich den Blattnamen aus Sub1 benötige. Da die beiden Subs nicht direkt von einander abhängig sind, habe ich strName als Public definiert
Wenn ich jetzt
Call Sub2(strName)
ausführe, wird die Variable zwar erkannt (klar, ist ja Public), aber der Wert ist "".
Frage:
Wie kann ich den Wert für strName auch in Sub2, Sub3 etc. verwenden?
Gruß,
Peter

Bild

Betrifft: AW: Variable an sub übergeben
von: mumpel
Geschrieben am: 26.07.2015 13:07:35
Hallo!
In diesen Fällen arbeitet man nicht mit Sub, sondern mit Function.

Public Sub Test()
MsgBox Rechne(12, 3)
End Sub

Public Function Rechne(a As Long, b As Long) As String
Rechne = a * b
End Function

VBA/HTML - CodeConverter für Office-Foren, AddIn für Office 2002-2013 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:mumpel

Code erstellt und getestet in Office 15 - mit VBAHTML 12.6.0

Gruß, René

Bild

Betrifft: AW: Variable an sub übergeben
von: Daniel
Geschrieben am: 26.07.2015 13:10:01
Hi
Wenn du Variablen hast, die von mehreren Subs verwendet werden sollen, dann reicht es aus wenn du diese in einem allgemeinen Modul oberhalb der Subs mit Public deklarierst.
Eine zusätzliche Übergabe oder Deklaration ist dann nicht mehr erforderlich, diese Variablen sind allen Subs bekannt und sie behalten ihren Wert auch nach Makroende, so dass sie von det nächsten Sub weiter verwendet werden können.
Gruß Daniel

Bild

Betrifft: AW: Variable an sub übergeben
von: P-Quest :-)
Geschrieben am: 26.07.2015 15:52:35
Hallo Daniel,
so hatte ich es mir gedacht, aber es klappt nicht. Also, das Ganze etwas genauer:
Ich habe in einem Sheet 3 Schaltflächen mit folgenden Ereignissen:

Private Sub cmdDatenHolen_Click()
    Call DatenHolen
End Sub

Private Sub cmdDatenImport_Click()
    Call DatenImportieren
End Sub

Private Sub cmdLoeschen_Click()
    Call QuelleLoeschen
End Sub
Diese Ereignisprozeduren finden sich im Arbeitsblatt Gesamtliste.
Die aufgerufenen Subs liegen in einem allgemeinen Modul. (Ist das der Haken?)
Nun führe ich Sub Daten holen aus. Es wird ein Sheet von einem Workbook in das aktuelle Workbook kopiert. Im Verlauf dieser Sub wird die Variable wsName belegt.
wsName = Left(strTitel, Len(strTitel) - 5)
Vorgang beendet. Klappt auch alles.
Nun kann der Anwender noch einige manuelle Kontrollen in seiner Datei machen und danach sollten mittels der Schaltfläche DatenImport die Daten aus dem Sheet(wsName) in die Gesamtliste kopiert werden.
In der Sub Datenimport verwende ich zur Zuweisung der Tabellenblätter folgende Befehle:
Set wsGesamt = Sheets("Gesamtliste")
Set wsAuswertung = Sheets(wsName)
und genau bei dem 2ten Set-Befehl steigt Excel aus.
wsName habe ich mit folgendem Eintrag deklariert:
Public wsName As String 'Wird als Name des eingef. Tabellenblatts verwendet
Ich habe alle drei Varianten, also Public... in das allgemeine Modul, in das Tabellenbaltt und in Beide, getestet und alle führen zum gleichen Laufzeitfehler 9: Index ausserhalb des...
Auch eine Änderung
Public wsName 'Wird als Name des eingef. Tabellenblatts verwendet
führt zum gleichen Fehler.
Was mache ich falsch?

Bild

Betrifft: Häkchen vergessen...sorry
von: P-Quest :-)
Geschrieben am: 26.07.2015 15:54:48


Bild

Betrifft: AW: Häkchen vergessen...sorry
von: P-Quest :-)
Geschrieben am: 26.07.2015 17:17:48


Bild

Betrifft: Kann es sein,...
von: robert
Geschrieben am: 26.07.2015 19:12:35
Hi,
dass das Sheet wsName nicht vorhanden ist?

Bild

Betrifft: AW: Kann es sein,...
von: P-Quest :-)
Geschrieben am: 26.07.2015 19:52:57
Hallo Robert,
das wäre zu einfach :-)
Das Blatt ist vorhanden. Im Einzelschrittmodus ist gut nachzuvollziehen, wie die variable wsName im Programmverlauf mit dem erwünschten Wert belegt wird. Allerdings bleibt die Public Variable leer.

Bild

Betrifft: Fehler gefunden
von: P-Quest :-)
Geschrieben am: 26.07.2015 19:56:12
Hallo,
der Hinweis von Robert hat mich dazu gebracht mir meinen Code nochmal genauer anzusehen.
Und siehe da, ich D... habe übersehen, die Deklaration von wsName aus dem Deklarationsteil der Sub zu entfernen. Auskommentiert...Funktioniert.
Merke: Deklariere eine Varibalke niemals 2 mal!
Danke für eure Zeit und entschuldigt, dass ich sie euch gestohlen habe.
Gruß,
Peter

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Variable an sub übergeben"