Vba: sub aus sub aufrufen mit rückgabe von werten

Tach’chen.

Eine ganz simple Funktionalität von vba kriege ich nicht zum Laufen, weil ich leider nirgends eine Erklärung dafür gefunden habe. Anscheinend ist es einfach zu offensichtlich:

Wie kann ich aus Sub eins() ein Sub zwei() aufrufen, das dann an Sub 1() wiederum einen Wert zurückliefert?

Nach folgender Methode müsste ich doch durch aufrufen des Sub eins() die MsgBox mit Ausgabe „999“ kriegen, oder??

----------------
Sub eins()

Dim i as integer

i = zwei
MsgBox i

end sub
-------------------
sub zwei()

zwei = 999

end sub
-------------------

Vielen Dank
TTR

Tach’chen.

Hallo!

Eine ganz simple Funktionalität von vba kriege ich nicht zum
Laufen, weil ich leider nirgends eine Erklärung dafür gefunden
habe. Anscheinend ist es einfach zu offensichtlich:

Wie kann ich aus Sub eins() ein Sub zwei() aufrufen, das dann
an Sub 1() wiederum einen Wert zurückliefert?

Nach folgender Methode müsste ich doch durch aufrufen des Sub
eins() die MsgBox mit Ausgabe „999“ kriegen, oder??


Sub eins()

Dim i as integer

i = zwei
MsgBox i

end sub

sub zwei()

zwei = 999

end sub

In dieser Form geht es nur mit einer VBA-Funktion und nicht mit einer Prozedur:

----------------
Sub eins()
Dim i as integer
i = zwei
MsgBox i
end sub
-------------------
Function zwei() as Integer
zwei = 999
End Function
-------------------

Gruß, tester

Moinmoin!

sub zwei()
zwei = 999
end sub

Den Unterschied von Function und Sub hat Tester schon beschrieben. Generell sollte man, wenn man was zurückhaben will, die Funktion verwenden.

Eine andere Alternative wäre es, den „Rückgabeparameter“ schon mit zu übergeben und ändern zu lassen:

Sub Eins()
 Dim lngZahl As Long
 lngZahl = 2
 Call Zwei(lngZahl)
 MsgBox CStr(lngZahl) ' -\> 999
End Sub

Sub Zwei(ByRef var As Long)
 var = 999
End Sub

Das macht’s aber unübersichtlicher, weil durch den Aufruf der Sub nicht sofort ersichtlich ist, dass u. U. übergebene Werte geändert werden…

Gruß, Manfred

Tach’chen.

In dieser Form geht es nur mit einer VBA-Funktion und nicht
mit einer Prozedur:


Sub eins()
Dim i as integer
i = zwei
MsgBox i
end sub

Function zwei() as Integer
zwei = 999
End Function

Seh ich das richtig, dass ich eine Variable verwende, die im Namen genau der Funktion entspricht und somit den Rückgabewert definiert habe? Diese Variable wird auch nicht mittels „Dim“ definiert, sondern einfach verwendet? Es ist auch nicht möglich, mehrere Werte zurückzugeben?

Vielen Dank
TTR

Moin!

Function zwei() as Integer
zwei = 999
End Function

Seh ich das richtig, dass ich eine Variable verwende, die im
Namen genau der Funktion entspricht und somit den Rückgabewert
definiert habe? Diese Variable wird auch nicht mittels „Dim“
definiert, sondern einfach verwendet?

Jein. Streng genommen Nein. Vom Verständnis her ja.

Das „zwei = 999“ ist nicht die Variable. Eine Funktion benötigt immer eine Rückgabe. Deren Typ wird im Funktionskopf (Function xy(Variablen) AS Rückgabetyp) definiert. Die Rückgabe erfolgt, indem dem Funktionsnamen der Wert zugewiesen wird. Das zwei ist somit keine Variable im eigentlichen Sinne.

Es ist auch nicht möglich, mehrere Werte zurückzugeben?

In einer Funktion nicht. Abhilfe wäre, bestimmte Typen zu definieren oder mehrere Werte in Arrays zu schreiben, aber letztendlich liefert eine Funktion immer nur einen „Wert“.

Die andere Möglichkeit ist es, die Parameter „ByRef“, also als Referenz, zu übergeben und sie in der Funktion oder Prozedur zu ändern.

Gruß, Manfred