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

Forumthread: Variable an sub übergeben

Variable an sub übergeben
26.07.2015 12:46:03
P-Quest
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

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Variable an sub übergeben
26.07.2015 13:07:35
mumpel
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é

Anzeige
AW: Variable an sub übergeben
26.07.2015 13:10:01
Daniel
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

Anzeige
AW: Variable an sub übergeben
26.07.2015 15:52:35
P-Quest
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?

Anzeige
Häkchen vergessen...sorry
26.07.2015 15:54:48
P-Quest

AW: Häkchen vergessen...sorry
26.07.2015 17:17:48
P-Quest

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

Anzeige
AW: Kann es sein,...
26.07.2015 19:52:57
P-Quest
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.

Fehler gefunden
26.07.2015 19:56:12
P-Quest
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
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Variable an Sub übergeben in Excel VBA


Schritt-für-Schritt-Anleitung

Um eine vba Variable an Sub zu übergeben, kannst Du die folgende Schritt-für-Schritt-Anleitung verwenden:

  1. Deklaration der Variablen: Stelle sicher, dass die Variable, die Du übergeben möchtest, als Public deklariert wird. Dies geschieht in einem allgemeinen Modul.

    Public wsName As String
  2. Zuweisung der Variable in einer Sub: In der ersten Sub (z. B. Sub1) kannst Du die Variable mit einem Wert belegen.

    Sub DatenHolen()
       wsName = "MeinTabellenblatt"
    End Sub
  3. Aufruf der Sub mit der Variable: Um die Variable in einer anderen Sub (z. B. Sub2) zu verwenden, rufe einfach die Sub auf.

    Sub DatenImportieren()
       Set wsAuswertung = Sheets(wsName)
    End Sub
  4. Fehlerüberprüfung: Achte darauf, dass die Variable nicht mehrfach deklariert wird, um Laufzeitfehler zu vermeiden.


Häufige Fehler und Lösungen

Einige häufige Fehler beim Übergeben von Variablen an Subs und deren Lösungen sind:

  • Laufzeitfehler 9: Index außerhalb des Bereichs:

    • Ursache: Das Tabellenblatt mit dem Namen in wsName existiert nicht.
    • Lösung: Überprüfe, ob das Blatt tatsächlich vorhanden ist.
  • Public Variable bleibt leer:

    • Ursache: Die Variable wurde lokal in einer Sub deklariert.
    • Lösung: Stelle sicher, dass die Deklaration im allgemeinen Modul erfolgt.

Alternative Methoden

Wenn Du excel vba Parameter übergeben möchtest, kannst Du auch die Parameterübergabe in der Sub-Definition verwenden:

Public Sub DatenImportieren(ByVal blattName As String)
    Set wsAuswertung = Sheets(blattName)
End Sub

Du kannst dann beim Aufruf der Sub den Namen des Blattes übergeben:

Call DatenImportieren(wsName)

Diese Methode ist besonders nützlich, wenn Du mehrere Parameter übergeben möchtest.


Praktische Beispiele

Hier sind einige praktische Beispiele für das vba sub variable übergeben:

  1. Beispiel mit einer Funktion:

    Public Function Rechne(a As Long, b As Long) As Long
       Rechne = a * b
    End Function
    
    Public Sub Test()
       MsgBox Rechne(12, 3)
    End Sub
  2. Beispiel für das Kopieren von Daten:

    Public Sub DatenHolen()
       wsName = "Datenblatt"
       ' Weitere Logik zum Kopieren von Daten
       Call DatenImportieren(wsName)
    End Sub

Tipps für Profis

  • Verwende Public Variablen nur, wenn es notwendig ist. Es ist oft besser, die Variablen in der Funktion lokal zu halten, um den Code sauber und fehlerfrei zu halten.
  • Halte Deinen Code gut strukturiert, um die Übersichtlichkeit zu erhöhen. Kommentare helfen, den Zweck jeder Sub und Variable klar zu machen.
  • Nutze die Excel VBA Debugging-Tools, um Fehler und Laufzeitprobleme schnell zu identifizieren.

FAQ: Häufige Fragen

1. Wie gebe ich mehrere Parameter an eine Sub weiter?
Du kannst mehrere Parameter in der Sub-Definition angeben, indem Du sie durch Kommas trennst. Beispiel:

Public Sub BeispielSub(param1 As String, param2 As Integer)
    ' Logik hier
End Sub

2. Was ist der Unterschied zwischen Public und Private Sub?
Public Sub ist für andere Module sichtbar, während Private Sub nur innerhalb des gleichen Moduls verwendet werden kann.

3. Wie kann ich sicherstellen, dass eine Variable immer den aktuellen Wert hat?
Vermeide es, Variablen mehrfach zu deklarieren und stelle sicher, dass Du den Wert der Variablen in der richtigen Reihenfolge zuweist, bevor Du sie aufrufst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige