Home MundoTec Software Código fuente Tutorial / pdf Minijuegos
Cerrar

Tutorial Aprender Visual Basic

Tutorial APREDER VISUAL BASIC.







IF ... THEN (SI ... ENTONCES) E IF ... THEN ... ELSE (SI ... ENTONCES ... SINO)

La sintaxis a emplear con Visual Basic es muy similar a la que se estudia en los cursos de algoritmia y pseudocódigo, con la sustitución del Si por If, del Entonces por Then, del SiNo por Else y del Finsi por End If. La única salvedad a tener en cuenta es que Visual Basic permite además de la escritura en bloques la escritura en una sola línea.

Sintaxis en bloque:

If [condición] Then
Instrucción 1
Instrucción 2
·
·
·
Instrucción n
Else
Instrucción A
Instrucción B
·
·
·
Instrucción Z
End If

Sintaxis en una sola línea:

If [condición] Then Instrucción 1 Else Instrucción A

También es posible encadenar varias acciones derivadas de un Then o de un Else en una sola línea. Sin embargo, recomendamos usar la opción de sintaxis en una sola línea exclusivamente para desarrollos sencillos como puede ser una instrucción en caso de que se cumpla la condición y otra en caso de que no se cumpla. Si intervienen varias instrucciones, siempre resultará más legible usar el formato de bloque.
La instrucción If ... Then es anidable dentro de sí misma, siendo siempre preferible el formato de bloque cuando se vayan a generar anidamientos.

Ejemplo:

If A > 7 And B < 5 Then
MsgBox("A es mayor que 7 y B menor que 5")
End If

También válido es:

If A > 7 And B < 5 Then MsgBox ("A es mayor que 7 y B menor que 5")

Si introducimos una cláusula Else el modelo es:

If A > 7 And B < 5 Then
MsgBox ("A es mayor que 7 y B menor que 5")
Else
MsgBox ("A no es mayor que 7 ó B no es menor que 5")
End If

También válido usar el símbolo _ (guión bajo) para indicar continuación de línea:

If A > 7 And B < 5 Then MsgBox ("A es mayor que 7 y B menor que 5") _
Else MsgBox "A no es mayor que 7 ó B no es menor que 5"

Una cuestión a tener en cuenta es que cuando la condición indicada por un If en bloque no se cumple, se produce el salto a la siguiente instrucción inmediatamente posterior a la palabra End If. En cambio, cuando la condición indicada por un If en una línea no se cumple, se produce el salto a la siguiente línea ignorando todas las instrucciones que pudieran encontrarse en la misma línea del If. Veámoslo con un ejemplo. Ejecuta estos dos pequeños programas:

Visual Basic
Visual Basic

En el programa 1 el resultado es que se muestra en pantalla "El valor actual de a es 25", mientras que en el programa 2 se muestra "El valor actual de a es 3". La razón para que en la versión 2 no se ejecute la orden a = 25 es que al no cumplirse la condición del If se produce un salto a la siguiente línea, ignorándose todas las instrucciones que se encuentren en la misma línea del If. En general consideramos recomendable habituarse a usar la sintaxis de bloque siempre pues resulta más fácil de interpretar y evita posibles confusiones como ésta, donde muchas personas podrían pensar que si no se cumple el if se ejecutará la instrucción que aparece en la misma línea a continuación.

INSTRUCCIÓN SEGÚN (CASO) HACER (SELECT CASE)

La sintaxis a emplear con Visual Basic es la siguiente:

Select Case [expresión]
Case [valor expresión 1]
Instrucción 1
Instrucción 2
Case [valor expresión 2]
Instrucción 3
Instrucción 4
.
.
.
Case [valor expresión n]
Instrucción k
Case Else
Instrucción m
End Select

Select Case en Visual Basic equivale a la instrucción switch de otros lenguajes.
La expresión a evaluar puede ser un valor numérico o una cadena de texto. Sólo se puede evaluar una expresión y no múltiples expresiones. La evaluación de expresiones puede ser:

a) De coincidencia: por ejemplo, Case 12 indicaría que si la expresión evaluada vale 12 se ejecutarán las instrucciones anexas.
b) De intervalo: usando la palabra clave To. Por ejemplo, Case 12 To 14 indicaría que si la expresión evaluada tiene un valor comprendido entre 12 y 14 (incluidos los extremos de los intervalos), se ejecutarán las instrucciones anexas.
c) De comparación: usando la palabra clave Is. Por ejemplo, Case Is <= 14 indicaría que si la expresión evaluada tiene un valor menor o igual a 14 se ejecutarán las instrucciones anexas.

Cuando varios casos son válidos, sólo se ejecutan las instrucciones asociadas al primer caso verificado, siguiendo el flujo del programa por la siguiente instrucción después de End Select. Esto debemos tenerlo muy en cuenta, ya que si pretendemos que cuando se cumplan dos condiciones se ejecuten sendos bloques de instrucciones, convendrá hacerlo a través de la instrucción If en vez de a través de Select Case.
Las instrucciones Select Case se pueden anidar. Cada instrucción Select Case debe tener su correspondiente terminación End Select.
La instrucción Select Case presenta similitudes marcadas con la instrucción If - Then. Por ello, en general podremos conseguir resultados similares con ambas instrucciones y elegir usar una u otra dependerá de nuestro gusto y de cuál se adapte mejor a nuestros intereses, que en general serán ahorrar código y conseguir claridad para cumplir el objetivo. Otras veces será interesante anidar ambas instrucciones.
Prueba el siguiente código:

Visual Basic

El resultado es que se muestra en pantalla "A vale 12". Sin embargo, a pesar de que la hipótesis A < 14 se cumple, no llega a evaluarse y por tanto las instrucciones asociadas a este caso no se ejecutan.

ESTRUCTURAS DE REPETICIÓN (BUCLES) CON VISUAL BASIC

Vamos a ver cómo materializar con Visual Basic estructuras de repetición que permitirán que en nuestros programas se realice un proceso n veces. En concreto veremos las instrucciones Desde ... Siguiente (For ... Next) con su cláusula Paso (Step), la instrucción Mientras ... Hacer (Do While ... Loop) y la instrucción Hacer ... Repetir Mientras (Do ... Loop While). Muchas veces podremos optar indistintamente por usar una instrucción u otra. En otros casos, es recomendable decantarse por una de ellas por hacer el programa más legible o sencillo que usando otras opciones.

INSTRUCCIÓN DESDE ... SIGUIENTE (FOR ... NEXT) Y CLÁUSULA PASO (STEP)

La sintaxis a emplear con Visual Basic es la siguiente:

For VAR = Vi To Vf
Instrucción 1
Instrucción 2
·
·
·
Instrucción n
Next VAR

El incremento que sufre el contador es, por defecto, unitario. Es decir, el primer valor que toma VAR en el bucle será Vi, el segundo Vi + 1, el tercero (Vi + 1) + 1, etc. La modificación de dicho valor de incremento la realizaremos a través de la cláusula Step después del valor Vf. Step 2 implicará que en cada repetición del bucle el contador se incremente en dos unidades, Step 5 implicará que en cada repetición del bucle el contador se incremente en cinco unidades. Un paso negativo del tipo Step -1 supone que el contador decrece en vez de incrementarse. Si el paso es negativo, Vi necesariamente habrá de ser mayor que Vf, ya que en caso contrario no se producirá la entrada en el bucle.
Con este código se nos muestra en pantalla 3 veces hola (se ha invertido el sentido del bucle):

Visual Basic

Con Visual Basic resulta admisible usar Next sin indicar la variable que está sirviendo de guía del bucle, pues todo bucle ha de tener un cierre. Sin embargo, no lo creemos recomendable pues puede dificultar la lectura y depuración de los programas. La instrucción For ... Next es anidable dentro de sí misma o dentro de otros tipos de bucles o estructuras, debiendo seguir las pautas que ya hemos comentado.

INSTRUCCIÓN MIENTRAS ... HACER (DO WHILE ... LOOP)

La sintaxis que hemos de seguir es la siguiente:

Do While [condición]
Instrucción 1
Instrucción 2
.
.
.
Instrucción n
Loop

Las instrucciones tipo Do While son anidables dentro de sí mismas o dentro de otras estructuras. Es importante verificar que los bucles diseñados con esta instrucción dispongan de una condición de salida válida.

Ejemplo: k = 0: Do while k < 5. Dentro del bucle tendremos que incrementar el valor de k, k = k +1.

INSTRUCCIÓN HACER ... REPETIR MIENTRAS (DO ... LOOP WHILE)

La sintaxis a utilizar es:

Do
Instrucción 1
Instrucción 2
.
.
.
Instrucción n
Loop While [condición]

Un Do ... Loop While es anidable dentro de sí mismo o dentro de otras estructuras. Es importante verificar que los bucles diseñados con esta instrucción dispongan de una condición de salida válida.
Ejemplo:

Do
LabelTabla.Text = LabelTabla.Text & "Iteración " & k & vbCrLf
k = k + 1
Loop While k <= 5

Visual Basic admite además de la cláusula While, usar el término Until, como equivalente a "hasta que se cumpla que". Así Loop Until i >= 3 significaría "Repetir hasta que i sea mayor o igual que 3". En un bucle en el que i parte de un valor cero y se incrementa unitariamente Do While i < 3 sería equivalente a Do Until i >= 3, y Loop Until i >= 3 sería equivalente a Loop While i < 3. Dado que podemos valernos de equivalencias, puede evitar confundirnos el usar preferentemente un mismo tipo de expresión, sabiendo que disponemos de otra equivalente.

MODIFICACIÓN DIRECTA DEL FLUJO DE PROGRAMAS CON VISUAL BASIC.

Las recomendaciones para el uso de instrucciones de control directo del flujo de programas se resumen en una palabra: prudencia. Si no tienes cuidado con el uso de instrucciones que modifican el curso natural de los programas, puedes ocasionar el mal funcionamiento de los mismos o comprobar que has generado un código de poca calidad y difícil seguimiento.

INSTRUCCIÓN FINALIZAR. END, UNLOAD, EXIT SUB.

Con Visual Basic disponemos de distintas variantes relacionadas con Finalizar.

a) End: instrucción que da lugar a la detención instantánea de un programa. No se recomienda cerrar un programa directamente a través de End, ya que hay instrucciones previstas para un cierre normal. Podríamos considerar que End supone "apagar" el programa como si hubiera un corte de energía eléctrica, mientras que la descarga del programa equivale al cierre de un sistema operativo a través de la opción "Cerrar". Para la finalización normal de un programa de Visual Basic debemos descargar todos los formularios con que estemos trabajando (lo cual supone que se produzcan los eventos QueryUnload y Unload) antes de disponer la instrucción End.

b) Unload ó Close (según versiones): instrucción que da lugar a la descarga de la memoria de formularios o controles, lo cual no necesariamente significa que el programa acabe, ya que el código asociado al módulo del formulario permanece en memoria y pueden mostrarse otro tipo de ventanas o incluso volver a cargarse el formulario si así está establecido en el código.

c) Exit Sub: da lugar a que se salga del procedimiento que se está ejecutando, continuando el flujo del programa como si se hubiera llegado al final del procedimiento.

Veamos ejemplos de código:

a) Código asociado a un botón que da lugar al cierre del programa.

Visual Basic

b) Código que da lugar a la salida de un procedimiento
Visual Basic

En el primer ejemplo, se muestra un mensaje y se cierra el programa. En el segundo código, si el usuario elige que desea continuar se muestra el mensaje "Ha elegido continuar" y prosigue la ejecución del módulo. Si elige que no desea continuar se ejecuta Exit Sub. Se produce el salto a la última línea del procedimiento (End Sub) y el flujo del programa continua por donde proceda.

SALIR DE UN BUCLE FOR CON EXIT FOR EN VISUAL BASIC

Cuando realizamos un esquema de programa usando pseudocódigo podemos reflejar la salida de un bucle For (Desde ... Siguiente) con la instrucción SalirDesde. La sintaxis a emplear en Visual Basic es Exit For dentro de cualquier bucle For ... Next. Cuando existe anidamiento de bucles, se produce la salida del bucle más interno al inmediato superior. Si se escribe un Exit For fuera de un bucle aparece el mensaje: "Error de compilación. Exit For no está dentro de For ... Next".

EJERCICIO RESUELTO CON EXIT FOR

Transformar en código el ejemplo de aplicación de la Instrucción SalirDesde que se muestra a continuación en forma de pseudocódigo, considerando que Numerodatos tiene un valor fijo de 35, y que los datos están el archivo notas.dat, que habrá sido creado previamente.

Pseudocódigo ejemplo de uso de SalirDesde (Exit For):
Visual Basic

SOLUCIÓN AL EJERCICIO CON EXIT FOR

Como paso previo en tiempo de diseño crearemos un label para mostrar los resultados al que denominaremos LabelResultado así como un botón que el usuario debe pulsar para leer los datos desde el archivo.

Visual Basic

Para comprobar el funcionamiento del programa, lo ejecutaremos con un archivo de datos válidos y después modificaremos un dato para hacerlo no válido, con lo cual deberá mostrarse el mensaje "No se pudo completar la extracción de datos. Motivo: dato no válido. Revise archivo y vuelva a intentarlo".

SALIR DE UN BUCLE DO...LOOP WHILE CON EXIT DO EN VISUAL BASIC

La sintaxis a emplear es Exit Do dentro de cualquier bucle Do ... Loop While. Cuando existe anidamiento de bucles, se produce la salida del bucle más interno al inmediato superior. Si se escribe un Exit Do fuera de un bucle aparece el mensaje: "Error de compilación. Exit Do no está dentro de Do ... Loop".

INSTRUCCIÓN HACER ... REPETIR CON DO ... LOOP Y SALIRHACER CON EXIT DO

Dado que con Visual Basic Mientras ... Hacer se construye con el mismo comando (Do) que Hacer ... Repetir Mientras, la instrucción de salida de este tipo de bucles es siempre Exit Do, con las consideraciones que ya hemos hecho. La construcción Hacer...Repetir se consigue usando Do...Loop sin condicionantes a la entrada ni a la salida. Esto nos obliga, necesariamente, a que exista una condición de salida interna y a que exista un Exit Do dentro del bucle. Consideremos el siguiente ejemplo:

Do
i = i + 1
Label1 = Label1 & i
If i > 5 Then Exit Do
Loop

En caso de un fallo del contador o de la condición de salida se producirá un bucle infinito. Es poco recomendable usar construcciones tipo Do ... Loop como elemento habitual de programación. Lo más razonable es usarla únicamente en casos excepcionales y en líneas generales prescindir de ella.