Optional

25/01/2005 - 01:49 por Jose Nuñez | Informe spam
Cuando pongo un parámetro opcional en una función VBA y la escribo de la
siguiente forma funciona correctamente:

Public function XX(strParam1 as string, Optional strParam2)



Pero si al final agrego el tipo de dato de ese parametro opcional:

Public function XX(strParam1 as string, Optional strParam2 as string)


resulta que dicho parámetro ya no es opcional .
En la ayuda de Excel no dice nada al respecto.

Supuestamente esa es la sintaxis correcta, e incluso se le puede asignar un
valor: ... Optional strParam2 as string = "xxx" ...

Agradezco si me pueden dar una ayuda con esto.

Saludos.
José Nuñez
Montevideo - Uruguay
 

Leer las respuestas

#1 Héctor Miguel
25/01/2005 - 06:05 | Informe spam
hola, Jose !

... un parametro opcional en una funcion VBA ... de la siguiente forma funciona correctamente:
Public function XX(strParam1 as string, Optional strParam2)
Pero si al final agrego el tipo de dato de ese parametro opcional:
Public function XX(strParam1 as string, Optional strParam2 as string)
resulta que dicho parametro ya no es opcional ... la ayuda de Excel no dice nada al respecto.
... esa es la sintaxis correcta, e incluso se le puede asignar un valor: ... Optional strParam2 as string = "xxx" ...



1° cuando antepones la palabra clave 'optional' a un argumento en una funcion, 'significa'...
a) [precisamente] que 'ese' parametro no necesita ser proporcionado a la funcion
b) [necesariamente] que los siguientes argumentos [en caso de haberlos] TAMBIEN 'deberan ser' opcionales
2° [como bien lo mencionas] incluso 'puedes' asignar su valor 'inicial/por omision' [si es que no se proporciona]
3° si 'te afecta' el establecer el 'tipo de datos' de algun parametro [opcional o no]... [probablemente]...
se debe a' que el codigo esta 'tratando' de adivinar/averiguar el tipo de datos que 'debera manejar'
[dicho sea de paso, si no se asigna un tipo de datos... 'se asume' de tipo 'variant' -que consume mas recursos-]
4° al definir una variable [o argumento en funcion] con un tipo de datos 'string', se inicializa con una cadena vacia ->""<-
[y en tanto no sea 'llenado/modificado', sera el valor_texto que el codigo estara 'manejando']
5° [hay mas... pero] 'en resumen' [y para el caso concreto que expones]...
-> si vas a manejar strings... podrias 'llenar' el argumento omitido p.ej.
a) en tu forma 'original' ->public func.. optional strParam2)<- [incluso con el 'As String']
If IsMissing(strParam2) Then strParam2 = ""
b) con un valor asignado ->public func.. optional strParam2 as string = "xxx")<-
If strParam2 = "xxx" Then o... If strParam2 <> "xxx" Then

¿comentas?
saludos,
hector.

Preguntas similares