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

Forumthread: Sub via variable aufrufen

Sub via variable aufrufen
17.11.2019 17:29:53
Dennis
Hallo zusammen.
Ich habe beim Starten der Excel-Datei eine Form mit ListBox, welche sich aus einer Tabelle füllt.
Jenachdem, welchen Eintrag ich auswähle soll er einen vorhandenen Sub aufrufen, der dann den
weiteren Code abarbeitet. Ich habe dazu "auswahl" als Public String deklariert, wenn ich einen Eintrag selektiere und auf OK klicke, schreibt er die Auswahl in diese Variable.
Wie bekomme ich es nun hin, dass er mit der Variablen ein Sub aufruft?
z.B. auswahl = Datenabfrage
er soll dann das Sub datenabfrage() aufrufen.
z.B. auswahl = Wartungstermine
er soll dann das Sub wartungstermine() aufrufen.
usw..
Ich habe es bereits probiert, dem Sub in den Klammern einen Namen zu geben.
z.B. Sub sel(datenabfrage) und Sub sel(wartungstermine) aber dann meckert er, dass der name "sel" mehrfach vorhanden sei.
Klar könnte ich das mit IF-Funktionen machen, aber das würde den Code definitiv sprengen, denn es wird nicht bei den 2 Beispieleinträgen bleiben :-)
LG
Anzeige

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Sub via variable aufrufen
17.11.2019 17:40:11
Nepumuk
Hallo Dennis,
einfach so:
Application.Run auswahl

Gruß
Nepumuk
AW: Sub via variable aufrufen
17.11.2019 18:11:30
Dennis
Hallo und Danke für die schnelle Rückmeldung.
Leider hat Excel da scheinbar keinen Bock drauf (Siehe Bild). Was nun?
Userbild
Anzeige
AW: Sub via variable aufrufen
17.11.2019 18:14:19
Nepumuk
Hallo Dennis,
in welchem Modul befindet sich die Sub?
Gruß
Nepumuk
AW: Sub via variable aufrufen
17.11.2019 18:14:57
Nepumuk
Hallo Dennis,
in welchem Modul befindet sich die Sub?
Gruß
Nepumuk
AW: Sub via variable aufrufen
17.11.2019 18:22:31
Dennis
habe die Sub(s) in die Form hinterlegt.
Wenn ich die Subs in ein Modul packe, dann müsste ich die ja via "modul.sub" aufrufen und da meckert er
eben leider wegen der Variablen. Bei dem restlichen Code, wo ich kein Sub via Variable aufrufen muss mache ich das so, dass das via modul.sub aufrufe und das geht einwandfrei, nur eben nicht mit Variable
Userbild
Anzeige
AW: Sub via variable aufrufen
17.11.2019 18:30:40
Nepumuk
Hallo Dennis,
die Prozedur die du aufrufst muss sich in einem Standardmodul befinden. Die Angabe des Modulnamens ist nur notwendig wenn du Prozeduren mit dem selben Namen in verschiedenen Modulen hast.
Gruß
Nepumuk
AW: Sub via variable aufrufen
17.11.2019 19:07:07
Nepumuk
Hallo Dennis,
mir ist gerade eingefallen, es geht doch mit den Prozeduren im Userform-Modul. Und zwar so:
Private Sub CommandButton1_Click()
    Const auswahl As String = "test"
    Call CallByName(Me, auswahl, VbMethod)
End Sub

Public Sub test()
    MsgBox "test"
End Sub

Gruß
Nepumuk
Anzeige
AW: Sub via variable aufrufen
17.11.2019 20:12:10
Dennis
habe die Sub(s) in die Form hinterlegt.
Wenn ich die Subs in ein Modul packe, dann müsste ich die ja via "modul.sub" aufrufen und da meckert er
eben leider wegen der Variablen. Bei dem restlichen Code, wo ich kein Sub via Variable aufrufen muss mache ich das so, dass das via modul.sub aufrufe und das geht einwandfrei, nur eben nicht mit Variable
Userbild
Anzeige
AW: Sub via variable aufrufen
17.11.2019 18:58:44
onur
Die Subs müssen sich in einem ALLGEMEINEN MODUL befinden und PUBLIC deklariert werden.
AW: Sub via variable aufrufen
17.11.2019 20:16:12
Dennis
geht auch damit leider nicht :-(
Userbild
AW: Sub via variable aufrufen
17.11.2019 20:19:17
Dennis
Hiermit scheint es nun zu klappen:
Application.Run "auswahl_mod." & auswahl

Anzeige
AW: Sub via variable aufrufen
17.11.2019 20:20:47
onur

Application.Run(auswahl)

AW: Sub via variable aufrufen
17.11.2019 20:19:39
onur
Wieso hast du für jede SUB ein allg. Modul?
Nur ein Modul, wo sich ALLE Subs befinden.
Poste doch mal die Datei, wenn du es nicht hinkriegst.
AW: Sub via variable aufrufen
18.11.2019 00:48:58
Dennis
klappt jetzt wie gewünscht. Ich habe die verschiedenen Module erstellt,da es sich in der Excel-Datei auch sozusagen um "Module" handelt, die ich bei bedarf auch mal in einzelne Excel-Dateien auslagern möchte und das erleichtert mir enorm die Übersicht. Wenn jetzt z.b. in "datenabfrage" etwas nicht läuft, dann weiß ich dass ich dazu nur in dem Modul "datenabfrage" nach dem Fehler schauen muss. Läuft sozusagen bis auf die Forms alles autark
Anzeige
AW: Sub via variable aufrufen
18.11.2019 06:29:48
onur
Wenn du das für Übersicht hältst, wenn man für jede Sub "XY" ein gleichnamiges Modul hat....
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Subs über Variablen in Excel aufrufen


Schritt-für-Schritt-Anleitung

Um ein Excel Sub über eine Variable aufzurufen, kannst du die Application.Run Methode verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Deklariere deine Variable: Definiere eine öffentliche Variable, die den Namen des zu aufrufenden Subs speichert.

    Public auswahl As String
  2. Setze die Variable: Bei Auswahl eines Eintrags in deiner ListBox, setze auswahl auf den entsprechenden Sub-Namen. Zum Beispiel:

    auswahl = "datenabfrage"
  3. Rufe das Sub auf: Verwende Application.Run, um das Sub mit dem Namen in der Variable aufzurufen:

    Application.Run auswahl
  4. Fehlerbehandlung: Stelle sicher, dass das Sub in einem Standardmodul definiert ist, da Subs in UserForms nicht direkt aufgerufen werden können.


Häufige Fehler und Lösungen

  • Fehler: "Sub nicht gefunden": Dieser Fehler tritt auf, wenn das Sub nicht im richtigen Modul deklariert ist. Stelle sicher, dass sich das Sub in einem allgemeinen Modul befindet und öffentlich deklariert ist.

  • Lösung: Überprüfe, ob dein Sub wie folgt aussieht:

    Public Sub datenabfrage()
      ' Code hier
    End Sub
  • Fehler: "Name ist bereits vorhanden": Dies geschieht, wenn mehrere Subs denselben Namen haben. Achte darauf, dass die Namen einzigartig sind, um Konflikte zu vermeiden.


Alternative Methoden

Wenn Application.Run nicht funktioniert oder du eine andere Methode bevorzugst, kannst du die CallByName Methode nutzen. Hier ist, wie es geht:

CallByName Me, auswahl, VbMethod

Diese Methode ermöglicht es dir, Subs auch aus UserForms heraus aufzurufen, solange sie als Public deklariert sind.


Praktische Beispiele

Hier ist ein einfaches Beispiel, wie du verschiedene Subs über eine Variable aufrufen kannst:

Public Sub Button_Click()
    Dim auswahl As String
    auswahl = "datenabfrage" ' oder "wartungstermine"
    Application.Run auswahl
End Sub

Public Sub datenabfrage()
    MsgBox "Datenabfrage wurde aufgerufen."
End Sub

Public Sub wartungstermine()
    MsgBox "Wartungstermine wurden aufgerufen."
End Sub

In diesem Beispiel wird beim Klicken des Buttons das entsprechende Sub aufgerufen, je nachdem, welcher Eintrag in der ListBox ausgewählt wurde.


Tipps für Profis

  • Verwende Module effektiv: Halte deine Subs in einem einzigen Modul, um die Übersicht zu bewahren. Wenn du viele Subs hast, kannst du sie thematisch gruppieren.

  • Parameterübergabe: Falls du Parameter an deine Subs übergeben musst, kannst du dies ebenfalls mit der Application.Run Methode tun:

    Application.Run auswahl, parameter1, parameter2
  • Debugging: Nutze Debug.Print für die Fehlersuche, um zu sehen, welcher Sub aufgerufen wird und welche Parameter übergeben werden.


FAQ: Häufige Fragen

1. Wie kann ich ein Sub mit Parametern aufrufen?
Du kannst Application.Run mit den Parametern wie folgt verwenden:

Application.Run "modulname." & auswahl, param1, param2

2. Warum funktioniert Application.Run manchmal nicht?
Stelle sicher, dass der Name der Variable genau mit dem Namen des Subs übereinstimmt und dass das Sub in einem allgemeinen Modul definiert ist.

3. Kann ich Subs in UserForms aufrufen?
Ja, du kannst Subs in UserForms aufrufen, wenn du CallByName verwendest oder sicherstellst, dass die Subs als Public deklariert sind.

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