Microsoft Excel

Herbers Excel/VBA-Archiv

Variablenübergabe aus Modulen

Betrifft: Variablenübergabe aus Modulen von: Michael
Geschrieben am: 11.09.2020 12:20:00

Moin Zusammen,

ich brauche eure Hilfe, da ich irgendwie durch den Wind, oder einfach beschränkt bin.


Ich versuche Variablen aus Untermodulen in mein Makro zu holen, was nur zum Teil gelingt


Makro

Sub Abrechnungscode()

Dim Varibale1 as string

Dim Varibale2 as string


Call Modul1(Kriterium1)


Modul1

Public sub Daten1()


If Kriterum1= "B1" Then Variable1 = " ": Variable2 = " "


oder


If Kriterum1= "B1" Then Variable2 = " "


Im Einzelschritt kann ich sehen das beide Variablen gefüllt werden, aber nur Variable1 zurückgemeldet wird. Wie bekomme ich Variable 2 zurück?


Gruß

Michael

Betrifft: AW: Variablenübergabe aus Modulen
von: Herbert_Grom
Geschrieben am: 11.09.2020 12:29:55

Hallo Michael,

"Dim Varibale2 as string" musst du wahrscheinlich außerhalb des Codes im Standardmudul als "Public" schreiben.

Servus

Betrifft: AW: Variablenübergabe aus Modulen
von: Herbert_Grom
Geschrieben am: 11.09.2020 12:32:44

so z. B.:
Option Explicit

Public Varibale2 As String

Sub ...
...
End Sub
Servus

Betrifft: AW: Variablenübergabe aus Modulen
von: Michael
Geschrieben am: 11.09.2020 13:36:25

hm ... nee, hat nichts gebracht

Betrifft: AW: Variablenübergabe aus Modulen
von: Michael
Geschrieben am: 11.09.2020 14:54:56

Hey Herbert, das hat funktioniert. Danke für Deine Unterstützung!

Betrifft: AW: Variablenübergabe aus Modulen
von: Herbert_Grom
Geschrieben am: 11.09.2020 16:32:45

Bitte sehr, gerne geschehen. Danke für die Rückmeldung.

Servus

Betrifft: AW: Variablenübergabe aus Modulen
von: Daniel
Geschrieben am: 11.09.2020 12:37:34

Hi
entweder gibt's du die zweite Variable ebenfalls als Übergabeparameter an (Call Modul1(Kriterium1, Kriterium2)

oder du deklarierst alle Variablen, die in beiden Subs verwendet und verändert werden sollen, als Projektweit gültig, dh die Deklaration erfolgt nicht innerhalb eines Makros, sondern in einem allgemeinen Modul oberhalb der Makros (unter Option Explicit, welches hierbei sehr empfehlenswert ist) mit dem Vorsatz PUBLIC.

ersteres wäre "nach Lehrbuch", zweites ist einfach praktikabler vorallem wenn man viele solcher Variablen hat.
Vorteil der zweiten Methode ist, dass dabei eine Variable in allen Subs auch immer den gleichen Namen hat, während bei der ersten Methode die selbe Variable in jeder Sub einen anderen Namen haben kann.

Gruß Daniel

Betrifft: AW: Variablenübergabe aus Modulen
von: Michael
Geschrieben am: 11.09.2020 14:43:45

Hey Daniel,

das war nicht schlecht. Ich werde mir mal die bisherigen Antworten zusammenziehen und ausprobieren. Antwort kommt.

Betrifft: AW: Variablenübergabe aus Modulen
von: Daniel
Geschrieben am: 11.09.2020 14:57:14

die anderen haben auch nichts anderes geschrieben als ich hier erwähnt habe.
Gruß Daniel

Betrifft: AW: Variablenübergabe aus Modulen
von: Michael
Geschrieben am: 11.09.2020 14:51:37

Hey Daniel,

das klappt. Ich habe die betroffenen Variablen "explicit" im Modul ausgewiesen. Dank!

Betrifft: AW: Variablenübergabe aus Modulen
von: Nepumuk
Geschrieben am: 11.09.2020 12:44:11

Hallo Michael,

würde ich so lösen:

Public Sub Abrechnungscode()
    
    Dim Variable1 As String
    Dim Variable2 As String
    Dim Kriterium1 As String
    
    Call Daten1(Kriterium1, Variable1, Variable2)
    
End Sub

Public Sub Daten1(Kriterium1 As String, Variable1 As String, Variable2 As String)
    If Kriterium1 = "B1" Then Variable1 = " ": Variable2 = " "
End Sub

Gruß
Nepumuk

Betrifft: AW: Variablenübergabe aus Modulen
von: Michael
Geschrieben am: 11.09.2020 14:13:25

Hey Nepumuk, danke für den Fingerzeig!

Das Kuriose ist, das ich das Marko nicht mit Public Sub eröffnet habe noch die Variablen deklariert habe.

Ich Habe das Modul mit Public Sub eröffnet. Witziger weise kann ich alle Variablen aus dem Modul im Makro, ohne sie im Makro oder im Modul vorher deklariert zu haben, abrufen. Ich verstehe es zwar nicht, aber es klappt ...

Betrifft: AW: Variablenübergabe aus Modulen
von: Nepumuk
Geschrieben am: 11.09.2020 14:28:04

Hallo Michael,

das liegt daran dass du Option Explicit nicht benutzt. Das würde dich zwingen alle Variablen zu deklarieren. Ohne werden die Variablen just in time beim Aufruf der Prozedur als Variant deklariert.

Also: Im VBA-Editor - Menüleiste - Extras - Optionen - Reiter" Editor" - Häkchen raus bei "Automatische Syntaxüberprüfung" und Häkchen rein bei "Variablendeklaration Erforderlich". Zusätzlich noch im Reiter "Allgemein" - "Unterbrechen bei Fehlern" - In Klassenmodul.

Gruß
Nepumuk

Betrifft: AW: Variablenübergabe aus Modulen
von: Michael
Geschrieben am: 11.09.2020 14:41:16

Hallo Nepumuk,

ok, das ist nachvollziehbar und für meinen Rechner anwendbar. Kommt das Progi auf anderen Rechnern zur Anwedung, was es ja soll, können die Einstellungen nicht vorgenommen werden. Wenn ich nun die notwendigen Deklarationen vornehme ohne die Einstellungen klappt es denn auch auf anderen Rechnern?

Betrifft: AW: Variablenübergabe aus Modulen
von: Nepumuk
Geschrieben am: 11.09.2020 14:50:37

Hallo Michael,

ja, mit Deklaration läuft es auf allen Rechnern, und du hast die Gewissheit das es auch die richtigen Werte ausgibt.

Gruß
Nepumuk

Betrifft: AW: Variablenübergabe aus Modulen
von: Michael
Geschrieben am: 11.09.2020 14:53:17

Hey Nepumuk, das hat alles geklappt! Danke

Beiträge aus dem Excel-Forum zum Thema "Variablenübergabe aus Modulen"