Buscar..


Sintaxis

  • IdentifierName [ argumentos ]
  • Call IdentifierName [ (argumentos) ]
  • [Let | Set] expresión = IdentifierName [ (argumentos) ]
  • [Let | Set] IdentifierName [ (argumentos) ] = expresión

Parámetros

Parámetro Información
Nombre del identificador El nombre del procedimiento a llamar.
argumentos Una lista de argumentos separados por comas para pasar al procedimiento.

Observaciones

Las dos primeras sintaxis son para llamar a los procedimientos Sub ; Note que la primera sintaxis no implica paréntesis.

Ver Esto es confuso. ¿Por qué no usar siempre paréntesis? para una explicación detallada de las diferencias entre las dos primeras sintaxis.

La tercera sintaxis es para llamar a los procedimientos de Function y Function Property Get ; Cuando hay parámetros, los paréntesis son siempre obligatorios. La palabra clave Let es opcional cuando se asigna un valor , pero se requiere la palabra clave Set cuando se asigna una referencia .

La cuarta sintaxis es para llamar a los procedimientos Property Let y Property Set ; la expression en el lado derecho de la asignación se pasa al parámetro de valor de la propiedad.

Sintaxis de llamada implícita

ProcedureName
ProcedureName argument1, argument2

Llame a un procedimiento por su nombre sin paréntesis.


Caso extremo

La palabra clave de Call solo se requiere en un caso de borde:

Call DoSomething : DoSomethingElse

DoSomething y DoSomethingElse son procedimientos a los que se llama. Si se eliminara la palabra clave de Call , DoSomething se analizaría como una etiqueta de línea en lugar de una llamada de procedimiento, lo que rompería el código:

DoSomething: DoSomethingElse 'only DoSomethingElse will run

Valores de retorno

Para recuperar el resultado de una llamada de procedimiento (por ejemplo, los procedimientos de Function o Property Get ), coloque la llamada en el lado derecho de una asignación:

result = ProcedureName
result = ProcedureName(argument1, argument2)

Los paréntesis deben estar presentes si hay parámetros. Si el procedimiento no tiene parámetros, los paréntesis son redundantes.

Esto es confuso. ¿Por qué no usar siempre paréntesis?

Los paréntesis se utilizan para encerrar los argumentos de las llamadas de función . Su uso para llamadas de procedimiento puede causar problemas inesperados.

Porque pueden introducir errores, tanto en tiempo de ejecución al pasar un valor posiblemente no deseado al procedimiento, como en tiempo de compilación simplemente por ser una sintaxis no válida.

Tiempo de ejecución

Los paréntesis redundantes pueden introducir errores. Dado un procedimiento que toma una referencia de objeto como parámetro ...

Sub DoSomething(ByRef target As Range)
End Sub

... y llama con paréntesis:

DoSomething (Application.ActiveCell) 'raises an error at runtime

Esto generará un error de tiempo de ejecución "Objeto requerido" # 424. Otros errores son posibles en otras circunstancias: aquí la referencia del objeto Application.ActiveCell Range se evalúa y se pasa por valor, independientemente de la firma del procedimiento que especifique que ByRef pasaría el target . El valor real pasado de ByVal a DoSomething en el fragmento anterior, es Application.ActiveCell.Value .

Los paréntesis obligan a VBA a evaluar el valor de la expresión entre corchetes y pasar el resultado ByVal al procedimiento llamado. Cuando el tipo del resultado evaluado no coincide con el tipo esperado del procedimiento y no se puede convertir implícitamente, se genera un error de tiempo de ejecución.

Tiempo de compilación

Este código no podrá compilar:

MsgBox ("Invalid Code!", vbCritical)

Debido a que la expresión ("Invalid Code!", vbCritical) no se puede evaluar a un valor.

Esto compilaría y funcionaría:

MsgBox ("Invalid Code!"), (vbCritical)

Pero definitivamente se vería tonto. Evite los paréntesis redundantes.

Sintaxis explícita de llamadas

Call ProcedureName
Call ProcedureName(argument1, argument2)

La sintaxis de llamada explícita requiere la palabra clave de Call y paréntesis alrededor de la lista de argumentos; los paréntesis son redundantes si no hay parámetros. Esta sintaxis se volvió obsoleta cuando se agregó a VB la sintaxis de llamada implícita más moderna.

Argumentos opcionales

Algunos procedimientos tienen argumentos opcionales. Los argumentos opcionales siempre vienen después de los argumentos requeridos, pero el procedimiento se puede llamar sin ellos.

Por ejemplo, si la función, ProcedureName tuviera dos argumentos obligatorios ( argument1 , argument2 ) y un argumento opcional, optArgument3 , podría llamarse al menos cuatro formas:

' Without optional argument
result = ProcedureName("A", "B")

' With optional argument
result = ProcedureName("A", "B", "C")

' Using named arguments (allows a different order)
result = ProcedureName(optArgument3:="C", argument1:="A", argument2:="B")

' Mixing named and unnamed arguments 
result = ProcedureName("A", "B", optArgument3:="C")

La estructura del encabezado de la función que se llama aquí sería algo así:

Function ProcedureName(argument1 As String, argument2 As String, Optional optArgument3 As String) As String

La palabra clave Optional indica que este argumento se puede omitir. Como se mencionó anteriormente, todos los argumentos opcionales introducidos en el encabezado deben aparecer al final, después de los argumentos requeridos.

También puede proporcionar un valor predeterminado para el argumento en el caso de que un valor no se pase a la función:

Function ProcedureName(argument1 As String, argument2 As String, Optional optArgument3 As String = "C") As String

En esta función, si no se proporciona el argumento para c , su valor será por defecto "C" . Si se proporciona un valor, esto anulará el valor predeterminado.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow