7/25/2019 CursoVB04
1/18
CURSO DE VB
CAPTULO 41
ndice de contenidoBLOQUES DE DECISIN..................................................................................................................2
BLOQUE IF...THEN...ELSE...END IF...........................................................................................2UN CASO ESPECIAL: EL ELSEIF...........................................................................................3
LA FUNCIN IIF............................................................................................................................4IIF ANIDADOS..........................................................................................................................5
BLOQUE SELECT CASE...END SELECT...................................................................................6VALOR DIRECTO.....................................................................................................................6VALOR CON COMPARADOR LGICO.................................................................................8
BLOQUE FOR...NEXT...................................................................................................................BLOQUE FOR EACH...NEXT.....................................................................................................!2BLOQUE "HILE..."END..........................................................................................................!3BLOQUE DO...LOOP # SUS VARIACIONES............................................................................!4
DO "HILE... LOOP.................................................................................................................!4
DO UNTIL... LOOP.................................................................................................................!6OTRAS VARIACIONES DE ESCRITURA DEL BLOQUE DO............................................!$UN BLOQUE ESPECIAL: "ITH...END "ITH..............................................................................!$
1 La BD donde estn los ejemplos de este captulo os la podis bajar aqu.
1Vistame en http://siliconproject.com.ar/neckkito/
http://db.tt/kK6FTmrNhttp://db.tt/kK6FTmrN7/25/2019 CursoVB04
2/18
BLOQUES DE DECISIN
BLOQUE IF...THEN...ELSE...END IF
a hemos !isto en captulos anteriores el uso de esta"unci#n$ pero !amos a detenernos bre!emente en ella dadoque hablamos de bloques de decisi#n.
%!identemente$ el esquema de "uncionamiento de este bloque es el si&uiente:
'( se cumple una condici#n)eali*a unas acciones
'( +, se cumple la condici#n)eali*a ,tras acciones
--B-
Lo anterior es la !ersi#n e0tensa del (2. La se&unda parte$ la '( +,$ se puede omitir.
(ncluso ha3 una !ersi#n s4per5reducida$ que representa una sola lnea de c#di&o$ en la cualno necesitamos decirle que --B%.
Vamos a !er las tres posibilidades a tra!s de un ejemplo.
1.5 %n una base de datos nue!a creamos un "ormulario en blanco. %n l insertamos trescuadros de te0to.
6.5 'acamos las propiedades del primer cuadro de te0to 3 nos !amos a la pesta7a ,tras +ombre$ 3 le escribimos t0t1. %l se&undo ser t0t6 3 el tercero t0t)esultado
8.5 -7adimos un bot#n de comando$ al que pondremos de nombre cmd'uma. %n el e!ento -lhacer click le &eneramos el si&uiente c#di&o:
9ri!ate 'ub cmd'uma;lickBloque (" super5reducido (" (s+ull
7/25/2019 CursoVB04
3/18
?e.t0t)esultado G (nt
7/25/2019 CursoVB04
4/18
'i secumplecondici#n %+@,+%'>#di&o
%), '( secumpleotracondici#n %+@,+%'>#di&o6
--B-
Vamos a !erlo con un ejemplo. -pro!echaremos nuestro"ormulario 2'uma. -7adimos un bot#n de comando 3 leponemos de nombre cmd%lse(". -l e!ento -l hacer click le&eneramos el si&uiente c#di&o
7/25/2019 CursoVB04
5/18
Vamos a aplicar lo anterior a un ejemplo. %n nuestro "ormulario 2'umas a7adimos un bot#n decomando$ al que llamaremos cmd((". - ese bot#n de comando le &eneramos el si&uientec#di&o:9
ri!ate 'ub cmd((";lick
7/25/2019 CursoVB04
6/18
Valor !erdadero De!uel!e el primer mensaje: (mpar 3 m4ltiplo de cinco Valor "also De!uel!e el se&undo mensaje: (mpar
+i que decir tiene que hubiramos podido anidar ms ((2dentro de los ((2 anidados. L#&icamente la lectura delc#di&o 3a sera bastante en&orrosa.
omo nota "inal os dir que la "unci#n ((2 se puede utili*artambin en los objetos onsulta de -ccess. ero$ eimportante$ debis distin&uir el mbito de uso:
'i lo utili*amos en c#di&o VB- los ar&umentos !an separados por comas. 'i lo utili*amos en onsultas los ar&umentos !an separados por punto 3 coma.
,jo con eso.
BLOQUE SELECT CASE...END SELECT
ara tomar decisiones en "unci#n de ms de dos condiciones el bloque '%L%@ -'%...%+D'%L%@ es nuestro bloque. Vamos a echar un !ista*o a su "uncionamiento.
Di!idiremos este ep&ra"e en dos subep&ra"es: que la condici#n sea un !alor directo o quenecesitemos reali*ar una comparaci#n l#&ica.
VALOR DIRECTO
'i queremos que la condici#n sea un !alor directo utili*aremos la si&uiente estructura:
'%L%@ -'% !alor-'% condici#n1
>#di&o1-'% condici#n6
>#di&o6-'% condici#n8
>#di&o89%+D '%L%@
Vamos a !erlo a tra!s de un ejemplo. reamos un nue!o "ormulario 3 lo llamamos 2'elect.-7adimos un cuadro de te0to$ al que pondremos por nombre t0tFno. -7adimos otro cuadro dete0to 3 le ponemos de nombre t0tDos.
-7adimos un cuadro combinado 3 lo llamamos cbo,peracion. 'acamos sus propiedades 3!amos a decirle qu !alores puede mostrar ese combo. ara ello nos !amos a la pesta7a Datos
@ipo de ori&en de la "ila seleccionamos Lista de !alores. +os !amos ahora$ en la misma pesta7a$ a ori&en de la "ila$ 3 escribimos lo si&uiente:
H5H
%s decir$ el combo nos mostrar si sumamos$ restamos o multiplicamos.
Vamos a practicar a asi&naci#n de un c#di&o a un e!ento de combo. -s pues se&uimos con laspropiedades del combo 3 nos !amos a la pesta7a %!entos Despus de actuali*ar$ 3 le
&eneramos el si&uiente c#di&o
7/25/2019 CursoVB04
7/18
9ri!ate 'ub cbo,peracion;-"terFpdate
7/25/2019 CursoVB04
8/18
omo !emos$ a7adimos el -'% %L'% despus de todos los -'%.
Debemos tener en cuenta que '%L%@ -'% reali*a unanlisis secuencial. MEu si&ni"ica esoN Eue reali*a lacomprobaci#n empe*ando$ por orden$ por el primer -'% 3acabando por el 4ltimo. uando encuentra el -'% que
cumple la condici#n ejecuta el c#di&o 3 sale del proceso.
M qu si&ni"ica esoN
ues que para optimi*ar recursos deberamos pro&ramar en los primeros -'% las opcionesque consideremos ms probables$ dejando para las 4ltimas las condiciones que consideremosms improbables
7/25/2019 CursoVB04
9/18
?s&Bo0 A%l primer n4mero es menor que el se&undoA$ !b(n"ormation$ A?'SA >'i ambos son i&uales
ase (s G !6 ?s&Bo0 A-mbos n4meros son i&ualesA$!b(n"ormation$ A?'SA ase %lse ?s&Bo0 A+o se ha podido reali*ar la comparaci#nA$
!b(n"ormation$ A?'SA %nd 'elect%nd 'ub9
omo !eis la mecnica es prcticamente idntica al !alor directo$ s#lo que utili*ando uncomparador. +i que decir tiene que el anterior ejemplo ha sido puesto para que !eis que sepuede comparar con un !alor !ariable$ pero que e!identemente podemos comparar con un!alor "ijo de manera directa. %s decir$ si tenemos un ran&o de !alores predeterminadopodemos aplicar esos !alores directamente$ teniendo en cuenta la secuencialidad del c#di&o.
or ejemplo$ si mi ran&o de !alores !a del 58
7/25/2019 CursoVB04
10/18
del proceso.
omentar tambin que$ si nos &usta ms$ podemos indicarqu !alor es el +%U@. %s decir que el esquema anteriortambin se habra podido escribir as:
2,) !alorG1 @, 8
>-cciones+%U@ !alor
Vamos a !erlo a tra!s de un ejemplo$ 3 practicaremos de pasadaun poco la "unci#n (nputBo0$ que 3a !imos:
%n nuestra base de datos de pruebas !amos a crear un "ormulario en blanco 3 lo &uardaremoscomo 22echas. reamos un cuadro de te0to 3 le ponemos de nombre t0t2echa.
Truco: para e!itarnos tener que introducir controles de tipo de datos en el c#di&o en laspropiedades de t0t2echa nos !amos a la pesta7a 2ormato 2ormato le marcamos 2echa corta. -s -ccess 3a nos controlar que el "ormato introducido sea de "echa$ porque si no lo es
el propio -ccess lan*a un mensaje de ad!ertencia
7/25/2019 CursoVB04
11/18
>Fna !e* "inali*ado el proceso !2echa me reco&e el resultado. Lo mostramos. ?s&Bo0 ALa "echa "inal es A Q !2echa$ !b%0clamation$ A-L 2(+WWWWA%nd 'ub9
reo que el c#di&o est lo su"icientemente comentado parano tener que a7adir nada ms. 'implemente "ijaos que
podemos decirle las repeticiones que queremosdirectamente -cciones
+%U@
o2,) !alorG1 @, 8 '@% 8
>-cciones+%U@
+i que decir tiene que &racias a nuestro '@% podemos utili*ar este bucle como una cuentare&resi!a$ si nos interesara para nuestro c#di&o. %n este caso deberamos escribir$ porejemplo:
2,) !alorG1 @, 8 '@% 51>-cciones
+%U@
Vamos a complicar un poco la cosa. (ma&inemos que queremos que se !a3a incrementandouna unidad como hasta ahora pero si se cumple una condici#n se interrumpa el proceso. araello podemos utili*ar un %U(@ 2,)$ que lo que hace es que$ como habris intuido$ "or*ar lasalida del bucle.
Vamos a !er un ejemplo qui* un poco absurdo$ pero l#&icamente lo que interesa es co&er lamecnica.
%n nuestro "ormulario 22echas !amos a a7adir un nue!o bot#n de comando$ al que llamaremoscmd(nterrumperoceso. Lo que !amos a hacer es lo si&uiente:
%l usuario introduce una "echa alculamos tres das posteriores a esa "echa. %so ser nuestra condici#n deinterrupci#n. Le decimos al c#di&o que nos calcule J das ms a la "echa. L#&icamente$ cuando se lle&ue al tercer da obli&aremos al proceso a interrumpirse 3 asalir del bucle.
Vamos a !er c#mo se hace. %l c#di&o sera el si&uiente:
9ri!ate 'ub cmd(nterrumperoceso;lickDe"inimos las !ariables
11Vistame en http://siliconproject.com.ar/neckkito/
7/25/2019 CursoVB04
12/18
Dim !2echa -s Date >o&er el !alor en t0t2echa Dim !2echa'ale -s Date Dim i -s (nte&er >ontador para el bucle 2,)...+%U@
>apturamos los !alores de las !ariables !2echa G ?e.t0t2echa.Value >Del "ormulario en el queesto3
7/25/2019 CursoVB04
13/18
%0it 'ub %nd (" +e0t ?s&Bo0 A+o se encontr# el "ormularioA%nd 'ub9
omo !emos$ el bucle recorre todos los "ormularios de laBD 3 compara sus nombres con la condici#n del (2. 'i loencuentra se ejecuta dicha condici#n.
'i ahora$ en la lnea K(" "rm.+ame G A2'electA @henC$ cambiamos2'elect por mi2orm$ podremos !er los resultados en el caso deque no se cumpla la condici#n.
omo 3a he comentado no le dedicaremos ms tiempo a este bloque -cciones
Y%+D
%s decir$ permite una iteracci#n de las mismas acciones mientras se !a3a cumpliendo lacondici#n.
Vamos a !er un ejemplo mu3 sencillo 3 di!ertido (niciali*amos las !ariables acertado G 2alse
>(niciamos el bucle Yhile acertado G 2alse nFser G (nputBo0
7/25/2019 CursoVB04
14/18
Yend
?s&Bo0 AX-certaste el n4meroWA$ !b%0clamation$ A,[WWWWA%nd 'ub9
omo podemos apreciar$ el bucle se repite mientras la
condici#n Kacertado G 2alseC se manten&a. or lo tanto$cuando se acierta el n4mero lo 4nico que debemos hacer escambiar el !alor del booleano a @)F% para "or*ar la salidadel proceso.
%ste bucle no tiene ma3or secreto.
BLOQUE DO...LOOP Y SUS VARIACIONES
%l bucle D,...L,, tiene dos !ariantes. Le podemos decir al c#di&o$ de manera &enrica$
I-\ ?(%+@)-' Kse cumpla una condici#nC
o tambin
I-\ I-'@- Kse cumpla una condici#nC
Vamos a !er por separado ambas opciones$ aunque la mecnica es prcticamente idntica paralas dos.
DO WILE!!! LOOP
Vamos a crear un nue!o "ormulario$ al que pondremos de nombre 2Do. reamos un cuadro de
te0to$ al que le ponemos de nombre t0tValor$ 3 creamos otro cuadro de te0to al que lepondremos de nombre t0t)esults.
-7adimos un bot#n de comando$ al que llamaremos cmdalcula$ 3 le &eneramos el si&uientec#di&o:9ri!ate 'ub cmdalcula;lickDe"inimos las !ariables Dim !Valor -s Lon& Dim !,bjeti!o -s Lon& Dim !%ncontrado -s Boolean
>(niciali*amos las !ariables !Valor G ?e.t0tValor.Value !,bjeti!o G !Valor 1 !%ncontrado G 2alse
>(niciamos los clculos hasta encontrar el !alor objeti!o Do Yhile !%ncontrado G 2alse !Valor G !Valor 1 (" !Valor G !,bjeti!o @hen !%ncontrado G @rue %nd (" Loop
1OVistame en http://siliconproject.com.ar/neckkito/
7/25/2019 CursoVB04
15/18
?s&Bo0 A'e encontr# el !alor objeti!oA$ !b(n"ormation$ A,[A ?e.t0t)esults.Value G !Valor%nd 'ub9
Lo que hace el c#di&o$ si lo anali*amos$ es que estableceuna condici#n booleana$ representada por la !ariabla
!%ncontrado$ a la cual decimos que es 2-L'%. %l bucle Doobli&a a ir sumando una unidad a !Valor en cada iteracci#n3 cuando encuentra el !alor objeti!o cambiamos el !alor de!%ncontrado a @)F%$ lo que obli&a a "inali*ar el bucle.
omo siempre$ no interesa el ejemplo en s sino la mecnica de su "uncionamiento.
odemos reali*ar una interrupci#n del c#di&o a tra!s de
%U(@ D,
lo que nos permitira salir del bucle aunque no se cumpliera la condici#n. Vamos a modi"icar el
c#di&o anterior para establecer esa interrupci#n. Lo modi"icaremos de la manera si&uiente:9ri!ate 'ub cmdalcula;lickDe"inimos las !ariables Dim !Valor -s Lon& Dim !,bjeti!o -s Lon& Dim !%ncontrado -s Boolean
>(niciali*amos las !ariables !Valor G ?e.t0tValor.Value !,bjeti!o G !Valor 1 !%ncontrado G 2alse
>(niciamos los clculos hasta encontrar el !alor objeti!o Do Yhile !%ncontrado G 2alse !Valor G !Valor 1 (" !Valor G 6J @hen ?s&Bo0 A'e interrumpir el c#di&oA$ !britical$ A(+@%))F(]+A %0it Do %nd (" (" !Valor G !,bjeti!o @hen !%ncontrado G @rue %nd (" Loop
?e.t0t)esults.Value G !Valor%nd 'ub9
omo !emos$ hemos a7adido una condici#n que nos permite interrumpir el c#di&o. 'i el !alor"uera 6J$ por ejemplo$ actuara el %U(@ D,. 'i en nuestro te0tbo0 introducimos el n4mero 6 nose cumplira la condici#n de interrupci#n$ 3 actuara la !ariable booleanaH si introducimos eln4mero 8 s se cumplir la condici#n de interrupci#n$ 3 se nos obli&ar a salir del bucle sinhaber hallado el resultado objeti!o. ,s animo a que lo probis para !er los resultados.
1JVistame en http://siliconproject.com.ar/neckkito/
7/25/2019 CursoVB04
16/18
DO UNTIL... LOOP
omo habris podido intuir$ este bucle 3 el anterior son losmismos perros con distintos collares. La mecnica de su"uncionamiento es e0actamente la misma.
ara no dejarlo sin ejemplo os propon&o el si&uiente$aunque deberais ser capaces de hacerlo 3a !osotros sina3uda: introducido un n4mero en nuestro te0tbo0 el c#di&odebe ejecutarse hasta que el !alor objeti!o sea el triple queese n4mero.
XensadloW
si al&uien ho3 tiene el da malo$ le dejo aqu c#mo sera ese c#di&o:
9ri!ate 'ub cmdalculaU8;lickDe"inimos las !ariables
Dim !Valor -s Lon&
Dim !,bjeti!o -s Lon&
Dim !%ncontrado -s Boolean
>(niciali*amos las !ariables
!Valor G ?e.t0tValor.Value !,bjeti!o G !Valor 8
!%ncontrado G 2alse
>(niciamos los clculos hasta encontrar el !alor objeti!o
Do Fntil !%ncontrado G @rue
!Valor G !Valor 1
(" !Valor G !,bjeti!o @hen
!%ncontrado G @rue %nd ("
Loop
?s&Bo0 A'e encontr# el !alor objeti!oA$ !b(n"ormation$ A,[A
?e.t0t)esults.Value G !Valor
%nd 'ub
9
1PVistame en http://siliconproject.com.ar/neckkito/
7/25/2019 CursoVB04
17/18
+i que decir tiene que aqu tambin podramos utili*ar el %U(@ D, para "or*ar la salida delproceso.
OTRAS VARIACIONES DE ESCRITURA DEL BLOQUE DO
ara !uestra in"ormaci#n os comentar que lo queacabamos de !er del bloque D,... admite ciertas
!ariaciones en su escritura. 'on !ariaciones que 3o no sueloutili*ar porque pienso
7/25/2019 CursoVB04
18/18
reamos un "ormulario en blanco$ al que llamaremos 2Yith$ e introducimos en l una etiqueta$a la que llamaremos lblYith. %scribimos cualquier cosa en dicha etiqueta.
-hora a7adimos un bot#n de comando$ al que llamaremoscmdambiaropiedades$ 3 le &eneraremos el si&uientee!ento:
9
ri!ate 'ub cmdambiaropiedades;lick