En el libro de Macros de OpenOffice y LibreOffice de Mauricio macros en la pagina 75, se pone un ejemplo de la Función IsMissing.
Textualmente dice:
“El paso de argumentos en subrutinas y funciones, tiene otra posibilidad muy interesante, el paso de argumentos opcionales, continuemos con nuestro ejemplo del circulo, supongamos que ahora se nos pide hacer una macro que calcule ya sea el área o el perímetro de un circulo, para usar la misma función, le agregaremos un argumento opcional para saber si lo que queremos calcular es el perímetro”.
Sigue diciendo en la misma pagina 75:
“Nota el uso de la palabra clave Optional, para fines de lo que se nos pide usamos una variable tipo boleana, verdadera o falsa (Boolean), pero en tus funciones puede declarar al igual que los otros argumentos, del tipo que necesites, puedes declarar tantos argumentos opcionales como necesites, el punto importante es que “compruebes” si se paso o no el argumento para que en su defecto, le asignes un valor por default a dicho argumento, para verificar si se paso o no un argumento usas la función de OOo Basic IsMissing( Argumento ), como se ve en el ejemplo anterior. Todos los parámetros que declares como opcionales deben de ir como últimos argumentos declarados”.
La duda que tal vez pueda surgir es donde tengo marcado con color rojo en el parrafo anterior. Te pongo un ejemplo adicional: para que sea mas entendible eso de argumentos opcionales.
Option Explicit Sub CalcularCirculo Dim dArea As Double Dim dPeri As Double Dim sRadio As Single sRadio = CSng( Trim( InputBox( "¿Cual es el radio?", "Circulo", "1" ) ) ) If sRadio > 0 Then 'Aquí usamos la función SIN el argumento opcional If sRadio > 0 Then 'Aquí usamos la función SIN el argumento opcional dArea = Circulo( sRadio ) MsgBox "Área = " & Str(dArea) End If End Sub Function Circulo( Radio As Single, Optional Perimetro As Boolean ) As Double Const PI As Single = 3.1416 'Comprobamos si el parámetro se paso o no If IsMissing( Perimetro ) Then 'Si no se paso le asignamos el valor por default Perimetro = False if perimetro is false then msgbox "perimetro es falso" else msgbox "perimetro es verdadero" endif End If If Perimetro Then Circulo = PI * ( Radio * 2 ) 'Calculo de PERIMETRO Else Circulo = PI * ( Radio ^ 2 ) 'calculo de AREA End If End Function
En el ejemplo anterior, si te fijas bien elimine la variable “dPeri”, asi que la variable de la funcion que se llama “Perimetro”, asi que al comprobar la funcion “Perimetro” nuestra macro encontrara que no existe asi que nos enviara un mensaje que dice: “perimetro es falso”.
De todos modos si te alguna duda te invito a que hagas tus pruebas con los siguientes codigos que te dejo adjuntos en formato de texto plano para que hagas tus pruebas, solo así podras aprender que significa eso de argumentos opcionales con IsMissing. Pero solo lo sabras probando estos codigos, bajo tu responsabilidad. codigos en texto plano aqui
Si te sirvio mi aporte dimelo en los comentarios.