Page 80
Image_989_0
Estructuras de decisión. Si Entonces Sino If Then Else Visual Basic.
__rendered_path__5
También válido es:
Image_1009_0
If A > 7 And B < 5 Then MsgBox ("A es mayor que 7 y B menor que 5")
Image_1008_0
__rendered_path__46
Si introducimos una cláusula Else el modelo es:
Image_1007_0
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
Image_990_0
__rendered_path__50
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") _
Image_1006_0
Else MsgBox "A no es mayor que 7 ó B no es menor que 5"
Image_1008_0
__rendered_path__57
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:
Programa 1 (versiones menos recientes VB):
Programa 1 (versiones más recientes VB):
Image_1005_0
Rem Curso Visual Basic aprenderaprogramar.com
REM Curso Visual Basic aprenderaprogramar.com
Image_1004_0
Option Explicit On
Option Explicit
Dim a%
Public
Dim
Class
a%
Form1
Private Sub Form_Load()
System.
Private
Object
Sub
,
Form1_Load(
ByVal
e
As
ByVal
System.
sender
EventArgs
As
)
Handles
a = 3
If a = 5 Then
MyBase
a = 3
If
a = 5
.Load
Then
MsgBox("Se cumple que a vale 5")
End If
MsgBox(
End
If
a = 25
"Se cumple que a vale 5"
)
a = 25
MsgBox("El valor actual de a es " & a)
MsgBox(
End
Sub
"El valor actual de a es "
& a)
End Sub
End
Class
Image_990_0
__rendered_path__61Image_1008_0
__rendered_path__1__rendered_path__77
© 2006-2029 aprenderaprogramar.com

Page 81
Image_989_0
Estructuras de decisión. Si Entonces Sino If Then Else Visual Basic.
__rendered_path__5
Programa 2 (versiones menos recientes VB):
Programa 2 (versiones más recientes VB):
Image_1020_0
Rem Curso Visual Basic aprenderaprogramar.com
REM Curso Visual Basic aprenderaprogramar.com
Image_1019_0
Option Explicit
Option Explicit On
Dim a%
Public
Dim
Class
a%
Form1
Private Sub Form_Load()
a = 3
System.
Private
Object
Sub
,
Form1_Load(
ByVal
e
As
ByVal
System.
sender
EventArgs
As
)
If a = 5 Then MsgBox ("Se cumple que a vale 5"): a = 25
MsgBox ("El valor actual de a es " & a)
Handles
a = 3
If
a = 5
MyBase
.Load
Then
MsgBox(
"Se cumple que a
End Sub
vale 5"
MsgBox(
) : a = 25
"El valor actual de a es "
& a)
End Sub
End
Class
Image_990_0
__rendered_path__45
Image_1008_0
En el programa 1 el resultado es que se muestra en pantalla "El valor actual de a es 25", mientras que
__rendered_path__58
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.
Próxima entrega: CU00324A
Acceso al curso completo en aprenderaprogramar.com -- > Cursos, o en la dirección siguiente:
http://www.aprenderaprogramar.com/index.php?option=com_content&view=category&id=37&Itemid=61
__rendered_path__1__rendered_path__41
© 2006-2029 aprenderaprogramar.com

Page 82
Image_1034_0
Ejercicios ejemplos con if then else Visual Basic.
__rendered_path__4
EJERCICIO EJEMPLO CON IF THEN ELSE EN VISUAL BASIC
Crear un programa que pida un número entero distinto de cero y nos muestre en pantalla un mensaje
indicándonos si el número es par o impar. Nota: El procedimiento a emplear será basado en el uso del
operador Mod.
SOLUCIÓN
Crearemos un Label de solicitud del número, un Textbox de entrada, un Button (Command Button en
las versiones menos recientes de Visual Basic) y un Label para el cálculo y el resultado. Le ponemos los
nombres y organizamos los controles en pantalla como nos parezca correcto (no tiene por qué coincidir
con lo que ponemos aquí). Los nombres que hemos empleado nosotros son: LabelPideNum,
TextNentero, ButtonHallar y LabelResultado.
Código (versiones menos recientes VB):
Código (versiones más recientes VB):
Image_1038_0
Rem Curso Visual Basic aprenderaprogramar.com
REM Curso Visual Basic aprenderaprogramar.com
Image_1036_0
Option Explicit
Option Explicit On
Public
Class
Form1
Dim Num As Integer
Dim Num As Integer
Dim Res As Integer
Dim Res As Integer
Private Sub Form_Load()
Private Sub Form1_Load(ByVal sender As
Form1.Caption = "Determi
na naturaleza par o
System.
Handles
Object
MyBase
,
ByVal
.Load
e
As
System.
EventArgs
)
impar"
Me.Text = "Determina naturaleza par o impar"
ButtonHallar.Caption = "Determinar"
ButtonHallar.Text = "Determinar"
LabelPideNum = "Introduzca un nº entero"
LabelPideNum.Text = "Introduzca un nº entero"
End Sub
End
Sub
Private Sub ButtonHallar_Click()
Private Sub ButtonHallar_Click(ByVal sender
Num = Val(TextNentero)
As System.Object, ByVal e As System.EventArgs)
Res = Num Mod 2
Handles ButtonHallar.Click
LabelResultado.FontSize = 10
Num = Val(TextNentero.Text)
Res = Num
Mod
2
LabelResultado.FontBold = True
LabelResultado.Font = New Font("Arial",
If Res = 0 Then
10, FontStyle.Bold)
LabelResultado = "El número es par"
If Res = 0 Then
Else
LabelResultado.Text =
Else
"El número es par"
LabelResultado = "El número es impar"
LabelResultado.Text = "El número es impar"
End If
End If
End Sub
End Sub
End Class
Image_1037_0
__rendered_path__41Image_1035_0
Gráficamente:
Image_1039_0__rendered_path__67
Hemos escrito el If ... Then – Else como un bloque en vez de como una única línea. El motivo para ello
es que aporta mayor claridad y facilidad de interpretación.
__rendered_path__1
© 2006-2029 aprenderaprogramar.com

Page 83
Image_1034_0
Ejercicios ejemplos con if then else Visual Basic.
__rendered_path__4
EJERCICIO ECUACIÓN DE SEGUNDO GRADO (ECUACIÓN CUADRÁTICA)
Crear un programa que resuelva la ecuación cuadrática tipo ax2 + bx + c. El planteamiento del problema
y su solución en forma de pseudocódigo se pueden encontrar en el curso “Bases de la programación
nivel I” de aprenderaprogramar.com, dentro de los ejercicios relacionados con condicionales. Una vez
creado el programa, hay que contrastar su correcto funcionamiento.
SOLUCIÓN
Usaremos tres Labels para pedir los parámetros a, b y c denominados Labela, Labelb y Labelc, y tres
TextBox para que el usuario introduzca datos (Texta, Textb y Textc) además de un botón
(ButtonCalcular). Nosotros hemos añadido además un mensaje de cabecera con un label (LabelTitulo).
Mostraremos primero el código para versiones de Visual Basic más recientes y luego para versiones
menos recientes. Ten en cuenta que la lógica de los programas es en ambos casos igual, lo único que
varía son los detalles de la sintaxis.
CÓDIGO (PARA VERSIONES DE VISUAL BASIC MÁS RECIENTES)
Image_1055_0
REM Curso Visual Basic aprenderaprogramar.com
Option Explicit On
Public
REM Declaración de variables
Class
Form1
Dim aNumber, bNumber, cNumber, dNumber, eNumber As Single
REM Contenido del formulario
MyBase
Private
.Load
Sub
Form1_Load(
ByVal
sender
As
System.
Object
,
ByVal
e
As
System.
EventArgs
)
Handles
ButtonCalcular.Text =
Me
.Text =
"Ecuación cuadrática"
"Calcular x"
LabelTítulo.Text = "Parámetros a, b y c para ecuación tipo a*x^2 + b*x + c = 0"
End
Sub
REM Cálculo y muestra de resultados
Private Sub ButtonHallar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles ButtonCalcular.Click
LabelResultado.Font = New Font("Arial", 10, FontStyle.Bold)
aNumber = Val(Texta.Text)
bNumber = Val(Textb.Text)
cNumber = Val(Textc.Text)
dNumber = bNumber ^ 2 - 4 * aNumber * cNumber
eNumber = 2 * aNumber
If
dNumber = 0
Then
LabelResultado.Text =
Else
"x1 = x2 = "
& -bNumber / eNumber
If dNumber > 0 Then
LabelResultado.Text = "x1 = " & (-bNumber + Math.Sqrt(dNumber)) / eNumber
LabelResultado.Text = LabelResultado.Text & vbCrLf & "x2 = " & (-bNumber -
Math
.Sqrt(dNumber)) / eNumber
Else
LabelResultado.Text =
eNumber &
" * "
&
Math
"x1 = "
.Sqrt(-dNumber) / eNumber &
& -bNumber / eNumber &
" * i"
" + "
&
Math
.Sqrt(-dNumber) /
End If
End
End
Sub
If
End Class
__rendered_path__1Image_1037_0__rendered_path__54
© 2006-2029 aprenderaprogramar.com

Page 84
Image_1034_0
Ejercicios ejemplos con if then else Visual Basic.
__rendered_path__4
Nota: en versiones recientes de Visual Basic algunas letras están reservadas y no pueden ser usadas
como nombres de variables. Por ejemplo la letra e. De ahí que en vez de nombrar a las variables como
a, b, c, d, e las hayamos nombrado aNumber, bNumber, cNumber, dNumber y eNumber.
CÓDIGO (PARA VERSIONES DE VISUAL BASIC MENOS RECIENTES)
Image_1059_0
Rem Curso Visual Basic aprenderaprogramar.com
Option Explicit
Rem Declaración de variables
Dim a!, b!, c!, d!, e As Single
Rem Contenido del formulario
Private Sub Form_Load()
Form1.Caption = "Ecuación cuadrática"
CommandCalcular.Caption = "Calcular x"
LabelTítulo = "Parámetros a, b y c para ecuación tipo a*x^ 2 + b*x + c = 0"
Labela.Caption = "Valor parámetro a"
Labelb.Caption = "Valor parámetro b"
Labelc.Caption = "Valor parámetro c"
End Sub
Rem Cálculo y muestra de resultados
Private Sub CommandCalcular_Click()
LabelResultado.FontSize = 10
LabelResultado.FontBold = True
a = Val(Texta)
b = Val(Textb)
c = Val(Textc)
d = b ^ 2 - 4 * a * c
e = 2 * a
If d = 0 Then
LabelResultado = "x1 = x2 = " & - b / e
Else
If d > 0 Then
LabelResultado = "x1 = " & (-b + Sqr(d)) / e
LabelResultado = LabelResultado & vbCrLf & "x2 = " & (-b - Sqr(d)) / e
Else
LabelResultado = "x1 = " & -b / e & " + " & Sqr(-d) / e & " * i"
LabelResultado = LabelResultado & vbCrLf & "x2 = " & -b / e & " - " & Sqr(-d) / e & " * i"
End If
End If
End Sub
Image_1035_0
__rendered_path__55
COMENTARIOS
El programa (ambas versiones de código) "funciona", si bien tiene sus limitaciones. Prueba a introducir
los siguientes datos: a = 0, b = 3 y c = 1 . Te aparecerán resultados extraños (o un error como "Error 6
en tiempo de ejecución. Desbordamiento"). El motivo para esos resultados extraños o errores es que si
a = 0 implica que e = 0 y al encontrarnos con una operación del tipo ( b + Sqr(d)) / e donde el
denominador vale cero... ¡operación matemática no permitida! Esto ocurrirá mientras no preparemos
el programa para detectar este tipo de situaciones y darles un tratamiento adecuado, cosa que veremos
más adelante.
__rendered_path__1
© 2006-2029 aprenderaprogramar.com

Page 85
Image_1034_0
Ejercicios ejemplos con if then else Visual Basic.
__rendered_path__4
Estamos construyendo programas sencillos que en líneas generales responden bien cuando se dan las
circunstancias previstas pero que fallan ante situaciones extrañas. Esto no debe preocuparnos por el
momento, ya que a medida que progresemos como programadores iremos construyendo programas
cada vez más sólidos.
Aspecto gráfico:
Image_1072_0
EJEMPLOS CON IF THEN ELSE EN VISUAL BASIC: PARADOJA DEL SI BURLADO POR UN INTERVALO
Reflexiona sobre el significado y prueba los siguientes códigos en tu ordenador:
Código 1 (versiones menos recientes de VB):
Código 1 (versiones más recientes de VB):
Image_1071_0
Rem Curso Visual Basic aprenderaprogramar.com
REM Curso Visual Basic aprenderaprogramar.com
Image_1070_0
Option Explicit
Option Explicit On
Dim A%
Public
Dim
Class
A
As
Form1
Integer
Private Sub Form_Load()
Private Sub Form1_Load(ByVal sender As
A = 160
System.Object, ByVal e As System.EventArgs)
If 50 < A < 75 Then
Handles MyBase.Load
MsgBox ("Arabia")
A = 160
If
50 < A < 75
Then
Else
MsgBox("Arabia")
MsgBox ("Eusebio")
Else
End If
MsgBox("Eusebio")
End Sub
End
End
Sub
If
End Class
Image_1037_0
__rendered_path__1__rendered_path__39Image_1035_0__rendered_path__55
© 2006-2029 aprenderaprogramar.com

Page 86
Image_1034_0
Ejercicios ejemplos con if then else Visual Basic.
__rendered_path__4
Código 2 (versiones menos recientes de VB):
Código 2 (versiones más recientes de VB):
Image_1077_0
Rem Curso Visual Basic aprenderaprogramar.com
REM Curso Visual Basic aprenderaprogramar.com
Image_1076_0
Option Explicit
Option Explicit On
Dim A%
Public
Dim
Class
A
As
Form1
Integer
Private Sub Form_Load()
Private Sub Form1_Load(ByVal sender As
A = 160
System.Object, ByVal e As System.EventArgs)
If A > 50 And A < 75 Then
Handles MyBase.Load
MsgBox ("Arabia")
A = 160
If
A > 50
And
A < 75
Then
Else
MsgBox("Arabia")
MsgBox ("Eusebio")
Else
End If
MsgBox("Eusebio")
End If
End Sub
End
End
Class
Sub
Image_1037_0
__rendered_path__37Image_1035_0
Si bien podría esperarse obtener el mismo resultado con ambos códigos, al ejecutar el código 1
__rendered_path__53
obtenemos como resultado que se muestre en pantalla "Arabia", mientras que al ejecutar el código 2 se
muestra "Eusebio". La razón: Visual Basic no admite comparaciones dobles del tipo x < y < z. Ante este
tipo de escritura, sólo es evaluada la primera condición de las dos pretendidas. ¿Solución? No usar
comparaciones dobles.
Este “resultado inesperado” puede ocasionar un buen quebradero de cabeza, ya que en un programa
extenso no será nada fácil detectar este error. Como remedio, usaremos siempre la escritura de
condiciones una detrás de otra y no de forma múltiple.
Próxima entrega: CU00325A
Acceso al curso completo en aprenderaprogramar.com -- > Cursos, o en la dirección siguiente:
http://www.aprenderaprogramar.com/index.php?option=com_content&view=category&id=37&Itemid=61
__rendered_path__1__rendered_path__33
© 2006-2029 aprenderaprogramar.com

Page 87
Image_1089_0
Select Case en Visual Basic. Instrucción Según Caso Hacer
__rendered_path__3
INSTRUCCIÓN SEGÚN (CASO) HACER (SELECT CASE)
La sintaxis a emplear con Visual Basic es la siguiente:
__rendered_path__31__rendered_path__32
Select Case [expresión]
__rendered_path__12__rendered_path__33__rendered_path__34
Case [valor expresión 1]
__rendered_path__14__rendered_path__31
Instrucción 1
__rendered_path__12
Instrucción 2
__rendered_path__12
Case [valor expresión 2]
__rendered_path__14
Instrucción 3
__rendered_path__12
Instrucción 4
__rendered_path__12
.
__rendered_path__14
.
__rendered_path__12
.
__rendered_path__12
Case [valor expresión n]
__rendered_path__14
Instrucción k
__rendered_path__12
Case Else
__rendered_path__12
Instrucción m
End Select
__rendered_path__11__rendered_path__14
__rendered_path__28
Select Case en Visual Basic equivale a la instrucción switch de otros lenguajes.
__rendered_path__35
La expresión a evaluar puede ser un valor numérico o una cadena de texto. Sólo se puede evaluar una
__rendered_path__32
expresión y no múltiples expresiones. La evaluación de expresiones puede ser:
__rendered_path__35
a) De coincidencia: por ejemplo, Case 12 indicaría que si la expresión evaluada vale 12 se ejecutarán
__rendered_path__34
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.
© 2006-2029 aprenderaprogramar.com
__rendered_path__1