vba - reservadas - ¿Qué hace la palabra clave Call en VB6?
palabras reservadas de visual basic pdf (5)
Hay un código en nuestro proyecto que se parece un poco a esto:
Private Sub Method1()
Call InnerMethod
End Sub
Private Sub Method2()
InnerMethod
End Sub
Private Sub InnerMethod()
'''' stuff
End Sub
¿Cuál es la ventaja de hacer Method1 sobre Method2?
Aquí hay una post que describe cuándo necesita utilizar la llamada vs no usarla y cuándo debe paréntesis alrededor de sus parámetros.
También puede leer más acerca de las call de MSDN. Básicamente, la principal diferencia es que cuando usa la función llamada para llamar a una función, no puede acceder al valor de retorno.
Desde MSDN :
No es necesario que use la palabra clave Call cuando llama a un procedimiento. Sin embargo, si usa la palabra clave de llamada para llamar a un procedimiento que requiere argumentos, la lista de argumentos debe estar entre paréntesis. Si omite la palabra clave de llamada, también debe omitir los paréntesis alrededor de la lista de argumentos. Si utiliza la sintaxis de llamada para llamar a cualquier función intrínseca o definida por el usuario, el valor de retorno de la función se descarta.
Por ejemplo:
Sub Proc1()
Debug.Print "Hello World"
End Sub
Sub Proc2(text As String)
Debug.Print "Hello " & text
End Sub
En la ventana inmediata, si ingresas
Proc1
luego se imprime "Hello World". Si ingresas
Call Proc1
luego se imprime "Hello World". Si ingresas
Proc2 "World"
luego se imprime "Hello World". Si ingresas
Call Proc2 "World"
obtienes un error de compilación Deberías ingresar
Call Proc2("World")
He encontrado una diferencia importante sobre la palabra clave ''call'' con funciones que tienen argumentos ByRef (he encontrado esto en el editor de MS-Access VBA). Si llama a la función sin la palabra clave ''Llamada'', los argumentos de ByRef no se establecerán para la calle. Por ejemplo:
Private Function Test(Optional ByRef refArg As String) As Boolean
refArg = "Test"
Test = True
End Function
Si llama a la función sin la palabra clave de Call
como
Dim a As String
Test(a)
a
será una cadena vacía, después de que la llamada regrese
Si llama a la función con la palabra clave de Call
como
Dim a As String
Call Test(a)
a
contendrá la Test
cadena
La explicación detallada se proporciona en el siguiente enlace: http://blogs.msdn.com/b/ericlippert/archive/2003/09/15/52996.aspx
La llamada no hace nada especial más que llamar al método. Es un rezago de los viejos tiempos de Basic cuando todas las líneas tenían que comenzar con una palabra clave. "Let" es otra de estas palabras clave, que siempre se puso antes de una tarea, pero ya no es necesaria.
Method1 y Method2 hacen exactamente lo mismo.
No hay diferencia