Bifurcaciones
Qué son y para qué sirven
¿Te has puesto a pensar cuantas decisiones tomas al día? La vida esta hecha de decisiones, o eso dicen, y en las macros no nos salvamos de ellas; casi siempre hay que estar decidiendo algo y de acuerdo a esa decisión tomamos uno u otro camino. Afortunadamente en OOo Basic es mucho más sencillo que en la vida. Veamos como hacerlo.
Un pregunta importante: ¿Quieres ser mi novia?
Si responde que “no” ¿que hago?, pero ¿y si dice que “sí”? Preguntémosle.
Option Explicit
Sub Novios
Dim Respuesta As Integer
Respuesta = MsgBox( "¿Quieres ser mi novia?", 32 + 4, "Novios" )
MsgBox Respuesta
End Sub
En la macro anterior únicamente estamos obteniendo la información del botón que seleccionó el usuario: en la variable Respuesta tendremos un 6 si pulsó el botón Sí o un 7 si pulsó el botón No , de acuerdo a los valores que ya vimos en Instrucciones y funciones en OOo Basic.
Instrucción If... Then... Else
Dado que sabemos que botón eligió el usuario podremos actuar en consecuencia, dependiendo de su respuesta, gracias a la instrucción If...Then...Else. Veamos su uso.
Sub Novios
Dim Respuesta As Integer
'La pregunta importante
Respuesta = MsgBox( "¿Quieres ser mi novia?", 32 + 4, "Novios" )
'Evaluamos la respuesta, recuerda, un 7 es igual No
If Respuesta = 7 Then
MsgBox "Pues no sabes lo que te pierdes"
End If
End Sub
Con esta macro solo podemos actuar cuando se presionó el botón No . Para actuar también si se presionó el botón Sí , modificaremos la macro.
Sub Novios
Dim Respuesta As Integer
'La pregunta importante
Respuesta = MsgBox( "¿Quieres ser mi novia?", 32 + 4, "Novios" )
'Evaluamos la respuesta, recuerda, un 7 es igual No
If Respuesta = 7 Then
MsgBox "Pues no sabes lo que te pierdes"
Else
'Cualquier otro valor diferente del que se evalúa en la condición
MsgBox "Que inteligente eres"
End If
End Sub
Ahora sí que actuamos en consecuencia a cada uno de los botones de nuestro cuadro de dialogo.
La instrucción Else, significa en cualquier otro caso, es decir, en nuestro ejemplo, si el valor de la variable Respuesta era 7, la ejecución continua en la línea siguiente, pero si la variable tiene cualquier otro valor, entonces hace lo segundo, aquí un ejemplo.
Sub DiaDeLaSemana
Dim Dia As Integer
'Solicitar un numero digamos entre 1 y 10
Dia = InputBox( "¿Que día quieres saber (1 a 10)?" )
If Dia = 1 Then
MsgBox "Este día es Domingo"
Else
MsgBox "Este día NO es Domingo"
End If
End Sub
Observa como sólo si Dia toma el valor 1 se nos informa que es Domingo; cualquier otro valor nos muestra el segundo mensaje.
Instrucción If... Then... Elseif … Then... Else
Si queremos saber que día de la semana corresponde a otro valor, usaremos una variante de la instrucción If...Then...Else. veamos como.
Sub DiaDeLaSemana
Dim Dia As Integer
'Solicitar un numero digamos entre 1 y 10
Dia = InputBox( "¿Que día quieres saber (1 a 10)?" )
If Dia = 1 Then
MsgBox "Este día es Domingo"
ElseIf Dia = 2 Then
MsgBox "Este día es Lunes"
Else
MsgBox "NO sé que día es"
End If
End Sub
De esta forma podemos hacer tantas comparaciones como queramos. Intenta completar la macro tú mismo para que nos informe de todos los días de la semana y en caso de otro valor nos informe que no es un día de la semana.
Resumiendo: la estructura general de la instrucción If...Then...Else es.
If CONDICION Then
'Código si condición es verdadera
[ElseIf CONDICION_2 Then]
'Código si condición 2 es verdadera
…
[ElseIf CONDICION_n Then]
'Código si condición n es verdadera
[Else]
'Cualquier otro valor
End If
Recuerda que las opciones indicadas entre corchetes son opcionales.
CONDICION, puede ser cualquier instrucción susceptible de ser evaluada como verdadera (True) o falsa (False) y puede ser tan sencilla como las vistas hasta ahora, o compleja como la del siguiente ejemplo:
ElseIf bolHayComillas = False And (strPalabra = "'" Or UCase(strPalabra) = "REM") Then
ElseIf EsPalabraClave(strPalabra) And bolHayComillas = False Then
Si se necesita evaluar más de una condición, debemos relacionarlas con operadores como And (y) o como Or (o) que veremos más adelante.
Instrucción Select...Case
Cuando necesitamos evaluar la misma variable varias veces es posible usar la instrucción de bifurcación Select...Case. Veamos un ejemplo.
Sub DiaDeLaSemana
Dim Dia As Integer
Dia = InputBox( "¿Que día quieres saber (1 a 10)?" )
Select Case Dia
Case 1
MsgBox "Este día es Domingo"
Case 2
MsgBox "Este día es Lunes"
Case 3
MsgBox "Este día es Martes"
Case 4
MsgBox "Este día es Miércoles"
Case Else
MsgBox "NO sé que día es"
End Select
End Sub
Se pueden indicar rangos de valores a evaluar:
- Separados por una coma (por ejemplo 1,3,7)
- Utilizando la palabra clave To (por ejemplo, 2 To 5):
Sub DiaDeLaSemana
Dim Dia As Integer
Dia = InputBox( "¿Que día quieres saber (1 a 10)?" )
Select Case Dia
'Aquí evaluamos si es sábado o domingo
Case 1, 7
MsgBox "Por fin a descansar"
'Y aquí si es entre semana, de Lunes a Viernes
Case 2 To 6
MsgBox "Que horror, día de trabajo"
Case Else
MsgBox "NO sé que día es"
End Select
End Sub
Si tienes dudas acerca de lo aquí explicado, tienes algún problema con AOO, o quieres ampliar la información, no dudes en dirigirte al Foro Oficial en español de Apache OpenOffice para Macros y API UNO |