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

Forumthread: VBA Code aus anderen Modulen nutzen

VBA Code aus anderen Modulen nutzen
08.04.2021 11:19:33
Daniel
Hallo Zusammen,
ich nutze eine Userform mit vielen "Pages" und habe daher auch wahnsinnig viel Code.
Nun würde mich interessieren, ob ich einzelne Codeblöcke in Module auslagern kann um diese dann "aufzurufen".
Ich meine nicht die CALL Funktion
Ich möchte eher den unübersichtlichen Code "aufräumen".
Ich habe beispielsweise 200 Label Captions die ich gerne in ein "eigenes" Modul parken würde, um spätere Änderungen leichter vornehmen zu können.
Ist das denn überhaupt möglich, was ich da möchte?
Falls ja, wie wäre der Ansatz einen solchen Codeblock aufzurufen?
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Code aus anderen Modulen nutzen
08.04.2021 11:30:25
ralf_b
klar ist das möglich. aber entschuldige die Frage, du hast sehr viel Code aber wenig Ahnung von den Gültigkeitsbereichen von Variablen oder Funktionen? Wie geht das?
AW: VBA Code aus anderen Modulen nutzen
08.04.2021 11:36:49
Daniel
Nun ja, ich habe von Programmierung wirklich nicht viel Ahnung und bastel mir eben zusammen was ich brauche.
Ob das alles so richtig ist, weis ich auch nicht immer, aber es funktioniert für meine Zwecke.
Ich bin halt kein Programmierer ... nur Schreibtischtäter der Unmengen an Daten verarbeiten muss :-(
Anzeige
AW: VBA Code aus anderen Modulen nutzen
08.04.2021 11:51:02
ralf_b
Alternativ kannst du public Variablen oder Konstanten im Modul definieren und diese dann in den Userformen den Captions zuweisen.
Ich persönlich halte es für unschön wenn Userformelemente außerhalb des Userformmodules verändert werden.
https://www.herber.de/vbabasics/0001.html#G.C3.BCltigkeit_von_Variablen_und_Konstanten
Anzeige
AW: VBA Code aus anderen Modulen nutzen
08.04.2021 11:41:52
Daniel
Hi
Automatische Event-Makros (Change, Click) müssen im Modul der Userform bleiben.
allerdings könntest du dann von dort aus Makros in einem anderen Modul aufrufen, wenn du den Code zum Zwecke der besseren Übersichtlichkeit in mehrere Module verteilen willst
Sollte Code aus einem allgemeinen Modul (nur von diesen kannst du mehrere erstellen) mit den Steuerelementen der Userform arbeiten, so musst du immer den Userform-Namen voranstellen.
im Userform-Modul reicht:
Label1.Capiton = "Hallo Welt"

in einem allgemeinen Modul brauchst du dann:
Userform1.Label1.Caption = "Hallo Welt"

Gruß Daniel
Anzeige
AW: VBA Code aus anderen Modulen nutzen
08.04.2021 11:48:57
Daniel
wenn ich folgendes im Userform Activate Bereich einbinde bekommen meine Labels den entsprechenden Namen verpasst

Dim labelnew1
labelnew1 = "Label 1 Name"
Me.Label1.Caption = labelnew1
Für 200 Labels ist das wahnsinnig viel Code ; da ja noch viel viel mehr dazu kommt.
Nun habe ich genau diesen Code in eine eigene Sub gepackt. Nun versuche ich das Sub in der Activate aufzurufen, was mir aber nicht gelingt.
Mit CALL erhalte ich die Meldung: Fehler beim kompilieren ; Variable oder Prozedur anstelle eines Moduls erwartet
Wo liegt mein Fehler?
Anzeige
AW: VBA Code aus anderen Modulen nutzen
08.04.2021 12:05:54
Daniel
Hi
bei der Fehlermeldung hast du wahrscheinlich für Modul und Prozedur den selben Namen verwendet
Prozedur und Modul sollten immer unterschiedliche Namen haben, sonst kommt der Compiler durcheinander.
Es ist zwar möglich, eine Prozedur genauso zu benennen wie ein Modul, aber in diesem Fall muss man bei einem Aufruf mit Call vollständig referenzieren, dh.
Call Modulname.Prozedurname

das verkürzte
Call Prozedurname

funktioniert nur, wenn alle Prozedur- UND Modulnamen eindeutig sind.
dass du das ME durch den Userformnamen ersetzen musst wenn die Prozedur in einem allgemeinen Modul liegt, hast du hoffentlich beachtet.
Gruß Daniel
Anzeige
AW: VBA Code aus anderen Modulen nutzen
09.04.2021 10:35:20
Daniel
Hallo Daniel,
ja, das habe ich alles beachtet; auch den Modulaufruf habe ich korrekt gemacht.
Den Fehler habe ich eben auch gefunden ...
Ich hatte für ein Label bereits den Namen angelegt, obwohl das Label noch nicht in der Userform erstellt war. Dadurch habe ich dann die Fehlermeldung erhalten.
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

VBA Code aus anderen Modulen nutzen


Schritt-für-Schritt-Anleitung

Um eine VBA Sub aus einem anderen Modul aufzurufen, gehe wie folgt vor:

  1. Modul erstellen: Öffne den VBA-Editor (Alt + F11) und füge ein neues Modul hinzu (Rechtsklick auf „VBAProject“ > Einfügen > Modul).

  2. Sub definieren: Schreibe deine Subroutine in das neue Modul. Beispiel:

    Sub SetLabelCaption()
        UserForm1.Label1.Caption = "Hallo Welt"
    End Sub
  3. Sub aufrufen: Gehe zur Userform und füge im Activate-Ereignis den Aufruf der Sub hinzu:

    Private Sub UserForm_Activate()
        Call SetLabelCaption
    End Sub
  4. VBA Modul aufrufen: Achte darauf, dass die Sub und das Modul unterschiedliche Namen haben, um Verwirrungen zu vermeiden.


Häufige Fehler und Lösungen

Ein häufiger Fehler beim Aufrufen einer VBA Sub aus einem anderen Modul ist die Fehlermeldung: „Variable oder Prozedur anstelle eines Moduls erwartet“. Dies tritt häufig auf, wenn die Sub und das Modul denselben Namen haben.

Lösung: Stelle sicher, dass du unterschiedliche Namen für deine Module und Prozeduren verwendest. Wenn du dennoch denselben Namen verwenden möchtest, musst du den vollständigen Namen angeben:

Call Modulname.Prozedurname

Alternative Methoden

Anstelle von VBA Subs kannst du auch public Variablen oder Konstanten in deinem Modul definieren. Diese können dann direkt in der Userform verwendet werden. Beispiel:

Public labelCaption As String
labelCaption = "Neuer Text"

In deiner Userform kannst du dann einfach:

Me.Label1.Caption = labelCaption

verwendest.


Praktische Beispiele

Um den Code übersichtlicher zu gestalten, kannst du mehrere Excel VBA Module erstellen:

  1. Erstelle ein Modul für die Steuerelemente.
  2. Erstelle ein weiteres Modul für die Logik.

Beispiel für ein Modul, das die Logik enthält:

Sub UpdateLabels()
    UserForm1.Label1.Caption = "Label 1"
    UserForm1.Label2.Caption = "Label 2"
End Sub

Rufe dieses Modul dann in der Userform auf:

Private Sub UserForm_Activate()
    Call UpdateLabels
End Sub

Tipps für Profis

  • Modularität: Halte deinen Code modular, indem du logische Abschnitte in verschiedene VBA Module aufteilst.
  • Namenskonventionen: Verwende klare und eindeutige Namen für Module und Subs, um Verwirrung zu vermeiden.
  • Fehlerbehandlung: Implementiere Fehlerbehandlungsroutinen, um Probleme beim Aufrufen von Subs zu vermeiden.

FAQ: Häufige Fragen

1. Wie kann ich eine VBA Sub aus einem anderen Modul aufrufen, ohne Call zu verwenden?
Du kannst die Sub auch direkt ohne Call aufrufen, solange die Namensgebung eindeutig ist. Beispiel:

UpdateLabels

2. Was mache ich, wenn ich die Meldung „Variable oder Prozedur anstelle eines Moduls erwartet“ erhalte?
Überprüfe, ob du für die Sub und das Modul denselben Namen verwendet hast. Ändere einen der beiden Namen, um den Fehler zu beheben.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige