Page 88
Image_1089_0
Select Case en Visual Basic. Instrucción Según Caso Hacer
__rendered_path__3
Prueba el siguiente código:
Código (versiones menos recientes VB):
Código (versiones más recientes VB):
Image_1104_0
Rem Curso Visual Basic aprenderaprogramar.com
REM Curso Visual Basic aprenderaprogramar.com
Image_1102_0
Option Explicit
Option Explicit On
Dim A As Integer
Public
Class
Form1
Dim A As Integer
Private Sub Form_Load()
Private Sub Form1_Load(ByVal sender As
A = 12
System.Object, ByVal e As System.EventArgs)
Select Case A
Handles MyBase.Load
Case 12
A = 12
Select
Case
A
MsgBox ("A vale 12")
Case 12
Case Is < 14
MsgBox("A vale 12")
MsgBox ("A es menor que 14")
Case Is < 14
Case 160 To 200
MsgBox("A es menor que 14")
MsgBox ("A está comprendida entre 160 y 200")
MsgBox(
Case
160
To
200
"A está comprendida entre
Case Else
160 y 200")
MsgBox ("No se ha verificado ninguna de las
Case Else
condiciones previstas")
MsgBox("No se ha verificado
End Select
ninguna de las condiciones previstas")
End Sub
End
End
Sub
Select
End Class
Image_1103_0
__rendered_path__42Image_1101_0
El resultado es que se muestra en pantalla "A vale 12". Sin embargo, a pesar de que la hipótesis A < 14 se
__rendered_path__65
cumple, no llega a evaluarse y por tanto las instrucciones asociadas a este caso no se ejecutan.
EJERCICIO
Transformar en código de Visual Basic el siguiente enunciado: crear un programa que pida al usuario
un número de día y un número de mes, evalúe si la entrada es correcta y en caso de que así sea calcule
el día del año que es, considerando un año no bisiesto.
SOLUCIÓN
Crearemos tres labels a los que denominaremos Label1, Label2 y LabelResultado. Label1 servirá para
mostrar un mensaje solicitando que se introduzca el número de día, Label2 servirá para mostrar un
mensaje solicitando que se introduzca el número de mes y LabelResultado servirá para mostrar el
resultado.
Crearemos dos TextBoxes denominados Text1 y Text2. El primero de ellos servirá para que el usuario
introduzca el dato de número de día y el segundo el dato de número de mes.
Finalmente tendremos un botón denominado ButtonCalcular que servirá para mostrar los resultados
una vez el usuario haya introducido el dato de número de día y número de mes.
© 2006-2029 aprenderaprogramar.com
__rendered_path__1

Page 89
Código (versiones menos recientes VB):
Código (versiones más recientes VB):
Select Case en Visual Basic. Instrucción Según Caso Hacer
__rendered_path__3
Image_1115_0
Rem Curso Visual Basic aprenderaprogramar.com
Rem [Cálculo del día del año]
Option Explicit
Dim Ndía%, Nmes%, DDA As Integer
Private Sub Form_Load()
Form1.Caption = "Cálculo día del año"
Label1.Caption = "Introduzca aquí el número del
día"
Label2.Caption = "Introduzca aquí el número del
mes"
ButtonCalcular.Caption = "Determinar día del
año"
End Sub
Private Sub ButtonCalcular_Click()
Ndía = Val(Text1)
Nmes = Val(Text2)
LabelResultado.FontSize = 10
LabelResultado.FontBold = True
If Ndía > = 1 And Ndía < = 31 And Nmes > = 1
And Nmes < = 12 Then
Select Case Nmes
Case 1
DDA = Ndía '[DDA es día del año]
Case 2
DDA = Ndía + 31
Case 3
DDA = Ndía + 59
Case 4
DDA = Ndía + 90
Case 5
DDA = Ndía + 120
Case 6
DDA = Ndía + 151
Case 7
DDA = Ndía + 181
Case 8
DDA = Ndía + 212
Case 9
DDA = Ndía + 243
Case 10
DDA = Ndía + 273
Case 11
DDA = Ndía + 304
Case 12
DDA = Ndía + 334
End Select
LabelResultado = "El " & Ndía & " del " & Nmes
& " es el día " & DDA & " del año"
Else
LabelResultado = "Datos proporcionados no
válidos"
End If
End Sub
Image_1103_0
__rendered_path__12
© 2006-2029 aprenderaprogramar.com
Image_1089_0
REM Curso Visual Basic aprenderaprogramar.com
Image_1114_0
Option Explicit On
Public Class Form1
Dim Ndía, Nmes, DDA As Integer
Private Sub Form1_Load(ByVal sender As
System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
Me.Text = "Cálculo día del año"
Label1.Text = "Introduzca aquí el número
del día"
Label2.Text = "Introduzca aquí el número
del mes"
ButtonCalcular.Text = "Determinar día del
año"
End Sub
Private Sub ButtonCalcular_Click(ByVal sender
As System.Object, ByVal e As System.EventArgs)
Handles ButtonCalcular.Click
Ndía = Val(Text1.Text)
Nmes = Val(Text2.Text)
LabelResultado.Font = New Font("Arial",
10, FontStyle.Bold)
If Ndía >= 1 And Ndía <= 31 And Nmes >= 1
And Nmes <= 12 Then
Select Case Nmes
Case 1
DDA = Ndía '[DDA es día del
año]
Case 2
DDA = Ndía + 31
Case 3
DDA = Ndía + 59
Case 4
DDA = Ndía + 90
Case 5
DDA = Ndía + 120
Case 6
DDA = Ndía + 151
Case 7
DDA = Ndía + 181
Case 8
DDA = Ndía + 212
Case 9
DDA = Ndía + 243
Case 10
DDA = Ndía + 273
Case 11
DDA = Ndía + 304
Case 12
DDA = Ndía + 334
End Select
LabelResultado.Text = "El " & Ndía &
" del " & Nmes & " es el día " & DDA & " del año"
Else
LabelResultado.Text = "Datos
proporcionados no válidos"
End If
End Sub
End Class
__rendered_path__1Image_1101_0__rendered_path__72

Page 90
en aprenderaprogramar.com
http://www.aprenderaprogramar.com/index.php?opti
Select Case en Visual Basic. Instrucción Según Caso Hacer
__rendered_path__3
Aspecto gráfico:
Próxima entrega: CU00326A
Acceso al curso completo
© 2006-2029 aprenderaprogramar.com
Image_1089_0
-- > Cursos, o en la dirección siguiente:
__rendered_path__1__rendered_path__25Image_1121_0
on=com_content&view=category&id=37&Itemid=61

Page 91
Image_1128_0
Bucles For Next Step, Do While Loop, Do Loop While en Visual Basic.
__rendered_path__5
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:
__rendered_path__42
For VAR = Vi To Vf
__rendered_path__41__rendered_path__44
Instrucción 1
__rendered_path__29__rendered_path__43
Instrucción 2
__rendered_path__29__rendered_path__41
·
__rendered_path__29
·
__rendered_path__29
·
__rendered_path__29
Instrucción n
__rendered_path__29
Next VAR
__rendered_path__28__rendered_path__29
El incremento que sufre el contador es, por defecto, unitario. Es decir, el primer valor que toma VAR
__rendered_path__29
en el bucle será Vi, el segundo Vi + 1, el tercero (Vi + 1) + 1, etc. La modificación de dicho valor de
__rendered_path__45
incremento la realizaremos a través de la cláusula Step después del valor Vf. Step 2 implicará que en
__rendered_path__42
cada repetición del bucle el contador se incremente en dos unidades, Step 5 implicará que en cada
__rendered_path__45
repetición del bucle el contador se incremente en cinco unidades. Un paso negativo del tipo Step -1
__rendered_path__44
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):
Código (versiones menos recientes VB):
Código (versiones más recientes VB):
Image_1132_0
Rem Curso Visual Basic aprenderaprogramar.com
REM Curso Visual Basic aprenderaprogramar.com
Image_1130_0
Option Explicit
Option Explicit On
Dim VAR As Integer
Public
Private
Class
Sub
Form1
Form1_Load(
ByVal
sender
As
Dim Vi As Integer
System.Object, ByVal e As System.EventArgs)
Dim Vf As Integer
Handles MyBase.Load
Private Sub Form_Load()
Dim VAR As Integer
Vi = 1
Dim Vi As Integer
Vf = 3
Vi = 1
Dim
Vf
As
Integer
For VAR = Vf To Vi Step –1
Vf = 3
'[También supondría tres repeticiones For
For VAR = Vf To Vi Step -1
VAR = Vi to Vf]
'[También supondría tres repeticiones
MsgBox ("hola")
For VAR = Vi to Vf]
Next VAR
MsgBox(
Next
VAR
"hola"
)
End Sub
End Sub
End Class
Image_1131_0
© 2006-2029 aprenderaprogramar.com
__rendered_path__1__rendered_path__61Image_1129_0__rendered_path__78

Page 92
Image_1128_0
Bucles For Next Step, Do While Loop, Do Loop While en Visual Basic.
__rendered_path__5
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.
EJERCICIO
Transformar en código el siguiente planteamiento: queremos generar un programa que pida un
número del 1 al 10 y nos muestre la “tabla de multiplicar” correspondiente.
SOLUCIÓN
Hemos realizado la pregunta relativa al número cuya tabla se desea conocer utilizando un InputBox.
Igualmente válido hubiera sido hacerlo con un Label contenedor de la pregunta y un TextBox donde
el usuario introduce la información. La tabla la mostramos sobre un Label denominado LabelTabla.
Código (versiones menos recientes VB):
Código (versiones más recientes VB):
Image_1152_0
Rem Curso Visual Basic aprenderaprogramar.com
REM Curso Visual Basic aprenderaprogramar.com
Image_1151_0
Option Explicit
Option Explicit On
Dim T As Integer
Public
Dim
Class
T
As
Form1
Integer
Dim i As Integer
Dim i As Integer
Private Sub Form_Load()
Private Sub Form1_Load(ByVal sender As
Form1.Caption = "Tabla"
System.Object, ByVal e As System.EventArgs)
T = Val(InputBox("¿Qué tabla quiere conocer?" &
Handles
MyBase
Me
.Text =
.Load
"Tabla"
vbCrLf & _
T = Val(InputBox("¿Qué tabla quiere
"(Introduzca un número de 1 a 10)", "¿Número?"))
conocer?" & vbCrLf & _
LabelTabla.FontBold = True
"(Introduzca un número de 1 a 10)", "¿Número?"))
LabelTabla.Alignment = 2
LabelTabla.Font = New Font("Arial", 10,
LabelTabla = "TABLA DEL " & T & vbCrLf &
FontStyle
LabelTabla.TextAlign =
.Bold)
ContentAlignment
.MiddleCenter
vbCrLf
LabelTabla.Text = "TABLA DEL " & T & vbCrLf &
vbCrLf
For i = 1 To 10
For i = 1 To 10
LabelTabla = LabelTabla & T & " * " & i & " = "
LabelTabla.Text = LabelTabla.Text & T &
" * "
& i &
" = "
& T * i & vbCrLf
& T * i & vbCrLf
Next i
Next i
End Sub
End Sub
End Class
Image_1131_0
__rendered_path__42Image_1129_0
__rendered_path__67
© 2006-2029 aprenderaprogramar.com
__rendered_path__1

Page 93
Transformar en código el siguiente planteamiento: queremos generar un programa que muestre
todos los enteros comprendidos entre un número definido por el usuario y 100.
Código (versiones menos recientes VB):
Código (versiones más recientes VB):
Bucles For Next Step, Do While Loop, Do Loop While en Visual Basic.
__rendered_path__5
Gráficamente:
EJERCICIO
SOLUCIÓN
Image_1152_0
Rem Curso Visual Basic aprenderaprogramar.com
Option Explicit
Dim Num As Integer
Dim i As Integer
Private Sub Form_Load()
Form1.Caption = "Enteros"
Num = Val(InputBox("Introduzca un número
entero comprendido entre 1 y 99", "¿Número?"))
LabelTabla.Alignment = 2
LabelTabla.FontBold = True
LabelTabla = "ENTEROS ENTRE " & Num & " y
100" & vbCrLf & vbCrLf
For i = Num To 100
LabelTabla = LabelTabla & i & " "
Next i
End Sub
Image_1131_0
__rendered_path__38
© 2006-2029 aprenderaprogramar.com
Image_1128_0
REM Curso Visual Basic aprenderaprogramar.com
Image_1161_0
Option Explicit On
Image_1160_0
Public Class Form1
Image_1151_0
Private Sub Form1_Load(ByVal sender As
System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
Dim Num As Integer
Dim i As Integer
Me.Text = "Enteros"
Num = Val(InputBox("Introduzca un número
entero comprendido entre 1 y 99", "¿Número?"))
LabelTabla.TextAlign =
ContentAlignment.MiddleCenter
LabelTabla.Font = New Font("Arial", 10,
FontStyle.Bold)
LabelTabla.Text = "ENTEROS ENTRE " & Num
& " y 100" & vbCrLf & vbCrLf
For i = Num To 100
LabelTabla.Text = LabelTabla.Text & i
& " "
Next i
End Sub
__rendered_path__1Image_1129_0__rendered_path__59
End Class

Page 94
Image_1128_0
Bucles For Next Step, Do While Loop, Do Loop While en Visual Basic.
__rendered_path__5
Gráficamente:
Image_1170_0
Image_1169_0
INSTRUCCIÓN MIENTRAS ... HACER (DO WHILE ... LOOP)
La sintaxis que hemos de seguir es la siguiente:
__rendered_path__50__rendered_path__51
Do While [condición]
__rendered_path__52__rendered_path__53
Instrucción 1
__rendered_path__37__rendered_path__50
Instrucción 2
__rendered_path__39
.
__rendered_path__39
.
__rendered_path__42
.
__rendered_path__44
Instrucción n
__rendered_path__42
Loop
__rendered_path__36__rendered_path__39
Las instrucciones tipo Do While son anidables dentro de sí mismas o dentro de otras estructuras. Es
__rendered_path__48
importante verificar que los bucles diseñados con esta instrucción dispongan de una condición de
__rendered_path__54
salida válida.
__rendered_path__51
Ejemplo: k = 0: Do while k < 5. Dentro del bucle tendremos que incrementar el valor de k, k = k +1.
__rendered_path__54
© 2006-2029 aprenderaprogramar.com
__rendered_path__1__rendered_path__53

Page 95
Image_1128_0
Bucles For Next Step, Do While Loop, Do Loop While en Visual Basic.
__rendered_path__5
INSTRUCCIÓN HACER ... REPETIR MIENTRAS (DO ... LOOP WHILE)
La sintaxis a utilizar es:
__rendered_path__27
Do
__rendered_path__26__rendered_path__29
Instrucción 1
__rendered_path__14__rendered_path__28
Instrucción 2
__rendered_path__14__rendered_path__26
.
__rendered_path__14
.
__rendered_path__18
.
__rendered_path__20
Instrucción n
__rendered_path__18
Loop While [condición]
__rendered_path__13__rendered_path__14
__rendered_path__24
Un Do ... Loop While es anidable dentro de sí mismo o dentro de otras estructuras. Es importante
__rendered_path__30
verificar que los bucles diseñados con esta instrucción dispongan de una condición de salida válida.
__rendered_path__27
Ejemplo:
__rendered_path__30
Do
__rendered_path__29
LabelTabla.Text = LabelTabla.Text & "Iteración " & k & vbCrLf
k = k + 1
Loop While k <= 5
__rendered_path__53
Visual Basic admite además de la cláusula While, usar el término Until, como equivalente
__rendered_path__54
a "hasta que se cumpla que". Así Loop Until i >= 3 significaría "Repetir hasta que i sea mayor
__rendered_path__51__rendered_path__53
o igual que 3". En un bucle en el que i parte de un valor cero y se incrementa unitariamente Do While i < 3
__rendered_path__55
sería equivalente a Do Until i >= 3, y Loop Until i >= 3 sería equivalente a Loop While i < 3. Dado que
__rendered_path__55
podemos valernos de equivalencias, puede evitar confundirnos el usar preferentemente un mismo tipo
__rendered_path__56__rendered_path__82
de ex presión, sabiendo que disponemos de otra equivalente.
__rendered_path__59__rendered_path__83
__rendered_path__59
__rendered_path__56__rendered_path__80__rendered_path__81
Próxima entrega: CU00327A
__rendered_path__59
Acceso al curso completo en aprenderaprogramar.com -- > Cursos, o en la dirección siguiente:
__rendered_path__59
http://www.aprenderaprogramar.com/index.php?option=com_content&view=category&id=37&Itemid=61
__rendered_path__56
© 2006-2029 aprenderaprogramar.com
__rendered_path__1__rendered_path__59__rendered_path__59__rendered_path__56__rendered_path__59__rendered_path__59__rendered_path__65__rendered_path__53__rendered_path__54__rendered_path__53__rendered_path__68__rendered_path__68__rendered_path__78__rendered_path__84__rendered_path__85__rendered_path__86__rendered_path__87