MacrosPP.pps

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