Ich habe einen großen Unterschied gefunden über 'Call' Schlüsselwort mit Funktionen, die, ByRef Argumente haben (Ich habe dies in MS-Access VBA-Editor gefunden). Wenn Sie die Funktion ohne das Schlüsselwort 'Call' aufrufen, wird ByRef arguments nicht für die Calle gesetzt.Für Ex:
Private Function Test(Optional ByRef refArg As String) As Boolean
refArg = "Test"
Test = True
End Function
Wenn Sie die Funktion ohne Call
Stichwort nennen wie
Dim a As String
Test(a)
a
wird ein leerer String sein, nachdem der Anruf
kehrt Wenn Sie die Funktion mit der Call
nennen Stichwort wie
Dim a As String
Call Test(a)
a
wird die Zeichenfolge Test
die detaillierte Erklärung enthalten in der folgenden Verbindung bereitgestellt: http://blogs.msdn.com/b/ericlippert/archive/2003/09/15/52996.aspx
Die beiden sind nicht äquivalent. Im ersten Fall bewirkt das Einschließen des Arguments in parens, dass es ausgewertet wird und das Ergebnis der Bewertung wird übergeben: Im Wesentlichen übergeben Sie eine Kopie von "a", nicht "a" selbst. Dies wird durch den Parser offensichtlich gemacht. Wenn Sie Test (a) eingeben und die Zeile belassen, fügt der Parser ein Leerzeichen hinzu, sodass Test (a) als Ausdruck angezeigt wird. während bei Call Test (a) kein Leerzeichen hinzugefügt wird - Sie übergeben "a" direkt. Siehe die Antwort von Patrick Cuff oben für die Doc-Referenz. –
In der Tat, und das Ergebnis tatsächlich erhalten (zum Beispiel, MsgBox Test (a) ') stellt die Äquivalenz wieder her. – Ant