2017-06-09 8 views
1

Versucht zu verstehen, wie ein Wert von einer Funktion an ein Sub-Objekt zurückgegeben wird und das Ergebnis in einer Message-Box angezeigt wird, aber ich kann es nicht bekommen. Was bin ich Learning-Code unten: -Variable an Funktion übergeben und zurück VBA

Sub mySend() 

Dim myNum As Integer 

myNum = InputBox("Enter number") 

myReturn (myNum) 

msgbox myReturn 'would like to display result in messagebox here but no joy 

End Sub 
'-------------------------------------- 
Function myReturn(ByRef myNum As Integer) 

Dim myCalc As Integer 

myCalc = myNum + 10 

myReturn = myCalc 

End Function 
+0

Vielen Dank für Ihre Unterstützung. Ich bin ein Neuling dazu. Also, wie sollte der Code aussehen, damit ich sehen kann, wohin und wo ich mich entkomme? Danke noch einmal. – Junior

Antwort

1

Verwenden Sie keinen Parameter ByRef - verwenden Sie einfach eine Funktion richtig.

Sub mySend() 

Dim myNum As Integer 

myNum = InputBox("Enter number") 

myNum = myReturn(myNum) '// You need to assign (=) the value to the variable 

msgbox myNum 

End Sub 
'-------------------------------------- 
Function myReturn(number As Integer) As Integer '// Note the return type after the() 

Dim myCalc As Integer 

myCalc = number + 10 

myReturn = myCalc 

End Function 

Wenn Sie eine Variable durch Verweis in Ihrem Beispiel übergeben wollen, dann müssen Sie eigentlich den Wert des gleichen Variable sonst ändern, wenn Sie es wieder in dem anrufenden Code verweisen, dass Wert nicht geändert haben:

(Dieser Code ist geändert, um das Ergebnis von ByRef, wenn sie richtig verwendet zu zeigen, ich habe nicht wirklich mit diesem Code empfehlen)

Sub mySend() 

Dim myNum As Integer 

myNum = InputBox("Enter number") 

myReturn myNum '// No need for parentheses here 

msgbox myNum 

End Sub 
'-------------------------------------- 
Function myReturn(ByRef myNum As Integer) 

myNum = myNum + 10 

End Function 
+0

Sie ** brauchen ** nicht, um den Wert eines Parameters zu ändern, der an "ByRef" übergeben wurde, aber Sie ** können ** ihn ändern. Und in Ihrem zweiten Beispiel gibt Ihre 'myReturn'-Funktion eine' Variant/Empty' zurück, was keine gute Idee ist. – YowE3K

+0

Mein zweites Beispiel ist nur für den Fall, dass das OP versuchte zu verstehen, warum ByRef nicht in _their_ Beispiel arbeitete. Ich würde niemals befürworten, ByRef in VBA zu verwenden, es sei denn, es ist absolut notwendig. Ich habe buchstäblich nur ihren Code geändert, damit sie verstehen, warum sie nicht so funktioniert wie sie ist. –

+0

Aber es ist keine gute Idee, eine 'Funktion' zu verwenden, die 'leer' zurückgibt. Ermutigen Sie sie, stattdessen ein "Sub" zu verwenden, wenn Sie keinen korrekten Wert zurückgeben. – YowE3K

2

das Ergebnis der Funktion einer Variablen zuweisen und das Ergebnis in der messagebox zeigen:

Dim result as Integer 
result = myReturn(myNum) 
+0

Du hast recht ;-) Korrigierte die Antwort ... –

+0

Fantastisch !!! Ich habe es und ich verstehe das Ding jetzt. Vielen Dank und bleib gesund. – Junior

0

Wie Peter sagte, müssen Sie das Ergebnis speichern von Ihrem myReturn (myNum) Anruf. Und dann zeigen, dass variable:

result = myReturn(myNum) 
MsgBox result 

Eigentlich brauchen Sie nicht einmal die „Dim Ergebnis“. Warum? Ich weiß es nicht, aber ich habe es getestet und es hat funktioniert.

+0

Mit '' 'Dim Ergebnis als Integer''' können Sie den Integer-Datentyp angeben. Sonst in VBA wäre es ein '' 'Variant''' Datentyp ... –

+0

Wenn Sie' Option Explicit' nicht verwenden (was Sie tun sollten!) Müssen Sie keine Variablentypen in VBA deklarieren - standardmäßig werden sie verwendet ein 'Variant' Typ. Daher gibt die OP-Funktion eine 'Variant/Integer 'zurück, weil sie in der Funktionsdeklaration die' As Integer 'weggelassen haben. Und Ihr 'Ergebnis' wird zu 'Variant/Integer'. (PS Sie können Ihren Code auf "MsgBox myReturn (myNum)" reduzieren, wenn Sie möchten.) – YowE3K

+0

bezogen: https://stackoverflow.com/questions/35435368/is-it-useless-to-use-dim-to- deklarieren-eine-Variable-wenn-ich-nicht-schreiben-ein-als-somethi/35435833 # 35435833 –

Verwandte Themen