Upload
raul-quintero-leon
View
214
Download
0
Embed Size (px)
Citation preview
8/15/2019 .MacrosPP.pps
1/122
08/06/16 Adolfo Aparicio 1
Macros
personalizadas enExcel
Visual Basic para Aplicaciones
V B A
8/15/2019 .MacrosPP.pps
2/122
08/06/16 Adolfo Aparicio 2
mi primera Macro
Editor de Visual Basic Alt+F11 Barra de Herramientas: Visual Basic Herramientas, Macro, Editor de V.B.
Insertar Módulo Primera macro
Su Hola!Mundo"#
Acti$e%ell.Value & 'Hola Mundo'End Su
8/15/2019 .MacrosPP.pps
3/122
08/06/16 Adolfo Aparicio 3
Objeto Rango
Pro(rama )ue de*a un $alor en una celda modiica su ormato
Su Saludo"# -ors/eets"'Ho*a0'#.Acti$ate Acti$eS/eet.an(e"'%2'#.Value & '3%ómo esta usted4' Acti$eS/eet.an(e"'%2'#.Font.Bold & 5rue
Acti$eS/eet.an(e"'%2'#.Font.%olor & 6B"022, 7, 7#End Su
8/15/2019 .MacrosPP.pps
4/122
08/06/16 Adolfo Aparicio 4
Range y OffsetSu primero"# 89ueremos asi(nar un $alor al o*eto an(e an(e"'B17'#.Value & 'Hola'
8 tra orma de traa*ar es poniendo el o*eto -orS/eets )ue est; por encima de an(e -ors/eets"1#.an(e"'B11'#.Value & '39u< tal4' 8 = a>n podemos poner los o*etos superiores 8 Application )ue /ace reerencia a la aplicación E?cel 8 = -orBoos )ue se reiere al liro de traa*o Application.-oroos"1#.-ors/eets"1#.an(e"'B10'#.Value & 'Felicidades' Application.-oroos"'Mac71.?ls'#.-ors/eets"'Ho*a1'#.an(e"'B1@'#.Value & 'Am
8/15/2019 .MacrosPP.pps
5/122
08/06/16 Adolfo Aparicio 5
La Estructura With - End With
Sir$e para e*ecutar una serie de acciones sore un mismo*eto, sin tener )ue repetir toda su *erar)ua E*.: Propiedades del o*eto an(e
Su Escrie"# Acti$eS/eet.an(e"'%G'#.Value & '%ta. esultados' Acti$eS/eet.an(e"'%G'#.Font.Bold & 5rue Acti$eS/eet.an(e"'%G'#.Font.%olor & 6B"7, 022, 7#End Su
Su Escrie!is"# -it/ Acti$eS/eet.an(e"'%G'# .Value & '%ta. esultados' .Font.Bold & 5rue .Font.%olor & 6B"7, 022, 7# End -it/End Su
8/15/2019 .MacrosPP.pps
6/122
08/06/16 Adolfo Aparicio 6
Dim e nput!ox ption E?plicit sir$e para )ue nos oli(uemos /a deinir todas las $ariales Jim permite deinir el tipo de $ariale Si no se deinen las $ariales se toman como VAIAK )ue son las )ue m;s
ocupan InputBo? permite capturar datos del usuario InputBo? de$uel$e siempre datos tipo Strin(
%/r"1@# es para camiar de lnea
ption E?plicit
Su Entrar!Valor"# Jim 5e?to As Strin(
5e?to & InputBo?"'Introducir un te?to' L %/r"1@# L 'Para la %asilla J17', 'Entrada deJatos'# Acti$eS/eet.an(e"'J17'#.Value & 5e?toEnd Su
8/15/2019 .MacrosPP.pps
7/122
08/06/16 Adolfo Aparicio 7
Dim e nput!ox
Su Entrar!Valor!Bis"# 8Este procedimiento es i(ual )ue el anterior pero no utilia $ariales Acti$eS/eet.an(e"'J11'#.Value ! & InputBo?"'Introducir un te?to ' L %/r"17# L 'Para la casilla J11', 'Entrada de datos'#
8El (uión a*o permite partir una lnea de códi(o demasiado lar(a. Ver %/r"17#End Su
Su Entrar!Valor!5ris"# 8En este caso se pide al usuario )ue entre la casilla donde se introducir; el te?to Jim %asilla As Strin( 8%asilla puede ser por e*emplo J10 Jim 5e?to As Strin(
%asilla & InputBo?"'En )ue casilla )uiere entrar el $alor', 'Entrar %asilla'# 5e?to & InputBo?"'Introducir un te?to' L %/r"1@# ! L 'Para la casilla ' L %asilla, 'Entrada de datos'# N perador de concatenación L Acti$eS/eet.an(e"%asilla#.Value & 5e?toEnd Su
InputBox "Mensaje, Título, Valor por defecto, Posición horizontal , Posición Vertical , Archivoayuda, Número de contexto para la ayuda#
8/15/2019 .MacrosPP.pps
8/122
08/06/16 Adolfo Aparicio 8
"ipos de #ariables"ipo de datos "ama$o de almacenamiento nter#alo
!yte 1 te 7 a 022
!oolean 0 tes 5rue o False
nteger 0 tes [email protected] a @0.GCG
Long "entero lar(o# tes [email protected] a [email protected]
%ingle "coma lotanteprecisiónsimple#
tesO@,700@E@ a O1,710QEO2 para $alores ne(ati$osR
1,710QEO2 a @,700@E@ para $alorespositi$os
Double "coma lotanteprecisióndole# tes
O1,GQGCQ@1@C0@0E@7 a O,Q7C2C210GEO@0para $alores ne(ati$osR ,Q7C2C210GEO@0a 1,GQGCQ@1@C0@0E@7 para $alores positi$os
&urrency "entero a escala# tesOQ00.@@[email protected],27 a
Q00.@@[email protected],27G
Decimal 1 tes
+OGQ.00.1C0.21.0C.@@[email protected]@.Q27.@@2 sin puntodecimalR +OG,Q001C0210C@@G2Q@2@Q27@@2con 0 posiciones a la derec/a del si(no decimalRel n>mero m;s pe)ueo distinto de cero es +O7,7777777777777777777777777771
Date tes 1 de enero de 177 a @1 de diciemre de QQQQ
Object tes %ual)uier reerencia a tipo *ect
%tring "lon(itud $ariale# 17 tes + lon(itud de la cadena Jesde 7 a 0.777 millones
%tring "lon(itud i*a# Don(itud de la cadena Jesde 1 a C2.77 apro?imadamente
'ariant "con n>meros# 1C tes%ual)uier $alor num
8/15/2019 .MacrosPP.pps
9/122
08/06/16 Adolfo Aparicio 9
E*ercicio 1
%rear un liro llamado ellena.?lsTPro(ramar un procedimiento )ue nos pre(unte en)ue /o*a )ueremos situarnosKos pre(unte en )ue celda )ueremos situarnos
Kos pre(unte lo )ue )ueremos escriir El pro(rama pone lo )ue /emos dic/o lo ponede color $erde cursi$a, sore ondo ro*o
Pista: Acti$e%ell.Interior.%olor&6B"?,,#
E*ecute el pro(ramaPrimero, dando una sola celdaSe(undo. %uando pida la celda introduca un ran(o para$er como unciona an(e
3Ha usado -it/ U End -it/4
8/15/2019 .MacrosPP.pps
10/122
08/06/16 Adolfo Aparicio 10
%uma dos n(meros
Su Sumar"# 8Pide dos n>meros pone en una celda su suma 8Jim Kumero1 As Inte(er 8Jim Kumero0 As Inte(er Kumero1 & InputBo?"'Entrar el primer $alor', 'Entrada de datos'# Kumero0 & InputBo?"'Entrar el se(undo $alor', 'Entrada de datos'# -ors/eets"'Ho*a1'#.Acti$ate 8Esto se pone por si estamos en una /o*a distinta de la Ho*a1
Acti$eS/eet.an(e"'E17'#.Value & Kumero1 + Kumero0End Su
Su Sumar!Bis"# 8Este procedimiento es similar al anterior 8En el procedimiento anterior si se mete como $ariale una palara, da error. 8Por eso en este procedimiento aadimos la unción Val Jim Kumero1 As Inte(er
Jim Kumero0 As Inte(er Kumero1 & Val"InputBo?"'Entrar el primer $alor', 'Entrada de datos'## Kumero0 & Val"InputBo?"'Entrar el se(undo $alor', 'Entrada de datos'## Acti$eS/eet.an(e"'E11'#.Value & Kumero1 + Kumero0End Su
Val "%adena#. %on$ierte la cadena a un $alor num
8/15/2019 .MacrosPP.pps
11/122
08/06/16 Adolfo Aparicio 11
E*ercicio 0
El si(uiente pro(rama no unciona ienEl ;rea del un rect;n(ulo de ase ,2 altura 2,2 es 0,G2Pero este pro(rama da 0. El prolema es )ue no da EModii)ue el códi(o del procedimiento para solucionarlo
Su area"#
Jim ase As Inte(er Jim altura As Inte(er Jim supericie As Inte(er 8Dos decimales se introducen con coma en un inputo?, con punto en el códi(o altura & InputBo?"'Introduca la altura del rect;n(ulo'#
ase & InputBo?"'Introduca la ase del rect;n(ulo'# supericie & ase altura Ms(Bo? "'El ;rea del rect;n(ulo es ' L supericie#End Su
8/15/2019 .MacrosPP.pps
12/122
08/06/16 Adolfo Aparicio 12
*ublic + *ri#ate, &ells Pulic. Indica )ue el procedimiento %ub es accesile para todoslos dem;s procedimientos de todos los módulos Pri$ate. Indica )ue el procedimiento %ub es accesile sólo para
otros procedimientos del módulo en el )ue se declara Por deecto los procedimientos son Pulic %ells comiena a contar ilas columnas a partir del ran(o
especiicado en el o*eto an(e&ellsfila)columna.
Pri$ate Su %elda"# %ells"10, @#.Value & 'Solo ' L 0 Acti$eS/eet.%ells"17, C#.Value & 'Paris'
8Da %elda 17,C es la F17 an(e"'%1@:J1'#.Value & '%uadrado' an(e"%ells"12, @#, %ells"1C, ##.Value & '%uo' an(e"'%1G:F07'#.%ells"0, 1#.Value & 'Elipse' 8Esto solo pone una elipseEnd Su
8/15/2019 .MacrosPP.pps
13/122
08/06/1608/06/16 Adolfo AparicioAdolfo Aparicio 1313
ariables de objetos
ariables de objetos
Wna $ariale o*eto sir$e para /acer reerencia a un o*eto, esto si(niicaWna $ariale o*eto sir$e para /acer reerencia a un o*eto, esto si(niica)ue podremos acceder a las propiedades de un o*eto e in$ocar sus)ue podremos acceder a las propiedades de un o*eto e in$ocar susm
8/15/2019 .MacrosPP.pps
14/122
08/06/1608/06/16 Adolfo AparicioAdolfo Aparicio 1414
ariables de objetos
ariables de objetos
Su o*eto"# Jim As an(e Set & Acti$eS/eet.an(e"'H01:I00'# .Value & 'oma' .Font.Bold & 5rue .Font.%olor & 6B"7, 022, 177#End Su
Posilemente no se utilice demasiado esta clase de $ariales"depender; de las preerencias del pro(ramador#, pero /a casos enlos )ue no /a m;s remedio )ue utiliarlas, por e*emplo enestructuras 1or Each ... 2ext como $eremos, o cuando sea necesarioconstruir unciones )ue de$uel$an ran(os, reerencias a /o*as, etc.
8/15/2019 .MacrosPP.pps
15/122
08/06/16 Adolfo Aparicio 15
Estructuras &ondicionales f %ondición "hen Sent
8/15/2019 .MacrosPP.pps
16/122
08/06/16 Adolfo Aparicio 16
Estructuras &ondicionales%ub &ondicional3!is.
4gual 5ue el procedimiento anterior pero ahora usando #ariables Dim *recio /s nteger
Dim Descuento /s nteger
*recio 6 7
Descuento 6 7
*recio 6 'alnput!ox8Entrar el precio8) 8Entrar8..
4 %i el #alor de la #ariable precio es mayor 5ue 9777) entonces) pedir descuento
f *recio : 9777 "hen
Descuento 6 'alnput!ox8Entrar descuento8) 8Entrar8..
End f
/cti#e%heet,Range819;8.,'alue 6 *recio
/cti#e%heet,Range819. f /cti#e%heet,Range819;8.,'alue 6 /cti#e%heet,Range819=8.,'alue "hen
/cti#e%heet,Range819;8.,1ont,&olor 6 R?!7) 7) >
8/15/2019 .MacrosPP.pps
17/122
08/06/16 Adolfo Aparicio 17
Estructuras &ondicionales,
Else%ub &ondicional3Else.
Dim *recio /s %ingle
Dim Descuento /s %ingle
*recio 6 7
Descuento 6 7
*recio 6 'alnput!ox8Entrar el precio8) 8Entrar8..
4 %i el #alor de la #ariable precio es mayor 5ue 9777) entonces) aplicar descuento del 97@
f *recio : 9777 "hen
Descuento 6 *recio A 97 B 977.
/cti#e%heet,Range8?9C8.,'alue 6 7,9
Else 4 %ino /plicar descuento del
8/15/2019 .MacrosPP.pps
18/122
8/15/2019 .MacrosPP.pps
19/122
08/06/16 Adolfo Aparicio 19
El $alor Kot/in(
Su o*eto!Bis"#
Jim As an(e Set & Acti$eS/eet.an(e"'E10:F1@'# .Value & 'Milan' .Font.Bold & 5rue Set & Kot/in( 8Kot/in( permite asi(na a la $ariale o*eto un $alor nulo.
8 Esto es >til *unto con un IF para $eriicar si la $ariale esta asi(nada I Is Kot/in( 5/en Ms(Bo? Prompt:&'Da $ariale *eto no /a sido asi(nada', Buttons:&$Y, !
5itle:&'Error' Else .Value & 'Hola' End I End Su
Al(unas $eces puede )ue sea necesario desasi(nar una $ariale del o*eto al cual /acereerencia, en este caso dee i(ualar la $ariale al $alor 2othing de la orma si(uiente.
%et Variale!*eto & 2othing
Haitualmente se utilia 2othing en una estructura condicional para comproar si la $arialeo*eto est; asi(nada. ser$e )ue si se utilia una $ariale o*eto a la cual toda$a no se le /a/ec/o nin(una asi(nación el pro(rama dar; error detendr; su e*ecución. Es uena pr;ctica/acer este tipo de comproaciones antes de traa*ar con $ariales o*eto.
8/15/2019 .MacrosPP.pps
20/122
08/06/16 Adolfo Aparicio 20
&ondicionales anidadas%ub &ondicional3doble. Dim a /s nteger
Dim b /s nteger
Dim & /s %tring
a 6 /cti#e%heet,Range8?978.,'alue
b 6 /cti#e%heet,Range8?998.,'alue
f a 6 b "hen
& 6 8Los #alores de ?97 y ?99 son iguales8 Else
f a : b "hen
& 6 8?97 es mayor 5ue ?998
Else
& 6 8?97 es menor 5ue ?998
End f
End f /cti#e%heet,Range8?8.,'alue 6 &
End %ub
8/15/2019 .MacrosPP.pps
21/122
08/06/16 Adolfo Aparicio 21
Elsef
f condiciFn 9 "hen
%entencia 9
%entencia >
Elsef condiciFn > "hen
%entencia C
%entencia ;
Elsef condiciFn C "hen
%entencia <
%entencia =
Elsef condiciFn ; "hen
%entencia G
%entencia H
Else
%entencia %entencia 97
Endf
%ub &ondicional3doble3>.
Dim a /s nteger
Dim b /s nteger
Dim & /s %tring
a 6 /cti#e%heet,Range8?978.,'alue
b 6 /cti#e%heet,Range8?998.,'alue
f a 6 b "hen
& 6 8Los #alores de ?97 y ?99 son igualesI
4Elsef abre#ia dos condicuonales anidados
Elsef a : b "hen
& 6 8?97 es mayor 5ue ?998
Else
& 6 8?97 es menor 5ue ?998
End f /cti#e%heet,Range8?8.,'alue 6 &
End %ub
El procedimiento anterior se puede are$iar con un EsleI
8/15/2019 .MacrosPP.pps
22/122
08/06/1608/06/16 Adolfo AparicioAdolfo Aparicio 2222
perador Dó(ico AKJperador Dó(ico AKJSub YAcero() 'Uso del condicional AND
Dim Producto As String, Cantidad As String, Precio As Single
Dim Total As Single, Descuento As Single, Total_Descuento As Single Precio = 'UCase con!ierte a ma"#sculas
Producto = UCase($n%ut&o(ntrar nombre del Producto, ntrar))
Precio = *al($n%ut&o(ntrar Precio, ntrar))
Cantidad = *al($n%ut&o(ntrar Cantidad, ntrar))
Total = Precio + Cantidad
Acti!eSeet-.ange(/0)-*alue = Producto
Acti!eSeet-.ange(/00)-*alue = Precio Acti!eSeet-.ange(/01)-*alue = Cantidad
Acti!eSeet-.ange(/02)-*alue = Total
'Si el Total es ma"or 3ue 0 " el %roducto es Acero, a%licar descuento
$4 Total 5 0 And Producto = AC.6 Ten
Descuento = *al($n%ut&o(ntrar Descuento, ntrar))
Total_Descuento = Total + (Descuento 7 0)
Total = Total 8 Total_Descuento Acti!eSeet-.ange(/09)-*alue = Total_Descuento
Acti!eSeet-.ange(/0:)-*alue = Total
nd $4
.ange(/01)-Number;ormat =
8/15/2019 .MacrosPP.pps
23/122
08/06/1608/06/16 Adolfo AparicioAdolfo Aparicio 2323
perador Dó(ico perador Dó(ico Sub 6Acero() ' Condicional 6.
Dim Producto As String, Cantidad As $nteger, Precio As Single Dim Total As Single, Descuento As Single, Total_Descuento As Single
Precio =
'?Case con!ierte a min#sculas
Producto = ?Case($n%ut&o(ntrar Nombre del Producto, ntrar))
Precio = *al($n%ut&o(ntrar el Precio, ntrar))
Cantidad = *al($n%ut&o(ntrar la Cantidad, ntrar))
Total = Precio + Cantidad
Acti!eSeet-.ange($0)-*alue = Producto
Acti!eSeet-.ange($00)-*alue = Precio
Acti!eSeet-.ange($01)-*alue = Cantidad
Acti!eSeet-.ange($02)-*alue = Total
'si Total es ma"or de 0- o el %roducto es Acero, a%licar descuento
$4 Total 5 0 6r Producto = acero Ten
Descuento = *al($n%ut&o(ntrad Descuento, ntrar))
Total_Descuento = Total + (Descuento 7 0)
Total = Total 8 Total_Descuento
Acti!eSeet-.ange($09)-*alue = Total_Descuento
Acti!eSeet-.ange($0:)-*alue = Total
nd $4
nd Sub
8/15/2019 .MacrosPP.pps
24/122
08/06/1608/06/16 Adolfo AparicioAdolfo Aparicio 2424
perador Dó(ico K5perador Dó(ico K5Sub o%eradorN6()
Dim Precio As $nteger Dim Descuento As $nteger
Precio =
Descuento =
Precio = *al($n%ut&o(ntrar el Precio, ntrar))
' Si el !alor de la !ariable %recio N6 es menor o igual 3ue0,
' entonces %edir descuento
$4 Not Precio @= 0 Ten
Descuento = *al($n%ut&o(ntrar Descuento, ntrar))
nd $4
Acti!eSeet-.ange(&0)-*alue = Precio Acti!eSeet-.ange(&1)-*alue = Descuento
Acti!eSeet-.ange(&10)-*alue = Precio 8 Descuento
nd Sub
8/15/2019 .MacrosPP.pps
25/122
77C1C Adolo Aparicio 02
Tablas de VerdadTablas de Verdad
/ ! & 2O/. J/K!K&. O/K!K&.
VEJAJE VEJAJE VEJAJE FADS VEJAJE VEJAJE
VEJAJE VEJAJE FADS FADS FADS VEJAJE
VEJAJE FADS VEJAJE FADS FADS VEJAJE
VEJAJE FADS FADS FADS FADS VEJAJE
FADS VEJAJE VEJAJE VEJAJE FADS VEJAJE
FADS VEJAJE FADS VEJAJE FADS VEJAJE
FADS FADS VEJAJE VEJAJE FADS VEJAJE
FADS FADS FADS VEJAJE FADS FADS
8/15/2019 .MacrosPP.pps
26/122
08/06/16 Adolfo Aparicio 26
%alculadora
Su %alculadora"# Jim Si(no As Strin( 1 8Wn solo car;cter alanum
8/15/2019 .MacrosPP.pps
27/122
08/06/16 Adolfo Aparicio 27
Da estructura Select %ase
Su calcula!case"# Jim Si(no As Strin( 1 Jim Valor1 As Inte(er , Valor0 As Inte(er , 5otal As Inte(er Valor1 & Acti$eS/eet.an(e"'J1Q'#.Value Valor0 & Acti$eS/eet.an(e"'J07'#.Value Si(no & Acti$eS/eet.an(e"'J01'#.Value Select %ase Si(no
%ase '+' 5otal & Valor1 + Valor0 %ase 'O' 5otal & Valor1 O Valor0 %ase '?' 5otal & Valor1 Valor0 %ase :' 5otal & Valor1 Valor0
%ase Else 5otal & 7 End Select Acti$eS/eet.an(e"'J00'#.Value & 5otalEnd Su
Da estructura Select %ase da maor le(iilidad al pro(rama anterior
8/15/2019 .MacrosPP.pps
28/122
08/06/16 Adolfo Aparicio 28
E*ercicio
%ree un pro(rama )ue pre(unte laec/a de nacimiento, calcule cuantosdas /an transcurrido /asta el
momento actual di(a en )u< da dela semana nació.
8/15/2019 .MacrosPP.pps
29/122
08/06/16 Adolfo Aparicio 29
Solución E*ercicioSu nacimiento"# Jim dias As Inte(er , Jsemana As Inte(er , Factual As Jate, d As Strin( 8Jsemana es una $ariale )ue da un n>mero )ue indica el da de la semana
8dado por la unción -EEYJA=, )ue en E?cel es &JIASEM"ec/a# Static Fnacimiento As Jate Factual & Jate 8Jate es la unción de VBA e)ui$alente a &H="# Fnacimiento & Factual Fnacimiento & InputBo?"Prompt:&'Introduca su ec/a de nacimiento', 5itle:&'Formato JJOMMOAAAA',Jeault:&Fnacimiento# dias & Factual O Fnacimiento
Jsemana & Application.-ors/eetFunction.-eeda"Fnacimiento# Select %ase Jsemana %ase 1: d & 'Jomin(o' %ase 0: d & 'Dunes' %ase @: d & 'Martes' %ase : d & 'Miercoles' %ase 2: d & 'Zue$es' %ase C: d & 'Viernes' %ase G: d & 'Saado' End Select Ms(Bo? Prompt:&'Wsted nació un ' L d L ' /ace ' L dias L ' das' L %/r"17#, 5itle:&'Esta inormación escorrecta siempre )ue /o sea ' L FactualEnd Su
8/15/2019 .MacrosPP.pps
30/122
08/06/16 Adolfo Aparicio 30
%ada sentencia %ase e$al>a un ran(o de $aloresSu Media"# Jim Kota1 As Sin(le, Kota0 As Sin(le, Kota@ As Sin(le
Jim caliica As Strin(, Media As Sin(le Kota1 & %Sn("InputBo?"'Entrar Kota primera e$aluación', 'Kota'## Kota0 & %Sn("InputBo?"'Entrar Kota Se(unda e$aluación', 'Kota'## Kota@ & %Sn("InputBo?"'Entrar Kota 5ercera e$aluación', 'Kota'## Media & "Kota1 + Kota0 + Kota@# @ Acti$eS/eet.an(e"'%1G'#.Value & Kota1 Acti$eS/eet.an(e"'J1G'#.Value & Kota0 Acti$eS/eet.an(e"'E1G'#.Value & Kota@
Acti$eS/eet.an(e"'J1'#.Value & Media Select %ase Media %ase Is [ 2 caliica & 'Suspenso' %ase 2 5o C.QQ caliica & 'Aproado' %ase C.QQ 5o .QQ caliica & 'Kotale'
%ase Is X , QQ caliica & 'Soresaliente' End Select Acti$eS/eet.an(e"'E1'#.Value & caliicaEnd Su
8/15/2019 .MacrosPP.pps
31/122
08/06/16 Adolfo Aparicio 31
Select %ase FiltrosSu con!case!!iltro"# Jim Si(no As Strin( Jim Valor1 As Variant, Valor0 As Variant, 5otal AsSin(le Jim %ontinuar As Boolean Valor1 & Acti$eS/eet.an(e"'E1Q'#.Value Valor0 & Acti$eS/eet.an(e"'E07'#.Value Si(no & Acti$eS/eet.an(e"'E01'#.Value %ontinuar & 5rue 8 Si en la casilla E1Q no /a un $alor num
8/15/2019 .MacrosPP.pps
32/122
08/06/16 Adolfo Aparicio 32
Lista de 1unciones de
&omprobaciFn IsKumn $alor de error. IsArra"E?presión#
%ompruea si e?presión "una $ariale# es un arra o no. Is*ect"E?presión#
%ompruea si e?presión "una $ariale# representa una $ariale tipo o*eto. IsKull"E?presión#
%ompruea si e?presión contiene un $alor nulo deido a datos no $;lidos.
Kot/in( Ko es propiamente una unción, sir$e para comproar si una $ariale o*eto esta 8asociada a un
o*eto antes de /acer cual)uier operación con ella. ecuerde )ue para traa*ar con 8una $arialeo*eto antes dee asi(narse a uno "mediante la instrucción Set#, en caso contrario se producir; unerror en el pro(rama cuando utilice el o*eto se detendr; su e*ecución.
8/15/2019 .MacrosPP.pps
33/122
08/06/16 Adolfo Aparicio 33
Select %ase FiltroSu con!case!!iltro!Bis"#8 En lu(ar de los tres I de comproación se puede utiliar el operador de la manera si(uiente Jim Si(no As Strin( Jim Valor1 As Variant, Valor0 As Variant, 5otal As Sin(le Jim %ontinuar As Boolean Valor1 & Acti$eS/eet.an(e"'F1Q'#.Value Valor0 & Acti$eS/eet.an(e"'F07'#.Value Si(no & Acti$eS/eet.an(e"'F01'#.Value %ontinuar & 5rue 8 Si en la casilla F1Q no /a un $alor num
8/15/2019 .MacrosPP.pps
34/122
08/06/16 Adolfo Aparicio 34
Da unción Ms(Bo? "F1# Muestra un mensa*e en un cuadro de di;lo(o /asta )ue el usuario pulse un
otón. Da unción de$uel$e un dato tipo Inte(er en unción del otón pulsado por
el usuario. A la /ora de in$ocar est; unción, se permiten dierentes tipos deotones.
MsgBox( Mensaje, Botones, Título, Archivo de ayuda, contexto) Mensaje: li(atorio, es el mensa*e )ue se muestra dentro del cuadro de
di;lo(o. !otones: pcional. Es un n>mero o una suma de n>meros o constantes, )ue
sir$e para mostrar determinados otones e iconos dentro del cuadro de di;lo(o.Si se omite este ar(umento asume $alor 7 )ue corresponde a un >nico Botón Y. "tulo : pcional. Es el te?to )ue se mostrar; en la arra del ttulo del cuadro de
di;lo(o.Ms(Bo? Prompt:&'En la casilla A1 no /a nin(>n $alor num
8/15/2019 .MacrosPP.pps
35/122
08/06/16 Adolfo Aparicio 35
Msg!oxSu Mesa*e%a*a"# Jim nom As Strin(, espuesta As Inte(er nom & 'Antonio'
Ms(Bo? "'Hola ' L nom# 8Se pueden poner par
8/15/2019 .MacrosPP.pps
36/122
8/15/2019 .MacrosPP.pps
37/122
08/06/16 Adolfo Aparicio 37
Da instrucción -it/ "repaso#Su Acero!it/"# Jim Producto As Strin( Jim %antidad As Inte(er
Jim Precio As Sin(le Jim 5otal As Sin(le Jim Jescuento As Sin(le Jim 5otal!Jescuento As Sin(le Precio & 7 Producto & D%ase"InputBo?"'Entrar Komre delProducto', 'Entrar'## Precio & Val"InputBo?"'Entrar el precio', 'Entrar'## %antidad & Val"InputBo?"'Entrar la cantidad', 'Entrar'## 5otal & Precio %antidad -it/ Acti$eS/eet .an(e"'Z17'#.Value & Producto .an(e"'Z11'#.Value & Precio .an(e"'Z10'#.Value & %antidad .an(e"'Z1@'#.Value & 5otal
End -it/
8 Si total maor )ue 17.777 o el producto es Acero,aplicar descuento. I 5otal X 17777 r Producto & 'Acero' 5/en
Jescuento & Val"InputBo?"'Entrar Jescuento','Entrar'## 5otal!Jescuento & 5otal "Jescuento 177# 5otal & 5otal O 5otal!Jescuento -it/ Acti$eS/eet .an(e"'Z1'#.Value & 5otal!Jescuento .an(e"'Z12'#.Value & 5otal End -it/
End I End Su
8/15/2019 .MacrosPP.pps
38/122
08/06/16 Adolfo Aparicio 38
Estructuras repetiti#asSu Media!notas"# Jim Kota As Inte(er Jim Media As Sin(le
Media & 7
8ser$e )ue este pro(rama repite el si(uientelo)ue de sentencias, 2 $eces
Kota & Val"InputBo?"'Entrar la Kota 1: ', 'Entrar
Kota'## Acti$eS/eet.an(e"'61G'#.Value & Kota Media & Media + Kota
Kota & Val"InputBo?"'Entrar la Kota 0: ', 'Entrar
Kota'## Acti$eS/eet.an(e"'61'#.Value & Kota Media & Media + Kota
Kota & Val"InputBo?"'Entrar la Kota @: ', 'EntrarKota'## Acti$eS/eet.an(e"'61Q'#.Value & Kota Media & Media + Kota
Kota & Val"InputBo?"'Entrar la Kota : ', 'EntrarKota'## Acti$eS/eet.an(e"'607'#.Value & Kota
Media & Media + Kota
Kota & Val"InputBo?"'Entrar la Kota 2: ', 'EntrarKota'## Acti$eS/eet.an(e"'(01'#.Value & Kota Media & Media + Kota
Media & Media 2 Acti$eS/eet.an(e"'600'#.Value & MediaEnd Su
8/15/2019 .MacrosPP.pps
39/122
08/06/16 Adolfo Aparicio 39
!ucle 1or 2ext
Su 5otaliar"#
Jim i As Inte(er Jim 5otal As Inte(er Jim Valor As Inte(er
For i & 1 5o 17 Valor & Val"InputBo?"'Entrar el $alor ' L i, 'Entrada'## 5otal & 5otal + Valor Ke?t i
Acti$eS/eet.an(e"'%11'#.Value & 5otalEnd Su
8/15/2019 .MacrosPP.pps
40/122
08/06/16 Adolfo Aparicio 40
ecorrer casillas de una Ho*a
*ropiedad &ells sir$e para reerenciar una celda o un ran(o de celdasse(>n coordenadas de ila columna
Su rellenar"# 8ellena de H1C a H07 con los pares del 0 al 17 Jim Fila As Inte(er, i As Inte(er Fila & 1C
For i & 0 5o 17 Step 0 Acti$eS/eet.%ells"Fila, #.Value & i Fila & Fila + 1 8Esto es un contador
Ke?t iEnd Su
Su rellenar!Bis"# 8ellena de H1C a H07 con los pares del 0 al 17, sin contador Fila
Jim i As Inte(er For i & 1C 5o 07 Acti$eS/eet.%ells"i, Q#.Value & i 0 O @7 Ke?t iEnd Su
8/15/2019 .MacrosPP.pps
41/122
8/15/2019 .MacrosPP.pps
42/122
08/06/16 Adolfo Aparicio 42
ellenar una serie ecuerde )ue cuando utiliamos &ells como propiedad de un ran(o "*eto an(e#,
&ells empiea a contar a partir de la casilla reerenciada por Range
Su serie!Bis"# Jim %asilla!Inicial As Strin( Jim i As Inte(er Jim Fila As Inte(er , %olumna As Inte(er
%asilla!Inicial & InputBo?"'Introducir la casilla Inicial : ' L c/r"17# L Por e*emplola D17T, '%asilla Inicial'# Acti$eS/eet.an(e"%asilla!Inicial#.Acti$ate
Fila & 1 For i & 1 5o 17 Acti$eS/eet.an(e"%asilla!Inicial#.%ells"Fila, 1#.Value & i
Fila & Fila + 1 Ke?t iEnd Su
8/15/2019 .MacrosPP.pps
43/122
08/06/16 Adolfo Aparicio 43
ellenar una serie Wna $ariante del pro(rama anterior. Ko se usa Fila, se usa la $ariale del For
Su serie!5ris"# Jim %asilla!Inicial As Strin( Jim i As Inte(er
Jim Fila As Inte(er , %olumna As Inte(er %asilla!Inicial & InputBo?"'Introducir la casilla Inicial : ' L c/r"17# L Pore*emplo la M17T, '%asilla Inicial'# Acti$eS/eet.an(e"%asilla!Inicial#.Acti$ate N Acti$ate "con an(e# acti$a una sola celda. an(e"'B0'#./cti#ate N Para seleccionar un ran(o de celdas, use el m
8/15/2019 .MacrosPP.pps
44/122
08/06/16 Adolfo Aparicio 44
ForOKe?t %ells Vol$emos a calcular las notas medias, pero usando la estructura 1or32ext la
propiedad &ells
Su Media!notas!Bis"# Jim Kota As Inte(er Jim Media As Sin(le Jim Fila As Inte(er
Media & 7 For Fila & 1 5o 2 Kota & Val"InputBo?"'Entrar la ' L ' Kota ' L Fila, 'Entrar Kota'## Acti$eS/eet.an(e"K17'#.%ells"Fila, 1# & Kota 8lo de an(e"K17'# se pone para marcar la celda de inicio, 8si no se pone comiena en A1 Media & Media + Kota 8esto es un acumulado
Ke?t Fila Media & Media 2 Acti$eS/eet.an(e"K17'#.%ells"C, 1#.Value & MediaEnd Su
8/15/2019 .MacrosPP.pps
45/122
08/06/16 Adolfo Aparicio 45
Propiedad set
Esta propiedad es tamitil a la /ora derecorrer ran(o.
Offset, )ue si(niica desplaamiento, es unapropiedad del o*eto Range se utilia parareerenciar una casilla situada a n Filas n%olumnas de una casilla dada.
E*emplos: /cti#e%heet.Range"'A1'#.Offset"0, 0#.'alue & 'Hola
asilla ! " #ola$ % filas y % columnas desde A&' /cti#e&ell.Offset"2,1#.'alue & 'Hola
( )ilas por de*ajo de la casilla Activa " #ola /cti#e&ell.Offset"0,0#./cti#ate
Activar la casilla +ue est, % filas y % columnas de la activa
8/15/2019 .MacrosPP.pps
46/122
08/06/16 Adolfo Aparicio 46
ForOKe?t set.Sin camiar celda acti$a
ecorrer ran(os con la propiedad Set "desplaamiento#Su Media!notas!5ris"# Jim Kota As Inte(er Jim Media As Sin(le Jim Fila As Inte(er Media & 7
Acti$eS/eet.an(e"'17'#.Acti$ate 8la casilla acti$a siempre es la misma For Fila & 7 5o Kota & Val"InputBo?"'Entrar la ' L ' Kota ' L Fila + 1, 'Entrar Kota'## Acti$e%ell.set"Fila, 7#.Value & Kota Media & Media + Kota Ke?t Fila
Media & Media 2 Acti$e%ell.set"2, 7#.Value & MediaEnd Su
8/15/2019 .MacrosPP.pps
47/122
08/06/16 Adolfo Aparicio 47
ForOKe?t set.%amia %elda Acti$a
Su Media!notas!5etra"# Jim Kota As Inte(er Jim Media As Sin(le Jim i As Inte(er Media & 7 Acti$eS/eet.an(e"'P17'#.Acti$ate For i & 1 5o 2
Kota & Val"InputBo?"'Entrar la ' L ' Kota ' L i, 'Entrar Kota'## Acti$e%ell.Value & Kota Media & Media + Kota 8Hacer acti$a la casilla situada una ila por dea*o de la actual Acti$e%ell.set"1, 7#.Acti$ate Ke?t i Media & Media 2 Acti$e%ell.Value & MediaEnd Su
8/15/2019 .MacrosPP.pps
48/122
08/06/16 Adolfo Aparicio 48
Jo -/ile..Doop
Estructura epetiti$a "Hacer Mientras# Da estructura repetiti$a 1OR se adapta perectamente a a)uellassituaciones en )ue se sae pre$iamente el n>mero de $eces )uese /a de repetir un proceso
Jo -/ile..Doop es una estructura repetiti$a )ue se repitemientras se cumpla el criterio
Do While %ondición
Sentencia1
Sentencia0
. .
Sentencia K
Loop
En las sentencias interiores setiene )ue producir en al(>nmomento un camio )ue /a(a
)ue la condición de*e decumplirse para as poder salirdel ucle.
8/15/2019 .MacrosPP.pps
49/122
08/06/16 Adolfo Aparicio 49
Su e(istros"# 8ellenar los re(istros de una Base de Jatos. Ho*a@ Jim Komre As Strin(, %iudad As Strin( Jim Edad As Inte(er , Fec/a As Jate
8Acti$ar Ho*a@ -ors/eets"'Ho*a@'#.Acti$ate -it/ Acti$eS/eet .an(e"'B'#.Value & 'Komre' .an(e"'%'#.Value & '%iudad' .an(e"'J'#.Value & 'Edad' .an(e"'E'#.Value & 'Fec/a' End -it/ 8Para poner ne(rita centrar la caecera an(e"'B:E'#.Select -it/ Selection .Font.Bold & 5rue .HoriontalAli(nment & ?l%enter End -it/ 8Acti$ar casilla B2 Acti$eS/eet.an(e"'B2'#.Acti$ate Komre & InputBo?"'Entre el Komre "eturn para
5erminar# : ', 'Komre'# 8Mientras la $ariale Komre sea dierente a cadena $aca
Jo -/ile Komre [X '' %iudad & InputBo?"'Entre la %iudad : ', '%iudad'# Edad & Val"InputBo?"'Entre la Edad : ', 'Edad'## Fec/a & %Jate"InputBo?"'Entra la Fec/a : ', 'Fec/a'##
8%opiar los datos en las casillas correspondientes -it/ Acti$e%ell .Value & Komre .set"7, 1#.Value & %iudad .set"7, 0#.Value & Edad .set"7, @#.Value & Fec/a End -it/ 8Hacer acti$a la celda de la ila si(uiente a la actual Acti$e%ell.set"1, 7#.Acti$ate Komre & InputBo?"'Entre el Komre "eturn para5erminar# : ', 'Komre'# Doop 8pide nue$os datos mientras nomre no este $aco 8Seleccionamos la Base de Jatos la ponemos amarilla Application.6oto eerence:&'%0' Selection.%urrente(ion.Select -it/ Selection.Interior .%olorInde? & C
.Pattern & ?lSolid End -it/End Su
ellenar una Base de Jatos
8/15/2019 .MacrosPP.pps
50/122
08/06/16 Adolfo Aparicio 50
Detecta donde nos hemos 5uedadoSu e(istros!Bis"# Jim Komre As Strin(
Jim %iudad As Strin( Jim Edad As Inte(er Jim Fec/a As Jate -ors/eets"'Ho*a@'#.Acti$ate Acti$eS/eet.an(e"'B'#.Acti$ate 8Buscar la primera celda $aca de la columnaB con$ertirla en acti$a
Jo -/ile Kot IsEmpt"Acti$e%ell# Acti$e%ell.set"1, 7#.Acti$ate Doop Komre & InputBo?"'Entre el Komre"eturn para 5erminar# : ', 'Komre'# 8 Mientras la $ariale Komre sea dierente acadena $aca
Jo -/ile Komre [X '' %iudad & InputBo?"'Entre la %iudad : ',
'%iudad'# Edad & Val"InputBo?"'Entre la Edad : ','Edad'## Fec/a & %Jate"InputBo?"'Entra laFec/a : ', 'Fec/a'## -it/ Acti$e%ell .Value & Komre .set"7, 1#.Value & %iudad .set"7, 0#.Value & Edad .set"7, @#.Value & Fec/a End -it/ Acti$e%ell.set"1, 7#.Acti$ate Komre & InputBo?"'Entre el Komre"eturn para 5erminar# : ', 'Komre'# Doop
End Su
8/15/2019 .MacrosPP.pps
51/122
08/06/16 Adolfo Aparicio 51
NDesea introducir ms datos PSu e(istros!5ris"#
Jim Komre As Strin(
Jim %iudad As Strin( Jim Edad As Inte(er Jim Fec/a As Jate Jim Mas!datos As Inte(er 8Mas!datos esuna $ariale de tipo Inte(er -ors/eets"'Ho*a@'#.Acti$ate Acti$eS/eet.an(e"'B'#.Acti$ate 8Buscar la primera celda $aca de la
columna B con$ertirla en acti$a Jo -/ile Kot IsEmpt"Acti$e%ell# Acti$e%ell.set"1, 7#.Acti$ate Doop Mas!datos & $=es 8es necesaria la lnea anterior al ucleMas!datos & $=es, para )ue cuando see$al>e la
8condición por $e primera esta se cumpla se e*ecuten las sentencias de dentro delucle
Jo -/ile Mas!datos & $=es Komre & InputBo?"'Entre el Komre: ',
'Komre'# %iudad & InputBo?"'Entre la %iudad : ', '%iudad'# Edad & Val"InputBo?"'Entre la Edad : ', 'Edad'## Fec/a & %Jate"InputBo?"'Entra la Fec/a : ','Fec/a'## -it/ Acti$e%ell .Value & Komre .set"7, 1#.Value & %iudad
.set"7, 0#.Value & Edad .set"7, @#.Value & Fec/a End -it/ Acti$e%ell.set"1, 7#.Acti$ate 8Pre(untar al usuario si desea entrar otro re(istro Mas!datos & Ms(Bo?"'tro re(istro 4', $=esKo +$9uestion, 'Entrada de datos'# Doop
End Su
8/15/2019 .MacrosPP.pps
52/122
08/06/16 Adolfo Aparicio 52
Estructura Do,,Loop While
El uncionamiento de esta estructura repetiti$a es similar a laanterior sal$o )ue la condición se e$al>a al inal, la inmediataconsecuencia de esto es )ue las instrucciones del cuerpo delucle se e*ecutaran al menos una $e.
Esta estructura es m;s adecuada para casos como el anterior.Si $amos a entrar datos, al menos uno entraremos, por tanto lasinstrucciones del cuerpo del ucle se deen e*ecutar al menosuna $e, lue(o a decidiremos si se repiten o no.
En este caso no es necesario la lnea Mas!Jatos & $=es antesde Do para orar la entrada en el ucle a )ue la condición $a al
inal.
8/15/2019 .MacrosPP.pps
53/122
08/06/16 Adolfo Aparicio 53
Jo..Doop -/ileSu e(istros!5etra"#
Jim Komre As Strin( Jim %iudad As Strin( Jim Edad As Inte(er Jim Fec/a As Jate Jim Mas!datos As Inte(er 8Mas!datos es una $ariale de tipoInte(er
-ors/eets"'Ho*a@'#.Acti$ate Acti$eS/eet.an(e"'B'#.Acti$ate 8Buscar la primera celda $aca de lacolumna B con$ertirla en acti$a Jo -/ile Kot IsEmpt"Acti$e%ell# Acti$e%ell.set"1, 7#.Acti$ate Doop
Jo
Komre & InputBo?"'Entre el Komre: ', 'Komre'# %iudad & InputBo?"'Entre la %iudad : ', '%iudad'# Edad & Val"InputBo?"'Entre la Edad : ', 'Edad'## Fec/a & %Jate"InputBo?"'Entra la Fec/a : ', 'Fec/a'## -it/ Acti$e%ell .Value & Komre .set"7, 1#.Value & %iudad
.set"7, 0#.Value & Edad .set"7, @#.Value & Fec/a End -it/ Acti$e%ell.set"1, 7#.Acti$ate Mas!datos & Ms(Bo?"'tro re(istro 4', $=esKo +$9uestion, 'Entrada de datos'# 8Mientras Mas!datos & $=es
Doop -/ile Mas!datos & $=esEnd Su
8/15/2019 .MacrosPP.pps
54/122
08/06/16 Adolfo Aparicio 54
Estructura Jo..Doop Wntil
Qacer,, Qasta 5ue se cumpla la condiciFn
Es otra estructura )ue e$al>a la condición al inal. Da interpretación es distinta, a )ue el ucle se $a
repitiendo Q/%"/ 5ue se cumple la condiciFn, no MIEK5AS se cumple la condición. Je las dos estructura use la )ue m;s le (uste
8/15/2019 .MacrosPP.pps
55/122
08/06/16 Adolfo Aparicio 55
Jo..Doop WntilSu e(istros!Penta"# Jim Komre As Strin( Jim %iudad As Strin( Jim Edad As Inte(er Jim Fec/a As Jate Jim Mas!datos As Inte(er 8Mas!datos es una $ariale de tipo
Inte(er -ors/eets"'Ho*a@'#.Acti$ate Acti$eS/eet.an(e"'B'#.Acti$ate 8Buscar la primera celda $aca de lacolumna B con$ertirla en acti$a Jo -/ile Kot IsEmpt"Acti$e%ell# Acti$e%ell.set"1, 7#.Acti$ate
Doop
Jo Komre & InputBo?"'Entre el Komre: ', 'Komre'# %iudad & InputBo?"'Entre la %iudad: ', '%iudad'# Edad & Val"InputBo?"'Entre la Edad: ', 'Edad'## Fec/a & %Jate"InputBo?"'Entre la Fec/a: ', 'Fec/a'## -it/ Acti$e%ell .Value & Komre
.set"7, 1#.Value & %iudad .set"7, 0#.Value & Edad .set"7, @#.Value & Fec/a End -it/ Acti$e%ell.set"1, 7#.Acti$ate Mas!datos & Ms(Bo?"'tro re(istro 4', $=esKo +$9uestion, 'Entrada de datos'#
8Hasta )ue Mas!Jatos sea i(ual a $Ko Doop Wntil Mas!datos & $KoEnd Su
8/15/2019 .MacrosPP.pps
56/122
08/06/16 Adolfo Aparicio 56
Estructura For Eac/ Este ucle se utilia ;sicamente para e*ecutar un (rupo de sentencias
con los elementos de una colección o una matri. ecuerde )ue una colección es un con*unto de o*etos, /o*as, ran(os,
etc.NPara camiar los nomres de las /o*as de un liro de traa*oSu KomraHo*as"# 8Pro(rama )ue pre(unta el nomre para cada /o*a de un liro de traa*o,
8si no se pone nomre a la /o*a, )ueda el )ue tiene. Jim Kue$o!Komre As Strin( Jim /o*a As -ors/eet 8 Para cada /o*a del con*unto -orS/eets For Eac/ /o*a In -ors/eets Kue$o!Komre & InputBo?"'Komre de la Ho*a : ' L /o*a.Kame, 'Komrar Ho*as'# I Kue$o!Komre [X '' 5/en /o*a.Kame & Kue$o!Komre
End I Ke?t 8 Ho*a $a reerenciando cada una de las /o*as del con*unto -orS/eets a cada paso de ucleEnd Su
8/15/2019 .MacrosPP.pps
57/122
08/06/16 Adolfo Aparicio 57
E\I5 F Esta macro es una $ariante de la anterior Si se pulsa %AK%ED o el nomre de /o*a esta $aco T se sale del ucle con un
E\I5 F. E" 1OR permite salir de un ucle F o F EA%H, mientras )ue E" DO
aandona directamente un ucle J Adem;s nos /emos a/orrado el EKJ IF
Su KomraHo*as0"#
8Si se pulsa cancelar o no se pone nada en el nomre se sale con el E\I5 F Jim Kue$o!Komre As Strin( Jim /o*a As -ors/eet For Eac/ /o*a In -ors/eets Kue$o!Komre & InputBo?"'Komre de la Ho*a : ' L /o*a.Kame, 'Komrar Ho*as',/o*a.Kame#
I Kue$o!Komre & '' 5/en E?it For 8E\I5 F sale del ucle /o*a.Kame & Kue$o!Komre Ke?tEnd Su
8/15/2019 .MacrosPP.pps
58/122
08/06/16 Adolfo Aparicio 58
Llenar un Rango
Se /a declarado una $ariale tipo an(e, este tipo de datos sir$e para (uardaran(os de una o m;s casillas, estas $ariales pueden lue(o utiliar todas las
propiedades m
8/15/2019 .MacrosPP.pps
59/122
08/06/16 Adolfo Aparicio 59
Procedimientos En los pro(ramas lar(os con$iene di$idir el traa*o en $arios procedimientos.
Incon$enientes de los procedimientos lar(os: (randes lo)ues de códi(o implican maor complicación del mismo repetición de sentencias maores prolemas de se(uimiento a la /ora de:
depurar errores ampliar uncionalidades incluir modiicaciones
Filosoa de di$ide $encer;sT
tratar cada prolema o tarea de orma m;s o menos aislada Para llamar un procedimiento desde otro se utilia la instrucción &all Nom*re-Procedimiento
%ub P!Wno"#Sentencias
.&all P!Jos"#
.Sentencias
.End %ub
& ll
8/15/2019 .MacrosPP.pps
60/122
08/06/16 Adolfo Aparicio 60
&all
Su e(istros!He?a"#8el mismo procedimiento )ue e(istros!Bis"# pero
usando una llamada %ADD a otro procedimiento8el códi(o )ue salta casilla /asta )ue se encuentra una$aca se implementa en un procedimiento8llamado, Saltar!%eldas!Dlenas.8Para entrar $alores se /a sustituido Jo -/ile..Dooppor Jo.. Doop -/ile. Jim Komre As Strin( Jim %iudad As Strin(
Jim Edad As Inte(er Jim ec/a As Jate Jim Mas!datos As Inte(er 8 Dlamada a la unción Saltar!%eldas!Dlenas, elpro(rama salta a)u a e*ecutar las 8 instrucciones de este procedimiento lue(o $uel$epara continuar la e*ecución
8 a partir de la instrucción Jo %all Saltar!%eldas!Dlenas
Jo Komre & InputBo?"'Entre el Komre: ',
'Komre'# %iudad & InputBo?"'Entre la %iudad : ', '%iudad'# Edad & Val"InputBo?"'Entre la Edad : ', 'Edad'## ec/a & %Jate"InputBo?"'Entra la Fec/a : ','Fec/a'## -it/ Acti$e%ell .Value & Komre .set"7, 1#.Value & %iudad .set"7, 0#.Value & Edad .set"7, @#.Value & ec/a End -it/ Acti$e%ell.set"1, 7#.Acti$ate Mas!datos & Ms(Bo?"'tro re(istro 4', $=esKo+ $9uestion, 'Entrada de datos'# Doop -/ile Mas!datos & $=es
End Su
8/15/2019 .MacrosPP.pps
61/122
08/06/16 Adolfo Aparicio 61
1unciFn llamada
Función )ue salta celdas de una misma columna. Sir$e para encontrar la primera celda $aca de la columna
Su Saltar!%eldas!Dlenas"# -ors/eets"'Ho*a@'#.Acti$ate Acti$eS/eet.an(e"'B'#.Acti$ate Jo -/ile Kot IsEmpt"Acti$e%ell# Acti$e%ell.set"1, 7#.Acti$ate Doop
End Su
8/15/2019 .MacrosPP.pps
62/122
08/06/16 Adolfo Aparicio 62
*asar parmetros
Dos par;metros son el mecanismo por el cual un procedimiento puedepasarle $alores a otro de esta orma condicionar, moldear, etc. lasacciones )ue e*ecuta.
El procedimiento llamado (ana entonces en le?iilidad. Da sinta?is dellamada de un procedimiento es la si(uiente:
%all Procedimiento"Par;metro1, Par;metro0,..., Par;metroK#
Dos par;metros pueden ser $alores o $ariales. Da sinta?is para el procedimiento llamado es la si(uiente:
%ub Procedimiento"Par;metro1 as 5ipo,..., Par;metroK As 5ipo#
ser$e )ue a)u los par;metros son $ariales )ue reciir;n los$alores e$identemente dee /aer coincidencia de tipo. Por e*emplo, si el primer par;metro es una $ariale tipo Inte(er, el primer
$alor )ue se le dee pasar al procedimiento cuando se llama tami
8/15/2019 .MacrosPP.pps
63/122
08/06/16 Adolfo Aparicio 63
%all *rocedimiento*armetro9) *armetro>),,,) *armetro2.
Su e(istros!Septa"# Jim Komre As Strin( Jim %iudad As Strin( Jim Edad As Inte(er Jim ec/a As Jate Jim Mas!datos As Inte(er 8 Dlamada a la unción
Saltar!%eldas!Dlenas!Bis 8 Mediante dos par;metros secomunica al procedimiento llamado en)ue /o*a celda comenar %all Saltar!%eldas!Dlenas!Bis"'Ho*a@', 'B'# 8Dos par;metros pueden ser $alores o$ariales
Jo Komre & InputBo?"'Entre el Komre : ', 'Komre'# %iudad & InputBo?"'Entre la %iudad : ', '%iudad'# Edad & Val"InputBo?"'Entre la Edad : ', 'Edad'## ec/a & %Jate"InputBo?"'Entre la Fec/a : ', 'Fec/a'## -it/ Acti$e%ell .Value & Komre
.set"7, 1#.Value & %iudad .set"7, 0#.Value & Edad .set"7, @#.Value & ec/a End -it/ Acti$e%ell.set"1, 7#.Acti$ate Mas!datos & Ms(Bo?"'tro re(istro 4', $=esKo +$9uestion, 'Entrada de datos'#
Doop -/ile Mas!datos & $=esEnd Su
8/15/2019 .MacrosPP.pps
64/122
08/06/16 Adolfo Aparicio 64
*rocedimiento con parmetros
Sir$e para Saltar celdas llenas de una columna /asta encontrar una $aca )ue
se con$ierte en acti$a Par;metros : Ho*a : Ho*a donde est; el ran(o a saltar. %asilla!Inicial : %asilla Inicial de la columna
6racias a los par;metros, sir$e para recorrer cual)uier ran(o en cual)uier /o*a.
Su Saltar!%eldas!Dlenas!Bis"/o*a As Strin(, %asilla!Inicial As Strin(# 8los par;metros son $ariales )ue reciir;n los $alores 8dee /aer coincidencia de tipos. -ors/eets"/o*a#.Acti$ate Acti$eS/eet.an(e"%asilla!Inicial#.Acti$ate Jo -/ile Kot IsEmpt"Acti$e%ell# Acti$e%ell.set"1, 7#.Acti$ate
DoopEnd Su
Los parmetros pueden ser #alores o
8/15/2019 .MacrosPP.pps
65/122
08/06/16 Adolfo Aparicio 65
Los parmetros pueden ser #alores o
#ariablesSu e(istros!cta"# Jim Komre As Strin(, %iudad As Strin(, Edad As Inte(er , ec/a As Jate, Mas!datos As Inte(er 8 Al procedimiento Saltar!%eldas!Dlenas!Bis se le pueden pasar $alores como en el caso anterior, o $ariales como en este.8 no$edad
Jim /o*a As Strin( Jim %asilla!Inicial As Strin( /o*a & InputBo?"'En )ue /o*a est; la ase de datos : ', 'Entrar Komre de Ho*a'# %asilla!Inicial & InputBo?"'En )ue casilla comiena la ase de datos', '%asilla Inicial'# 8 ser$e )ue los par;metros son dos $ariales cuo $alor se /a entrado desde teclado en 8 las dos instrucciones InputBo? anteriores. %all Saltar!%eldas!Dlenas!Bis"/o*a, %asilla!Inicial#8 no$edad
Jo Komre & InputBo?"'Entre el Komre : ', 'Komre'# %iudad & InputBo?"'Entre la %iudad : ', '%iudad'# Edad & Val"InputBo?"'Entre la Edad : ', 'Edad'## ec/a & %Jate"InputBo?"'Entre la Fec/a : ', 'Fec/a'## -it/ Acti$e%ell .Value & Komre .set"7, 1#.Value & %iudad .set"7, 0#.Value & Edad .set"7, @#.Value & ec/a End -it/ Acti$e%ell.set"1, 7#.Acti$ate Mas!datos & Ms(Bo?"'tro re(istro 4', $=esKo + $9uestion, 'Entrada de datos'# Doop -/ile Mas!datos & $=esEnd Su
8/15/2019 .MacrosPP.pps
66/122
08/06/16 Adolfo Aparicio 66
Variales Docales $ariales 6loales El ;mito de una $ariale declarada dentro de una unción es la propia unción. Es decir, no podr; utiliarse uera de dic/a unción. As, el si(uiente pro(rama )ue deera sumar las cinco ilas si(uientes a partir de la
casilla acti$a (uardar el resultado en la se?ta es incorrecto.
%ub Hacer"# . . &all Sumar!%inco!Si(uientes Acti$e%ell.set"C,7#.Value & Suma
. .End %ub
%ub Sumar!%inco!Si(uientes"# Dim i /s nteger Dim Suma /s %ingle Suma&7 1or i&1 "o 2
Suma & Suma+Acti$e%ell.set"i,7#.Value 2ext iEnd %ub
Es incorrecto por)ue tanto las $ariale i como la $ariale .uma est;n declaradas dentro del procedimiento.umar-inco-.i/uientes consecuentemente, su ;mito de acción es este procedimiento.
Por tanto, la instrucción Activeell'0ffset12$34'Value " .uma del procedimiento #acer , (enerara un error
"con ption E?plicit acti$ado# a )ue la $ariale .uma no est; declarada dentro de
8/15/2019 .MacrosPP.pps
67/122
08/06/16 Adolfo Aparicio 67
'ariables ?lobales Wna solución seria declarar sumaT como $ariale (loal. Wna $ariale (loal se declara uera de todos los procedimientos es
reconocida por todos los procedimientos del módulo.
Option Explicit
Dim Suma /s %ingle 5 .uma es una varia*le /lo*al reconocida por todos los procedimientos del módulo
%ub Hacer!Bis"# . &all Sumar!%inco!Si(uientes!Bis Acti$e%ell.set"C,7#.Value & Suma .End %ub
%ub Sumar!%inco!Si(uientes!Bis"#
Dim i /s nteger Suma&7 1or i&1 "o 2 Suma & Suma+Acti$e%ell.set"i,7#.Value 2ext iEnd %ub
*asar #ariables como
8/15/2019 .MacrosPP.pps
68/122
08/06/16 Adolfo Aparicio 68
*asar #ariables como
parmetros Da $ariale par;metro . "a la )ue se /a camiado el nomre adrede# de
.umar-inco-.i/uientes-Tris es la $ariale .uma declarada en#acer-Tris.
Funcionar; por)ue en Visual Basic, a menos )ue se indi)ue lo contrario,el paso de par;metros es por reerencia.
%ub Hacer!5ris"# Dim Suma /s %ingle . . 5 6lamada a la función .umar-inco-.i/uientes
pas,ndole la varia*le .uma
&all Sumar!%inco!Si(uientes!5ris"Suma#
Acti$e%ell.set"C,7#.Value & Suma . .End %ub
%ub Sumar!%inco!Si(uientes!5ris"S /s %ingle# Dim i /s nteger Suma&7 1or i&1 "o 2 S & S+Acti$e%ell.set"i,7#.Value 2ext iEnd %ub
8/15/2019 .MacrosPP.pps
69/122
08/06/16 Adolfo Aparicio 69
Paso por reerencia paso por $alor El paso por $alor si(niica )ue la $ariale par;metro del procedimiento recie el
$alor de la $ariale "o directamente el $alor# de su par;metro correspondientede la instrucción de llamada en el paso por reerencia, la $ariale par;metrodel procedimiento es la misma )ue su par;metro correspondiente de lainstrucción de llamada, es decir, la declarada en el procedimiento desde el )uese /ace la llamada.
Por deecto, siempre )ue en la instrucción de llamada se utilicen $ariales, lasllamadas son por reerencia.
Si desea )ue el paso de par;metros sea por $alor, dee anteponer a la $arialepar;metro la palara reser$ada !y'al
%ub Saltar!%eldas!Dlenas"!y'al Ho*a As Strin(, !y'al %asilla!Inicial As Strin(#
Aun)ue lo ele(ante eecti$o por raones de memoria seria pasar siempre )uesea posile por $alor, es poco /aitual )ue as se /a(a en Visual Basic,
se(uramente por comodidad. %omo suponemos )ue /ar; como la maora, es decir, pasar por reerencia,
ten(a cuidado con los "indeseales# eectos laterales.
8/15/2019 .MacrosPP.pps
70/122
08/06/16 Adolfo Aparicio 70
Efecto Lateral
Este pro(rama no funciona ien En la Ho*a disponemos de 2 $alores en cada una de las tres columnas B,%,J, deseamos sumarlos Jeera sumar los cinco $alores de cada columna poner su suma *usto a*o ellos El mal uncionamiento se dee a )ue la $ariale Fila pasa al procedimiento llamado, como $ariale no
como $alor, pese a )ue se camia el nomre por F, si(ue siendo la misma
Su Eecto!Dateral"# Jim Fila As Inte(er -ors/eets"'Ho*a'#.Acti$ate Fila & 2 %all ecorrer!Sumar"Fila, 0, 2# 8 %olumna B %all ecorrer!Sumar"Fila, @, 2# 8 %olumna % %all ecorrer!Sumar"Fila, , 2# 8 %olumna JEnd Su
Su ecorrer!Sumar"F As Inte(er , % As Inte(er , 9 As Inte(er # Jim i As Inte(er Jim 5otal As Inte(er 5otal & 7 For i & 1 5o 9 5otal & 5otal + Acti$eS/eet.%ells"F, %#.Value F & F + 1 8 Z con esta asi(nación, recuerde )ue F es la $ariale Filadeclarada en el procedimiento Eecto!Dateral Ke?t i Acti$eS/eet.%ells"F, %# & 5otalEnd Su
8/15/2019 .MacrosPP.pps
71/122
08/06/16 Adolfo Aparicio 71
!y'al
Se corri(e aadiendo BVal a la $ariale, lo )ue /ace )ue pase como $alor.
Su Eecto!Dateral!is"# 8Este procedimiento esi(ual al Eecto!Dateral8con la sal$edad de )ue en este se llama aecorrer!Sumar!is
Jim Fila As Inte(er -ors/eets"'Ho*a'#.Acti$ate Fila & 2 %all ecorrer!Sumar!is"Fila, 0, 2# 8 %olumnaB %all ecorrer!Sumar!is"Fila, @, 2# 8 %olumna%
%all ecorrer!Sumar!is"Fila, , 2# 8 %olumnaJEnd Su
Su ecorrer!Sumar!is"BVal F As Inte(er , % As Inte(er ,9 As Inte(er #8Este su es id
8/15/2019 .MacrosPP.pps
72/122
08/06/16 Adolfo Aparicio 72
Funciones
Das unciones no e*ecutan acciones, simplemente dan como resultadoun $alor
Das $ariales de la unción se introducen como ar(umentos
Function Area!%uadrado"?, #
Area!%uadrado & ? End Function
En la cate(ora de Funciones Jeinidas por el usuarioT encontrar; esta
unción )ue podr; aplicar normalmente a la /o*a de c;lculo. 5ami
8/15/2019 .MacrosPP.pps
73/122
08/06/16 Adolfo Aparicio 73
Función llamada por un Su Wna unción puede ser llamada por un procedimiento u otra unción. Das unciones tienen tipo "esta es de tipo inte(er # a )ue de$uel$en un $alor
Su Dlama!suma"# 8Procedimiento )ue llama a una unción de $arias ormas. Ver distintas ormas. Jim ? As Inte(er Jim n1 As Inte(er , n0 As Inte(er ? & Sumardos"2, 2# n1 & Val"InputBo?"'Entrar un n>mero : ', 'Entrada'## n0 & Val"InputBo?"'Entrar otro n>mero : ', 'Entrada'## ? & Sumardos"n1, n0# Acti$e%ell.Value & Sumardos"Acti$eS/eet.an(e"'Y17'#.Value, Acti$eS/eet.an(e"'Y11'#.Value# ? & Sumardos"2, # + Sumardos"n1, n0#End SuFunction Sumardos"V1 As Inte(er , V0 As Inte(er # As Inte(er Jim 5otal As Inte(er 5otal & V1 + V0 Sumardos & 5otalEnd Function
8/15/2019 .MacrosPP.pps
74/122
08/06/16 Adolfo Aparicio 74
E*ercicio
%ree una unción )ue calcule elactorial de un n>mero
Por e*emplo.
Factorial"2#&2??@?0?1&107 Aun)ue a e?iste una unción enE?cel )ue calcula el actorial:
&FA%5"numero#
8/15/2019 .MacrosPP.pps
75/122
08/06/16 Adolfo Aparicio 75
Función FactorialFunction actori"n As Don(# 8FWK%I_K )ue calcula el actorial de un n>mero Jim F As Don(
Jim i As Don( F & 1 For i & n 5o 1 Step O1 F & F i Ke?t actori & F
End Function
Function Factorial"BVal n As Inte(er # 8 Wn uen e*emplo del uso de BVal para transerir $ariales 8 Si no se pusiera en este caso no calculara ien n & n O 1 I n & 7 5/en
Factorial & 1 E?it Function End I Factorial & Factorial"n# "n + 1#End Function
1unciFn 5ue detecta &elda
8/15/2019 .MacrosPP.pps
76/122
08/06/16 Adolfo Aparicio 76
1unciFn 5ue detecta &elda
'acaSu Jetecta!Vacia"# Jim %asilla As Strin(
-ors/eets"'Ho*a'#.Acti$ate %asilla & %asilla!Vacia"'B2'# 8Dlama a la unción %asilla!Vacia Ms(Bo? Prompt:&%asilla, 5itle:&'Da primera celda $aca'End Su
Función %asilla!Vacia de 5ipo Strin(
Sir$e para ecorrer las ilas de una columna /asta encontrar una $aca. Par;metros : %asilla!Inicio : %asilla donde dee empear a uscar. Je$uel$e un strin( )ue contiene la reerencia de la primera casilla
Function %asilla!Vacia"%asilla!Inicio As Strin(# As Strin( Acti$eS/eet.an(e"%asilla!Inicio#.Acti$ate
Jo -/ile Kot IsEmpt"Acti$e%ell# Acti$e%ell.set"1, 7#.Acti$ate Doop %asilla!Vacia & Acti$e%ell.AddressEnd Function
8/15/2019 .MacrosPP.pps
77/122
08/06/16 Adolfo Aparicio 77
1unciFn 5ue !usca un 'alor Su Busca"# Jim %asilla As Strin(, Valor As Inte(er -ors/eets"'Ho*a'#.Acti$ate Valor & %Int"InputBo?"'Valor uscado: ', 'Entrar Jatos'## %asilla & Buscar!Valor"'%2', Valor# NDlama a la unción Buscar!Valor I %asilla & '' 5/en 8 Si $alor no encontrado Ms(Bo? "'K se /a encontrado el $alor uscado'# Else 8Valor encontrado
Ms(Bo? "'El primer ' L Valor L ' esta en la celda: ' L %asilla# End I End Su
Función )ue de$uel$e la dirección de la primera celda $aca de un ran(o. Da unción es de tipo %tring a )ue de$uel$e la casilla en la orma 'Fila%olumna ', pore*emplo 'A17'. Wtiliaremos la propiedad /ddress del o*eto ran(e, esta propiedad de$uel$e un strin(
)ue contiene la reerencia 'Fila%olumna' de una casilla o ran(o de casillas. En el caso de un ran(o de$uel$e, 'Fila%olumna!Inicial:Fila%olumna!Final', por e*emplo
'A1:%17'
1 iF ! ' l
8/15/2019 .MacrosPP.pps
78/122
08/06/16 Adolfo Aparicio 78
1unciFn 5ue !usca un 'alor Función Buscar de 5ipo Strin( Sir$e para: ecorrer las ilas de una columna /asta encontrar el $alor uscado o una de $aca. Par;metros :
%asilla!Inicial: %asilla donde dee empear a uscar Valor!Buscado: Valor )ue se dee encontrar
Je$uel$e: Wn strin( )ue contiene la reerencia de la casilla donde se /a encontrado el $alor 5amis)ueda K ES5` VA%A es )ue se /a encontrado 8 el $alor I Kot IsEmpt"Acti$e%ell# 5/en Buscar!Valor & Acti$e%ell.Address 8 Je$ol$er la casilla donde se /a encontrado el $alor
Else 8 Da casilla est; $aca, K se /a encontrado el $alor uscado Buscar!Valor & '' 8 Je$ol$er una cadena $aca End I End Function
!usca 'alor por filas y
8/15/2019 .MacrosPP.pps
79/122
08/06/16 Adolfo Aparicio 79
!usca 'alor por filas y
columnas
Procedimiento id
8/15/2019 .MacrosPP.pps
80/122
08/06/16 Adolfo Aparicio 80
Function Buscar!Valor!Bis"%asilla!Inicial As Strin(,Valor!Buscado As Inte(er # As Strin( Jim Incremento!%olumna As Inte(er
Jim %ontinuar As Boolean Acti$eS/eet.an(e"%asilla!Inicial#.Acti$ate %ontinuar & 5rue Jo -/ile %ontinuar Incremento!%olumna & 7 8 Buscar el $alor por las columnas /astaencontrarlo o encontrar una celda $aca. Jo -/ile Kot IsEmpt"Acti$e%ell.set"7,
Incremento!%olumna## And ! Acti$e%ell.set"7,Incremento!%olumna#.Value [X Valor!Buscado 8 Si(uiente columna Incremento!%olumna &Incremento!%olumna + 1 Doop 8 Si no est; $aca la casilla entonces parar la
>s)ueda, se /a encontrado el $alor
I Kot IsEmpt"Acti$e%ell.set"7, Incremento!%olumna##5/en %ontinuar & False
Else 8 Da casilla est; $aca, no se /a encontrado el $alor Acti$e%ell.set"1, 7#.Acti$ate 8 Saltar a una nue$a ila I IsEmpt"Acti$e%ell# 5/en 8 Si la casilla de la nue$a ilaest; $aca %ontinuar & False 8 Parar la >s)ueda, no /a m;scasilla a recorrer End I End I
Doop 8 Si la casilla donde se /a detenido la >s)ueda K ES5`VA%A es )ue se /a encontrado el $alor. I Kot IsEmpt"Acti$e%ell# 5/en Buscar!Valor!Bis & Acti$e%ell"7,Incremento!%olumna#.Address 8 Je$ol$er la casilla donde 8 se/a encontrado el $alor Else 8 Da casilla est; $aca, K se /a encontrado el $alor
uscado Buscar!Valor!Bis & '' 8 Je$ol$er una cadema $aca End I End Function
!usca 'alor por filas y columnas
8/15/2019 .MacrosPP.pps
81/122
08/06/16 Adolfo Aparicio 81
Da cl;usula Pri$ate Puede anteponer la cl;usula pri$ate a todos los procedimientos unciones )ue sean
llamados sólo desde el mismo módulo. Es una orma de a/orrar memoria /acer )ue el pro(rama corra un poco m;s r;pido. Si necesita llamar un procedimiento o unción desde otro módulo, nunca dee precederlo
por la cl;usula pri$ate
7 Módulo &
%ub 6eneral ....End %ub
*ri#ate %ub Pri$ado ....End %ub
8 Módulo % %ub Procedimiento!de!modulo0 5 8sto es correcto' 6lama al procedimiento 9eneral definido en Módulo&
&all 6eneral 7 8sto no es correcto' 6lama al procedimiento Privado definido en Módulo &$ este
7 procedimiento va precedido pro la cl,usula Private$ por tanto sólo puede ser llamado
7 desde procedimientos de su propio módulo &all Pri$adoEnd %ub
E* i i
8/15/2019 .MacrosPP.pps
82/122
08/06/16 Adolfo Aparicio 82
E*ercicio
Pro(rame una macro )ueproporcione las b&0 cominacionesde las cuatro letras AB%J
P t i d AB%J
8/15/2019 .MacrosPP.pps
83/122
08/06/16 Adolfo Aparicio 83
Permutaciones de AB%JSu permuta"#Jim i As Bte, * As Bte, As Bte, l As Bte
Jim a"# As Bte, mensa*e As Strin(For i & 1 5o For * & 1 5o For & 1 5o For l & 1 5o I i & * r i & r i & l r * & r * & l r & l 5/en
Else mensa*e & mensa*e L palara"i, *, , l# L $%rD E?it For End I Ke?t l Ke?t
Ke?t *Ke?t iMs(Bo? mensa*eEnd Su
Function palara"i As Bte, * AsBte, As Bte, l As Bte# As
Strin( Jim letra As Strin( 1 Jim n As Bte, ? As Bte Jim a"1 5o # As Bte a"1# & i: a"0# & *: a"@# & : a"# &l For n & 1 5o ? & a"n# Select %ase ? %ase 1: letra & 'A' %ase 0: letra & 'B' %ase @: letra & '%' %ase : letra & 'J'
End Select palara & palara L letra Ke?t nEnd Function
P t i d AB%J KJ
8/15/2019 .MacrosPP.pps
84/122
08/06/16 Adolfo Aparicio 84
Permutaciones de AB%J con KJSu permuta!is"#
8Permutaciones de AB%J b&0Jim i As Bte, * As Bte, n As BteJim a"1 5o # As Strin(Jim "1 5o 0# As Strin(Jim rase As Strin(Jim ? As Sin(le
andomieFor n & 1 5o 0 For i & 1 5o ? & nd Select %ase ? %ase Is [ 7.02: a"i# & 'A'
%ase 7.02 5o 7.2: a"i# & 'B' %ase 7.2 5o 7.G2: a"i# & '%' %ase Is X 7.G2: a"i# & 'J' End Select
For * & 1 5o i O 1
I a"i# & a"*# 5/en i & i O 1: E?it For Ke?t * Ke?t i "n# & '' For i & 1 5o "n# & "n# L a"i#
Ke?t i For * & 1 5o n O 1 I "*# & "n# 5/en n & n O 1: E?it For Ke?t *Ke?t nFor n & 1 5o 0
rase & rase L "n# L $%rD Ke?t nMs(Bo? raseEnd Su
8/15/2019 .MacrosPP.pps
85/122
08/06/16 Adolfo Aparicio 85
Importar E?portar módulos %iertos procedimientos )ue pueden ser utiliados en multitud de
ocasiones, seria interesante tenerlos disponiles en cual)uiera de las/o*as )ue coneccionemos.
Podra pensar en utiliar las opciones de copiar pe(ar para pasar procedimientos de una /o*a a otra, es un m
8/15/2019 .MacrosPP.pps
86/122
08/06/16 Adolfo Aparicio 86
Importar E?portar módulos
Exportar un mFdulo, ?uardar un mFdulo en un archi#o Ara la /o*a donde tiene los procedimientos )ue desea e?portar 1. Pase al editor de Visual Basic acti$e el módulo a e?portar. 0. Acti$e la opción de la arra de men>s /rchi#oB Exportar archi#o. Aparece un cuadro de
di;lo(o. @. En cuadro de edición 2ombre de /rchi#o, teclee el nomre para el arc/i$o donde se
(uardar; el módulo, por e*emplo '6eneral.Bas', oser$e )ue .BAS es la e?tensión de estos
arc/i$os. . Pulse sore el otón ?uardar .
mportar un mFdulo %ierre todos los arc/i$os de E?cel ara uno nue$o. 1. Acti$e el editor Visual Basic. 0. Acti$e opción de la arra de men>s /rchi#oB mportar /rchi#o. Aparece un cuadro de
di;lo(o. @. Seleccione en la lista !uscar enS la carpeta donde tiene uicado el arc/i$o a importar . Wna $e localiada la carpeta, seleccione el arc/i$o a importar "6eneral.Bas en el e*emplo#
pulse sore /brir . ser$e como en la $entana de proecto se /a incorporado un nue$o módulo )ue contiene
todos los procedimientos unciones del arc/i$o importado.
8/15/2019 .MacrosPP.pps
87/122
08/06/16 Adolfo Aparicio 87
Da (raadora de macros Microsot E?cel lle$a incluida una utilidad )ue sir$e para re(istrar acciones )ue se lle$an a
cao en un liro de traa*o re(istrarlas en orma de macro. Podemos apro$ec/ar esta utilidad para (enerar códi(o en(orroso por su sinta?is un tanto
complicada de recordar, adem;s de a/orrar tiempo. %asi siempre despu
8/15/2019 .MacrosPP.pps
88/122
08/06/16 Adolfo Aparicio 88
Su Poner!Bordes"# -ors/eets"'Ho*a'#.Acti$ate 8 Seleccionar el ran(o B2:J17 an(e"'B2:J17'#.Select 8 Ko /a orde dia(onal /acia aa*o
Selection.Borders"?lJia(onalJon#.DineStle & ?lKone 8 Ko /a orde dia(onal /acia arria Selection.Borders"?lJia(onalWp#.DineStle & ?lKone 8 Borde i)uierdo de la seleccón -it/ Selection.Borders"?lEd(eDet# .DineStle & ?l%ontinuous 8Estilo de lnea continuo .-ei(/t & ?lMedium 8 Anc/o de lnea Medio .%olorInde? & ?lAutomatic 8 %olor de lnea autom;tico"ne(ro# End -it/ 8 Borde superior de la selección -it/ Selection.Borders"?lEd(e5op# .DineStle & ?l%ontinuous .-ei(/t & ?lMedium .%olorInde? & ?lAutomatic End -it/ 8 Borde inerior de la selección
-it/ Selection.Borders"?lEd(eBottom# .DineStle & ?l%ontinuous .-ei(/t & ?lMedium .%olorInde? & ?lAutomatic End -it/
-it/ Selection.Borders"?lEd(ei(/t# 8 Borde derec/o .DineStle & ?l%ontinuous .-ei(/t & ?lMedium .%olorInde? & ?lAutomatic End -it/
8 Bordes $erticales interiores de la selección -it/ Selection.Borders"?lInsideVertical# .DineStle & ?l%ontinuous .-ei(/t & ?l5/in 8 Anc/o Simple. .%olorInde? & ?lAutomatic End -it/ 8 Ko /a ordes /oriontales interiores en la selección Selection.Borders"?lInsideHoriontal#.DineStle & ?lKone
8 Seleccionar ran(o BQ:JQ an(e"'BQ:JQ'#.Select 8 Ko /a orde dia(onal /acia arria Selection.Borders"?lJia(onalJon#.DineStle & ?lKone 8 Ko /a orde dia(onal /acia arria Selection.Borders"?lJia(onalWp#.DineStle & ?lKone 8 Borde inerior de la selección -it/ Selection.Borders"?lEd(eBottom# 8 Jole lnea .DineStle & ?lJoule .-ei(/t & ?l5/ic .%olorInde? & ?lAutomatic End -it/ an(e"'A1'#.SelectEnd Su
Macro con ?rabadora y
8/15/2019 .MacrosPP.pps
89/122
08/06/16 Adolfo Aparicio 89
Macro con ?rabadora y
generalizada
Fic/ero decora.as Podemos crear una Macro con la 6raadora lue(o pereccionarla darle
car;cter m;s (eneral introduciendo par;metros. Esta macro pone ordes a una tala, en la primera ila pone dole lnea. El primer par;metro es el n>mero de /o*a "no el nomre#, el se(undo la casilla
inicial Da macro se encar(ar; de seleccionar todas las casillas adacentes deuscar la primera ila. En esta macro adem;s se /an incluido uncionalidades como orrar los
ormatos antes de aplicar las lneas, a*ustar el anc/o de las columnas, etc. ser$e la propiedad &urrentRegion del o*eto Range, esta propiedad
de$uel$e el ran(o de las casillas llenas adacentes a una dada. Por e*emplo ima(ine una /o*a con el ran(o A1:B17 lleno de $alores, la
instrucción Acti$eS/eet.an(e"'A1'#.%urrente(ion.Select
Seleccionaria el ran(o correspondiente a A1:B17
Insertar unciones en una Ho*a
8/15/2019 .MacrosPP.pps
90/122
08/06/16 Adolfo Aparicio 90
Insertar unciones en una Ho*a8$a pidiendo n>meros los $a colocando en las celdas de lacolumna B partir de B10
8al inal coloca la unción &SWMA para sumar los $aloresintroducidos la unción &PMEJISu Sumar"# -ors/eets"'Ho*a'#.Acti$ate Jim Valor As Inte(er Jim %asilla!Inicial As Strin( Jim %asilla!FInal As Strin( 8 Hacer acti$a la casilla B10 de la /o*a acti$a Acti$eS/eet.an(e"'B10'#.Acti$ate
Jo 8 Entrar un $alor con$ertirlo a num
8/15/2019 .MacrosPP.pps
91/122
E*ercicio
8/15/2019 .MacrosPP.pps
92/122
08/06/16 Adolfo Aparicio 92
E*ercicio
El si(uiente pro(rama calcula la lon(itud de una circunerencia%ree otros dos pro(ramas )ue eect>en ese mismo c;lculo usandola unción de E?cel &PI"#
Wno de ellos insertando la unción en una celdaEl otro sin necesidad de usar la /o*a de E?cel
Su perimetro"# Jim radio As Joule, lon(itud As Joule %onst pi & @.112Q0 radio & InputBo?"'Introduca el radio de la circunerencia'# lon(itud & 0 pi radio Acti$e%ell.Value & lon(itudEnd Su
Solución E*ercicio
8/15/2019 .MacrosPP.pps
93/122
08/06/16 Adolfo Aparicio 93
Solución E*ercicioSu perimetro0"#
Jim radio As Joule, lon(itud As Joule Jim pi As Joule -ors/eets"'Ho*a1'#.an(e"'B@'#.Formula & '&pi"#' pi & an(e"'B@'#.Value radio & InputBo?"'Introduca el radio de la circunerencia'# lon(itud & 0 pi radio Acti$e%ell.Value & lon(itud
End Su
Su perimetro@"# Jim radio As Joule, lon(itud As Joule Jim pi As Joule pi & Application.-ors/eetFunction.pi"#
radio & InputBo?"'Introduca el radio de la circunerencia'# lon(itud & 0 pi radio Ms(Bo? & lon(itudEnd Su
8/15/2019 .MacrosPP.pps
94/122
08/06/16 Adolfo Aparicio 94
/rray 6 MatrizSu Arra1"# 8Jeclarar una matri de tamao 17
Jim ?"1 5o 17# As Joule 8%alcular $alores aleatorios For * & 1 5o 17 ?"*# & ound"nd"# 177, 7# 8Dos $alores aleatorios se calculan usando ormulas VBA Ke?t * 85ranserir el contenido de la matri a una ila an(e"%ells"0, 0#, %ells"0, 11##.FormulaArra & ?
End Su
Su Arra@"# 8%alcular $alores aleatorios 8En este caso, los $alores aleatorios se calculan usando ormulasE?cel an(e"%ells", @#, %ells"1@, @##.FormulaArra & '&ound"and"# 177, 7#' 8Vea la dierencia entre nd "del caso anterior# and.
8Wna es una órmula VBA la otra es una órmula E?cel en in(l
8/15/2019 .MacrosPP.pps
95/122
08/06/16 Adolfo Aparicio 95
Qoras %emanales "rabajadasSu HorasSemanales"#
8%alcula las /oras semanalestraa*adasJim a"1 5o 2, 1 5o 0# As Sin(leJim dia As Strin(, *ornada As Strin(Jim i As Bte, * As Bte85ipo te entre 7 022Jim /oras As Sin(leFor i & 1 5o 2 Select %ase i %ase 1: dia & 'Dunes' %ase 0: dia & 'Martes' %ase @: dia & 'Miercoles' %ase : dia & 'Zue$es' %ase 2: dia & 'Viernes' End Select
For * & 1 5o 0
I * & 1 5/en *ornada & 'IKI%I' Else *ornada & 'FIKAD' End I a"i, *# & InputBo?"'Introduca la /ora de ' L *ornada ! L ' de la *ornada de ' L dia L ',' L $%rD L ! 'en ormato decimal. Por e*emplo 1G:@7 son las1G,2'# I * & 0 5/en /oras & /oras + a"i, 0# O a"i, 1# Ke?t *Ke?t i
Ms(Bo? 'Horas semanales & ' L /orasEnd Su
!eneficio Medio de un ?rupo de Empresas
8/15/2019 .MacrosPP.pps
96/122
08/06/16 Adolfo Aparicio 96
!eneficio Medio de un ?rupo de Empresas
Su BeneicioMedio"#8%alcula el eneicio medio de un (rupo de empresas Jim a"# As Joule 8Jeine una matri sin decir a>n la dimensión Jim n As Bte Jim i As Bte Jim media As Joule n & InputBo?"'K>mero de empresas del 6rupo &'#
eJim a"n# 8edimensiona una matri din;mica For i & 1 5o n a"i# & InputBo?"'Beneicio de la Empresa ' L i L ' & ', 'Da Media /asta a/oraes ' L media# media & "media "i O 1# + a"i## i Ke?t Ms(Bo? 'Beneicio Medio del 6rupo de Empresas& ' L mediaEnd Su
8/15/2019 .MacrosPP.pps
97/122
08/06/16 Adolfo Aparicio 97
Jetección de Errores
Errores en tiempo de compilaciFn, Son los tpicos errores )ue impiden /acer uncionar elpro(rama deido, por e*emplo, a errores de sinta?is en las instrucciones, llamadas a unciones)ue no e?isten o llamadas con el tipo o el n>mero de par;metros incorrectos, etc. Este tipo deerrores no dan demasiados prolemas, primero por)ue el compilador a$isa de donde se /anproducido lue(o por)ue simplemente re$isando la sinta?is se solucionan r;pidamente.
Errores en tiempo de ejecuciFn. Estos errores se producen por una mala pro(ramación delcódi(o al no /aer pre$isto determinados casos concretos o especiales, como por e*emplointentar arir un arc/i$o )ue no e?iste, imprimir sin comproar )ue la impresora est; conectada,deinir mal la dimensión de un arra e intentar acceder a miemros )ue no e?isten, etc. %uando
se produce este tipo de errores se detiene la e*ecución del pro(rama normalmente se inormadel tipo de error )ue se /a producido. Muc/os de estos errores se pueden solucionar medianterutinas o unciones de tratamiento de errores.
Errores de funciFn. Son los m;s complicados de detectar a )ue ni se detectan en la ase dee*ecución, ni pro$ocan la detención del pro(rama, son deidos a la incorrecta pro(ramación deal(>n proceso como resultado se otienen datos erróneos. Errores de este tipo son c;lculosmal /ec/os, ucles ininitos, de$olución de $alores incorrectos, etc. %omo ni los detecta elcompilador, ni pro$ocan la interrupción del pro(rama deen re$isarse a mano usando las/erramientas de depuración.
%onse*o: modularice su pro(rama utiliando procedimientos cortos )ue realicen traa*osconcretos precisos, de esta orma conse(uir;, adem;s de )ue el pro(rama )uede m;sele(ante en un uturo sea m;s sencillo modiicarlo depurarlo.
E*ercicio
8/15/2019 .MacrosPP.pps
98/122
08/06/16 Adolfo Aparicio 98
E*ercicio
%ree una Macro con un *ue(o )ueconsiste en )ue la m;)uina piensa unn>mero entre 7 177, el *u(ador
dee adi$inarlo. Para ello, dispone de17 tiradas, el pro(rama le indica siel n>mero secreto es maor o menor
al introducido.
Solución E*ercicio: Adi$ina
8/15/2019 .MacrosPP.pps
99/122
08/06/16 Adolfo Aparicio 99
Solución E*ercicio: Adi$inaSu adi$ina"# Jim ona As Strin( Jim ? As Bte, n As Bte Jim tirada As Bte andomie ? & Fi?"nd 171# : tirada & 1 8FI\&IK5&parte entera Jo I ona & '' 5/en n & InputBo?"'Introduca un n>mero entero del 7 al 177' L $%rD ! L 'Jispone de 17 tiradas para lo(rarlo', '5irada n>mero ' L tirada# Else n & InputBo?"'El n>mero secreto es ' L ona L $%rD L 'Introduca otro', '5irada n>mero ' L tirada#
End I I n & ? 5/en Ms(Bo? 'Felicidadesbbb' L $%rD L 'Ha adi$inado el n>mero secreto ' L ? L ', en ' L tirada L ' tiradas' E?it Su End I I ? [ n 5/en ona & 'Inerior' Else
ona & 'Superior' End I tirada & tirada + 1 Doop Wntil tirada X 17 Ms(Bo? 'Ha a(otado las 17 tiradas disponiles' L $%rD L 'El n>mero secreto es ' L ?End Su
8/15/2019 .MacrosPP.pps
100/122
08/06/16 Adolfo Aparicio 100
Jepuración de pro(ramas
Estas /erramientas son mu >tiles a la /ora de comproar paso a paso el uncionamiento delpro(rama detectar los procesos )ue pro$ocan un mal uncionamiento del mismo. Importe Módulo2.as Acti$e la arra de depuración
"Ver Barras de Herramientas Jepuración# Modo E*ecución paso a paso
Paso a Paso por Instrucciones. 1H Paso a Paso por Procedimientos. MA=+F
Sir$e para e*ecutar todo un procedimiento. %uando en la e*ecución de un procedimiento, se lle(a auna lnea )ue llama a otro procedimiento o unción, pulsando este otón se puede pro$ocar lae*ecución de todo el códi(o de esta unción para lue(o continuar con el modo paso a paso.
Modo Interrupción En pro(ramas lar(os resulta astidioso tener )ue e*ecutarlos paso a paso, soretodo si saemos )ue el
error se produce en una parte a$anada del pro(rama. El modo interrupción, permite la e*ecución delpro(rama /asta una instrucción determinada para, a partir de esta, e*ecutar paso a paso as poderdetectar el error.
Jeinir puntos de interrupción 1. Sit>e el cursor sore la instrucción en la cual dee detenerse el pro(rama para continuar paso a
paso. 0. Pulse sore el otón . 5ami
8/15/2019 .MacrosPP.pps
101/122
08/06/16 Adolfo Aparicio 101
La 'entana de nspecciFn nspecciones rpidas de #ariables
Estas opciones sir$en para re$isar el $alor de las $ariales a medida )ue se $a e*ecutandoel pro(rama. Para $er los $alores )ue $an tomando las $ariales es con$eniente tener $isile la
'entana de inspecciFn, para acti$arla 'erB 'entana de nspecciFn /$adir una #ariable a la #entana de inspecciFn
1. Seleccione la $ariale )ue desee aadir a la $entana /aciendo un clic sore ella. 0. Acti$ar DepuraciFnB nspecciFn rpida o MaJT1.
Aparece un cuadro de di;lo(o donde se muestra el $alor actual de la $ariale. Si no
est; e*ecutando el pro(rama paso a paso, aparecer; el $alor 1uera de &ontexto. @. Pulse sore el otón /gregar para aadir la $ariale a la $entana de inspección.
Jee tener en cuenta )ue para re$isar las $ariales las e?presiones )ue les asi(nan$alores deen de e*ecutarse al menos una $e.
uando ejecuta el pro/rama paso a paso$ si sitúa el puntero de ratón so*reuna varia*le$ se muestra el valor de la misma
!orrar una #ariable de la #entana de nspecciFn
Sólo dee seleccionarla en la $entana de inspección pulsar sore la tecla %U*R. Modificar el #alor de una #ariable en tiempo de ejecuciFn
A $eces resulta interesante camiar el $alor de al(una $ariale cuando se est; e*ecutandoel pro(rama, para $er )ue ocurre si co(e determinados $alores, para terminar un ucle,
8/15/2019 .MacrosPP.pps
102/122
8/15/2019 .MacrosPP.pps
103/122
08/06/16 Adolfo Aparicio 103
Da Ventana Inmediato Es otra orma de inspeccionar
$ariales cuando el pro(rama est;en modo interrupción "e*ecut;ndosepaso a paso#
Adem;s, orece la posiilidad decamiar $alores de las $ariales
E incluso e*ecutar o e$aluare?presiones. Para $er el $alor de
una $ariale en la $entanainmediato dee anteponerle un 4 lue(o pulsar Enter .
Para acti$ar la $entana Inmediato,acti$e opción 'erBnmediato, opulse la cominación &O2"ROLT?.
Pruee
40+@ 40@ 4e?p"1# 4Suma!%olumna
8/15/2019 .MacrosPP.pps
104/122
08/06/16 Adolfo Aparicio 104
Da instrucción Jeu(.Print Esta instrucción se utilia
directamente sore el códi(o delpro(rama
Permite $er todos los $alores )ue /aido tomando una $ariale oe?presión durante la e*ecución delpro(rama.
Dos $alores se mostrar;n en la$entana Inmediato una $einaliado el pro(rama.
Esta e?presión resulta >til en unaase a$anada de depuración a)ue permite ir $iendo la e$oluciónde una $ariale o e?presión sin
necesidad de poner puntos deinterrupción. %uando el pro(rama est< listo
deen eliminarse. E*ecute Jos!a!la!die"#
8/15/2019 .MacrosPP.pps
105/122
08/06/16 Adolfo Aparicio 105
Formularios
Mostrar la arra de /erramientas para cuadros de control %uadro de 5e?to Eti)ueta Botón de %omando Modo Jiseo Propiedades
En la propiedad &aption, camien el te?to Label1 por Datos aBuscar
8/15/2019 .MacrosPP.pps
106/122
08/06/16 Adolfo Aparicio 106
Dos e$entos
%uando se pro(raman controles ien sea directamente en la/o*a o desde un ormulario, dee tener en cuenta los e$entos.
Wn e$ento se da cuando ocurre al(o sore un o*eto En entornos -indos constantemente se est;n produciendo
e$entos )ue son reco(idos por el sistema. %lics con el ratón sore un control 5eclear sore un cuadro de te?to, etc.
Pro(ramar un e$ento si(niica /acer )ue se e*ecutendeterminadas instrucciones cuando ocurra dic/o e$ento.
En (eneral, todos los controles son capaces de capturardierentes e$entos.
8/15/2019 .MacrosPP.pps
107/122
08/06/16 Adolfo Aparicio 107
%uadros %ominados "%omoBo?#
%on un %omoBo? podremos esco(er el campo, esdecir, podremos e?traer coincidencias de Nom*re, Apellidos, la iudad , etc.
Para ello incluiremos un cuadro cominado )uepermita esco(er en )ue campo o columna tiene )ueuscarse la coincidencia.
Da lista, por supuesto, mostrar; los nomres de las
columnas.
Formularios yFormularios y
8/15/2019 .MacrosPP.pps
108/122
77C1C Adolo Aparicio 17
Formularios yo u a os yControlesControles Cree un nuevo libro (mundo.xls)Cree un nuevo libro (mundo.xls) Acceda al Editor de Visual BasicAcceda al Editor de Visual Basic Men, !nsertar, "ser#ormMen, !nsertar, "ser#orm En el $ormulario %ue a&arece "ser#orm' se insertarnEn el $ormulario %ue a&arece "ser#orm' se insertarn
los controles del Cuadro de erramientas %ue tambi*nlos controles del Cuadro de erramientas %ue tambi*nha a&arecido. +i no a&arece haa clic en el iconoha a&arecido. +i no a&arece haa clic en el icono-Cuadro de erramientas.-Cuadro de erramientas.
!nsertemos Controles!nsertemos Controles Clic en el -Cuadro de Texto del cuadro deClic en el -Cuadro de Texto del cuadro de
herramientasherramientas
Marcar un recuadro en el "ser#orm'Marcar un recuadro en el "ser#orm' Clic en el -Bot/n de ComandoClic en el -Bot/n de Comando Marcar un &e%ue0o recuadro en el "ser#orm'Marcar un &e%ue0o recuadro en el "ser#orm' !nserte un seundo Bot/n de Comando!nserte un seundo Bot/n de Comando
H l M dH l M d
8/15/2019 .MacrosPP.pps
109/122
77C1C Adolo Aparicio 17Q
Hola MundoHola Mundo
+eleccione el CommandButton' y vea las &ro&iedades. +i+eleccione el CommandButton' y vea las &ro&iedades. +ino a&arecen &ulse el icono Ventana de 1ro&iedadesno a&arecen &ulse el icono Ventana de 1ro&iedades
En la &ro&iedad Ca&tion escriba +aludoEn la &ro&iedad Ca&tion escriba +aludo En la &ro&iedad Ca&tion del CommandButton2 escribaEn la &ro&iedad Ca&tion del CommandButton2 escriba
BorrarBorrar aa clic en el icono Ver C/dio de la Ventana de 1royectoaa clic en el icono Ver C/dio de la Ventana de 1royecto 3bserve %ue a&arece un rea &ara introducir e c/dio de3bserve %ue a&arece un rea &ara introducir e c/dio de
los eventos asociados al $ormulariolos eventos asociados al $ormulario Arriba a&arecen dos des&leables. El de la i4%uierdaArriba a&arecen dos des&leables. El de la i4%uierda
contiene los 3b5etos y el de la derecha los 1rocedimientoscontiene los 3b5etos y el de la derecha los 1rocedimientos +eleccione del des&leable el ob5eto CommandButton'.+eleccione del des&leable el ob5eto CommandButton'. En el otro des&leable a&arece automticamente Clic6En el otro des&leable a&arece automticamente Clic6 Escribe el siuiente c/dioEscribe el siuiente c/dio
Código para elCódigo para el
8/15/2019 .MacrosPP.pps
110/122
77C1C Adolo Aparicio 117
Código para elg pUserFormUserForm
1rivate +ub CommandButton'7Clic6()
TextBox'.Text 8 9ola Mundo9
End +ub
1rivate +ub CommandButton27Clic6() TextBox'.Text 8 99
End +ub
Vuelva al $ormulario. Basta cerrar la ventna, o me5orVuelva al $ormulario. Basta cerrar la ventna, o me5orhacer clic en el icono Ver 3b5etohacer clic en el icono Ver 3b5eto
:rabar:rabar E5ecutar el &roramaE5ecutar el &rorama +on &rocedimientos de evento+on &rocedimientos de evento
8/15/2019 .MacrosPP.pps
111/122
C t ñContraseña
8/15/2019 .MacrosPP.pps
112/122
77C1C Adolo Aparicio 110
ContraseñaContraseña
!nsertar un nuevo $ormulario.!nsertar un nuevo $ormulario."ser#orm2"ser#orm2
1ro&iedades del "ser#orm21ro&iedades del "ser#orm2< >ame 8 $rmClave>ame 8 $rmClave< Ca&tion 8 Contrase0aCa&tion 8 Contrase0a
!nsertar una Eti%ueta (!nsertar una Eti%ueta (labellabel))<
>ame 8lblClave>ame 8lblClave< Ca&tion 8 !ntrodu4ca la clave secretaCa&tion 8 !ntrodu4ca la clave secreta !nserte un Cuadro de Texto (TextBox)!nserte un Cuadro de Texto (TextBox)
< >ame 8 txtContrase0a>ame 8 txtContrase0a< Max?enth 8 @Max?enth 8 @< 1assordChar 8 1assordChar 8
!nserte el CommandBooton'!nserte el CommandBooton'< >ame 8 cdmAce&tar>ame 8 cdmAce&tar
< e$ault 8 Truee$ault 8 True< Ca&tion 8 Ace&tarCa&tion 8 Ace&tar
!nserte el CommandBooton2!nserte el CommandBooton2< >ame 8 cdmCancelar>ame 8 cdmCancelar< Ca&tion 8 CancelarCa&tion 8 Cancelar< Cancel 8 TrueCancel 8 True
+i un bot/n se &one como+i un bot/n se &one comoa$ault 8 True,a$ault 8 True,automticamente los demsautomticamente los dems
se &onen e$ault 8 #alsese &onen e$ault 8 #alse
En un $ormulario solo &uedeEn un $ormulario solo &uedehaber un bot/n con lahaber un bot/n con la&ro&iedad Cancel 8 True&ro&iedad Cancel 8 True
Código del UserFormCódigo del UserForm
8/15/2019 .MacrosPP.pps
113/122
77C1C Adolo Aparicio 11@
ggContraseñaContraseña Escriba los siuientes &rocedimientos de eventoEscriba los siuientes &rocedimientos de evento D e5ecute el $ormulario &ara ver el $uncionamiento D e5ecute el $ormulario &ara ver el $uncionamiento
Private ub !md"!eptar#Cli!$%&
'( UCase%txtContraseña)Text& *+ ,M"C-., T/en
MsgBox ,Contraseña 'n!orre!ta,0 vbCriti!al
1nd
1lse
MsgBox ,Contraseña "!eptada,0 vb1x!lamation
1nd
1nd '(
1nd ub
Private ub !mdCan!elar#Cli!$%&
1nd
1nd ub
FormularioFormulario
8/15/2019 .MacrosPP.pps
114/122
77C1C Adolo Aparicio 11
Fe!/asFe!/as >uevo ?ibro #echas.xls>uevo ?ibro #echas.xls Abrir el Editor de Visual BasicAbrir el Editor de Visual Basic !nsertar un "ser#orm!nsertar un "ser#orm
!ncrustar los controles de la imaen!ncrustar los controles de la imaen
PropiedadesPropiedades
8/15/2019 .MacrosPP.pps
115/122
77C1C Adolo Aparicio 112
PropiedadesPropiedades
< TextBox' TextBox' >ame 8>ame 8
txt1rimeroMesVienetxt1rimeroMesViene< TextBox2 TextBox2
>ame 8 txt#echa>ame 8 txt#echa
< ?abel?abel >ame 8 lblEti%F>ame 8 lblEti%F Ca&tion 8 'G MesCa&tion 8 'G Mes
+iuiente+iuiente< TextBox= TextBox=
>ame 8 txt+iuiente>ame 8 txt+iuiente< CommanButton'CommanButton'
>ame 8 cmdCalcular>ame 8 cmdCalcular Ca&tion 8 CalcularCa&tion 8 Calcular
< CommandButton2CommandButton2 >ame 8 cmd3tra>ame 8 cmd3tra Ca&tion 8 3traCa&tion 8 3tra
< "ser#orm'"ser#orm' >ame 8 $rm#echas>ame 8 $rm#echas Ca&tion 8 #echasCa&tion 8 #echas
< ?abel'?abel' >ame 8 lblEti%'>ame 8 lblEti%'
Ca&tion 8 oy esCa&tion 8 oy es< ?abel2?abel2
>ame 8 lbloy>ame 8 lbloy< ?abel=?abel=
>ame 8 lblEti%2>ame 8 l