robertka
Goto Top

Abfrage über function bei vbs

Hallo zusammen,

habe ein vb Script, welches je nach Aufruf verschiedene Mails verschickt. Es funktioniert also schon. Und das einwandfrei. Der Nachteil dabei ist, dass unter der jeweiligen function eine Menge jeweils gleicher Code und Text etc drinsteht. Muss ich was im Mailtext oder so ändern, muss ich das 4mal machen. Im Grunde wird ja eigentlich nur immer eine andere Mailadresse verwendet.
Jetzt hab ich mir gedacht dies wie folgt zu vereinfachen und nach der function einfach einen Parameter aufzunehmen und dann drunter mit if und else etc. das ein einem zu verarbeiten. Aber bei der Ausgabe ist sParameter immer leer. Wahrscheinlich ist es auch ganz einfach, aber ich komm nicht dahinter. Kann mir jemand sagen warum?

Vielen Dank und viele Grüße

Robert

Dim sParameter

function MailanPrivat01
sParameter = "1"
end function

function MailanPrivat02
sParameter = "2"
end function

function MailanFirma01
sParameter = "3"
end function

function MailanFirma02
sParameter = "4"
end function

MsgBox "Mail an " & sParameter, 48, "Test"
Wscript.Quit

Content-Key: 252755

Url: https://administrator.de/contentid/252755

Printed on: April 20, 2024 at 03:04 o'clock

Member: colinardo
Solution colinardo Oct 22, 2014 updated at 15:26:09 (UTC)
Goto Top
Hallo Robert,
hier ein Beispiel wie man Funktionsparameter verwenden kann:
Function sendMail(intParameter)
	Dim mailto
	Select Case intParameter
		Case 1
			mailto = "mailPrivat01@domain.de"  
		Case 2
			mailto = "mailPrivat02@domain.de"  
		Case 3
			mailto = "mailFirma01@domain.de"  
		Case 4
			mailto = "mailFirma02@domain.de"  
	End Select
	'......  
	'------ Hier der Rest deiner Mail-Routine ------  
	MsgBox "Sende mail an: " & mailto  
End Function

'Sende Mail an Privat 1  
sendMail 1
'Sende Mail an Privat 2  
sendMail 2
'etc ....  
Du kannst der Funktion auch mehrere Parameter übergeben wenn du Bedarf hast, diese werden einfach mit Komma voneinander getrennt:
Function sendMail(intParameter,strSubject,strBody)
'....  
End Function
'Aufruf der Funktion mit mehreren Parametern  
sendMail 1,"Betreff","Das ist ein Body-Text"  
Innerhalb der Funktionen greifst du dann mit den definierten Parameternamen auf die übergebenen Werte zu.

Siehe zu Prozeduren und Funktionen auch:
http://www.html-world.de/488/prozeduren-und-funktionen/

Grüße Uwe
Member: RobertKa
RobertKa Oct 22, 2014 at 15:27:48 (UTC)
Goto Top
Hallo Uwe,

besten Dank. Funktioniert einwandfrei. Wenngleich ich immer noch rätsele, warum in meiner Version sParameter immer leer war.

Jedenfalls vielen Dank und viele Grüße

Robert
Member: colinardo
colinardo Oct 22, 2014 updated at 15:51:56 (UTC)
Goto Top
Zitat von @RobertKa:
Wenngleich ich immer noch rätsele, warum in meiner Version sParameter immer leer war.
Weil die Variable innerhalb der Funktion geschützt ist. D.h innerhalb des Funktionskörpers ist dies Quasi eine neue Variable die nur in der Funktion verfügbar ist, die Ursprüngliche Variable außerhalb der Funktion änderst du damit nicht.
Das kannst du aber z.B. mit einer Rückgabe des Wertes aus der Funktion ändern. Um etwas aus einer Funktion zurückzugeben weist du dem Namen der Funktionen den Wert zu,
Function sendMail()
        'Wert aus der Funktion zurückgeben  
	sendMail = 2
End Function

'Funktion aufrufen und zurückgegebenen Wert der Variablen zuweisen  
sParameter = sendMail

MsgBox sParameter
Steht oben in der Referenz ...

Etwas ähnliches kannst du mit ByRef ("Referenzparameter") vor dem Parameternamen erreichen, dann wird die ursprüngliche Variable geändert.
Dim sParameter
Function sendMail(ByRef sPar)
	sPar = 20
End Function

msgbox "Parameter hat noch keinen Wert : " & sParameter  

'Funktion mit ByRef Parameter aufrufen  
sendMail sParameter

' sParameter wurde durch die Funktion geändert und hat jetzt den Wert 20  
msgbox "Parameter hat nun den Wert : " & sParameter  

Hoffe das hat zu deinem Verständnis beigetragen face-smile

Schönen Abend
Grüße Uwe
Member: RobertKa
RobertKa Oct 22, 2014 at 17:01:32 (UTC)
Goto Top
Hallo Uwe,

ja das hat es. Danke! So etwas ähnliches hab ich mir schon gedacht.

Viele Grüße und ebenso schönen Abend.

Robert