Las sentencias de control permiten controlar el flujo del programa, tomando decisiones a partir de comparaciones y generando bucles mientras o hasta que se cumplan ciertas condiciones. Son muy utilizadas y es importante conocer su correcta utilización.
If... Then... Else... End If
Esta sentencia permite ejecutar determinadas acciones según evaluaciones que haga de una comparación lógica. La estructura de esta sentencia es:
If comparación Then
sentencias si la condición es verdadera
Else
sentencias si la condición es falsa
End If
No obstante, primero habrá que conocer los signos y comparaciones matemáticas y lógicas para escribir sentencias efectivas:
Tabla 4 - Operadores Lógicos. |
Signo |
Concepto |
= |
Igual que |
> |
Menor que |
< |
Mayor que |
<> |
Distinto |
>= |
Menor o Igual que |
<= |
Mayor o Igual que |
Like |
Igual que (para texto) |
Un ejemplo de esta función:
Dim var as Boolean, vars as String
var=False
If var=True Then
vars="Verdadero"
Else:vars="Falso"
End If
En este caso la variable vars será Falso ya que se ejecuta la sentencia a continuación de Else.
Se puede anidar una función If con otra para que una condición pueda derivar en otra condición. Por ejemplo:
Dim x as Integer, y as Integer
x=78:y=2028
If 26*x Then
x=y-26*x
Else
If 26*x>y Then
x=x*26-y
Else:x=y
End If
End If
Al salir de esta sentencia x e y tendrán el mismo valor, ya que se ejecutará la sentencia a continuación de Else de la segunda sentencia If.
En la condición de la sentencia If se puede especificar más de una condición si se concatenan con algunos operadores lógicos como and, or, xor, etc., los cuales son los siguientes:
- And: devuelve Verdadero si todas las comparaciones son verdaderas.
- Or: devuelve Verdadero si alguna de las comparaciones es verdadera.
- Xor: devuelve Verdadero si una comparación es verdadera y otra es falsa.
- Eqv: devuelve Verdadero si ambas comparaciones son verdaderas.
- Imp: devuelve Verdadero siempre y cuando no sea verdadera la primera condición y falsa la segunda.
Sea por ejemplo:
Dim x as Boolean, y as Byte
x=True:y=61
If x=False Or y<70 Then
Debug.Print "Se cumplió una de las condiciones"
Else:Debug.Print "No se cumplió ninguna condición"
End If
Puede crearse un nuevo proyecto estándar y asociar este procedimiento con algún evento para probarlo.
For... Step... Next
Esta sentencia permite ejecutar un bucle con un valor inicial y final, en el cual puede especificar el intervalo y si es creciente o decreciente. La sintaxis de esta sentencia es:
For var=a To b Step interval
sentencias
Next x
Donde var es una variable que crece o decrece, según sea el bucle, a y b son los valores de comienzo y final del bucle, intervalo es el intervalo con que crece o decrece el bucle, si se omite Step intervalo se considera 1. Sentencias son las sentencias que se ejecutarán en el bucle; Next var indica dónde terminan las sentencias del bucle.
Se puede salir de este bucle en cualquier momento con la instrucción Exit For. Si se desea que el bucle sea decreciente, el valor de a deberá ser mayor que el valor de b y se deberá utilizar la instrucción Step donde el intervalo será negativo.
Mediante esta sentencia se puede calcular el factorial de un número. El factorial de un número se halla multiplicando todos los números naturales hasta dicho número; por ejemplo, el factorial de 5 es 120 porque 5x4x3x2x1 es 120.
Ejemplo 1
Crea un nuevo proyecto estándar y añade al formulario los siguientes controles:
Control |
Propiedad |
Valor |
Form |
Name |
frmProg |
Textbox |
Name |
txtNumero |
Label |
Name |
lblFact |
Escribe el siguiente código en la ventana de código del formulario:
Private Sub txtNumero_KeyPress(Keyascii as Integer)
If Keyascii=13 Then
lblFact.Caption=Factorial(txtNumero.Text)
Else:Exit Sub
End If
End If
End Sub
Private Function Factorial(numero as Integer)as Long
Dim x as Integer, f as Long
numero=Int(Abs(numero)):f=1
If numero=0 Then
Factorial=1:Exit Function
Else:
For x=1 To numero
f=x*f Next x
Factorial=f
End If
End Function
Presione F5 para ejecutar la aplicación.
La función Int redondea un número a entero, la función Abs devuelve el valor absoluto de un número; con esto se asegura que el número sea un número natural.
Esta sentencia utilizada en forma decreciente:
Dim result as Integer, v as Byte
result=100
For r=10 To 4 Step -2
result=result-r
Next r
Al salir de este bucle, result valdrá 72. Puede crearse un nuevo proyecto y asociar este código a algún evento para probarlo.
Si en algún momento se desea escapar de este bucle se utiliza la sentencia Exit For, por ejemplo:
Dim sumar as Integer, x as Byte
For x=10 To 30
sumar=sumar+2*x
If sumar>121 Then
Exit For
End If
Next x
Se escapa del bucle mediante Exit For cuando x=15.
Select Case... Case... End Select
Esta sentencia permite realizar varias comparaciones (casos) y ejecutar sentencias en aquellos que sean verdaderos.
Esta sentencia comienza con Select Case seguido de la expresión a comparar. Luego se escriben tantas sentencias Casecomo se necesiten, donde se escribirán las comparaciones. Se finaliza con End Select. La forma general de la sentencia es la siguiente:
Select Case expresión
Case comparación1
sentencias
Case comparación2
sentencias
...
End Select
Expresión es una variable, una propiedad de un objeto (por ejemplo la propiedad Text de una caja de texto o Caption de una etiqueta), etc.
Comparación1, comparación2,... son las comparaciones lógicas. En cada Case el valor de expresión se representa con Is.
Dim valor as Integer, caso as String
valor=3619
Select Case valor
Case 2748
caso="Case 1"
Case Is >3630
caso="Case 2"
Case Is<3621
caso="Case 3"
Case Else
caso="Case 4"
End Select
Cuando termina con End Select la variable caso valdrá "Case 3", porque Case Is<3621 es la única que se cumple. Case Else es verdadero cuando ninguno de los anteriores casos fuese verdadero.
Si se cumpliesen dos o más condiciones se verificará solamente la primera condición.
While... Wend
La sentencia While se ejecuta mientras se cumpla una condición dada. Este bucle comienza con While y termina con Wend. Su sintaxis es la siguiente:
While condición
sentencias
Wend
Donde condición es la condición que se evaluará. Mientras esa condición sea verdadera se ejecutarán las sentencias hasta Wend; cuando ya no se cumpla la condición se saldrá del bucle.
Un ejemplo:
Dim var1 as Byte, var2 as Long
var1=56:var2=1050
While var1>50
var2=var2+var1
var1=var1-1
Wend
Al final del bucle, var1 valdrá 50 y var2 valdrá 1371.
Do... Loop...
La sentencia Do permite ejecutar bucles mientras o hasta que se cumpla una determinada condición (While o Until). La comprobación se puede efectuar al principio del bucle (luego de Do) o al final del bucle (luego de Loop). Se puede escapar de este bucle en cualquier momento con la sentencia Exit Do.
La forma general de este bucle es la siguiente:
Do While/Until condición
sentencias 'puede escaparse del bucle con Exit Do
Loop
En el ejemplo anterior la comparación lógica se hizo al principio del bucle, en la siguiente la comprobación se hará al final del bucle.
Do
sentencias 'puede escaparse del bucle con Exit Do
Loop While/Until condición
Un ejemplo práctico de este bucle:
Dim var1 as Integer, var2 as Long
var1=367
Do
var1=var1+2:var2=var2-var1*2
Loop Until var2>-2301
Al salir del bucle var1 vale 375 y var2 vale -2976.