Está en la página 1de 580

Aprendiendo OOo Basic

Autor : Mauricio Baeza Servn


Correo : mauricio (NO-SPAM) correolibre PUNTO net
Fecha : 15 de Septiembre del 2007
Licencia : NU !ree "ocumentation #icen$e% &1'( o po$terior
Ultima modificacin : ) de $eptiembre de 2011
Para ayudar : Apo*a e$te pro*ecto
+op*ri,-t (c) 2007 Mauricio .ae/a Ser&in' Se concede permi$o para
copiar% di$tribuir *0o modi1icar e$te documento ba2o lo$ t3rmino$ de la
#icencia de "ocumentaci4n #ibre de NU% 5er$i4n 1'( o cual6uier
otra &er$i4n po$terior publicada por la !ree So1t7are !oundation8 $in
Seccione$ 9n&ariante$ ni Te:to$ de +ubierta "elantera ni Te:to$ de
+ubierta Tra$era' Una copia de la licencia e$t; incluida en la $ecci4n
titulada NU !ree "ocumentation #icen$e'
Todo el c4di,o incluido en e$te libro e$ta ba2o la $i,uiente licencia<
+op*ri,-t (+) 2007 Mauricio .ae/a Ser&=n
>$te pro,rama e$ $o1t7are libre< u$ted puede redi$tribuirlo *0o
modi1icarlo ba2o lo$ t3rmino$ de la #icencia P?blica eneral NU
publicada por la !undaci4n para el So1t7are #ibre% *a $ea la &er$i4n (
de la #icencia% o (a $u elecci4n) cual6uier &er$i4n po$terior'
>$te pro,rama $e di$tribu*e con la e$peran/a de 6ue $ea ?til% pero
S9N A@ANTAA A#UNA8 ni $i6uiera la ,arant=a impl=cita
M>@+ANT9# o de APT9TU" PA@A UN P@OPBS9TO
">T>@M9NA"O'
+on$ulte lo$ detalle$ de la #icencia P?blica eneral NU para
obtener una in1ormaci4n m;$ detallada'
"eber=a -aber recibido una copia de la #icencia P?blica eneral NU
2unto a e$te pro,rama'
>n ca$o contrario% con$ulte C-ttp<00777',nu'or,0licen$e$0D'
Aprendiendo OOo .a$ic (
ndice de contenido
1 - Introduccin................................................................................9
2 - Conceptos iniciales....................................................................11
3 - Mi primer macro........................................................................17
4 - El lenguaje OOo asic...............................................................23
4.1 - !eclarando " usando #aria$les................................................2%
4.2 - Instrucciones " &unciones en OOo asic..................................32
4.3 - Constantes ' (iempre lo mismo...............................................3%
4.4 - i&urcaciones ' )omando decisiones.......................................37
4.* - ucles ' +epitelo otra #e,........................................................4-
4.% - Matrices ' .untos pero no re#ueltos.........................................49
4.7 - )ipos personali,ados...............................................................%-
4./ - 0m$ito de #aria$les ' 12ora me #es3 a2ora no........................%2
4./.1 - 0m$ito 4ocal.....................................................................%2
4./.2 - 0m$ito 5ri#ado.................................................................%*
4./.3 - 0m$ito de !ominio 5u$lico...............................................%/
4./.4 - 0m$ito 6lo$al...................................................................%/
4.9 - 7unciones " su$rutinas ' !i#ide " #encer8s............................%9
4.1- - Operadores............................................................................ /-
4.1-.1 - 9 : ; E<ponenciacin =aritm>tico?................................../-
4.1-.2 - 9 @ ; Multiplicacin =aritm>tico?....................................../2
4.1-.3 - 9 A ; !i#isin =aritm>tico?................................................/3
4.1-.4 - 9 B ; !i#isin entera =aritm>tico?...................................../4
4.1-.* - 9Mod; +esto de una di#isin entera =aritm>tico?............/*
4.1-.% - 9 C ; (uma =aritm>tico?................................................../%
4.1-.7 - 9 - ; +esta =aritm>tico?..................................................../7
4.1-./ - Operadores de relacin...................................................//
4.1-.9 - Dot ' Degacin =lgico?.................................................../9
4.1-.1- - 1nd ' E =lgico?.............................................................9-
4.1-.11 - Or ' O =lgico?...............................................................9-
4.1-.12 - For ' O e<clusi#a =lgico?..............................................91
4.1-.13 - EG# ' EGui#alencia =opuesto a For? =lgico?..................92
E
4.1-.14 - Imp ' Implicacin =lgico?.............................................93
4.1-.1* - 5recedencia de operadores..........................................94
4.11 - Control de errores..................................................................9*
4.12 - Halidacin de datos..............................................................1-4
4.13 - El I!E ' Muc2o m8s Gue un editor........................................11-
* - )ra$ajando con OpenO&&ice.org...............................................122
*.1 - Mis macros ' un arc2i#o especial...........................................123
*.2 - 1signando macros.................................................................12%
*.3 - Creando nuestro primer 9ser#icio; =o$jeto?...........................13-
*.3.1 - 5ropiedades especiales de depuracin...........................13/
*.4 - )ra$ajando con documentos..................................................142
*.4.1 - Creando nue#os documentos.........................................142
*.4.2 - +utas de arc2i#os " directorios.......................................144
*.4.3 - 1$riendo3 guardando " cerrando documentos................14%
*.4.4 - E<portando a 5!7...........................................................1*4
*.4.* - )areas comunes en documentos....................................1**
% - )ra$ajando con 2ojas de calculo ' Calc...................................1*/
%.1 - )ra$ajando con 2ojas.............................................................1*/
%.1.1 - Insertando 2ojas.............................................................1%3
%.1.2 - orrando 2ojas................................................................1%%
%.1.3 - Mo#iendo 2ojas...............................................................1%7
%.1.4 - Copiando 2ojas...............................................................17-
%.1.* - +enom$rando 2ojas........................................................171
%.1.% - Ocultando " mostrando 2ojas.........................................173
%.1.7 - 5roteccin " desproteccin de 2ojas...............................174
%.2 - +e&erencia a rangos...............................................................17*
%.2.1 - +e&erencia a celdas indi#iduales.....................................17*
%.2.2 - +e&erencia a un rango de celdas....................................177
%.2.3 - +e&erencia a #arios rangos de celdas.............................179
%.2.4 - +e&erencia a &ilas " columnas.........................................1/1
%.2.* - +e&erencia a la seleccin actual.....................................1/%
%.2.% - O$teniendo in&ormacin de rangos.................................1/9
%.2.7 - )ra$ajando con Cursores................................................191
%.2./ - (elecciones especiales...................................................199
Aprendiendo OOo .a$ic 5
%.3 - Manipulando rangos..............................................................2-7
%.3.1 - Mo#iendo rangos............................................................2-7
%.3.2 - Insertando rangos...........................................................211
%.3.3 - Eliminando rangos..........................................................214
%.3.4 - Copiando rangos.............................................................21%
%.4 - Manipulando datos.................................................................22-
%.4.1 - O$teniendo datos ..........................................................22-
%.4.2 - Introduciendo datos........................................................22%
%.4.3 - orrando datos...............................................................229
%.4.4 - 4lenando series de datos................................................23-
%.4.* - uscar " reempla,ar.......................................................233
%.4.% - )ra$ajando con notas.....................................................23/
%.* - !ando &ormato.......................................................................242
%.*.1 - 7ormato de celdas..........................................................243
%.*.2 - 7ormato de &ilas " columnas...........................................2*3
%.*.3 - Estilos " auto&ormato......................................................2*%
%.*.4 - 7ormato de p8gina..........................................................2%4
%.*.* - 7ormato condicional.......................................................279
%.% - Imprimiendo.......................................................................... 2/4
%.7 - +angos de datos....................................................................292
%.7.1 - !e&iniendo rangos...........................................................293
%.7.2 - Ordenar datos.................................................................29%
%.7.3 - 7iltrar datos....................................................................299
%.7.4 - (u$totales.......................................................................31-
%.7.* - Halidando datos..............................................................313
%.7.% - 1grupando datos............................................................322
%./ - ases de datos......................................................................33-
%./.1 - Importando datos...........................................................332
%./.2 - Insertando nue#os datos................................................34-
%./.3 - 1ctuali,ando datos.........................................................34*
%./.4 - orrando datos...............................................................347
%.9 - 6ra&icando datos....................................................................34/
%.1- - )ra$ajando con elementos gr8&icos.....................................3%9
%.1-.1 - )ra$ajando con im8genes.............................................3%9
%.1-.2 - )ra$ajando con auto&ormas..........................................379
%.1-.2.1 - 5rincipales propiedades de lInea.................................3/1
)
%.1-.2.2 - 5rincipales propiedades de relleno.............................3/4
%.1-.2.3 - 5rincipales propiedades de som$ra............................3/9
%.1-.2.4 - Otras propiedades de las auto&ormas.........................39-
%.1-.2.* - 1grupando " desagrupando &ormas............................391
%.1-.2.% - )ra$ajando con 7ontJorK...........................................393
%.1-.2.7 - 5ropiedades particulares de algunas &ormas..............39*
%.11 - 7unciones personali,adas....................................................399
%.12 - Con&iguracin glo$al de Calc...............................................4-*
7 - )ra$ajando con &ormularios.....................................................411
7.1 - 7ormularios =7orms?...............................................................411
7.2 - EtiGuetas =4a$el?....................................................................414
7.3 - Cuadros de te<to =)e<to<?...................................................417
7.4 - Casilla de #eri&icacin =C2ecKo<?.........................................422
7.* - Campo &ormateado =7ormatted7ield?.....................................424
7.% - otn de comando =Commandutton?...................................42*
7.7 - otn de opcin =Optionutton?............................................42%
7./ - Cuadro de lista =4isto<?........................................................429
7.9 - Cuadro com$inado =Com$oo<?............................................43%
7.1- - otn de seleccin =(pinutton?..........................................43/
7.11 - arra de despla,amiento =(crollar?...................................439
7.12 - Otros controles....................................................................44-
7.12.1 - otn gr8&ico =Imageutton?........................................441
7.12.2 - Control de imagen =ImageControl?................................442
7.12.3 - (eleccin de arc2i#o =7ile(election?.............................442
7.12.4 - Campo de &ec2a =!ate7ield?.........................................444
7.12.* - Campo de 2ora =)ime7ield?..........................................44*
7.12.% - Campo num>rico =Dumeric7ield?..................................447
7.12.7 - Campo moneda =Currenc"7ield?...................................44/
7.12./ - Campo enmascarado =5attern7ield?.............................449
7.12.9 - Cuadro de grupo =6roupo<?........................................4*1
7.12.1- - Control de ta$las =)a$leControl?.................................4*1
7.12.11 - arra de na#egacin...................................................4*2
/ - )ra$ajando con cuadros de dialogo.........................................4*4
Aprendiendo OOo .a$ic 7
/.1 - otn de comando =Commandutton?...................................4%1
/.2 - Control gr8&ico =ImageControl?..............................................4%3
/.3 - Casilla de #eri&icacin =C2ecKo<?.........................................4%3
/.4 - Cuadro de grupo =7rameControl?...........................................4%4
/.* - otn de opcin =Optionutton?............................................4%*
/.% - EtiGueta =4a$el?.....................................................................4%%
/.7 - Campo de te<to =)e<t7ield?...................................................4%7
/./ - Cuadro de lista =4isto<?........................................................4%7
/.9 - Cuadro com$inado =Com$oo<?............................................4%/
/.1- - arra de despla,amiento =(crollar?...................................4%/
/.11 - arra de progreso =5rogressar?.........................................4%9
/.12 - 4Inea =7i<ed4ine?.................................................................47-
/.13 - Control de arc2i#o =7ilecontrol?............................................471
/.14 - Control de 8r$ol =)reeControl?.............................................472
/.1* - Otros controles....................................................................47*
9 - )ra$ajando con e#entos..........................................................47%
9.1 - E#entos de la aplicacin........................................................47%
9.2 - 1signando e#entos en controles............................................4/%
9.3 - 5rincipales e#entos en controles...........................................491
9.3.1 - E#ento 9otn del ratn pulsado; ' Clic de ratn...........491
9.3.2 - E#ento 9otn del ratn soltado; ..................................493
9.3.3 - E#ento 9+atn dentro; ' 5untero encima.......................49%
9.3.4 - E#ento 9+atn &uera; ' 5untero &uera.............................49%
9.3.* - E#ento 9Mo#imiento del ratn;.......................................49%
9.3.% - E#ento 9Mo#er ratn por medio del teclado; - Mo#imiento
de ratn con tecla pulsada..........................................................49/
9.3.7 - E#ento 9+ecepcin de &oco; - 1l acti#ar 8rea.................499
9.3./ - E#ento 91l perder el &oco; - 1l desacti#ar 8rea...............499
9.3.9 - E#ento 9)ecla pulsada; .................................................*--
9.3.1- - E#ento 9!espu>s de 2a$er pulsado la tecla; - )ecla
soltada........................................................................................ *-4
9.3.11 - Otros e#entos...............................................................*-*
F
1- - Ln pro"ecto paso a paso.......................................................*-7
11 - 1p>ndices..............................................................................***
11.1 - (eguridad en macros...........................................................***
11.2 - Errores m8s comunes en tiempo de diseMo.........................**7
11.3 - Instalando (!N.....................................................................*%2
11.4 - Mostrar in&ormacin de un o$jeto en un arc2i#o de Calc.....*%4
11.* - 7ormulas de Calc espaMol-ingles..........................................*%*
11.% - 4istar &uentes en un arc2i#o de Calc....................................*74
11.7 - 4istar &ormatos en un arc2i#o de Calc.................................*7%
12 - i$liogra&Ia............................................................................*7/
13 - Ondice 1l&a$>tico....................................................................*79
Aprendiendo OOo .a$ic G
1 Introduccin
"Quien recibe una idea de m, recibe instruccin sin disminuir la ma; igual que
quien enciende su vela con la ma, recibe luz sin que yo quede a oscurasH
Thomas Jefferson
IA$= 6ue 6uiere$ aprender a pro,ramar en OOo .a$icJ .ien% pue$ *o tambi3n a$=
6ue *a tenemo$ un inter3$ com?n * e$o e$ un buen comien/o' No $e $i lle,a$te al lu,ar indicado%
*a me lo contara$' Sabe de antemano 6ue $o* un pro,ramador autodidacta 6ue reconoce 6ue
tiene &icio$ de lo$ cuale$ tal &e/ no me do* cuenta% e$pero * de$eo% 6ue al,?n buen $amaritano
6ue $e encuentre con e$ta$ nota$ me a*ude a identi1icarlo$' >$to$ apunte$ no tienen otro
prop4$ito 6ue compartir mi e:periencia al ir e:perimentando con e$te mara&illo$o pro,rama
llamado OpenO11ice'or, * por $upue$to% con $u len,ua2e de macro$ OOo .a$ic% una e:periencia
$umamente placentera' Me decid= a a&enturarme a e$cribir% por la 1alta de documentaci4n en
e$paKol para pro,ramar con OOo .a$ic% a ba$e de paciencia * di$ciplina -e ido pro1undi/ado en el
dominio del len,ua2e% creo 6ue puedo a*udarte a 6ue tu cur&a de aprendi/a2e no $ea tan
pronunciada como la m=a% $i $e cumple e$te $e,undo * $encillo prop4$ito% el tiempo * e$1uer/o
in&ertido% bien -abr;n &alido la pena% a$= 6ue% como dicen en mi pueblo -$obre ad&ertencia no -a*
en,aKo-% adelante% empecemo$'''
#a &er$i4n de OpenO11ice'or, 6ue utili/o para e$cribir e$ta$ nota$ * mo$trarte lo$
e2emplo$ de pro,ramaci4n% normalmente e$ la ultima e$table (('2'1 en e$te momento) de$car,ada
directamente de$de -ttp<00e$'openo11ice'or,% e$to e$ por 6ue al,una$ di$tribucione$ NU0#inu:%
compilan $u$ propia$ &er$ione$% ca$i toda$ Ldeber=anM de traba2ar de 1orma $ati$1actoria% pero te
recomiendo ba2ar e in$talar la o1icial para 6ue no$ entendamo$ me2or' "ar3 por $entado 6ue e$ta
&er$i4n e$ tambi3n con la 6ue traba2a$% no te ,aranti/o 6ue lo$ e2emplo$ mo$trado$ a6u=
1uncionen con otra$ &er$ione$% de -ec-o no te ,aranti/o 6ue 1uncionen con nin,una% o2o% no me
malinterprete$% e$ tan alta la cantidad de e6uipo$% $i$tema$ * con1i,uracione$ di1erente$% 6ue e$
cue$ti4n $o1t7are e$ di1=cil ,aranti/ar al,o * $i lo duda$% leete al,una de la$ muc-a$ licencia$ de
$o1t7are 6ue -a* en el mercado% inclu*endo por $upue$to% la$ de $o1t7are libre' #o 6ue $i te
puedo a$e,urar% e$ 6ue cada uno de lo$ e2emplo$ 6ue te mue$tro lo$ -e probado m;$ de una &e/
ante$ de darlo$ por bueno$% a$= 6ue en ,eneral e$pero no ten,a$ problema$ con ello$'
Tambi3n e$ importante 6ue $epa$% 6ue traba2o $obre NU0#inu: en &aria$
di$tribucione$ (por a-ora) Arc-#inu: (-ttp<00arc-linu:-e$'or,)% aun6ue continuamente * m;$
$e,uido de lo 6ue te ima,ina$ cambio de di$tribuci4n% pue$ aun no puedo abandonar e$a man=a
de probar * e:perimentar (* a &ece$ $uicidarte)% tanto la$ nue&a$ di$tribucione$ como la$ nue&a$
&er$ione$ de la$ *a e:i$tente$% por lo 6ue la$ inter1ace$ podr=an &ariar un poco con re$pecto al
$i$tema operati&o (S'O') 6ue u$a$% por e2emplo Mac0OS o Nindo7$ u otro% aun6ue e$pero 6ue
e$to no $ea un problema pue$ en $i lo ?nico 6ue cambia e$ la decoraci4n de la$ &entana$% lo
dem;$% Ldeber=aM $er i,ual en la ma*or=a de lo$ ca$o$% no ob$tante no e$ta de m;$ 6ue al en&iar
una con$ulta e$peci1i6ue$ la &er$i4n de OOo 6ue u$a$ * el S'O' donde traba2a$% aun6ue claro%
como no -abr=a de recomendartelo% 6ue e$pera$ para probar al,una de la$ decena$ de
di$tribucione$ NU0#inu: e:i$tente$% $e,uro 6ue al,una $e adapta a tu ,u$to * 1orma de traba2ar%
por lo meno$% no de2e$ de intentarlo'
10 1 9ntroducci4n
>$te documento e$ta en con$tante crecimiento% puede$ &eri1icar la ultima &er$i4n en<
777'uni&er$olibre'or,% como ere$ libre de di$tribuirlo% $i te parece 6ue lo merece% te in&ito a 6ue
-able$ de el * lo di1unda$% * $i no te ,u$ta% pue$ no $ea$ c-i$mo$o'
Para comentario$% noti1icaci4n de errore$% $u,erencia$% colaboracione$ * duda$
puede$ u$ar la$ $i,uiente$ alternati&a$<
Pre$ionar la tecla F1 a*uda muc-o% ante$ de e$cribir para duda$% a$e,?rate 6ue<
No e$ta re$uelta en e$ta$ nota$
No e$ta re$uelta en la a*uda
No $e -a comentado en la$ li$ta$ de correo o 1oro$
IOa reali/a$te una con$ulta en tu bu$cador 1a&oritoJ
O lo m;$ importante% 6ue -a*a$ tratado de re$ol&erlo por ti mi$mo
"e pre1erencia% plantea tu$ duda$ en la$ li$ta$ o 1oro$ * no a mi correo% e$to* en la
me2or di$po$ici4n de a*udarte% pero recuerda 6ue tu duda% tal &e/ otro$ la ten,an% * $i $e publica
en al,una li$ta o 1oro% la po$ible re$pue$ta tambi3n le podr; $er&ir a ma$ de uno% $i aun a$=%
de$ea$ e$cribirme% procura $er lo ma$ claro po$ible en tu e:po$ici4n * aun6ue procuro conte$tar
$iempre% no te ,aranti/o una re$pue$ta inmediata pue$ a parte de e$cribir e$ta$ nota$% ten,o otra$
&aria$ acti&idade$ 6ue tal &e/ no $ean de tu inter3$% pero 6ue con$umen un poco de mi tiempo%
a,rade/co tu compren$i4n al re$pecto'
9n$cribete a cual6uiera de la$ $i,uiente$ li$ta$ de correo% de pre1erencia a la$ do$%
pue$ en la$ do$ participo con$tantemente'
Para enviar mensajes Para subscribirse
u$er$Pe$'openo11ice'or, u$er$-$ub$cribePe$'openo11ice'or,
oooe$Pcorreolibre'net -ttp<00777'correolibre'net0mailman0li$tin1o0oooe$Qcorreolibre'net
Procuro participar en el 1oro o1icial de macro$< !oro de Macro$ en >$paKol
>$ta$ nota$ $on po$ible$ ,racia$ a la ,enero$idad de la ,ran comunidad
OpenO11ice'or, en todo el mundo * por $upue$to a la comunidad mundial del $o1t7are libre% e$
decir% a la$ personas 6ue Ltodo$ lo$ d=a$M de$arrollan% u$an * di1unden el $o1t7are libre'
Dedico este trabajo a las personas que me aman
sin su amor, no seria lo que soy...
Aprendiendo OOo .a$ic 11
2 Conceptos iniciales
+omo $o* una per$ona 1lo2a% tal &e/ pien$e$ 6ue no me ,u$ta traba2ar * e$tar;$ en lo
correcto% por ello% cuando de$cubr= lo 6ue $e pod=a -acer con lo$ lenguajes de programacin%
comprend= 6ue e$to e$ lo 6ue nece$itaba (* lo 6ue me ,u$taba)% lo$ len,ua2e$ de pro,ramaci4n
no$ permiten -acer 6ue la computadora -a,a por no$otro$% e$a$ tarea$ comple2a$% repetiti&a$ *
tedio$a$ (tambi3n la$ di&ertida$)% en e$to$ apunte$% trataremo$ de aprender como -acer en
OpenO11ice'or,% e$a$ tarea$ comple2a$% repetiti&a$ * tedio$a$ con uno de $u$ &ario$ len,ua2e$ con
lo$ 6ue $e puede pro,ramar en el% me re1iero claro e$ta% al OOo .a$ic' #a$ in$truccione$ 6ue
u$amo$ para decirle al pro,rama 6ue -acer% como% cuando% el orden * la $ecuencia en 6ue
6ueremo$ 6ue lo -a,a% la$ llamaremo$ MACROS% e$ta$ macro$ podemo$ -acerla$ de 1orma
H$emiautom;ticaH con la rabadora de macros (por a-ora $olo pre$ente en Nriter * +alc) o
e$cribirla$ no$otro$ de$de cero (podemo$ crearla$ de$de toda$ la$ aplicacione$ de
OpenO11ice'or,)% a mi criterio% a e$ta ,rabadora toda&=a le 1alta madurar un poco% por lo cual%
crearemo$ nue$tra$ macro$ de$de cero% &era$ 6ue no e$ tan complicado * $i% mu* di&ertido'

#o primero 6ue tiene$ 6ue aprender (* recordar) e$ 6ue la$ macro$ $e ,uardan en
mdulos% e$to$ a $u &e/ $e ,uardan * or,ani/an en bibliotecas% la$ cuale$% e$t;n contenida$
dentro de documento$% con lo cual tendremo$ el $i,uiente dia,rama% por cierto% -ec-o en "ra7'
Todo$ lo$ documento$% tienen una biblioteca e$pecial predeterminada llamada
Standard% a e$ta biblioteca le puede$ a,re,ar * eliminar m4dulo$% pero no puede$ eliminarla% ma$
adelante &eremo$ * aprenderemo$ 6ue lo$ m4dulo$ tambi3n% adem;$ de macro$% pueden
contener H!uncionesH% * lo$ documento$ tambi3n pueden contener Hdi"logosH' >n la $i,uiente
ima,en puede$ &er un documento (1) con una biblioteca (2)% un modulo (() * do$ macro$ (E)'
12 2 +oncepto$ iniciale$
>mpecemo$ con lo di&ertido% crearemo$ el arc-i&o 6ue te mue$tro en la ima,en
anterior% tal como e$ta * el cual no$ $er&ir; para ,uardar la$ macro$ 6ue &a*amo$ creando<
Abre +alc (puede$ u$ar cual6uier otra aplicaci4n de OpenO11ice'or,) * ,uarda el
documento nue&o en el lu,ar * con el nombre 6ue con$idere$% para nue$tro$ 1ine$ u$aremo$ el
nombre H>2emplo$ de macro$'od$H'
5e al men? #erramientas $ Macros $ Organizar macros $ OpenO!!ice%org Basic%%%
Te mo$trara el $i,uiente cuadro de dialo,o% pre$iona el bot4n de comando
Administrar
Al mo$trarte el $i,uiente cuadro de dialo,o% da un clic en la 1ic-a Bibliotecas,
a$e,urate de 6ue dentro del cuadro de li$ta de$ple,able Ubicacin% e$te $eleccionado el
documento al 6ue le ane:aremo$ la nue&a biblioteca% en nue$tro ca$o% el documento de +alc%
&jemplos de macros%ods
Aprendiendo OOo .a$ic 1(
9nmediatamente de$pu3$% pre$iona el bot4n de comando Nueo% tra$ lo cual te
mo$trara un cuadro de dialo,o% $olicitando el nombre de la nue&a biblioteca% la cual llamaremo$
miBiblioteca'
"e$pu3$ de dar clic en Aceptar% notara$ 6ue la nue&a biblioteca $e a,re,a a la li$ta%
a-ora% re,re$a a la 1ic-a !dulos * ob$er&a 6ue autom;ticamente a la nue&a biblioteca $e le
ane:o un modulo nue&o llamado Module'% $i no lo &e/% tal &e$ ten,a$ 6ue dar clic en el bot4n
e:pandir repre$entado por un $i,no de $uma (R) a la i/6uierda del nombre del documento' "a un
clic en el bot4n de comando Cerrar para re,re$ar al anterior cuadro de dialo,o'
A-ora% de$plie,a lo$ elemento$ de nue$tro documento% e$to lo lo,ra$ con el icono del
$=mbolo ma$ (R) 6ue e$ta a la i/6uierda del nombre del documento% lo 6ue &ea$ tiene 6ue $er i,ual
o mu* parecido a la $i,uiente ilu$traci4n% ob$er&a 6ue tambi3n en la li$ta de macro$% aparece *a
1E 2 +oncepto$ iniciale$
una con el nombre de Main (elip$e ro2a)% del mi$mo modo 6ue al a,re,ar una nue&a biblioteca e$ta
aparece con un nue&o modulo llamado de 1orma predeterminada !odule"% cuando a,re,amo$ un
nue&o modulo% e$te crea de 1orma predeterminada% una macro nue&a * &ac=a con el nombre de
!ain% un nombre 6ue te re$ultara 1amiliar $i al,una &e/ pro,rama$te en +' >$to$ nombre$ &ienen
predeterminado$% pero $e pueden cambiar cuando 6uiera$% como lo -aremo$ a continuaci4n% para
lo cual% da un clic en el bot4n de comando #ditar'
Al dar clic en #ditar% te abrir; una nue&a &entana% la cual $er; el centro de traba2o de
HtodoH lo 6ue -a,amo$ en OOo .a$ic% e$ta nue&a &entana de -ec-o e$ una nue&a aplicaci4n% una
aplicaci4n mu* e$pecial% pue$ ella no$ permitir; e$cribir toda$ la$ macro$ 6ue no$ permita nue$tro
tiempo e ima,inaci4n% e$ta aplicaci4n% recibe el nombre de >ntorno de "e$arrollo 9nte,rado (9">
por $u$ $i,la$ en in,le$) * e$ mu* Limportante $ue te familiarices con el% lo ma$ po$ible% lo cual%
a1ortunadamente $e da como con$ecuencia intr=n$eca de pro,ramar en OOo .a$ic' Ob$er&a como
no$ mue$tra el nombre del documento en donde no$ encontramo$% a$= como el nombre de la
biblioteca en la 6ue e$tamo$ traba2ando (1)% no$ mue$tra% el nombre del modulo acti&o
actualmente (2)% en ca$o de 6ue -ubie$e m;$% no$ lo$ mo$trar=a en 1ic-a$ conti,ua$ a e$te% por
ultimo% ob$er&a la macro mencionada en el inci$o anterior% Main (()
Aprendiendo OOo .a$ic 15
+omo $i,uiente pa$o% cambiemo$ el nombre del modulo% para ello% da un clic con el
bot4n $ecundario de tu rat4n (normalmente el bot4n $ecundario e$ el derec-o) $obre la 1ic-a 6ue
mue$tra el nombre actual (2)% te mo$trara un men? conte:tual entre cu*a$ opcione$ &era$
Cambiar nombre% da un clic en ella * el cur$or de e$critura (el 6ue parpadea) $e po$icionara al
1inal del nombre actual del modulo% a-ora% puede$ cambiarlo por el 6ue 6uiera$% para nue$tro
e2ercicio le llamaremo$ miModulo% al terminar pre$iona la tecla SEnterT para aceptar el cambio o
$implemente acti&a el ;rea de e$critura de c4di,o (() con un clic% e$ta $ecci4n en realidad e$ un
editor de te:to$% pero un editor con muc-a$ caracter=$tica$ e$peciale$ 6ue iremo$ conociendo
poco a poco% para terminar nue$tro primer e2ercicio% da un doble clic a la palabra Main% con lo cual
lo,raremo$ $eleccionar la palabra completa% puede$ reempla/ar e$te nombre por el 6ue 6uiera$
(bueno% ca$i por el 6ue 6uiera$% m;$ adelante% &eremo$ la$ re$triccione$ al re$pecto)% para
continuar con nue$tro e2ercicio e$cribiremo$ !i&Primer&!acro'
Por ultimo% &e al men? Arc(ivo $ uardar) o da un clic en el conocido icono de
uardar% o pre$iona la combinaci4n de tecla$ +@T#R% como en la ma*or parte de lo$ pro,rama$
de computo% -a* ma$ de una manera de -acer la mi$ma acci4n% u$a% la 6ue me2or te con&en,a o
,u$te * ,uarda tu documento% *a $ea con el nombre propue$to o con el 6ue con$idere$ correcto'
>n e$ta mi$ma &entana% &e al men? #erramientas $ Macros $ Organizar macros $
OpenO!!ice%org Basic%%% * comprueba 6ue lo 6ue tiene$ e$ ba$tante $imilar a la ima,en $i,uiente%
6ue% $al&o un pe6ueKo cambio (6ue *a nota$te) 6uedo i,ual al 6ue propu$imo$ al inicio de e$ta$
nota$'
#o$ re$tante$ botone$ de comando pre$ente$ en e$te cuadro de di;lo,o%
aprenderemo$ a u$arlo$ m;$ adelante'
ITe ,u$to el cur$oJ% e$pero 6ue $i% e$o e$ todo% 1in * -a$ta pronto' No% no e$ cierto%
con e$to cubrimo$ el 0'001U de lo 6ue pretendo% con$te 6ue $olo lo pretendo' Para 1inali/ar e$te
capitulo * e$ta noc-e (*a me can$e)% $iento muc-o decirte * con1e$arte% 6ue $o* un pro1e$or 6ue
de2a muc-a tarea% a$= 6ue tu tarea e$<
Practicar muc-o
A,re,ar * eliminar biblioteca$ a di1erente$ documento$ de OpenO11ice'or,'
Practicar muc-o
A,re,ar * eliminar m4dulo$ a di1erente$ biblioteca$'
Practicar muc-o
Ob$er&ar como e$ta e$tructurada nue$tra primer macro * tratar de -acer ma$% como
con$e2o% una macro no puede ir dentro de otra'
1) 2 +oncepto$ iniciale$
Practicar muc-o
#o$ cuadro de dialo,o &i$to$ -a$ta a-ora% tienen al,uno$ controle$ ma$% trata de
in&e$ti,ar para 6ue $ir&en o cual e$ $u 1unci4n'
Practicar muc-o
>n&=ame tu$ comentario$% impre$ione$% 6ue2a$ * duda$% como un $er&icio a,re,ado%
tambi3n puede$ en&iarme tu$ problema$ e:i$tenciale$'
VA-W * practica muc-o'''
Aprendiendo OOo .a$ic 17
Mi primer macro
A-ora 6ue *a $abe$ donde crearemo$ nue$tra$ macro$% empecemo$ con ella$'''
Abre tu arc-i&o de traba2o% $i -a$ $e,uido e$ta$ nota$% nue$tro arc-i&o% e$ un
documento de +alc nombrado #'emplos de macros(ods( "e 1orma predeterminada% cuando
abre$ un arc-i&o de OpenO11ice'or, 6ue contiene macro$% te mo$trara el $i,uiente a&i$o de
$e,uridad% 6ue creo% e$ ba$tante claro'
Por $upue$to% para poder traba2ar correctamente tiene$ 6ue -abilitar la$ macro$% m;$
adelante aprenderemo$ a e&itar e$te men$a2e para lo$ arc-i&o$ 6ue $abemo$ $on $e,uro$' Puede
$er 6ue no te mue$tre e$te men$a2e * te abra el arc-i&o directamente con la$ macro$
de$-abilitada$% $i e$te e$ tu ca$o% tiene$ 6ue cambiar el ni&el de $e,uridad como te mue$tro en
11'1 Se,uridad en macro$' 5e al men? #erramientas $ Macros $ Organizar macros $
OpenO!!ice%org Basic%%%* na&e,a -a$ta tu documento% tu biblioteca * tu modulo% inmediatamente
de$pu3$ de $eleccionar la macro 6ue lle&a por nombre Mi*Primer*Macro% pre$iona el bot4n de
comando #ditar' >$ta $erie de accione$% e$ la 1orma 6ue u$aremo$ para acceder a la edici4n de
cual6uier macro &i$ta en e$ta$ nota$% por lo cual% de a6u= en adelante% dar3 por -ec-o% 6ue *a lo
domina$'
+on la acci4n anterior% te abrir; el >ntorno de de$arrollo (de a6u= en adelante )*#) *
e$te e$ el punto intere$ante * el m;$ di&ertido% e$cribir c4di,o% e$ decir% decirle al pro,rama 6ue
-a,a lo 6ue 6ueramo$% cuando 6ueramo$ * como 6ueramo$% * para no $alirno$ de lo$ H$anto$
c;none$H de la pro,ramaci4n% empe/aremo$ con un cl;$ico'''
1F ( Mi primer macro
O para lo,rarlo% a,re,a la $i,uiente linea a la macro% a$e,urate de e$cribirla o
copiarla tal cual<
MsgBox "Hola Mundo!!"
"e modo 6ue 6uede de la $i,uiente manera<
A-ora% para He2ecutarH la macro% e$ decir% 6ue realice $u traba2o% pre$iona el bot4n de
e2ecuci4n (circulo ro2o en la ima,en anterior) o pre$iona la tecla SF!T * li$to% tendr;$ 6ue &er el
cuadro de men$a2e 6ue te mo$tr3 linea$ arriba' W!elicidade$V% *a ere$ todo un pro,ramador% pero
e$pera% no ere$ toda&=a un pro,ramador completo% pue$ *a $abe$ el HcomoH% $olo te 1alta el $aber
el Hpor 6u3H% para lo,rar lo 6ue dec=a mi entraKable pro1e$or de topo,ra1=a<
El "ombre terico sabe #por qu$#,
el "ombre practico sabe el #cmo#,
lo ideal es saber #como# y #por qu$#...
Para entender el HIpor 6u3JH% analicemo$ la linea 6ue acabamo$ de a,re,arle a
nue$tra macro<
MsgBox "Hola Mundo!!"
#a primer palabra% e$ una HinstruccinH de OOo .a$ic% e$ decir% una palabra
e$pecial% 6ue el len,ua2e% en con2unto con el )*#% reconoce de modo di1erente * Hreali/aH% H-aceH%
He2ecutaH% una tarea e$peci1ica% en el ca$o de e$ta Hpalabra clae o reseradaH (llamada a$=% por
6ue L$oloM OOo .a$ic puede -acer u$o de ella% recuerda e$to bien% solo %%o &asic la puede
usar) MsgBox% mue$tra un Hmensa'eH en un cuadro de dialo,o% I6ue men$a2eJ% como -abr;$
notado (por 6ue de a6u= en adelante tendr;$ 6ue $er mu* ob$er&ador)% el men$a2e 6ue mue$tra e$
el 6ue Hno$otro$H le indicamo$ delante de ella% * como e$ una HcadenaH de te:to% lo tenemo$ 6ue
-acer entre comilla$ * $eparada de la in$trucci4n por un e$pacio% I$uceder; lo mi$mo con
n?mero$J% I* con 1ec-a$ o al,?n otro &alorJ'''
MsgBox 1234567890
Aprendiendo OOo .a$ic 1G
MsgBox 15/01/1974
MsgBox 1dfgdfh245
@eali/a todo$ lo$ e:perimento$ 6ue 6uiera$ * me cuenta$ 6ue $ucede' Ob$er&a la
primer linea de la macro 6ue acaba$ de -acer% * 6ue% $i -a$ $e,uido al pie de la letra% no tendr=a$
6ue -aber modi1icado<
REM B!"#$
#a primer palabra % tambi3n e$ una palabra cla&e de OOo .a$ic% * $encillamente lo
6ue H-aceH% e$ decirle al pro,rama (nue$tra macro)% 6ue todo lo -a*a de$pu3$ de e$ta palabra% e$
un comentario% e$ decir% el len,ua2e $e lo $altara ol=mpicamente $in -acerle ca$o% comentar la$
linea$ de c4di,o e$ una practica $umamente ?til% $obre todo% cuando la$ macro$ &an creciendo de
tamaKo * comple2idad% a$= 6ue% a$ume e$ta recomendaci4n% Hca$iH% como una re,la% -$iempre
comenta tu$ linea$ de c4di,o-% por a-= le= en al,?n 1oro 6ue un c4di,o bien e$crito * pro1e$ional no
nece$itaba comentario$% pero como no$otro$ $omo$ Lno&ato$M -aremo$ ca$o omi$o de e$e
comentario% pue$ como di2o al,una &e/ #in, Ou Tan -me ,u$ta la ,ente amateur-' A$= 6ue &e al
c4di,o de nue$tra macro * comenta la linea 6ue le a,re,a$te% de modo 6ue te 6uede% a$=<
REM Mu%s&'a un (%nsa)% %n un *uad'o d% d+alogo
MsgBox "Hola Mundo!!"
#o$ comentario$% tambi3n puede$ e$tablecerlo$ con una comilla $imple (X)
,Mu%s&'a un (%nsa)% %n un *uad'o d% d+alogo
MsgBox "Hola Mundo!!"
Adem;$% podemo$ a,re,arlo$% al 1inal de la linea de c4di,o<
MsgBox "Hola Mundo!!" REM Mu%s&'a un (%nsa)%---d+alogo
MsgBox "Hola Mundo!!" ,Mu%s&'a un (%nsa)%--- d% d+alogo
@eitero% procura comentar la ma*or parte de tu c4di,o% tu memoria te lo a,radecer;%
a$= como todo$ lo$ pro,ramadore$ con lo$ 6ue comparta$ tu c4di,o% $i decide$ 6ue $ea $o1t7are
libre% como te recomiendo 6ue $ea'
A-ora &eamo$ la linea donde inicia nue$tra macro<
"u. M+/0'+(%'/Ma*'o
+omo $e 6ue ere$ ob$er&ador% *a -abr;$ deducido 6ue la primer palabra% $i%
e1ecti&amente% e$ una palabra cla&e de OOo .a$ic% la cual no$ $ir&e para de1inir una H$ubrutinaH%
como tambi3n $e le$ conoce a la$ macro$% para identi1icarla% le a$i,namo$ un nombre% en nue$tro
ca$o le pu$imo$< Mi_Primer_Macro% nombre 6ue<
20 ( Mi primer macro
NO puede lle&ar e$pacio$% $i lo -ace$% te mo$trara un men$a2e% 6ue por a-ora% no
anali/aremo$% pero recuerdalo para m;$ adelante'
NO puede iniciar con un n?mero% $i lo -ace% te mo$trara el $i,uiente men$a2e de
error<
NO debe repetir$e el nombre de la macro% dentro del modulo en 6ue $e declara% o
$ea% no puede -aber do$ 6ue $e llamen i,ual% $i trata$ de -acer lo anterior% al e2ecutar% te mo$trara
el $i,uiente men$a2e de error<
Ob$er&a la primer linea de lo$ men$a2e$ de la$ do$ im;,ene$ anteriore$% la$ do$ $on
i,uale$ -Error de sinta'is de &(SIC-% a6u=% la palabra importante e$8 H$inta:i$H% 6ue% $i no$
atenemo$ a lo 6ue dice la "oKa @eal Academia >$paKola% 6uiere decir<
sinta+is
("el lat' s,nta+is) * e$te del ,r' Y Z[\]^_% de Y`Z[ YYa^Z% coordinar)' P
1. 1' ram% Parte de la ,ram;tica 6ue en$eKa a coordinar * unir la$ palabra$ para
1ormar la$ oracione$ * e:pre$ar concepto$'
2. 1' -n!orm% +on2unto de re,la$ 6ue de1inen la$ $ecuencia$ correcta$ de lo$
elemento$ de un len,ua2e de pro,ramaci4n'
@eal Academia >$paKola b Todo$ lo$ derec-o$ re$er&ado$
"e e$ta$ de1inicione$% la 6ue no$ intere$a e$ la numero do$% trata de recordarla
-Conjunto de reglas .ue de!inen las secuencias correctas de los elementos de un lenguaje de
programacin-% pue$ en la$ $i,uiente$ p;,ina$% trataremo$ de aprender e implementar e$te
con'unto de re+las% la$ cuale$% te con1e$ar3% no $on tanta$% ni tan comple2a$ * como $e,uro
-abr;$ notado% el )*# no$ in1orma muc-a$ &ece$ cuando implementamo$ mal% e$te con2unto de
re,la$% e$ decir% cuando com?nmente -acemo$ mal u$o de la L$inta:i$M de OOo .a$ic'
Para 1inali/ar e$te capitulo% analicemo$ la ultima * mu* $encilla linea de nue$tra
macro<
Aprendiendo OOo .a$ic 21
End "u.
Si% la$ do$ $on palabra$ cla&e$ del len,ua2e * tambi3n% creo% $on ba$tante e:plicita$%
no$ indican el 1inal de nue$tro Hpro,ramaH% H$ubrutinaH o HmacroH% como la$ llamaremo$ de a6u= en
adelante'
>ntonce$% cada l=nea de c4di,o *% -a$ta donde $e encuentre un $alto de l=nea% el
len,ua2e lo reconocer; como una sentencia de OOo .a$ic% puede$ tener &aria$ $entencia$ en
una $ola l=nea% $i la$ $epara$ con do$ punto$% como en<
"u. 1a'+as"%n&%n*+as23
MsgBox "Es&as %s una s%n&%n*+a" 4 MsgBox "Es&a %s o&'a s%n&%n*+a"
End "u.
>n $entencia$ lar,a$% puede$ u$ar el car;cter de continuaci4n de l=nea% 6ue e$ el
,ui4n ba2o ( Q )% como en el $i,uiente e2emplo% pero recuerda 6ue $i,ue $iendo la mi$ma
$entencia<
"u. 5+n%as5a'gas23
MsgBox "Es&as %s una l+n%a la'ga d% *6d+go7 s% 8u%d% d+9+d+' " : /
"usando %l gu+6n .a)o7 *o(o %n %s&% %)%(8lo"7 0 7"E)%(8lo " : /
"d% l+n%a la'ga"
End "u.
O a-ora $i% para terminar e$te capitulo% ob$er&a 6ue el -/& no$ mue$tra di1erente$
colore$ en la$ palabra$% e$to e$ mu* ?til cuando $e e$ta pro,ramando% pero por puro ,u$to *
tambi3n% lo con1ie$o% como una -erencia del 5.A (aun6ue tambi3n pe$a el -ec-o de tener una
macro *a -ec-a 6ue con&ierte e$to$ colore$)% u$o la $i,uiente combinaci4n de colore$<
!;ul para la$ palabra$ cla&e$
1%'d% 8a'a los *o(%n&a'+os
Ro)o 8a'a los n<(%'os
Ro)o o.s*u'o 8a'a las *ad%nas d% &%x&o
=%g'o 8a'a &odo lo d%(>s
A6u= un e2emplo de como $e mo$trar=a el c4di,o con e$ta combinaci4n de colore$<
?8&+on Ex8l+*+& R%( 0'u%.as d% *o(%n&a'+o
"u. 0'u%.as2B@1al 0al !s "&'+ng3
, *o(%n&a'+o
A+( +n&=u( !s #n&%g%'
+n&=u( B 10 C 10
MsgBox "0'u%.a" ,*o(%n&a'+o
End "u.
Para con1i,urar e$to$ u otro$ colore$ 6ue $ean de tu a,rado% &e al men?
#erramientas $ Opciones%%% en OpenO!!ice%org e$co,e Representacin% para 6ue 6uede de la
$i,uiente manera
22 ( Mi primer macro
@ecuerda 6ue e$to e$ $olo una recomendaci4n% tu% con el u$o * la practica% decidir;$
$i e$ a$= como te ,u$ta% $i no% no dude$ ni un momento en e$tablecer lo$ colore$ 6ue m;$ te
a,raden% ,u$ten o $implemente te den la ,ana 6ue para e$o e$ la libertad'
>$ta e$ la de a de &era$% a-ora $i% para terminar e$te capitulo% tiene$ 6ue recordar
6ue para OOo .a$ic% e$ indi$tinto el u$o de MAOUS+U#AS o min?$cula$% o una combinaci4n de
amba$% e$ decir% nue$tra macro% Hdeber=aH de 1uncionar i,ual con<
min?$cula$
su. (+/8'+(%'/(a*'o
(sg.ox "Hola Mundo!!"
%nd su.
MAOUS+U#AS
"DB M#/0R#MER/M!$R?
M"EB?F "Hola Mundo!!"
E=A "DB
+ombinaci4n de amba$% como nue$tro ori,inal% 6ue e$ la 1orma ma$ com?n * la
1orma 6ue *o u$are a todo lo lar,o de e$ta$ nota$'
"u. M+/0'+(%'/Ma*'o
MsgBox "Hola Mundo!!"
End "u.
>l -/&% no -ace una autocorrecci4n de la$ palabra$% no te i,uala la$ palabra$ a
ma*?$cula$ o min?$cula$ (toda&=a)% pero e$to% te a*uda muc-o a me2orar tu mecano,ra1=a% a $er
me2or ob$er&ador% a$= 6ue<
Practica muc-o'
9n&e$ti,a ma$ acerca de la in$trucci4n M$,.o:% pre$ionar SF1T Ha*udaH muc-o'
Practica muc-o'
>n&=ame tu$ comentario$% aporte$ * duda$'
Practica muc-o'
Aprendiendo OOo .a$ic 2(
) El len*uaje %%o &asic
OOo .a$ic% 1orma parte de la 1amilia de len,ua2e$ .a$ic% comparte con ello$ la ma*or
parte de $u $inta:i$% $u 1acilidad * $encille/% no entraremo$ a6u= en di$6ui$icione$ 1ilo$41ica$ de $u
-i$toria o di1erencia con otro$ H$abore$H .a$ic% me limitare a mo$trarte el u$o de $u $inta:i$ lo ma$
claramente 6ue me $ea po$ible% procurando 6ue lo$ e2emplo$ $ean tu principal 1uente de con$ulta'
>l -/&% $e encar,a de re&i$ar la correcta Hsinta,isH (recordando 6ue $inta:i$ e$ un Hcon2unto de
re,la$H) de cada l=nea 6ue no$otro$ e$cribamo$% por ello% a OOo .a$ic $e le denomina un
Hlen,ua2e interpretadoH% por 6ue re&i$a la $inta:i$% cada &e/ 6ue He2ecutamo$H la macro'
A-ora *a conoce$ donde inicia * donde termina una macro% como nombrarla * como
e2ecutarla% e$to e$ importante 6ue lo domine$ bien% pue$ 6ue de a6u= en adelante% dar3 por
entendido 6ue a$= e$% por 6ue cada nue&a in$trucci4n 6ue aprendamo$% la tiene$ 6ue probar
HdentroH de una macro% a$= 6ue para 6ue no -a*a e:cu$a$% repacemo$ una &e/ ma$ e$to'''
#a e$tructura b;$ica para una macro e$'
"u. =o(.'%/d%/la/Ma*'o
REM !GuH 9an &odas las +ns&'u**+on%s Gu% Gu%'a(os
End "u.
Por $upue$to e:i$ten m;$ &ariante$% por a-ora% para nue$tro$ 1ine$% e$ta e$ m;$ 6ue
$u1iciente% &amo$ a e$cribir nue$tra $e,unda macro% a6u= e$ta'
"u. M+/"%gunda/Ma*'o
,!lgo (>s +n&%'%san&%
MsgBox "Hola =%na!"
End "u.
O *a encarrilado$% a,re,a una tercer macro'
"u. M+I%'*%'Ma*'o
,5o Gu% Gu+%'as
MsgBox "??o Bas+* %s f>*+l @ d+9%'&+do"
End "u.
Ob$er&acione$ (Irecuerda$ 6ue =bamo$ a $er ob$er&adore$J% $er buen ob$er&ador
e$ una e:celente &irtud en un pro,ramador)'
>n la tercer macro% en el nombre% *a no u$e ,uione$ para $eparar la$ palabra$% Ie$
correctoJ% re$pue$ta% $i% e$ correcto% uno de lo$ re6ui$ito$ e$ 6ue el nombre HnoH lle&e e$pacio$%
a$= 6ue e$ta bien e$crito !i-ercer!acro% en la 6ue u$amo$ la t3cnica denominada de HcamelloH%
creo 6ue e$ ba$tante ob&io Ipor 6u3J% e$ta e$ la 1orma en 6ue de a6u= en adelante% e$cribir3 todo
mi c4di,o'
Supon,o 6ue -a$ ido probando cada macro% I&erdadJ% $i no e$ a$=% a-ora e$ el
momento% pre$iona SF!T * ob$er&a mu* bien 6ue $ucede% I*aJ% e$ mu* $encilla la e:plicaci4n% *a
la -abr;$ deducido' >l 9"> H$oloH% e2ecuta la primer macro 6ue e$te en el m4dulo acti&o% a$= 6ue $i
2E E >l len,ua2e OOo .a$ic
tiene$ la$ tre$ macro$ 6ue -emo$ -ec-o% $olo $e e2ecutara la 6ue $e llama !i&Primer&!acro'
+laro% $i tiene$ como primer macro al,una otra% e$ta $er; la 6ue $e e2ecute' O cada &e/ 6ue trate$
de e2ecutar $olamente te mo$trara'
>n al,una$ di$tribucione$ #inu:% -e notado 6ue la macro 6ue $e e2ecuta al pre$ionar
F!% e$ la macro donde e$te el cur$or de e$critura en e$e momento% e$to me parece bien% pero
toda&=a no e$ta implementado en la di$tribuci4n o1icial' Para e2ecutar la macro 6ue 6uiera$% &e a la
barra de -erramienta$ * da un clic en el icono .eleccionar macro%
"el cuadro de dialo,o 6ue te mue$tra% e$co,e$ la macro 6ue de$ee$ * pre$iona el
bot4n #'ecutar'
+omo dir=a un buen ami,o -an$ina $i-% a-ora $i &emo$ lo 6ue 6ueremo$ &er<
Aprendiendo OOo .a$ic 25
O la tercera tambi3n<
Otra t3cnica para e2ecutar la macro 6ue $ea% e$ crear una primer macro 6ue $e llame
por e2emplo< +ruebas% *% de$de e$ta% HllamarH a la$ otra$% a$= 6uedar=an nue$tra$ macro$<
REM ***** BASIC *****
"u. 0'u%.as
M+/0'+(%'/Ma*'o
End "u.
"u. M+/0'+(%'/Ma*'o
,Iodo un *l>s+*o
MsgBox "Hola Mundo!"
End "u.
"u. M+/"%gunda/Ma*'o
,!lgo (as +n&%'%san&%
MsgBox "Hola =%na!"
End "u.
"u. M+I%'*%'Ma*'o
,5o Gu% Gu+%'as
MsgBox "??o Bas+* %s f>*+l @ d+9%'&+do"
End "u.
O e$to% e$ al,o 6ue tendr;$ 6ue dominar mu* bien% HllamarH a una macro de$de otra%
ob$er&a como e$ tan $encillo como e$cribir el nombre correcto de la macro 6ue de$eamo$
HllamarH'''
"u. 0'u%.as
M+/0'+(%'/Ma*'o
End "u.
Para llamar a la $e,unda macro $eria a$=<
"u. 0'u%.as
M+/"%gunda/Ma*'o
End "u.
Tu -ace$ la tercera' #o intere$ante% e$ 6ue puede$ HllamarH a m;$ de una macro%
de$de otra% por e2emplo'
2) E >l len,ua2e OOo .a$ic
"u. 0'u%.as
M+/0'+(%'/Ma*'o
M+/"%gunda/Ma*'o
End "u.
Otra 1orma de HllamarH a otra$ macro$% e$ u$ando la in$trucci4n Call% de la $i,uiente
manera% el re$ultado e$ el mi$mo<
"u. 0'u%.as
$all M+/0'+(%'/Ma*'o
$all M+/"%gunda/Ma*'o
End "u.
Se 6ue tendr=amo$ 6ue e$cribir el nombre de la macro a llamar para probar la 6ue
de$eamo$ cada &e/ 6ue la nece$itamo$% pero recuerda 6ue $olo e$ de prueba% adem;$% m;$
adelante% cuando aprendamo$ m;$ opcione$ de como declarar * u$ar macro$% &era$ 6ue e$te
ultimo m3todo de prueba$ e$ me2or 6ue el primero * 6ue e$to no$ $ir&e como a1irmaci4n de lo 6ue
dec=a el Sr' "e$carte$ -todo lo comple2o% puede di&idir$e en parte$ $imple$-
).1 Declarando y usando ,ariables
+ada &e/ 6ue pro,rame$ tu$ macros% recuerda el $i,uiente $encillo dia,rama<
Si anali/a$ cada pro,rama de computo 6ue u$a$% &era$ 6ue en ma*or o menor medida%
cumple el 1lu2o anterior% cada uno de e$to$ tre$ pa$o$ lo$ podemo$ di&idir en muc-o$ m;$% pero
e$a di&i$i4n tu mi$mo la ir;$ notando * de$,lo$ando con1orme pro1undice$ en e$te o cual6uier otro
len,ua2e% &eamo$ un $encillo e2emplo<
Solicitamo$ 6ue el u$uario capture $u nombre completo (>ntrada)
+ontamo$ el n?mero de letra$ (o palabra$) 6ue contiene (Proce$o)
Mo$tramo$ el re$ultado obtenido (5i$uali/aci4n)
A-ora% 6ue pa$a $i adem;$ del nombre $olicitamo$ 6ue capture $u 1ec-a de
nacimiento% tal &e/ podr=amo$ obtener adem;$ del n?mero de letra$ o palabra$<
>l d=a de la $emana en 6ue naci4
+uanto$ d=a$ lle&a &i&o
+uanto$ aKo$ tiene
+uanta$ &ocale$ tiene contiene el nombre
ISe te ocurren otra Lin1ormaci4nM 6ue pueda$ obtenerJ
Aprendiendo OOo .a$ic 27
Ob$er&a como con $olo do$ dato$% podemo$ obtener muc-a Lin1ormaci4nM% e$ta
$encilla ecuaci4n -ace la di1erencia entre un pro,rama e1iciente% de uno 6ue no lo e$% lo$ bueno$
pro,rama$% manipulan e1icientemente lo$ dato$ para darno$ Lin1ormaci4nM * entre el 1lu2o de lo$
dato$ a la Lin1ormaci4nM% e:i$ten do$ ente$ 6ue $on determinante$ para la calidad de la
in1ormaci4n obtenida% uno e$ la computadora% la cual% normalmente $olo pro&ee de L&elocidadM *
tu% el pro,ramador% 6ue pone toda $u inteli,encia% uno$ ma$ otro$ meno$% al $er&icio del proce$o
de con&ertir lo$ dato$ en Lin1ormaci4nM% 6ue como $abe$% e$ la 6ue permite tomar la$ deci$ione$'
No pien$e$ 6ue e$to* de$&ariando% todo e$te LrolloM lle&a un 1in% &eamo$ cual e$' "e
acuerdo a lo$ do$ dia,rama$ anteriore$% el inicio de toda LmacroM (o pro,rama)% e$ obtener lo$
dato$% *a $ea traerlo$ de al,?n lado o $olicitarlo$ al u$uario' @ecuerda 6ue primero -a* 6ue $aber
caminar para de$pu3$ correr% a$= 6ue no de$e$pere$ $i &e$ 6ue &amo$ al,o lento% pero e$to$
tema$ iniciale$ $on determinante$ para comprender todo lo 6ue &en,a de$pu3$' >ntonce$%
retomando el $encillo e2emplo con el 6ue empe/amo$ e$te capitulo% &amo$ a $olicitarle al u$uario
6ue no$ proporcione $u nombre% lo cual lo,raremo$ con la L1unci4nM InputBox% o2o con la palabra
L1unci4nM *a 6ue e$ importante% creo 6ue ca$i cual6uier per$ona 6ue u$a computadora$% $abe 6ue
una 1unci4n% LnormalmenteM% retorna un &alor% e$to e$ importante% no$ re,re$a un &alor% 6ue% en el
ca$o de nue$tra macro% tendremo$ 6ue poner en al,?n lu,ar para poder tenerla di$ponible * para
poder manipularla% el primer lu,ar donde tenemo$ 6ue aprender a ,uardar dato$% aun6ue $ea de
1orma temporal% e$ en memoria% por $upue$to% no en nue$tra memoria% $ino en la de la
computadora% en la llamada memoria @AM% para ello tendremo$ 6ue darle un nombre a una
porci4n de dic-a memoria% a e$ta porci4n 6ue e$tamo$ nombrando% le llamaremo$ L,ariableM% otra
&e/% recuerdalo bien L,ariableM% al,uno$ te:to$ tambi3n la nombran como LmarcadorM% pero lo m;$
com?n e$ llamarlo L,ariableM% preci$amente por 6ue $u &alor o contenido puede &ariar durante lo$
proce$o$ 6ue -a,a nue$tra macro% re$umiendo% lo$ dato$ 6ue obten,amo$ lo$ ,uardamo$
LtemporalmenteM en &ariable$% con lo cual tenemo$ e$ta primer $encilla ecuaci4n% 6ue iremo$
ampliando $e,?n &a*amo$ a&an/ando en nue$tro cur$o'
-ariable . Dato
5eamo$ un e2emplo de e$to% mo$trando el nombre de una no&ia 6ue tu&e'
"u. Mos&'a'=o(.'%
,!s+gna(os un 9alo' a una 9a'+a.l%
=o(.'% B "=+*ol% J+d(an"
,Mos&'a(os %l 9alo' d% la 9a'+a.l%
MsgBox =o(.'%
End "u.
Ob$er&a como en la linea'
Nombre = "Nicole Kidman"
2F E'1 "eclarando * u$ando &ariable$
>$tamo$ a$i,nando el LdatoM /0icole 1idman2% a la L&ariableM 0ombre, el nombre
de la$ &ariable$% al i,ual 6ue el nombre de la$ macro$% no pueden lle&ar e$pacio$ * no pueden
empe/ar con un n?mero% adem;$ de no poder lle&ar caractere$ e$peciale$% &eamo$ al,uno$
e2emplo$ de nombre$ de &ariable$<
"ireccion - +orrecto
Tele1ono2 - +orrecto
!ec-a"eNacimiento - +orrecto
+orreo electronico - 9ncorrecto (tiene un e$pacio)
(!a: - 9ncorrecto (inicia con n?mero)
c3=4? - 9ncorrecto (no $e permiten caractere$ e$peciale$)
+alle%Numero - 9ncorrecto (no $e permiten coma$ ni punto$)
+omo nota$te% $implemente con u$ar el nombre correcto de una &ariable% OOo .a$ic
-ace u$o de ella% e$ta 1orma de u$ar &ariable$ $e conoce como% Ldeclaraci4n impl=citaM% por 6ue al
a$i,narle un &alor por primera &e/ a una &ariable% el len,ua2e re$er&a el e$pacio en memoria para
$u u$o% pero (dicen 6ue $iempre -a* un pero)% e$ta 1orma de u$ar la$ &ariable$% no e$ nada
recomendable% con1orme tu$ macro$ $e -acen m;$ ,rande$ * comple2a$% el -acer u$o de la$
&ariable de e$ta 1orma $e &uel&e (* no e:a,ero) una &erdadera locura% en contra$te% e$ m;$
e1iciente * muc-o m;$ claro $i le dice$ al len,ua2e% de$de el inicio de tu macro% 6ue &ariable$ $on
la$ 6ue u$ara$ para 6ue re$er&e la memoria nece$aria% e$ta $e,unda 1orma de u$ar la$ &ariable$
$e denomina% Ldeclaraci4n e:pl=citaM% de e$ta 1orma% no$otro$ $omo$ lo$ 6ue le indicamo$ al
len,ua2e% 6ue &ariable$ $on la$ 6ue u$aremo$% -a* una palabra cla&e para ello% $e llama Dim * $u
u$o e$ mu* $encillo% a6u= el e2emplo'
"u. A%*la'ando1a'+a.l%s
,A%*la'a(os *ua&'o 9a'+a.l%s
A+( A+'%**+on
A+( I%l%fono2
A+( K%*ha=a*+(+%n&o
A+( Edad
,Mas *6d+go
End "u.
"e e$ta 1orma% con la in$trucci4n Dim% le e$tamo$ diciendo -o*e mi -ermano%
apartame un cac-ito de memoria 6ue $e llame Direccion para 6ue *o la u$e-% * e1ecti&amente%
el len,ua2e lo -ar; para no$otro$' Ob$er&a 6ue el nombre de la$ &ariable$ inmediatamente no$ da
una idea acerca del dato 6ue ,uardaremo$ en ella% en el ca$o de la &ariable Direccion%
normalmente ,uardara un te:to% en la &ariable FechaNacimiento una 1ec-a * en la &ariable
Edad un n?mero% de la 1orma como e$t;n declarada$ la$ &ariable$% $e puede ,uardar cual6uier
LtipoM de dato (te:to% numero% 1ec-a% etc) en ella% por e$o% a e$te tipo de &ariable$ $e le conoce
como Larian!M% &eamo$lo con un e2emplo'
"u. 1a'+a.l%sI+8o1a'+an&
A+( DnAa&o
DnAa&o B "Es&o %s un &%x&o" ,Eua'da(os un &%x&o
MsgBox DnAa&o
DnAa&o B 12345678 ,Eua'da(os un nu(%'o
MsgBox DnAa&o
DnAa&o B "15/01/1974" ,Eua'da(os una f%*ha
MsgBox DnAa&o
End "u.
Aprendiendo OOo .a$ic 2G
#a recomendaci4n e$ 6ue% en &e/ de u$ar &ariable$ tipo L5ariantM% le indi6uemo$
e:plicitamente al len,ua2e 6ue tipo de dato$ ,uardaremo$ en una &ariable% para ello% $e u$a la
palabra cla&e As% 2unto con Dim * el tipo de &ariable% por e2emplo'
"u. A%*la'a*+onEx8l+*+&aA%1a'+a.l%s
A+( A+'%**+on !s "&'+ng ,1a'+a.l% &+8o &%x&o
A+( Edad !s #n&%g%' ,1a'+a.l% &+8o nu(%'o %n&%'o
A+( K%*ha !s Aa&% ,1a'+a.l% &+8o f%*ha
A+'%**+on B "0a'Gu% "an !nd'%s =L 14"
Edad B 32
MsgBox A+'%**+on
MsgBox Edad
End "u.
Un error 1recuente en pro,ramadore$ no&ele$% e$ declarar &ariable$ del $i,uiente
modo'
A+( =o(.'%7 0a&%'no7 Ma&%'no !s "&'+ng
Aparentemente% la$ tre$ &ariable$ anteriore$ $on de tipo te:to (Strin,)% pero no e$ a$=%
$olo la &ariable Materno e$ de e$te tipo% Nombre * Paterno $on de tipo &ariante (5ariant)% para 6ue
la$ tre$ $ean de tipo te:to (Strin,) tienen 6ue declarar$e del $i,uiente modo'
A+( =o(.'% !s "&'+ng7 0a&%'no !s "&'+ng7 Ma&%'no !s "&'+ng
A6u=% la li$ta completa del tipo de &ariable$ 6ue puede$ u$ar en OOo .a$ic<
Tipo Descripcin Valores que puede contener
"&'+ng
Te:to da$ta )5%5(5 caractere$
B@&%
>ntero >ntero$ entre 0 * 255
#n&%g%'
>ntero >ntero$ entre -(27)F * (27)7
5ong
>ntero lar,o >ntero$ entre -21E7EF()EF * 21E7EF()E7
"+ngl%
Simple$ Preci$i4n $imple * coma 1lotante ((%E02F2( : 10>(F a 1%E012GF :
10>-E5)'
Aou.l%
"oble$ Preci$i4n doble * coma 1lotante (1%7G7)G(1(EF)2(2 : 10>(0F a
E%GE0)5)E5FE12E7 : 10>-(2E)
$u''%n*@
Moneda M;:imo de 15 n?mero$ ante$ del $i,no decimal * cuatro de$pu3$
de 3l' Almacena &alore$ entre -G22((720()F5E77'5F0F *
RG22((720()F5E77'5F07
Bool%an
#4,ica Solo puede contener &alore$ True (&erdadero) o !al$e (1al$o)
Aa&%
!ec-a "e$de el 01-mar-200 al (1-dic-GGGG
1a'+an&
5ariante +ual6uier &alor% tipo de declaraci4n predeterminado
?.)%*&
Ob2eto Para -acer re1erencia$ a ob2eto$
(0 E'1 "eclarando * u$ando &ariable$
>$ importante 6ue recuerde$ 6ue $i $obrepa$a$ e$to$ &alore$% $e ,enerar; un error
en tiempo de e2ecuci4n 6ue $e llama LdesbordamientoM el cual 6ue aprenderemo$ a controlar m;$
adelante'
5eamo$ e$te nue&o e2emplo de una macro% a$e,?rate de tran$cribirla tal cual o me2or
aun% puede$ copiarla'
"u. Aa(%Iu=o(.'%
A+( =o(.'% !s "&'+ng
,?&'a d% (+s no9+as
=o(.'% B "M+'anda ?&&o"
MsgBox =o(.'%s
End "u.
Ieue pa$a al e2ecutarlaJ% e1ecti&amente% no no$ mue$tra nada en el cuadro de
men$a2e% e$to e$ por 6ue% para el len,ua2e% la &ariable Nombre% e$ di1erente de la &ariable
Nombres * a la &ariable Nombres no le -emo$ a$i,nado nin,?n &alor toda&=a% a pe$ar de 6ue en
e$te e2emplo e$ ba$tante e&idente nue$tro error (una pe6ueKa Ls2 de di1erencia)% cuando $e
pro,rama * -ace$ u$o de una$ cuanta$ decena$ de &ariable$ declarada$% e$to no e$ tan e&idente
a $imple &i$ta% para minimi/ar e$te tipo de errore$% e:i$te una in$trucci4n 6ue no$ a*uda a ello%
"#!ion Ex#lici!% 6ue no$ obli,a a declarar con la in$trucci4n Dim% cual6uier &ariable ante$ de
u$arla% e$ta in$trucci4n% cuando $e u$e% debe -acer$e como primer linea de cual6uier modulo ($olo
una &e/ por modulo)% de modo 6ue nue$tra anterior macro 6uedara a$='
?8&+on Ex8l+*+&
"u. Aa(%Iu=o(.'%
A+( =o(.'% !s "&'+ng
,?&'a d% (+s no9+as
=o(.'% B "M+'anda ?&&o"
MsgBox =o(.'%s
End "u.
5uel&e a e2ecutar e$ta macro * ob$er&a 6ue pa$a% a$= e$% no$ mue$tra el $i,uiente
men$a2e'
+omo &e$ el men$a2e e$ mu* claro< -ariable no de3inida% e$ decir% no -emo$ u$ado
la in$trucci4n Dim para declararla% adem;$% ob$er&a en la ima,en (el $ubra*ado ro2o)% 6ue el -/&
no$ indica con una 1lec-a la l=nea donde ocurri4 el error% a$= 6ue% otra recomendaci4n 6ue tiene$
6ue tomar como re,la -$iempre u$a %ption E'plicit al pro,ramar-% u$ando e$ta in$trucci4n te
&ol&er;$ un poco meno$ loco cuando bu$6ue$ Ipor 6u3J no 1unciona tu macro% ma$ adelante
&eremo$ 6ue otra$ -erramienta$ implementa el -/& para a*udarno$ con la locali/aci4n de errore$
* la depuraci4n de nue$tra$ macro$'
Aprendiendo OOo .a$ic (1
>l inicio de e$te tema% mencion;bamo$ 6ue una macro (o pro,rama)% empie/a con la
$olicitud de al,?n dato al u$uario (,eneralmente)% tambi3n &e=amo$ 6ue e$te dato o dato$ $e
,uardan temporalmente en &ariable$ (,eneralmente)% la in$trucci4n b;$ica para ello era'
-ariable . Dato
* como e2emplo mo$tramo$'
"u. Mos&'a'=o(.'%
,!s+gna(os un 9alo' a una 9a'+a.l%
=o(.'% B "=+*ol% J+d(an"
,Mos&'a(os %l 9alo' d% la 9a'+a.l%
MsgBox =o(.'%
End "u.
#o cual 1unciona% pero no e$ mu* &er$;til 6ue di,amo$% e$ decir% $iempre no$
mo$trara el mi$mo nombre% 6ue aun6ue bello% creo 6ue terminara por can$arno$' #a $e,unda
&ariante 6ue &eremo$ para a$i,narle un &alor a una &ariable * 6ue $er&ir; como pre;mbulo para
lo$ $i,uiente cap=tulo$ e$ la $i,uiente'
-ariable . Funcin
>n donde Funcin% e$ cual6uier in$trucci4n 6ue no$ LretorneM un &alor% &eamo$ un
e2emplo de la 1unci4n -nputBo+'
"u. M+=o(.'e
A+( =o(.'% !s "&'+ng
=o(.'% B #n8u&Box2"M$ual %s &u no(.'%N"3
MsgBox =o(.'%
End "u.
Al e2ecutar% te tendr; 6ue mo$trar el $i,uiente cuadro de dialo,o<
O al e$cribir tu nombre * dar clic en Aceptar% te mo$trara lo 6ue -a*a$ e$crito'
Para cerrar el circulo% * comprobar 6ue $i 1unciona el primer dia,rama de e$te
capitulo% L"a*amos al*oM con el dato% &eamo$ cuanta$ letra$ tiene% e$to lo lo,ramo$ con la
1unci4n Len% 6ue no$ dice cuanto$ caractere$ tiene una cadena% entonce$% nue$tra macro
completa 6uedar=a a$=<
(2 E'1 "eclarando * u$ando &ariable$
"u. M+=o(.'%
A+( =o(.'% !s "&'+ng
A+( =u(%'oA%5%&'as !s #n&%g%'
=o(.'% B #n8u&Box2 "M$ual %s &u no(.'%N" 3 ,En&'ada d% da&os
=u(%'oA%5%&'as B Len2 =o(.'% 3 ,0'o*%so d% da&os
MsgBox =u(%'oA%5%&'as ,1+sual+;a*+6n d% '%sul&ado
End "u.
Ob$er&a como $e cumple el 1lu2o del dia,rama mo$trado al inicio de e$te cap=tulo% $e
6ue e$ un ,ran $impli1icaci4n pero no$ e$ ba$tante ?til para nue$tro$ prop4$ito$'
Ni modo% no $e me ol&ida de2arte tarea<
Practica muc-o
9n&e$ti,a ma$ de la 1unci4n 9nput.o:'
Practica muc-o
).2 Instrucciones y 3unciones en %%o &asic
I@ecuerda$ 6ue mencionamo$ 6ue la$ palabra$ cla&e$ o re$er&ada$ de OOo .a$ic%
$e llaman a$= por 6ue $olo OOo .a$ic puede -acer u$o de ella$J% I&erdad 6ue lo recuerda$J% por
ello% no puede$ crear una macro 6ue $e llame MsgBox u "#!ion% tampoco puede$ declarar
&ariable$ con al,una de e$ta$ palabra$' >$ta$ palabra$ cla&e% la$ podemo$ di&idir en do$ ,rande$
,rupo$8 la$ in$truccione$ * la$ 1uncione$% 6ue% como primer apro:imaci4n a una de1inici4n ?til%
diremo$ 6ue<
4as instrucciones /"acen2 al*o
4as 3unciones /de,uel,en2 al*o
#a di1erencia entre una * otra% e$ crucial para el entendimiento * de$arrollo 4ptimo de
lo$ $i,uiente$ cap=tulo$' U$aremo$ una in$trucci4n 6ue *a conoce$% M$,.o:% para mo$trarte la$
di1erencia$ entre la$ in$truccione$ * la$ 1uncione$% pue$ e$ta palabra cla&e tiene la particularidad
de poder u$ar$e como una u otra dependiendo de nue$tra$ nece$idade$' 5eamo$ la $i,uiente
linea de c4di,o'
MsgBox "Es&o@ a8'%nd+%ndo ??o Bas+*"
>$tamo$ u$ando M$,.o: como una in$trucci4n% por 6ue e$ta L-aciendoM al,o%
I6ueJ% no$ mue$tra un men$a2e en pantalla% I6ue mue$traJ% el te:to% de a6u= en adelante Lcadena
de te:toM% 6ue le indicamo$ entre comilla$% e$ta cadena de te:to% recibe el nombre de Lpar;metroM
o Lar,umentoM% recuerdalo bien% recibe el nombre de Lar,umentoM' Ida$ probado a intentar
e2ecutar e$ta in$trucci4n $in nin,?n ar,umentoJ'
Aprendiendo OOo .a$ic ((
MsgBox
>1ecti&amente% el -/& no$ mue$tra el $i,uiente error'
O no$ $eKalara con la 1lec-a 6ue *a conoce$% la linea del error% en e$te ca$o% la linea
con la in$trucci4n MsgBox% con lo cual $e deduce 1;cilmente 6ue el ar,umento Mensaje% 6ue e$ de
tipo Lcadena de te:toM (o2o con e$to% lo$ ar,umento$% al i,ual 6ue la$ &ariable$% $on de un Ltipo de
datoM)% e$ nece$ario o re6uerido% e$ decir% no traba2ara mientra$ no lo incorporemo$ a la linea de
c4di,o% Inece$ita al,?n otroJ% no% con e$te ar,umento e$ m;$ 6ue $u1iciente para 6ue traba2e%
pero e$o $i% puede lle&ar m;$ ar,umento$% por e2emplo% prueba la $i,uiente l=nea de c4di,o *
ob$er&a el re$ultado'
MsgBox "Es&o@ a8'%nd+%ndo ??o Bas+*"7 16
O a-ora e$ta<
MsgBox "Es&o@ a8'%nd+%ndo ??o Bas+*"7 32
>ntonce$% $i 6uiere$ 6ue te mue$tre un icono con la $eKal de L$topM% debe$ de
a,re,arle un $e,undo ar,umento 6ue $e llama 5ipo% el cual% e$ un n?mero entero% para el primer
ca$o un 1) * para el icono de interro,aci4n ponemo$ un (2% e:i$ten otro do$ icono$ 6ue puede$
mo$trar% el icono de e:clamaci4n (EF) * el icono de in1ormaci4n ()E)% 6ue te mue$tro a6u=<
#a in$trucci4n MsgBox% tiene un tercer ar,umento opcional 6ue $e llama 5itulo% el
cual permite per$onali/ar el titulo del cuadro de dialo,o% 6ue como nota$ en la$ cuatro im;,ene$
(E E'2 9n$truccione$ * 1uncione$ en OOo .a$ic
anteriore$% toda$ dicen so33ice% compru3balo% nunca me crea$ completamente -a$ta no -aberlo
comprobado por ti mi$mo% para -acerlo% prueba la$ $i,uiente$ linea$ de c4di,o'
MsgBox "Es&o@ a8'%nd+%ndo ??o Bas+*"7 167 "#*ono d% "&o8"
MsgBox "Es&o@ a8'%nd+%ndo ??o Bas+*"7 327 "#*ono d% 8'%gun&a"
MsgBox "Es&o@ a8'%nd+%ndo ??o Bas+*"7 487 "#*ono d% %x*la(a*+6n"
MsgBox "Es&o@ a8'%nd+%ndo ??o Bas+*"7 647 "#*ono d% +nfo'(a*+6n"
O ob$er&a el re$ultado% en e$ta ca$o% $olo de la $e,unda linea<
+reo 6ue toda&=a manten,o tu con1ian/a% I&erdadJ% e$pero 6ue $i' Si,amo$' >$to$
$on lo$ tre$ ar,umento$ 6ue puede u$ar la in$trucci4n M$,.o:% Men$a2e% Tipo * Titulo% por lo cual%
la $inta:i$ completa * correcta de e$ta in$trucci4n e$<
MsgBox Mensaje As String, [Tipo As Integer], [Titulo As String6
#o importante a6u= e$ 6ue aprendas a distinguir la estructura o sinta+is de una
instruccin% ob$er&a como lo$ argumentos $e $eparan por coma$ * lo$ ar,umento$ opcionale$ $e
encierran entre corc-ete$% adem;$% * mu* importante% ob$er&a 6ue $e e$peci1ica el tipo de dato
6ue $e e$pera $e u$e en el ar,umento% e$to e$ mu* importante% pa$arle a un ar,umento un tipo de
dato 6ue no e$ el 6ue e$pera% puede producir errore$ o re$ultado$ impre&i$ible$'
@e,re$emo$ al ar,umento Tipo% * &eamo$ 6ue tambi3n podemo$ e$tablecer lo$
botone$ de comando 6ue 6ueramo$ $e mue$tren en el cuadro de dialo,o% a6u= e$ta la li$ta
completa de e$ta$ opcione$<
Argumento 0ipo Muestra los botones:
0 Mo$trar $4lo el bot4n Aceptar'
1 Mo$trar lo$ botone$ Aceptar * +ancelar'
2 Mue$tre lo$ botone$ +ancelar% @epetir * 9,norar'
( Mo$trar lo$ botone$ S=% No * +ancelar'
E Mo$trar lo$ botone$ S= * No'
5 Mo$trar lo$ botone$ @epetir * +ancelar'
O una mue$tra'
MsgBox "Es&o@ a8'%nd+%ndo ??o Bas+*"7 27 "#ns&'u**+6n MsgBox"
Aprendiendo OOo .a$ic (5
+uando 6uiera$ mo$trar una combinaci4n de botone$ e icono$% $implemente
e$tablece el ar,umento 0ipo% como una $uma de lo$ &alore$ 6ue 6uiere$ mo$trar% la$ do$ linea$
$i,uiente$ $on e6ui&alente$<
MsgBox "Es&o@ a8'%nd+%ndo ??o Bas+*7 MGu+%'%s *on&+nua'N"7 4 C 327 "??o Bas+*"
MsgBox "Es&o@ a8'%nd+%ndo ??o Bas+*7 MGu+%'%s *on&+nua'N"7 367 "??o Bas+*"
eue no$ mo$trara'
O apue$to a 6ue *a te -ici$te la pre,unta intere$ante% Icomo $abemo$ 6ue bot4n e$
el 6ue pre$iono el u$uarioJ% la re$pue$ta e$ $encilla% u$aremo$ MsgBox pero a-ora% como 1unci4n%
para ello tiene$ 6ue recordar 6ue< una 1unci4n de&uel&e un &alor% el cual% para empe/ar%
,uardaremo$ en una &ariable% $e,undo8 la$ 1uncione$% al de&ol&er un &alor% tambi3n e$ de un tipo
e$peci1ico (Strin,% 9nte,er% etc)% por lo cual% e$ mu* importante 6ue la &ariable donde ,uardemo$ el
&alor $ea del Lmismo tipoM del &alor 6ue e$peramo$ no$ de&uel&a la 1unci4n' >n la$ 1uncione$% lo$
ar,umento$ 6ue lle&e la 1unci4n% &an $iempre entre par3nte$i$ *% como &an a$i,nada$ a una
&ariable% nece$itamo$ u$ar el $i,no i,ual% como re$ultado% la e$tructura completa de la 3uncin
MsgBox $eria<
Variable As Integer = MsgBox (Mensae As !tring" #$ipo As Integer%"
#$itulo As !tring%&
@ecordando% *a 6ue e$ mu* importante% 6ue la &ariable debe $er declarada del
mismo tipo del &alor 6ue e$peramo$ de&uel&a la 1unci4n% en e$te ca$o en e$peci1ico% la 1unci4n
MsgBox% de&uel&e un entero (9nte,er)% por lo 6ue la &ariable donde ,uarde$ el &alor de retorno
debe$ de declararla como tipo entera (9nte,er) * a$= para cada &alor de retorno de cada 1unci4n
6ue u$e$% por $upue$to% en la documentaci4n de OOo .a$ic% normalmente &iene e$peci1icado e$te
&alor de retorno para cada 1unci4n% o en $u de1ecto% e$pero me alcancen la$ ,ana$ de mo$trarte
toda$ la$ 1uncione$ 6ue u$a OOo .a$ic% e$pero 6ue $i' #o realmente importante% e$ 6ue aprenda$
a con$ultar e$ta documentaci4n% e$ decir% &iendo e$tructura$ como la$ 6ue te -e mo$trado% debe$
de $er capa$ de -acer u$o de cual6uier 1unci4n o in$trucci4n% $aber 6ue ar,umento$ nece$ita * de
6ue tipo% a$=% como $aber 6ue tipo de &alor de retorno tendr;$% en el ca$o de la$ 1uncione$'
5eamo$ el e2emplo anterior% completo% *a con $u &ariable de retorno'
"u. #ns&'u**+on%sOKun*+on%s23
A+( R%s8u%s&a !s #n&%g%'
R%s8u%s&a B MsgBox 2 "Es&o@ a8'%nd+%ndo ??o Bas+*7 MGu+%'%s *on&+nua'N"7 367 "??o Bas+*" 3
MsgBox R%s8u%s&a
End "u.
Por $upue$to% por a-ora% no &era$ muc-a di1erencia% te mo$trara el mi$mo cuadro de
dialo,o% pero la ,ran di1erencia% e$ 6ue en la &ariable Res#$es!a% tendremo$ el &alor del bot4n
6ue el u$uario -a*a pre$ionado% Icomo $aber cualJ * actuar en con$ecuencia% e$ tema de otro
() E'2 9n$truccione$ * 1uncione$ en OOo .a$ic
capitulo% a$= 6ue $i,ue le*endo% por a-ora% $olo te pa$o la li$ta completa de lo$ &alore$ 6ue puede
retornar la 1unci4n MsgBox%
1alor de retorno &l usuario presiono el botn
1 Aceptar
2 +ancelar
( +ancelar ($i ar,umento Tipo f 2)
E @epetir
5 9,norar
) S=
7 No
No crea$ 6ue e$ta mal la li$ta% el bot4n +ancelar% puede re,re$ar un &alor 2 o (%
dependiendo de con 6ue otro$ botone$ $e mue$tre'
>ntre m;$ cono/ca$ * domine$ la$ in$truccione$ * 1uncione$ de OOo .a$ic% m;$
r;pido * producti&o $er;$% pero recuerda 6ue no e$ nece$ario aprender$e de memoria todo e$to% lo
&erdaderamente importante e$ 6ue Laprendas a reconocer la sinta'is y estructura de cualquier
instruccin o 3uncin2% con e$to% el re$to e$ $olo con$ultar la documentaci4n del len,ua2e% la
a*uda del pro,rama o libro$ como e$te% 6ue $olo $on re1erencia% la l4,ica% lo importante *
rele&ante al pro,ramar% e$o% $olo $e lo,ra con la practica diaria% para -acer real lo 6ue dec=a "on
Ari$t4tele$% -$omo$ lo 6ue -acemo$ d=a con d=a% de modo 6ue la e:celencia no e$ un acto $ino un
-abito-
M;$ adelante aprenderemo$ a crear nue$tra$ propia$ in$truccione$ 6ue a6u=
llamaremo$ L$ubrutina$M * tambi3n nue$tra$ propia$ 1uncione$% pero para ello% no debe$ de tener
duda al,una de como $e u$an la$ 6ue incorpora OOo .a$ic'
O un nue&o capitulo -a lle,ado a $u 1in% no ol&ide$ de<
Practicar muc-o'
Prueba a combinar lo$ di1erente$ &alore$ del ar,umento 5ipo.
Practicar muc-o'
No debe$ de tener duda$% e$te tema e$ mu* importante para lo$ $i,uiente$
cap=tulo$'
). Constantes 7 Siempre lo mismo
demo$ &i$to como ,uardar un dato temporalmente en una &ariable% pero -abr;
oca$ione$% 6ue un &alor $er; con$tante durante toda la e2ecuci4n de una macro% el u$o de
con$tante$ e$ mu* $encillo * no$ e&ita tener 6ue e$tar recordando &alore$ e$pec=1ico$% otro &alor
a,re,ado de la$ con$tante$% e$ 6ue% $i e$ta lle,a a cambiar% $olo tenemo$ 6ue cambiar $u &alor
una &e/ en la $ecci4n donde la declaramo$'
Aprendiendo OOo .a$ic (7
Para declarar una con$tante% u$amo$ la palabra cla&e Cons! de la $i,uiente manera<
$ons& # B 100
Aun6ue lo m;$ recomendable% e$ tambi3n e$tablecer el tipo de con$tante<
$ons& 0# !s "+ngl% B 3-1416
>$ una practica com?n en lo$ pro,ramadore$% declarar la$ con$tante$ con
MAOUS+U#AS% aun6ue e$to no e$ una re,la% te encontrara$ mu* $e,uido con e$ta 1orma de
declarar con$tante$' Un buen e2emplo del u$o de con$tante$% e$ $u$tituir el u$o de lo$ entero$ en
el ar,umento 0ipo de la in$trucci4n MsgBox% &i$to en el capitulo anterior% &eamo$ como<
$ons& #$?=?/0REED=I! !s #n&%g%' B 32
$ons& B?I?=E"/"#=? !s #n&%g%' B 4
MsgBox "Es&o@ a8'%nd+%ndo ??o Bas+*"7 #$?=?/0REED=I! C B?I?=E"/"#=?7 "??o Bas+*"
Para nombrar a la$ con$tante$% aplican la$ mi$ma$ re,la$ &i$ta$ para nombrar a la$
macro$ * a la$ &ariable$% por lo 6ue no la$ repetiremo$ a6u=' "ependiendo del tamaKo de tu
pro*ecto% e$ una buena practica de pro,ramaci4n% u$ar un modulo ?nico para declarar &ariable$ *
con$tante$% pero a 1in de cuenta$ tu ,u$to * criterio $on lo$ 6ue mandan'
).) &i3urcaciones 7 5omando decisiones
ITe -a$ pue$to a pen$ar cuanta$ deci$ione$ toma$ al d=aJ% la &ida e$ta -ec-a de
deci$ione$% o e$o dicen% * en la$ macro$ no no$ $al&amo$ de ella$% ca$i $iempre -a* 6ue e$tar
decidiendo al,o * en de acuerdo a e$ta deci$i4n tomamo$ uno u otro camino' A1ortunadamente en
OOo .a$ic e$ muc-o m;$ $encillo 6ue en la &ida% &eamo$ como -acerlo'
Un pre,unta importante< Ieuiere$ $er mi no&iaJ% $i dice 6ue LnoM I6ue -a,oJ% pero
6ue tal 6ue dice 6ue L$iM% pre,untemo$le'
?8&+on Ex8l+*+&

"u. =o9+os
A+( R%s8u%s&a !s #n&%g%'
R%s8u%s&a B MsgBox2 "MPu+%'%s s%' (+ no9+aN"7 32 C 47 "=o9+os" 3
MsgBox R%s8u%s&a
End "u.
+opia * e2ecuta la macro anterior * ob$er&a como ?nicamente e$tamo$ obteniendo la
in1ormaci4n del bot4n 6ue $elecciono el u$uario< un ) para el bot4n LSiM * un 7 para el bot4n LNoM%
de acuerdo a lo$ &alore$ mo$trado$ en la $ecci4n 2' A-ora% actuaremo$ en con$ecuencia%
dependiendo de la re$pue$ta% para ello te pre$ento una nue&a in$trucci4n 6ue te acompaKara
(F E'E .i1urcacione$ g Tomando deci$ione$
(e$ta $=) para el re$to de tu pro,ramaci4n' SeKora$ * $eKore$% con U$tede$% la in$trucci4n
I3...5"en...Else' 5eamo$ $u u$o'
"u. =o9+os2
A+( R%s8u%s&a !s #n&%g%'
,5a 8'%gun&a +(8o'&an&%
R%s8u%s&a B MsgBox2 "MPu+%'%s s%' (+ no9+aN"7 32 C 47 "=o9+os" 3
,E9alua(os la '%s8u%s&a7 '%*u%'da7 un 7 %s +gual =o
#f R%s8u%s&a B 7 Ih%n
MsgBox "A% lo Gu% &% 8+%'d%s"
End #f
End "u.
Ob$er&a 6ue $olo lo,ramo$ $aber cuando $e pre$ion4 el bot4n de LNoM% pero cuando
$e pre$iona el bot4n LSiM% $implemente no lo $abemo$% para $ol&entar e$to% modi1ica la macro
anterior o crea una nue&a con el $i,uiente c4di,o'
"u. =o9+os3
A+( R%s8u%s&a !s #n&%g%'
,5a 8'%gun&a +(8o'&an&%
R%s8u%s&a B MsgBox2 "MPu+%'%s s%' (+ no9+aN"7 32 C 47 "=o9+os" 3
,E9alua(os la '%s8u%s&a7 '%*u%'da7 un 7 %s +gual =o
#f R%s8u%s&a B 7 Ih%n
MsgBox "A% lo Gu% &% 8+%'d%s"
Els%
,$ualGu+%' o&'o 9alo' d+f%'%n&% d%l Gu% s% %9al<a %n la *ond+*+6n
MsgBox "Pu% +n&%l+g%n&% %'%s"
End #f
End "u.
Notara$ al e2ecutar% 6ue a-ora $i $abemo$ cuando $e pre$ion4 cada uno de lo$
botone$ de nue$tro cuadro de dialo,o' "ebe$ de poner atenci4n a al,o importante% la in$trucci4n
Else% $i,ni1ica Lcual6uierM otro &alor o ca$o o condici4n% e$ decir% en nue$tro e2emplo% $i el &alor de
la &ariable /espuesta era 7% la e2ecuci4n continua en la l=nea inmediata% $i la &ariable tiene
Lcual6uierM otro &alor o condici4n% entonce$ -ace lo $e,undo% a6u= un e2emplo'
"u. A+aA%5a"%(ana
A+( A+a !s #n&%g%'
,"ol+*+&a' un nu(%'o d+ga(os %n&'% 1 @ 10
A+a B #n8u&Box2 "MPu% dHa Gu+%'%s sa.%' 21 a 103N" 3
#f A+a B 1 Ih%n
MsgBox "Es&% dHa %s Ao(+ngo"
Els%
MsgBox "Es&% dHa =? %s Ao(+ngo"
End #f
End "u.
Ob$er&a como L$olamenteM con el &alor de 1% e$ como $e no$ in1orma 6ue e$
"omin,o% cual6uier otro &alor no$ mue$tra el $e,undo men$a2e' Si 6ui$i3ramo$ $aber 6ue d=a de
la $emana corre$ponde a otro &alor% u$aremo$ una &ariante de la in$trucci4n I3...5"en...Else%
&eamo$ como'
"u. A+aA%5a"%(ana2
A+( A+a !s #n&%g%'
,"ol+*+&a' un nu(%'o d+ga(os %n&'% 1 @ 10
Aprendiendo OOo .a$ic (G
A+a B #n8u&Box2 "MPu% dHa Gu+%'%s sa.%' 21 a 103N" 3
#f A+a B 1 Ih%n
MsgBox "Es&% dHa %s Ao(+ngo"
Els%#f A+a B 2 Ih%n
MsgBox "Es&% dHa %s 5un%s"
Els%
MsgBox "=? s% Gu% dHa %s"
End #f
End "u.
"e e$ta manera% podemo$ -acer tanta$ comparacione$ como 6ueramo$% hTA@>Ai
completa la macro para 6ue no$ de todo lo$ d=a$ de la $emana * en ca$o de otro &alor no$ in1orme
6ue no e$ un d=a de la $emana' +omo pi$ta% puede$ u$ar tanto$ ElseI3 como 6uiera$'
@e$umiendo< la e$tructura ,eneral de la in$trucci4n I3...5"en...Else e$'
#f $?=A#$#?= Ih%n
,$6d+go s+ *ond+*+6n %s 9%'dad%'a
QEls%#f $?=A#$#?=/2 Ih%nR
,$6d+go s+ *ond+*+6n 2 %s 9%'dad%'a
QEls%R
,$ualGu+%' o&'o 9alo'
End #f
@ecuerda 6ue la$ opcione$ 6ue e$t;n entre corc-ete$ $on Lopcionale$M% no
nece$ariamente tiene$ 6ue u$arla$% pero &era$ 6ue ca$i $iempre a$= $er;' >n CON*)C)ON% puede
ir Lcual6uierM in$trucci4n $u$ceptible de $er e&aluada como &erdadera o 1al$a * puede $er tan
$encilla como la$ &i$ta$ -a$ta a-ora o comple2a como el $i,uiente e2emplo% 6ue por a-ora% no te
importe como e$ta con$truida% $ino tan $olo 6uiero mo$trarte un ca$o Ldi1erenteM de condici4n%
pero &era$ 6ue m;$ adelante aprenderemo$ a -acer'
Els%#f .olHa@$o(+llas B Kals% !nd 2s&'0ala.'a B "," ?' D$as%2s&'0ala.'a3 B "REM"3 Ih%n
Els%#f Es0ala.'a$la9%2s&'0ala.'a3 !nd .olHa@$o(+llas B Kals% Ih%n
@ecuerda% la condicin es cual.uier valor susceptible de evaluarse como verdadero
20rue3 o !also 24alse3% cuando nece$ite$ e&aluar m;$ de una condici4n% tiene$ 6ue relacionarla$
con operadore$ (nd (*) * %r (o) 6ue &eremo$ m;$ adelante'
5ol&iendo al e2emplo de lo$ d=a$ de la $emana% en oca$ione$% $obre todo cuando $e
compara la mi$ma &ariable &aria$ &ece$% e$ po$ible u$ar otra in$trucci4n de bi1urcaci4n% a-ora%
aprender;$ a u$ar Select...Case% &eamo$ un e2emplo'
"u. A+aA%5a"%(ana3
A+( A+a !s #n&%g%'
A+a B #n8u&Box2 "MPu% dHa Gu+%'%s sa.%' 21 a 103N" 3
"%l%*& $as% A+a
$as% 1
MsgBox "Es&% dHa %s Ao(+ngo"
$as% 2
MsgBox "Es&% dHa %s 5un%s"
$as% 3
MsgBox "Es&% dHa %s Ma'&%s"
$as% 4
MsgBox "Es&% dHa %s M+S'*ol%s"
$as% Els%
E0 E'E .i1urcacione$ g Tomando deci$ione$
MsgBox "=? s% Gu% dHa %s"
End "%l%*&
End "u.
Ob$er&a 6ue 1;cil e$ e$ta in$trucci4n' Adem;$% puede u$ar &ario$ &alore$ a e&aluar
$epar;ndolo$ con una coma o ran,o$ de &alore$ 2unto con la palabra cla&e 5o% por e2emplo'
"u. A+aA%5a"%(ana4
A+( A+a !s #n&%g%'
A+a B #n8u&Box2 "MPu% dHa Gu+%'%s sa.%' 21 a 103N" 3
"%l%*& $as% A+a
,!GuH %9alua(os s+ %s s>.ado o do(+ngo
$as% 17 7
MsgBox "0o' f+n a d%s*ansa'"
,O aGuH s+ %s %n&'% s%(ana7 d% 5un%s a 1+%'n%s
$as% 2 Io 6
MsgBox "Pu% ho''o'7 dHa d% &'a.a)o"
$as% Els%
MsgBox "=? s% Gu% dHa %s"
End "%l%*&
End "u.
I5erdad 6ue e$ 1;cilJ Al i,ual 6ue con la in$trucci4n I3...5"en...Else% la$ condicione$
a e&aluar puede $er mu* $encilla o comple2a% pero la$ do$% $on el pan nue$tro de cada d=a en la
pro,ramaci4n% a$= 6ue% tenla$ $iempre a la mano'
).! &ucles 7 8epitelo otra ,e9
>n oca$ione$ (de -ec-o% mu* $e,uido) e$ nece$ario reali/ar el mi$mo pa$o una *
otra &e/% e$ decir% nece$itamo$ repetir blo6ue$ de c4di,o la$ &ece$ 6ue 6ueramo$ o cuando (o
-a$ta) 6ue $e cumpla una condici4n e$peci1ica' Para ello% &amo$ a conocer do$ nue&a$
e$tructura$ para -acer bucle$ o repeticione$% e$t;n $on< For...0e't * Do...4oop% &eamo$ e2emplo$
de cada una% te acuerda$ cuando te portaba$ mal * la mae$tra te de2aba e$cribir cien &ece$
-Ten,o 6ue portarme bien-% $i en e$o entonce$ -ubie$e $abido pro,ramar (* con$te 6ue cuando
iba a la primaria *a e:i$t=an la$ computadora$) le -ubie$e entre,ado a la mae$tra el $i,uiente
c4di,o'
?8&+on Ex8l+*+&
"u. 0o'&a's%B+%n
A+( $on&ado' !s #n&%g%'
,#n+*+a %l *on&ado' *on los l+(+&%s %s8%*+f+*ados
Ko' $on&ado' B 1 Io 2
,Es&% %s %l *6d+go Gu% s% %)%*u&a %l nu(%'o d% 9%*%s
,%s8%*+f+*ado *on los l+(+&%s %n nu%s&'o *aso 2 9%*%s
MsgBox "I%ngo Gu% 8o'&a'(% .+%n"
Aprendiendo OOo .a$ic E1
=%x&
End "u.
Se 6ue e$ta mu* claro% pero me2or lo e:plicamo$ para 6ue no -a*a nin,una duda *
nin,?n prete:to de como aplicarlo m;$ adelante' Para -acer u$o de la e$tructura !or'''Ne:t% e$
nece$aria una &ariable de apo*o% para nue$tro ca$o% e$co,imo$ la &ariable +ontador% con
1recuencia te encontrara$ 6ue al,uno$ pro,ramadore$ u$an la letra 9% j * $ub$ecuente$ como
contadore$% pero tu ere$ libre$ de ele,ir * u$ar la &ariable 6ue m;$ te pla/ca% por e2emplo% la letra
M e$ mu* bonita% la . tambi3n e$ mu* linda' Ob$er&a 6ue $olo te mo$trara el men$a2e do$ &ece$%
6ue $on la$ indicada$ por el limite in1erior * $uperior del contador e$peci1icada$ con 1 To 2% no te
pu$e cien por 6ue tendr=a$ 6ue dar cien clic$ para terminar la macro% pero para e$tablecer &alore$
m;$ ,rande$% apro&ec-aremo$ para &er como L$umarM cadena$ de te:to% en pro,ramaci4n a la
L$umaM de cadena$ de te:to $e le conoce como LconcatenarM * no e$ otra co$a 6ue pe,ar cadena$
de te:to una con otra% por e2emplo'
"u. Iu=o(.'%
A+( =o(.'% !s "&'+ng
A+( !8%ll+do1 !s "&'+ng
A+( !8%ll+do2 !s "&'+ng
A+( =o(.'%$o(8l%&o !s "&'+ng
=o(.'% B #n8u&Box2 "M$ual %s &u =o(.'%N"3
!8%ll+do1 B #n8u&Box2 "M$ual %s &u 8'+(%' !8%ll+doN"3
!8%ll+do2 B #n8u&Box2 "MO %l s%gundoN"3
=o(.'%$o(8l%&o B =o(.'% C !8%ll+do1 C !8%ll+do2
MsgBox "Iu no(.'% *o(8l%&o %s4 " C =o(.'%$o(8l%&o
End "u.
Ob$er&a como $olicitamo$ el nombre * apellido * al 1inal lo mo$tramo$ en una $ola
l=nea de te:to% $i bien 1unciona con el operador R% e$ m;$ com?n u$ar el $=mbolo de amper$an (k)
como concatenador de cadena$ de te:to'
"u. Iu=o(.'%2
A+( =o(.'% !s "&'+ng
A+( !8%ll+do1 !s "&'+ng
A+( !8%ll+do2 !s "&'+ng
A+( =o(.'%$o(8l%&o !s "&'+ng
=o(.'% B #n8u&Box2 "M$ual %s &u =o(.'%N"3
!8%ll+do1 B #n8u&Box2 "M$ual %s &u 8'+(%' !8%ll+doN"3
!8%ll+do2 B #n8u&Box2 "MO %l s%gundoN"3
=o(.'%$o(8l%&o B =o(.'% : !8%ll+do1 : !8%ll+do2
MsgBox "Iu no(.'% *o(8l%&o %s4 " : =o(.'%$o(8l%&o
End "u.
Por $upue$to -abr;$ notado 6ue el nombre completo $ale todo pe,ado% te de2o de
tarea 6ue te 6uede mu* pre$entable * bonito' A-ora $i% podemo$ -acer nue$tro bucle m;$ ,rande%
probemo$ primero con 10'
"u. 0o'&a's%B+%n2
A+( $on&ado' !s #n&%g%'
A+( I%x&o !s "&'+ng
E2 E'5 .ucle$ g @epitelo otra &e/
Ko' $on&ado' B 1 Io 10
I%x&o B I%x&o : "I%ngo Gu% 8o'&a'(% .+%n"
=%x&
MsgBox I%x&o
End "u.
@;pido pero no no$ ,u$ta todo el te:to 2unto% I&erdadJ' Para me2orarlo un poco% le
a,re,aremo$ un $aldo de l=nea al 1inal de cada una% a$='
"u. 0o'&a's%B+%n3
A+( $on&ado' !s #n&%g%'
A+( I%x&o !s "&'+ng
Ko' $on&ado' B 1 Io 10
I%x&o B I%x&o : "I%ngo Gu% 8o'&a'(% .+%n" : $h'2133
=%x&
MsgBox I%x&o
End "u.
I@ecuerda$ como dec=a mi ami,oJ -an$ina $i-'
IO 6ue te parecer=a $i lo me2oramo$ a,re,;ndole el n?mero a cada l=neaJ<
"u. 0o'&a's%B+%n4
A+( $on&ado' !s #n&%g%'
A+( I%x&o !s "&'+ng
Ko' $on&ado' B 1 Io 10
I%x&o B I%x&o : $on&ado' : "-T I%ngo Gu% 8o'&a'(% .+%n" : $h'2133
=%x&
MsgBox I%x&o
End "u.
Aprendiendo OOo .a$ic E(
Muc-o me2or% Ino cree$J' #o$ limite$ in1erior * $uperior no nece$ariamente tienen
6ue $er po$iti&o$<
Ko' $on&ado' B T5 Io 5
Tampoco tienen por 6ue ir de uno en uno% cuando podemo$ ir de do$ en do$% de tre$
en tre$ o en el ran,o 6ue nece$itemo$'
"u. 0o'&a's%B+%n5
A+( $on&ado' !s #n&%g%'
A+( I%x&o !s "&'+ng
Ko' $on&ado' B 1 Io 20 "&%8 2
I%x&o B I%x&o : $on&ado' : "-T I%ngo Gu% 8o'&a'(% .+%n" : $h'2133
=%x&
MsgBox I%x&o
End "u.
>$to $e e$ta poniendo di&ertido' Por $upue$to ob$er&a$te 6ue le a,re,amo$ un
ar,umento a la in$trucci4n% en e$te ca$o Step% para indicarle 6ue $alto 6ueremo$ * e$te $alto no
nece$ariamente tiene 6ue $er ni entero% ni po$iti&o% o2o% muc-o o2o con e$to'
Ko' $on&ado' B 100 Io 10 "&%8 T10
O a6u= te lo de2o para 6ue -a,a$ toda$ la$ prueba$ 6ue 6uiera$ * no$ la$ cuente$ en
el 1oro o li$ta de correo' #a $i,uiente macro tiene un pe6ueKo error% tu tarea e$ indicarme cual e$%
en el capitulo de &ariable$ puede$ encontrar a*uda'
"u. 0o'&a's%B+%n6
EE E'5 .ucle$ g @epitelo otra &e/
A+( $on&ado' !s B@&%
A+( I%x&o !s "&'+ng
Ko' $on&ado' B 1 Io 256 "&%8 1
I%x&o B I%x&o : $on&ado' : "-T I%ngo Gu% 8o'&a'(% .+%n" : $h'2133
=%x&
MsgBox I%x&o
End "u.
+omo ultimo comentario de e$ta in$trucci4n% puede$ u$ar de$pu3$ de la palabra
cla&e 0e't% el mi$mo nombre de la &ariable 6ue e$te u$ando como contador% por e2emplo'
Ko' $on&ado' B 10 Io 100 "&%8 5
&A'$( a c)digo
=%x& $on&ado'
>$to e$ $umamente ?til cuando tiene$ &ario$ bucle$ de repetici4n anidado$% muc-a$
&ece$ el u$o de la $an,r=a e$ $u1iciente para di$tin,uir uno$ de otro$% pero en otra$ oca$ione$%
$obre todo cuando -a* muc-a$ l=nea$ de c4di,o entre ello$% e$ un poco comple2o $aber donde
termina uno% claro 6ue el 9"> de indica $i 1alta al,uno% pero no e$ta de m;$ como a*uda% a 1in de
cuenta$% de nue&o% t? * $olo t?% decidir;$ $i lo u$a$ o no% 6ue de e$o $e trata la libertad'
"u. Bu*l%s!n+dados
A+( *o1 !s #n&%g%'7 *o2 !s #n&%g%'
Ko' *o1 B 1 Io 5
Ko' *o2 B 1 Io 10
=%x& *o2
=%x& *o1
End "u.
A-ora $i% de La de&era$M para 1inali/ar% recuerda bien la e$tructura de e$ta
in$trucci4n'
Ko' 1a'+a.l% B #n+*+o Io K+n Q"&%8 "al&oR
,*od+go
QEx+& Ko'R
=%x& Q1a'+a.l%R
O recuerda 6ue lo 6ue e$ta entre corc-ete$ e$ opcional' Ob$er&a 6ue deba2o de la
linea de comentario% -a* una in$trucci4n 6ue no -emo$ &i$to% $e trata de< E'it For% e$ta no$ $ir&e
para $alir anticipadamente de un ciclo !or'''Ne:t% e$ decir en el momento 6ue 6uiera$% &eamo$ un
e2emplo di&ertido de $u u$o'
?8&+on Ex8l+*+&
"u. Dsando/Ex+&/Ko'23
A+( *o1 !s #n&%g%'
A+( s5%&'a !s "&'+ng
A+( s1o*al%s !s "&'+ng
A+( s$onsonan&%s !s "&'+ng
Ko' *o1 B 1 Io 100
Aprendiendo OOo .a$ic E5
s5%&'a B $h'2 Rnd23 25 C 65 3
"%l%*& $as% s5%&'a
$as% "!"7 "E"7 "#"7 "?"7 "D"
s1o*al%s B s1o*al%s : " " : s5%&'a
$as% """
Ex+& Ko'
$as% Els%
s$onsonan&%s B s$onsonan&%s : " " : s5%&'a
End "%l%*&
=%x&
MsgBox "El *+*lo &%'(+no %n4 " : *o1 : $h'2133 : $h'2133 : /
"1o*al%s4 " : s1o*al%s : $h'2133 : /
"$onsonan&%s4 " : s$onsonan&%s7 07 "E)%(8lo Ex+& Ko'"
End "u.
#a 1unci4n +-r(&alor) no$ de&uel&e el car;cter AS+99 corre$pondiente -a dic-o &alor%
la letra A tiene un &alor de )5 * la letra l tiene un &alor de G0% por ello e$ 6ue con la l=nea
s5%&'a B $h'2 Rnd23 25 C 65 3
Obtenemo$ un &alor aleatorio entre )5 * G0 * +-r no$ de&uel&e dic-a letra% de$pu3$
e&aluamo$ $i e$ una &ocal% $i e$ la letra S o $i e$ una con$onante% $olo en el ca$o de 6ue la letra
de&uelta $ea una S (de Salida)% el ciclo !or'''Ne:t $e interrumpe * $ale con E'it For% al 1inal%
mo$tramo$ el &alor del contador para $aber $i termino el ciclo o $alio ante$% e$ mi$ prueba$
curio$amente $alio &aria$ &ece$ en 1 * lo m;:imo 1ue GF% e$ decir% nunca termino el ciclo% *a me
contara$ como te &a a ti con tu$ prueba$' Al tipo de ciclo u$ado en !or''Ne:t% al,uno$ autore$ le
llama LdeterminadoM pue$ $abemo$ donde empie/a * donde termina% -a* otro tipo de ciclo$
llamado$ Lindeterminado$M% pue$ dependen de una o una$ condicione$ para empe/ar o terminar el
ciclo% &eamo$ cuale$ $on'
#a in$trucci4n Do...4oop% tambi3n no$ $ir&e para -acer repeticione$% pero en &e/ de
u$ar un contador% $e u$a una condici4n para $aber cuando terminar un bucle e inclu$o cuando
empie/a o tal &e/ nunca empe/ar' +omo creo 6ue e$ m;$ claro con e2emplo$% a ello$ no$
atenemo$'
"u. Aa(%Iu=o(.'%
A+( =o(.'% !s "&'+ng
Ao
=o(.'% B #n8u&Box2 "M$ual %s &u =o(.'%N"3
5oo8 Uh+l% =o(.'% B "V
End "u.
Analicemo$ l=nea por l=nea la macro anterior'
"u. Aa(%Iu=o(.'% ,#n+*+a(os la (a*'o
A+( =o(.'% !s "&'+ng ,A%*la'a(os una 9a'+a.l% d% &%x&o
Ao ,#n+*+a(os %l .u*l%
=o(.'% B #n8u&Box2 "M$ual %s &u =o(.'%N"3 ,"ol+*+&a(os un 9alo'7 %n %s&% *aso un no(.'%
5oo8 Uh+l% =o(.'% B "" ,$on&+nua(os %l .u*l% WmientrasV la *ond+*+6n s%a 1ERA!AER!
E) E'5 .ucle$ g @epitelo otra &e/
End "u. ,K+nal+;a(os la (a*'o
dabr;$ notado 6ue de e$ta 1orma% 1or/amo$ al u$uario a e$cribir un &alor en el
cuadro de dialo,o% $i bien e$ po$ible% recuerda 6ue e$ de$eable% proporcionar ca$i $iempre una
1orma de cancelar o interrumpir el bucle% para probar una primer alternati&a para ello% no$
apo*aremo$ en una e$tructura *a &i$ta'
"u. Aa(%Iu=o(.'%2
A+( =o(.'% !s "&'+ng
A+( R%s8u%s&a !s #n&%g%'
Ao
=o(.'% B #n8u&Box2 "M$ual %s &u =o(.'%N" 3
#f =o(.'% B "" Ih%n
R%s8u%s&a B MsgBox2 "!l 8a'%*%' no %s*'+.+s&% nada7 M'%al(%n&% Gu+%'%s sal+'N"7 32 C 47
""al+'" 3
,R%*u%'da Gu% un 6 s+gn+f+*a Gu% %l usua'+o 8'%s+ono %l .o&6n "#
#f R%s8u%s&a B 6 Ih%n
,Es&a.l%*%(os la 9a'+a.l% *on *ualGu+%' *osa 8a'a Gu% &%'(+n% %l .u*l%
=o(.'% B "*ualGu+%' *osa"
End #f
End #f
5oo8 Uh+l% =o(.'% B ""
End "u.
@ecuerda $iempre de ir probando el c4di,o' Parece 6ue 1unciona bien la macro
anterior% pero -a* una $imple 1orma de Len,aKarlaM% prueba a introducir puro$ e$pacio$ * &era$
6ue $ale inmediatamente% para $ub$anar e$te incon&eniente% -aremo$ u$o de una 1unci4n
inte,rada en OOo .a$ic 6ue no$ $ir&e para eliminar lo$ e$pacio$ &ac=o$ al inicio * al 1inal de una
cadena% te pre$ento a la in$trucci4n 5rim% 6ue $e u$a de la $i,uiente 1orma'
"u. Aa(%Iu=o(.'%3
A+( =o(.'% !s "&'+ng
A+( R%s8u%s&a !s #n&%g%'
Ao
=o(.'% B #n8u&Box2 "M$ual %s &u =o(.'%N" 3
Nombre = Trim( Nombre )
#f =o(.'% B "" Ih%n
R%s8u%s&a B MsgBox2 "!l 8a'%*%' no %s*'+.+s&% nada7 M'%al(%n&% Gu+%'%s sal+'N"7 32 C 47
""al+'" 3
,R%*u%'da Gu% un 6 s+gn+f+*a Gu% %l usua'+o 8'%s+ono %l .o&6n "#
#f R%s8u%s&a B 6 Ih%n
,Es&a.l%*%(os la 9a'+a.l% *on *ualGu+%' *osa 8a'a Gu% &%'(+n% %l .u*l%
=o(.'% B "*ualGu+%' *osa"
End #f
End #f
5oo8 Uh+l% =o(.'% B ""
End "u.
A-ora $=% 1unciona me2or% I$e te ocurren m;$ alternati&a$ por Lpre&erM o me2orarJ% lo
$iento% e$a e$ tu tarea' Para continuar% &eremo$ una &ariante de e$ta e$tructura 6ue no$ permite
in&ertir la l4,ica de la condici4n% &eamo$ como'
"u. Aa(%Iu=o(.'%4
A+( =o(.'% !s "&'+ng
Aprendiendo OOo .a$ic E7
Ao
=o(.'% B #n8u&Box2 "M$ual %s &u =o(.'%N"3
5oo8 ntil =o(.'% XY ""
End "u.
Se mu* atento% ob$er&a como a-ora le decimo$ L"astaM (con la in$trucci4n :ntil% en
ne,rita$) 6ue la &ariable Nombre% $ea Ldi1erenteM de &ac=a% e$ decir% conten,a al,o' Tambi3n% nota
6ue la condici4n tiene 6ue $e,uir $iendo &erdadera para 6ue el bucle termine% lo 6ue -icimo$ 1ue
cambiar un ar,umento * el operador de la condici4n' A-ora% la macro completa% con ,alidacin *
todo% o2o% recuerda e$ta palabra mu* bien% ,alidacin% e$ el pan nue$tro de cada d=a al pro,ramar'
"u. Aa(%Iu=o(.'%5
A+( =o(.'% !s "&'+ng
A+( R%s8u%s&a !s #n&%g%'
Ao
=o(.'% B #n8u&Box2 "M$ual %s &u =o(.'%N"3
=o(.'% B I'+(2 =o(.'% 3
#f =o(.'% B "" Ih%n
R%s8u%s&a B MsgBox2 "!l 8a'%*%' no %s*'+.+s&% nada7 ZM'%al(%n&% Gu+%'%s sal+'N"7 32 C
47 ""al+'" 3
,R%*u%'da Gu% un 6 s+gn+f+*a Gu% %l usua'+o 8'%s+ono %l .o&6n "#
#f R%s8u%s&a B 6 Ih%n
,Es&a.l%*%(os la 9a'+a.l% *on *ualGu+%' *osa 8a'a Gu% &%'(+n% %l .u*l%
=o(.'% B "*ualGu+%' *osa"
End #f
End #f
5oo8 Dn&+l =o(.'% XY ""

End "u.
Tal &e/% con 2u$ta ra/4n% te pre,untara$% Ipor6ue do$ 1orma$ de -acer lo mi$moJ'
@ecuerda 6ue no todo$ tenemo$ el mi$mo modo de Lra/onarM% a lo$ 1undamentali$ta$ de cual6uier
e:tremo * color $e le$ reconoce 1;cilmente por $u Lpen$amientoM uni1orme * ne,aci4n a &er otro o
al otro' >n ca$i todo * m;$ en la pro,ramaci4n% -a* m;$ de una 1orma de -acer la$ co$a$% e$ ca$i
$e,uro 6ue una$ $e adaptaran r;pidamente a tu 1orma de ra/onar% otra$ no% pero al -aber &aria$
manera$ de re$ol&er el mi$mo problema% la cue$ti4n $e enri6uece% a$= 6ue la pr4:ima &e/ 6ue
e$t3$ pronto a pre2u/,ar% detente un momento * trata de entender la 1orma Ldi1erenteM de ra/onar
del otro% tal &e/% $ea un buen momento para ampliar tu$ -ori/onte$'
O -ablando de &ariedad% ob$er&a como la$ do$ &ariante$ de la e$tructura &i$ta%
e2ecuta el c4di,o entre Do..4oop% al meno$ una &e/' dabr; oca$ione$ en 6ue nece$itemo$ o
6ueramo$ 6ue no $e e2ecute ni una $ola &e/% Ipor e2emploJ% ima,ina 6ue para entrar en el bucle%
nece$itamo$ 1or/o$amente 6ue $e cumpla una condici4n' Para -acer e$to% $implemente pa$amo$
la in$trucci4n al inicio de la e$tructura% de la $i,uiente 1orma'
"u. Aa(%Iu=o(.'%6
A+( =o(.'% !s "&'+ng
A+( 5+s&a !s "&'+ng
,"ol+*+&a(os un da&o
=o(.'% B #n8u&Box2 "MAa(% un =o(.'%N"3
,5% Gu+&a(os los %s8a*+os so.'an&%s al +n+*+o @ al f+nal
=o(.'% B I'+(2 =o(.'% 3
,#n+*+a(os %l .u*l%7 s+ la 9a'+a.l% %s d+f%'%n&% d% 9a*Ha
Ao Uh+l% =o(.'% XY ""
EF E'5 .ucle$ g @epitelo otra &e/
,Ko'(a(os una l+s&a d% los no(.'%s +n&'odu*+dos
5+s&a B 5+s&a : " T " : =o(.'%
,"ol+*+&a(os o&'o no(.'%
=o(.'% B I'+(2 #n8u&Box2 "MAa(% o&'o =o(.'%N"3 3
5oo8
,"+ la l+s&a *on&+%n% algo lo (os&'a(os
#f 5+s&a XY "" Ih%n
MsgBox 5+s&a
End #f
End "u.
!;cil% I&erdadJ' A6u= nota la$ do$ 1orma$ en 6ue -acemo$ u$o de la in$trucci4n
Input&o'% la primera de 1orma directa * la $e,unda de 1orma anidada' Anidar 1uncione$% te debe
de re$ultar mu* 1amiliar $i ere$ un u$uario medio0a&an/ado de cual6uier -o2a de calculo%
conocimiento 6ue te re$ultara mu* ?til en pro,ramaci4n *a 6ue e$ mu* recurrida' O $=% pue$ -a*
tarea% la cual con$i$te en 6ue lo,re$ el mi$mo prop4$ito% pero con la palabra cla&e :ntil% en &e/ de
;"ile'
Para 1inali/ar e$te tema de lo$ bucle$% te mo$trare la in$trucci4n para 1inali/ar
anticipadamente un ciclo "o'''#oop% e$ta$ palabra$ cla&e $on< E'it Do * $e u$an de la $i,uiente
manera'
?8&+on Ex8l+*+&
"u. Dsando/Ex+&/Ao23
A+( s$la9% !s "&'+ng
A+( sI(8 !s "&'+ng
s$la9% B "(%llon"
Ao
sI(8 B I'+(2#n8u&Box2"Ha.la a(+go @ %n&'a"33
#f sI(8 B "(%llon" Ih%n
MsgBox "O s% a.'%n las 8u%'&as d% Mo'+a"
Ex+& Ao
End #f
5oo8 Dn&+l sI(8 B "sal+'"
End "u.
Ob$er&a como tenemo$ do$ 1ormar de terminar el bucle% una% la 6ue *a conoce$ en
la condici4n 1inal% * la otra% $i el u$uario e$cribe correctamente la palabra cla&e * $alimo$ con >:it
"o' 5en cuidado con los ciclos indeterminados% una condici4n mal planteada te puede de2ar
dentro de un ciclo in1inito'
Me creer;$ 6ue con lo$ elemento$ &i$to$ -a$ta a-ora% *a $e pueden -acer muc-a$
co$a$' >mpie/a a pen$ar en como automati/ar=a$ e$o$ pa$o$ tan repetiti&o$ * tedio$o$ 6ue a
&ece$ -ace$' Para ello% ten pre$ente $iempre en tu mente el dia,rama 6ue &imo$ en el capitulo
E'1% Lca$iM todo lo 6ue $e -ace en pro,ramaci4n re$ponde apro:imadamente bien a el% como dice
el dic-o -la practica -ace al mae$tro- * $olo la practica diaria te dar; el dominio de la -erramienta
para obtener de ella el me2or pro&ec-o% no te en*a<es% con $olo leer e$ta$ nota$ o cual6uiera otra
documentaci4n 6ue encuentre$ o ad6uiera$ (* te lo di,o por e:periencia) no e$ $u1iciente para 6ue
re$uel&a$ tu$ problema$ in1orm;tico$% muc-o meno$% 6ue te -a,a$ llamar pro,ramador% para
terminar e$te capitulo% recuerda lo 6ue dec=a un -ombre 6ue practicaba * e:perimentaba muc-o'
"El genio es 1% de inspiracin y 99% de transpiracin"
Thomas Alva Edison
Aprendiendo OOo .a$ic EG
).= Matrices 7 >untos pero no re,ueltos
>n el cual &eremo$ como manipular muc-o$ dato$ en una $ola &ariable% la$ matrice$
pueden $er de muc-a utilidad o con&ertir$e en un &erdadero ,alimatia$ $i no $e mane2an
correctamente% e$ importante 6ue aprenda$ a utili/arla$% pue$ muc-a$ e$tructura$ de
OpenO11ice'or, &ienen implementada$ en matrice$'
#a $inta:i$ m;$ $encilla para una matri/ e$ la $i,uiente<
"im NombreQMatri/( TamaKo A$ 9nte,er ) A$ Tipo
>n donde para Nombre&!atri0 tiene 6ue cumplir la$ mi$ma$ condicione$ 6ue para
nombrar la$ macro$ * la$ &ariable$ &i$ta$ anteriormente' TamaKo $e re1iere al n?mero de
elemento$ 6ue contendr; la matri/% en e$te ca$o% el indicarte 6ue $ea un tipo Inte*er (>ntero) e$
m;$ indicati&o 6ue re$tricti&o% -e -ec-o la prueba con &alore$ m;$ ,rande 6ue un Inte*er
(>ntero)% pero no me ima,ino una macro 6ue u$e tanto$ elemento$ * $i lo -a*% tal &e/ 6uiera decir
6ue e$ -ora de pa$ar a u$ar ba$e$ de dato$' No -e encontrado documentaci4n al re$pecto del
limite de e$te &alor% en mi$ prueba$ e$to* ca$i $e,uro 6ue e$ta condicionado m;$ por el limite de
la memoria @am del e6uipo donde $e e2ecute 6ue de otra cau$a' Te de2o a tu criterio% e:periencia
* prueba$% el limite de elemento$ a u$ar'
Te re$ultara mu* 1;cil pen$ar en la$ matrice$ con una li$ta de &alore$ en $u
pre$entaci4n m;$ $encilla% o en una tabla de 1ila$ * columna$ en la$ ma$ comple2a% por e2emplo%
lo$ d=a$ de la $emana% una $imple li$ta $er=a a$=<
!omingo
4unes
Martes
Mi>rcoles
.ue#es
Hiernes
(8$ado
Para ,uardar e$to en una matri/% $er=a a$='
"u. E)%(8lo/Ma&'+*%s123
A+( (+"%(ana263 !s "&'+ng
(+"%(ana203 B "Ao(+ngo"
(+"%(ana213 B "5un%s"
(+"%(ana223 B "Ma'&%s"
(+"%(ana233 B "M+S'*ol%s"
(+"%(ana243 B "[u%9%s"
(+"%(ana253 B "1+%'n%s"
(+"%(ana263 B "">.ado"
MsgBox (+"%(ana2 3 3
50 E') Matrice$ g junto$ pero no re&uelto$
End "u.
O ob$er&a 6ue con un $imple bucle% podemo$ acceder a toda la matri/'
"u. E)%(8lo/Ma&'+*%s223
A+( (+"%(ana263 !s "&'+ng
A+( *o1 !s #n&%g%'
(+"%(ana203 B "Ao(+ngo"
(+"%(ana213 B "5un%s"
(+"%(ana223 B "Ma'&%s"
(+"%(ana233 B "M+S'*ol%s"
(+"%(ana243 B "[u%9%s"
(+"%(ana253 B "1+%'n%s"
(+"%(ana263 B "">.ado"
Ko' *o1 B 0 Io 6
MsgBox (+"%(ana2 *o1 37 647 "Ioda la s%(ana"
=%x&
End "u.
Nota 6ue la matri/ empie/a en 0 (cero)% 6ue e$ la 1orma predeterminada% podemo$
1or/ar a 6ue la$ matrice$ empiecen en 1 (uno)% u$ando la palabra cla&e %ption &ase% de la
$i,uiente manera'
?8&+on Ex8l+*+&
?8&+on Bas% 1
"u. E)%(8lo/Ma&'+*%s323
A+( (+"%(ana273 !s "&'+ng
A+( *o1 !s #n&%g%'
(+"%(ana213 B "Ao(+ngo"
(+"%(ana223 B "5un%s"
(+"%(ana233 B "Ma'&%s"
(+"%(ana243 B "M+S'*ol%s"
(+"%(ana253 B "[u%9%s"
(+"%(ana263 B "1+%'n%s"
(+"%(ana273 B "">.ado"
Ko' *o1 B 1 Io 7
MsgBox (+"%(ana2 *o1 37 647 "Ioda la s%(ana"
=%x&
End "u.
%ption &ase LnoM puede ir dentro de una macro% tiene 6ue ir al inicio de un modulo
en el ;rea de declaraci4n de &ariable$' #a ma*or=a de la$ e$tructura$ de OpenO11ice'or, inician en
0 (cero)% a$= 6ue u$aremo$ e$te &alor de inicio como predeterminado en todo el libro' Si te e$
nece$ario un inicio o un 1in di1erente pue$ u$ar la $i,uiente &ariante para la declaraci4n de
matrice$'
"im NombreQMatri/( 9nicio A$ Tipo To !in A$ Tipo ) A$ Tipo
>n donde 9nicio puede $er inclu$o un &alor ne,ati&o como en lo$ e2emplo$ $i,uiente$'
Aprendiendo OOo .a$ic 51
"u. E)%(8lo/Ma&'+*%s423
A+( (+s=u(%'os25 Io 143 !s #n&%g%'
A+( (+s$olo'%s2T5 Io 43 !s "&'+ng
(+s=u(%'os253 B 123
(+s=u(%'os263 B 345
(+s=u(%'os273 B 567
(+s=u(%'os283 B 890
(+s=u(%'os293 B 135
(+s=u(%'os2103 B 246
(+s=u(%'os2113 B 147
(+s=u(%'os2123 B 258
(+s=u(%'os2133 B 369
(+s=u(%'os2143 B 951
(+s$olo'%s2T53 B "!;ul"
(+s$olo'%s2T43 B "1%'d%"
(+s$olo'%s2T33 B "Mo'ado"
(+s$olo'%s2T23 B "Ro)o"
(+s$olo'%s2T13 B "Blan*o"
(+s$olo'%s203 B "Rosa"
(+s$olo'%s213 B "1+ol%&a"
(+s$olo'%s223 B "E'+s"
(+s$olo'%s233 B "=%g'o"
(+s$olo'%s243 B "?'o"
MsgBox (+s=u(%'os2 9 37 647 "=<(%'os"
MsgBox (+s$olo'%s2 0 37 647 "$olo'%s"
End "u.
Ob$er&a como en lo$ do$ ca$o$% la$ matrice$ tienen lo$ mi$mo$ die/ elemento$% en
una ,uardamo$ n?mero$ * en la otra% te:to% pero mu* bien podemo$ combinar dato$ $i
declaramo$ la matri/ como -ariant% como en el $i,uiente e2emplo'
"u. E)%(8lo/Ma&'+*%s5
A+( (+sAa&os253 !s 1a'+an&
A+( *o1 !s #n&%g%'
(+sAa&os2 0 3 B "Mau'+*+o Ba%;a"
(+sAa&os2 1 3 B 1974
(+sAa&os2 2 3 B "M+gu%l !ng%l 64"
(+sAa&os2 3 3 B "M%x+*o"
(+sAa&os2 4 3 B "A-K-"
(+sAa&os2 5 3 B 37000
Ko' *o1 B 0 Io 5
MsgBox (+sAa&os2 *o1 37 647 "M+s da&os"
=%x&
End "u.
Notara$ 6ue en lo$ ca$o$ &i$to$ -a$ta a-ora% cuando 6ueremo$ recorrer una matri/
con un bucle% -emo$ e$tablecido lo$ &alore$ $uperior e in1erior de la matri/ declarada pre&iamente%
en muc-o$ ca$o$% no conocer;$ lo$ &alore$ de inicio * 1in de una matri/% en e$to$ ca$o$% OOo
.a$ic% cuenta con do$ 1uncione$ mu* ?tile$ para conocer e$to$ &alore$'
"u. E)%(8lo/Ma&'+*%s6
A+( (+sAa&os23 !s #n&%g%'
A+( *o1 !s #n&%g%'
(+sAa&os23 B !''a@2 87758726735798751726758712748735716 3
MsgBox "5+(+&% #nf%'+o' B " : "&'2 5Bound2 (+sda&os23 33
52 E') Matrice$ g junto$ pero no re&uelto$
MsgBox "5+(+&% "u8%'+o' B " : "&'2 DBound2 (+sda&os23 33
Ko' *o1 B 5Bound2 (+sda&os23 3 Io DBound2 (+sAa&os23 3
MsgBox (+sAa&os2 *o1 37 647 "M+s da&os"
=%x&
End "u.
>n e$te e2emplo aprendemo$ cuatro nue&a$ 1uncione$ de OOo .a$ic% (rray% 6ue no$
permite crear una matri/ introduciendo directamente lo$ &alore$ 6ue contendr;% cada uno
$eparado por una coma% 4&ound 6ue no$ de&uel&e el limite in1erior de una matri/ * :&ound 6ue
no$ de&uel&e el limite $uperior' U$ando e$ta$ do$ ultima$ 1uncione$% ni $i6uiera tenemo$ 6ue
enterarno$ de lo$ limite$ de una matri/% * por ultimo la 1unci4n Str 6ue con&ierte en cadena de
te:to (Strin,) el ar,umento pa$ado'
Puede$ declarar una matri/ de un determinado tamaKo * u$ar (rray para llenar la
matri/ $in 6ue nece$ariamente corre$pondan el n?mero de elemento$% como en lo$ $i,uiente
e2emplo$'
"u. E)%(8lo/Ma&'+*%s7
A+( (+sAa&os1253 !s 1a'+an&
A+( (+sAa&os2253 !s 1a'+an&
A+( (+sAa&os3233 !s 1a'+an&
A+( *o1 !s #n&%g%'
,5l%na(os la 8'+(%' (a&'+; *on %l nu(%'o %xa*&o d% %l%(%n&os d%*la'ados
(+sAa&os123 B !''a@2 "5+;%&"7 307 "Hola"7 457 "0'u%.a"7 15 3
MsgBox "5+(+&% #nf%'+o' B " : "&'2 5Bound2 (+sda&os123 33 : $h'2 13 3 : /
"5+(+&% "u8%'+o' B " : "&'2 DBound2 (+sda&os123 33
,$on (%nos %l%(%n&os
(+sAa&os223 B !''a@2 "0aola"7 257 "Hola" 3
MsgBox "5+(+&% #nf%'+o' B " : "&'2 5Bound2 (+sda&os223 33 : $h'2 13 3 : /
"5+(+&% "u8%'+o' B " : "&'2 DBound2 (+sda&os223 33
,$on (as %l%(%n&os
(+sAa&os323 B !''a@2 "Ma'+ana"7 277 "Hola"7 187 "0'u%.a" 3
MsgBox "5+(+&% #nf%'+o' B " : "&'2 5Bound2 (+sda&os323 33 : $h'2 13 3 : /
"5+(+&% "u8%'+o' B " : "&'2 DBound2 (+sda&os323 33
End "u.
Al ob$er&ar lo$ &alore$ in1erior * $uperior 6ue no$ de&uel&e cada matri/% claramente
notamo$ 6ue la matri/ $e Lredimen$ionaM con el n?mero de elemento$ 6ue ten,a la 1unci4n Arra*%
no import;ndole el &alor con el 6ue -a*amo$ declarado la matri/' +ambiar de tamaKo o de
cantidad de elemento$ 6ue puede contener una matri/ de 1orma din;mica durante la e2ecuci4n de
una macro% e$ una tarea -abitual de pro,ramaci4n% por ello e:i$ten &aria$ alternati&a$ para lo,rar
e$te prop4$ito' OOo .a$ic cuenta con una in$trucci4n e$peci1ica para lo,rar e$to% $e llama 8eDim
* $e u$a de la $i,uiente manera'
"u. E)%(8lo/Ma&'+*%s8
A+( (+s!(+gos223 !s "&'+ng
A+( *o1 !s #n&%g%'
(+s!(+gos203 B "Edga'" 4 (+s!(+gos213 B "Elo'+a" 4 (+s!(+gos223 B "Io\+&o"
Ko' *o1 B 5Bound2 (+s!(+gos23 3 Io DBound2 (+s!(+gos23 3
MsgBox "&'2 *o1 3 : " T " : (+s!(+gos2 *o1 37 647 "M+s a(+gos"
=%x&
R%d+( (+s!(+gos243
(+s!(+gos233 B "5+d+a"4 (+s!(+gos243 B "!n+&a"
Aprendiendo OOo .a$ic 5(
Ko' *o1 B 5Bound2 (+s!(+gos23 3 Io DBound2 (+s!(+gos23 3
MsgBox "&'2 *o1 3 : " T " : (+s!(+gos2 *o1 37 647 "M+s a(+gos"
=%x&
End "u.
Se 6ue ere$ mu* ob$er&ador * *a nota$te 6ue en el $e,undo bucle% $olo no$ mue$tra
lo$ &alore$ de lo$ =ndice$ ( * E% e$to e$ por 6ue al redimen$ionar la matri/ con 8eDim% e$ta% borra
lo$ &alore$ 6ue -a*amo$ introducido pre&iamente en la matri/% por $upue$to 6ue en oca$ione$
de$earemo$ mantener lo$ &alore$ 6ue e:i$tan% e$to $e lo,ra a,re,ando otra palabra cla&e'
"u. E)%(8lo/Ma&'+*%s9
A+( (+s!(+gos223 !s "&'+ng
A+( *o1 !s #n&%g%'
(+s!(+gos203 B "Edga'"4 (+s!(+gos213 B "Elo'+a" 4 (+s!(+gos223 B "Io\+&o"
Ko' *o1 B 5Bound2 (+s!(+gos23 3 Io DBound2 (+s!(+gos23 3
MsgBox "&'2 *o1 3 : " T " : (+s!(+gos2 *o1 37 647 "M+s a(+gos"
=%x&
R%A+( 0'%s%'9% (+s!(+gos243
(+s!(+gos233 B "5+d+a"4 (+s!(+gos243 B "!n+&a"
Ko' *o1 B 5Bound2 (+s!(+gos23 3 Io DBound2 (+s!(+gos23 3
MsgBox "&'2 *o1 3 : " T " : (+s!(+gos2 *o1 37 647 "M+s a(+gos"
=%x&
End "u.
A-ora $i% todo $e mantiene con la palabra cla&e +reser,e. Pero 8eDim no $olo $ir&e
para aumentar elemento$% tambi3n $ir&e para di$minuirlo$% pero tiene el incon&eniente de 6ue ni
aun u$ando +reser,e% te mantiene lo$ &alore$ pre&io$% como lo demue$tra el $i,uiente e2emplo'
"u. E)%(8lo/Ma&'+*%s10
A+( (+s=u(%'os293 !s #n&%g%'
A+( *o1 !s #n&%g%'
(+s=u(%'os23 B !''a@2 17273747576777879710 3
Ko' *o1 B 5Bound2 (+s=u(%'os23 3 Io DBound2 (+s=u(%'os23 3
MsgBox (+s=u(%'os2 *o1 37 647 "M+s n<(%'os"
=%x&
R%A+( 0'%s%'9% (+s=u(%'os243
Ko' *o1 B 5Bound2 (+s=u(%'os23 3 Io DBound2 (+s=u(%'os23 3
MsgBox (+s=u(%'os2 *o1 37 647 "M+s n<(%'os"
=%x&
End "u.
Una primer $oluci4n e$ la propue$ta $i,uiente'
"u. E)%(8lo/Ma&'+*%s11
A+( (+s=u(%'os293 !s #n&%g%'
A+( (I(823 !s "&'+ng
A+( *o1 !s #n&%g%'
,5l%na(os la (a&'+; *on 10 n<(%'os
(+s=u(%'os23 B !''a@2 17273747576777879710 3
,R%d+(%ns+ona(os la (a&'+; &%(8o'al
R%d+( (I(8243
,0asa(os los 9alo'%s a la (a&'+; &%(8o'al
Ko' *o1 B 5Bound2 (I(823 3 Io DBound2 (I(823 3
(I(82 *o1 3 B (+s=u(%'os2 *o1 3
5E E') Matrice$ g junto$ pero no re&uelto$
=%x&
,R%d+(%ns+ona(os la (a&'+; o'+g+nal
R%d+( (+s=u(%'os243
,$o8+a(os loa 9alo'%s &%(8o'al%s
(+s=u(%'os23 B (I(823
,1%'+f+*a(os Gu% %s&Sn los da&os
Ko' *o1 B 5Bound2 (+s=u(%'os23 3 Io DBound2 (+s=u(%'os23 3
MsgBox (+s=u(%'os2 *o1 37 647 "M+s n<(%'os"
=%x&
,Bo''a(os la (%(o'+a usada 8o' la (a&'+; &%(8o'al
E'as% (I(8
End "u.
ISe te ocurre al,una otraJ% $e,uro 6ue $i' +omo e$ una tarea -abitual (el di$minuir
de tamaKo una matri/ * de$ear mantener lo$ &alore$ re$tante$)% e$ una tarea id4nea para
con&ertirla en una $ubrutina o $i lo de$ea$ en una 1unci4n como $e &e en el tema E'F !uncione$ *
$ubrutina$ - "i&ide * &encer;$' A6u= la$ do$ 1orma$ * t? decide$ cual u$ar'
+omo una $ubrutina% en donde le pa$amo$ la matri/ a redimen$ionar * el nue&o
tamaKo 6ue tendr;% $i e$ ma*or $olo redimen$iona% $i e$ menor% copia lo$ &alore$ a mantener *
redimen$iona% $i e$ i,ual la de2a tal cual'
"u. R%d+(%n*+ona'Ma&'+;2 Ma&'+;23 !s 1a'+an&7 B@1al Ia(ano !s #n&%g%'3
A+( (I(823 !s 1a'+an&
A+( *o1 !s #n&%g%'
#f Ia(ano Y DBound2 Ma&'+;23 3 Ih%n
R%A+( 0'%s%'9% Ma&'+;2 Ia(ano 3
Els%#f Ia(ano X DBound2 Ma&'+;23 3 Ih%n
R%A+( (I(82 Ia(ano 3
Ko' *o1 B 5Bound2 (I(823 3 Io DBound2 (I(823 3
(I(82 *o1 3 B Ma&'+;2 *o1 3
=%x&
R%d+( Ma&'+;2 Ia(ano 3
Ma&'+;23 B (I(823
E'as% (I(8
End #f
End "u.
+omo una 1unci4n% 6ue -ace e:actamente lo mi$mo% e:cepto 6ue de&uel&e el &alor
en &e/ de manipular el par;metro pa$ado'
Kun*&+on Kun*+onR%d+(%n*+ona'Ma&'+;2 Ma&'+;23 !s 1a'+an&7 B@1al Ia(ano !s #n&%g%'3 !s 1a'+an&
A+( (I(823 !s 1a'+an&
A+( *o1 !s #n&%g%'
#f Ia(ano Y DBound2 Ma&'+;23 3 Ih%n
R%A+( 0'%s%'9% Ma&'+;2 Ia(ano 3
Els%#f Ia(ano X DBound2 Ma&'+;23 3 Ih%n
R%A+( (I(82 Ia(ano 3
Ko' *o1 B 5Bound2 (I(823 3 Io DBound2 (I(823 3
(I(82 *o1 3 B Ma&'+;2 *o1 3
=%x&
R%d+( Ma&'+;2 Ia(ano 3
Ma&'+;23 B (I(823
E'as% (I(8
End #f
Kun*+onR%d+(%n*+ona'Ma&'+; B Ma&'+;23
Aprendiendo OOo .a$ic 55
End Kun*&+on
Pero para 6ue no 6uede duda% &eamo$ $u u$o% tanto como $ubrutina * como 1unci4n'
,Ds>ndola *o(o su.'u&+na
"u. E)%(8lo/Ma&'+*%s12
A+( (+s=u(%'os293 !s 1a'+an&
A+( (I(823 !s "&'+ng
A+( *o1 !s #n&%g%'
(+s=u(%'os23 B !''a@2 17273747576777879710 3
$all R%d+(%n*+ona'Ma&'+;2 (+s=u(%'os237 153
(+s=u(%'os2123 B 12
MsgBox (+s=u(%'os2123
$all R%d+(%n*+ona'Ma&'+;2 (+s=u(%'os237 53
,1%'+f+*a(os Gu% %s&Sn los da&os
Ko' *o1 B 5Bound2 (+s=u(%'os23 3 Io DBound2 (+s=u(%'os23 3
MsgBox (+s=u(%'os2 *o1 37 647 "M+s n<(%'os"
=%x&
End "u.
,Ds>ndola *o(o fun*+6n
"u. E)%(8lo/Ma&'+*%s13
A+( (+s=u(%'os293 !s 1a'+an&
A+( (I(823 !s "&'+ng
A+( *o1 !s #n&%g%'
,5l%na(os la (a&'+;
(+s=u(%'os23 B !''a@2 17273747576777879710 3
,5la(a(os a la fun*+6n7 o.s%'9a %l 8aso d% a'gu(%n&os7 *'%*%(os la (a&'+;
(+s=u(%'os23 B Kun*+onR%d+(%n*+ona'Ma&'+;2 (+s=u(%'os237 15 3
,!s+gna(os un 9alo' al +nd+*% 12
(+s=u(%'os2123 B 12
,1%'+f+*a(os Gu% lo ha@a gua'dado
MsgBox (+s=u(%'os2123
,5la(a(os d% nu%9o a la fun*+6n7 %s&a 9%; la d+s(+nu+(os
(+s=u(%'os23 B Kun*+onR%d+(%n*+ona'Ma&'+;2 (+s=u(%'os237 5 3
,1%'+f+*a(os Gu% %s&Sn los da&os
Ko' *o1 B 5Bound2 (+s=u(%'os23 3 Io DBound2 (+s=u(%'os23 3
MsgBox (+s=u(%'os2 *o1 37 647 "M+s n<(%'os"
=%x&
End "u.
OOo .a$ic e$ mu* noble en el mane2o de la$ matrice$% ob$er&a 6ue $encillo e$
copiar una matri/ en otra
Matri/"e$tino() f Matri/Ori,en()
Tambi3n% ob$er&a el u$o de la palabra cla&e Erase para borrar de memoria la$
matrice$ din;mica$ 6ue *a no u$emo$% $i bien a-ora la ma*or=a de la$ computadora$ di$ponen de
muc-o$ me,a$ de @AM% procura mantener el control de la cantidad de memoria 6ue u$a$ en tu$
macro$'
Al copiar matrice$ de e$te modo% tiene$ 6ue $aber 6ue pa$a al,o curio$o con ella$%
e$ta$% 6uedan &inculada$ como $e demue$tra con la $i,uiente macro de e2emplo'
"u. $o8+a'Ma&'+*%s23
A+( (Aa&os123
5) E') Matrice$ g junto$ pero no re&uelto$
A+( (Aa&os223
(Aa&os1 B !''a@2071727374753
,$o8+o las (a&'+*%s
(Aa&os2 B (Aa&os1
,Mu%s&'o %l s%gundo 9alo' d% la s%gunda (a&'+;
MsgBox (Aa&os2213
,Mod+f+*o %s&% 9alo'
(Aa&os2213B "B"
,Mu%s&'o %l s%gundo 9alo' d% la 8'+(%' (a&'+;
MsgBox (Aa&os1213
,1u%l9o a (od+f+*a' %s&% 9alo' %n %s&a (a&'+;
(Aa&os1213B "$"
,Mu%s&'o %l 9alo' %n la o&'a (a&'+;
MsgBox (Aa&os2213
End "u.
"e$cono/co $i e$to e$ una caracter=$tica o un error% pero tiene$ 6ue con$iderarlo
pue$ en al,uno$ al,oritmo$% lo$ &alore$ de la$ matrice$ $e u$an &aria$ &ece$ ($obre todo en
ciclo$) por lo 6ue puede$ lle,ar a obtener re$ultado$ err4neo$ $i no con$idera$ e$ta 1orma de
traba2ar la$ matrice$ por parte de OOo .a$ic'
da$ta a-ora% -emo$ &i$to la declaraci4n * el u$o de matrice$ de una $ola dimen$i4n%
e$ po$ible declarar * u$ar matrice$ de m;$ de una dimen$i4n &eamo$ como $e -ace'
#a $inta:i$ para declarar matrice$ multidimen$ionale$ e$ la $i,uiente<
"im NombreQMatri/( TamaKo A$ 9nte,er% TamaKo A$ 9nte,er) A$ Tipo
Ob$er&a como a-ora% le indicamo$ do$ tamaKo$ $eparado$ por una coma% un
e2emplo e$ m;$ ilu$trati&o'
"u. Ma&'+*%s/Mul&+d+(%ns+on1
A+( (Aa&os2 27 2 3 !s "&'+ng
,5l%na(os los da&os
(Aa&os2 07 0 3 B "0T0"
(Aa&os2 07 1 3 B "0T1"
(Aa&os2 07 2 3 B "0T2"
(Aa&os2 17 0 3 B "1T0"
(Aa&os2 17 1 3 B "1T1"
(Aa&os2 17 2 3 B "1T2"
(Aa&os2 27 0 3 B "2T0"
(Aa&os2 27 1 3 B "2T1"
(Aa&os2 27 2 3 B "2T2"
,Mos&'a(os algunos da&os
MsgBox (Aa&os2 07 0 3
MsgBox (Aa&os2 17 1 3
MsgBox (Aa&os2 27 2 3
End "u.
Pien$a en la$ matrice$ de do$ dimen$ione$ como en una -o2a de calculo 1ormada por
1ila$ * columna$% la matri/ anterior 6uedar=a a$='
Aprendiendo OOo .a$ic 57
0 1 2
0 0-0 1-0 2-0
1 0-1 1-1 2-1
2 0-2 1-2 2-2
Por $upue$to puede$ declarar * u$ar matrice$ de m;$ de do$ dimen$ione$ I-a$ta
cuanta$J% parece $er 6ue el limite e$ta determinado una &e/ m;$ por la cantidad de memoria @AM
de 6ue di$pon,a la computadora donde $e e2ecute la macro% en lo per$onal% matrice$ con m;$ de
tre$ dimen$ione$ $e me -acen complicada$ de manipular% no ob$tante% creo 6ue e$ m;$ por mi$
limite$ * 1lo2era 6ue no lo -e comprobado% a$= 6ue te in&ito a 6ue -a,a$ tu$ prueba$ con muc-a$
dimen$ione$ * la$ comparta$ conmi,o'
Otro e2emplo di&ertido% llenamo$ una matri/ de 10 : 10 elemento$ * la llenamo$ con
&alore$ aleatorio$ de entre 1 * 100'
"u. Ma&'+*%s/Mul&+d+(%ns+on2
A+( (=u(%'os2 97 9 3 !s #n&%g%'
A+( *o1 !s #n&%g%'7 *o2 !s #n&%g%'
,R%*u%'da Gu% 8o' d%faul& los Hnd+*%s d% las (a&'+*%s %(8+%;a %n *%'o
Ko' *o1 B 0 Io 9
Ko' *o2 B 0 Io 9
(=u(%'os2 *o17 *o2 3 B Rnd23 100 C 1
=%x&
=%x&
,$o(8'o.a(os un Hnd+*% *ualGu+%'a
MsgBox (=u(%'os2 47 4 3
End "u.
Ob$er&a el u$o de la 1unci4n 8nd?@% 6ue no$ de&uel&e un n?mero aleatorio entre 0 *
1 6ue al $er multiplicado por el &alor $uperior 6ue no$ intere$a * $umarle el &alor in1erior 6ue no$
intere$a% no$ da dic-o n?mero aleatorio entre e$to$ do$ * $in 6uerer tienen a-ora el Lal,oritmoM
para 6ue de&uel&a$ un n?mero aleatorio entre do$ &alore$ dado$'
+on la$ matrice$ de do$ dimen$ione$ podemo$ $imular el u$o de una pe6ueKa ba$e
de dato$ o el u$o de una -o2a de calculo donde ,uardamo$ una $erie de dato$ en columna$ 6ue
$e denominan Lcampo$M * 1ila$ 6ue $e denominan Lre,i$tro$M% &eamo$ un $encillo e2emplo'
"u. Ma&'+*%s/Mul&+d+(%ns+on3
A+( (I%l%fonos2 27 1 3 !s "&'+ng
(I%l%fonos2 07 0 3 B "Elo'+a"
(I%l%fonos2 07 1 3 B "12345678"
(I%l%fonos2 17 0 3 B "!n&on+o"
(I%l%fonos2 17 1 3 B "87654321"
(I%l%fonos2 27 0 3 B "5+d+a"
(I%l%fonos2 27 1 3 B "32458924"
MsgBox "El &%lSfono d% " : (I%l%fonos2 27 0 3 : " %s " : (I%l%fonos2 27 1 3
End "u.
5F E') Matrice$ g junto$ pero no re&uelto$
Pero lo intere$ante * di&ertido e$ darle la oportunidad al u$uario de ir capturando
e$to$ dato$ e ir creciendo la matri/ $e,?n la$ nece$idade$ de e$te% &eamo$ como'
"u. Ma&'+*%s/Mul&+d+(%ns+on4
A+( (A+'%*&o'+o2 07 1 3 !s "&'+ng
A+( =o(.'% !s "&'+ng
A+( I%l%fono !s "&'+ng
A+( +$on&+nua' !s #n&%g%'
A+( *o1 !s #n&%g%'
A+( sI(8 !s "&'+ng
Ao
,"ol+*+&a(os %l no(.'%7 o.s%'9a %l uso d% la fun*+6n I'+( 8a'a Gu+&a' %s8a*+os so.'an&%s
=o(.'% B I'+(2 #n8u&Box2 "Es*'+.% un no(.'%"7 "=o(.'%" 3 3
I%l%fono B I'+(2 #n8u&Box2 "!ho'a su &%lSfono"7 "I%lSfono" 3 3
,R%d+(%ns+ona(os la (a&'+;7 8%'o ?[?7 solo la 8'+(%' d+(%ns+6n
R%d+( 0'%s%'9% (A+'%*&o'+o2 *o17 1 3
,Eua'da(os los da&os %n %l nu%9o +nd+*%
(A+'%*&o'+o2 *o17 0 3 B =o(.'%
(A+'%*&o'+o2 *o17 1 3 B
,1a(os *ons&'u@%ndo nu%s&'o d+'%*&o'+o
sI(8 B sI(8 : "El &%lSfono d% " : (A+'%*&o'+o2 *o17 0 3 : " %s " : (A+'%*&o'+o2 *o17 1 3 :
$h'2133
,#n*'%(%n&a(os nu%s&'o *on&ado' d% '%g+s&'os
*o1 B *o1 C 1
,0'%gun&a(os s+ d%s%a *on&+nua'
+$on&+nua' B MsgBox2 "MA%s%as *a8&u'a' (as da&osN"7 4 C 327 "$on&+nua'" 3
5oo8 Uh+l% +$on&+nua' B 6
,Mos&'a(os nu%s&'o d+'%*&o'+o
MsgBox sI(8
End "u.
Ob$er&a atentamente 6ue -acemo$ un poco de trampa al ir ,uardando lo$ &alore$
introducido$ por el u$uario en un &ariable temporal ($Tmp)% con lo cual% no e$tamo$ mu* $e,uro$
de 6ue e1ecti&amente lo$ dato$ e$t3n $iendo ,uardado$ dentro de la matri/% para corroborarlo% de
tarea tiene$ 6ue modi1icar la macro para 6ue<
Te mue$tre tu directorio completo% llenando la &ariable $Tmp Lde$pu3$M de $alir
del bucle% para re$ol&er e$to tiene$ 6ue -acer u$o de la 1unci4n U.ound &i$ta
m;$ arriba% pero con una pe6ueKa &ariante% le tiene$ 6ue indicar de 6ue
dimen$i4n 6uiere$ $aber $u limite $uperior% como en el e2emplo $i,uiente<
M$,.o: Ubound( m"irectorio% 1 )
>n donde no$ mo$trara el indice $uperior de la primer dimen$i4n * a$=
$uce$i&amente% $i le e$tablece$ un n?mero $uperior al de dimen$ione$ 6ue tiene
la matri/% te dar; un error'
Obli,a al u$uario a introducir un nombre * tel31ono% e$ decir% 6ue no e$t3n &ac=o$
e$to$ campo$
Por ultimo% in,eniatela$ para poder darle la oportunidad al u$uario de borrar un
re,i$tro% e$ decir% tiene$ 6ue encontrar la manera de pre,untarle al u$uario $i
6uiere borrar un re,i$tro% * por $upue$to% borrarlo e1ecti&amente'
Si% $i% recono/co 6ue e$te ultimo punto no e$ta nada 1;cil cuando uno &a empe/ando%
pero e$ta dentro de lo po$ible * con1=o en tu$ capacidade$% a$= 6ue% a traba2ar'
Aprendiendo OOo .a$ic 5G
Otra &ariante del u$o de la$ matrice$% e$ tener matrice$ de matrice$% e$ decir% tener
dentro de una matri/ otra matri/% al,uno$ autore$ a e$ta$ le$ llaman matrice$ e$calare$% &eamo$
$u u$o'
"u. Ma&'+*%s/Ma&'+*%s1
A+( (Aa&os223 !s 1a'+an&
A+( (I(8 !s 1a'+an&
(Aa&os203 B !''a@2"0%''o"7"Ea&o"7"?so"7"I+.u'6n"7"Bu''o"3
(Aa&os213 B !''a@2"$%d'o"7"0+no"7"$ao.a"7"K'%sno"3
(Aa&os223 B !''a@2"$o.'%"7"0la&a"7"Mangan%so"7"!;uf'%"7"0o&as+o"7"K+%''o"3
(I(8 B (Aa&os203
MsgBox (I(8203
(I(8 B (Aa&os213
MsgBox (I(8213
(I(8 B (Aa&os223
MsgBox (I(8223
End "u.
Ob$er&a el u$o de una &ariable temporal (mTmp) para a$i,nar la matri/ interna * a$=
poder acceder a $u$ &alore$% al,una$ 1uncione$ * e$tructura$ de OpenO11ice'or, 6ue &eremo$ m;$
adelante% e$t;n implementada$ de e$tar 1orma% e$ decir% como una matri/ dentro de otra% de a-= la
importancia de 6ue la$ cono/ca$% pero *a lo nota$te% $u u$o e$ mu* $encillo% &eamo$ un e2emplo
di&ertido de lo$ 6ue me ,u$tan'
"u. Ma&'+*%s/Ma&'+*%s2
A+( (Aa&os233 !s 1a'+an&
A+( (I(8 !s 1a'+an&
A+( *o1 !s #n&%g%'
A+( s$a'a*&%' !s "&'+ng
A+( s$on&'a !s "&'+ng
,5l%na(os los da&os7 o.s%'9a *o(o &%n%(os *ua&'o g'u8os7 l%&'as (+n<s*ulas7 l%&'as (a@<s*ulas7
n<(%'os @ *a'a*&%'%s %s8%*+al%s
(Aa&os203 B !''a@2 "a"7 "." 7"*" 7"d" 7"%" 7"f" 7"g" 7"h" 7"+" 7")" 7"]" 7"l"
7"("7"n"7"\"7"o"7"8"7"]"7"'"7"s"7"&"7"u"7"9"7"^"7"x"7"@"7";"3
(Aa&os213 B !''a@2 "!" 7"B" 7"$" 7"A" 7"E" 7"K" 7"E" 7"H" 7"#" 7"[" 7"J" 7"5"
7"M"7"="7"_"7"?"7"0"7"P"7"R"7"""7"I"7"D"7"1"7"U"7"F"7"O"7"`"3
(Aa&os223 B !''a@2"1"7"2"7"3"7"4"7"5"7"6"7"7"7"8"7"9"7"0"3
(Aa&os233 B !''a@2 "a" 7"b" 7"!" 7"c" 7"d" 7"e" 7":" 7"/" 7"2" 7"3" 7"B" 7"N"
7"M"7""7"C"7"T"7"/"7"-"7"4"7"7"7"f"7"X"7"Y"7"g"7"h"7"R"7"Q"3
,=u%s&'a *on&'as%\a s%'a d% 10 *a'a*&%'%s
Ko' *o1 B 1 Io 10
,"%l%**+ona(os aleatoriamente7 D=? d% los *ua&'o g'u8os
(I(8 B (Aa&os2 $#n&2 Rnd23 3 3 3
,"%l%**+ona(os aleatoriamente7 D= %l%(%n&o d%l g'u8o7 o.s%'9a *o(o usa(os la fun*+6n Rnd @ la
(ul&+8l+*a(os 8o' %l Hnd+*% su8%'+o' d%l g'u8o s%l%**+onado
s$a'a*&%' B (I(82 $#n&2 Rnd23 DBound2(I(83 3 3
,1a(os )un&ando los *a'a*&%'%s d% la *on&'as%\a
s$on&'a B s$on&'a : s$a'a*&%'
=%x&
,Mos&'a(os la *on&'as%\a
MsgBox "Iu *on&'as%\a %s4 " : s$on&'a
End "u.
Anali/ala * &era$ 6ue no e$ tan comple2o como parece * $i% lo $iento% tiene$ tarea%
modi1ica la macro de modo 6ue le pre,unte al u$uario de cuanto$ caractere$ 6uiere $u contra$eKa%
ponle un ran,o m=nimo * m;:imo 6ue pueda e$co,er% di,amo$ entre 5 * 50 caractere$
)0 E') Matrice$ g junto$ pero no re&uelto$
Una $e,unda 1orma de acceder a lo$ &alore$ de una matri/ de matrice$% e$ u$ando
un doble =ndice como no$ mue$tra el $i,uiente e2emplo'
"u. Ma&'+*%s/Ma&'+*%s323
A+( (Aa&os213
A+( *o1 !s #n&%g%'7 *o2 !s #n&%g%'
(Aa&os203 B !''a@217273747576777879703
(Aa&os213 B !''a@2117127137147157167177187197103
Ko' *o1 B 0 Io 1
Ko' *o2 B 0 Io 9
MsgBox (Aa&os 2*o13 2*o23
=%x&
=%x&
End "u.
>$ mu* importante 6ue $iempre &alide$ lo$ ran,o$ de la$ matrice$ (U.ound *
#.ound) cuando accede$ por medio de $u$ =ndice$% $i el =ndice no e:i$te te dar; un error en
tiempo de e2ecuci4n' Tambi3n e$ importante 6ue note$ la di1erencia entre una matri/
multidimencional * una matri/ de matrice$'
O $in 6uerer tenemo$ un nue&o capitulo completo% bueno% ca$i completo% a e$ta$
altura$ *a te -abr;$ dado cuenta de la cantidad de &ariante$ 6ue $e pueden tener con una$
cuanta$ in$truccione$ de OOo .a$ic por lo cual% dar por completo un tema e$ un poco a&enturado%
pero para 1ine$ pr;ctico$% $i% e$te capitulo% lo damo$ por concluido% 6ueda a tu curio$idad e
ima,inaci4n bu$carle $u$ aplicacione$ practica$ * la$ no tan practica$% 6ue a &ece$% $on la$ m;$
di&ertida$% a6uella$ 6ue no $ir&en para nada' W!eli/ pro,ramaci4nV
).A 5ipos personali9ados
>$te tipo de &ariable$ no$ permite crear una e$tructura de dato$ llamada re,i$tro con
&ariable de di1erente$ tipo$% u$amo$ la$ palabra$ cla&e T*pe * >nd T*pe% &eamo$ un e2emplo'
?8&+on Ex8l+*+&
,=o(.'% d%l '%g+s&'o
I@8% $on&a*&o
,$on&%n+do d%l '%g+s&'o
=o(.'% !s "&'+ng
Edad !s #n&%g%'
#ng'%so !s Aa&%
End I@8%
"u. I+8os0%'sonal+;ados123
A+( o$on&a*&o !s ?.)%*&
,$'%a(os un o.)%&o d%l &+8o $on&a*&o
o$on&a*&o B $'%a&%?.)%*&2 "$on&a*&o" 3
,5l%na(os sus da&os
U+&h o$on&a*&o
Aprendiendo OOo .a$ic )1
-=o(.'% B "5+;%&&% !9+la"
-Edad B 35
-#ng'%so B Aa&%"%'+al22005717153
End U+&h
,Mos&'a(os sus da&os
MsgBox o$on&a*&o-=o(.'% : " T " : o$on&a*&o-Edad : " a\os T +ng'%so %l " : o$on&a*&o-#ng'%so
End "u.
#o$ tipo$ per$onali/ado$ no puede$ declararlo$ dentro de macro$% -a* 6ue -acerlo
en la $ecci4n de declaracione$ de un modulo' Otra 1orma de u$arlo$ e$ la $i,uiente'
I@8% 0'odu*&o
$an&+dad !s "+ngl%
A%s*'+8*+on !s "&'+ng
0'%*+o !s "+ngl%
#(8o'&% !s Aou.l%
End I@8%
"u. I+8os0%'sonal+;ados223
A+( o0'odu*&o !s =%^ 0'odu*&o
U+&h o0'odu*&o
-$an&+dad B 2-5
-A%s*'+8*+on B "Ho'as d% s%'9+*+o"
-0'%*+o B 200
-#(8o'&% B -$an&+dad -0'%*+o
End U+&h
MsgBox o0'odu*&o-$an&+dad : $h'2103 : /
o0'odu*&o-A%s*'+8*+on : $h'2103 : /
o0'odu*&o-0'%*+o : $h'2103 : /
o0'odu*&o-#(8o'&%
End "u.
Por ultimo% puede$ declarar matrice$ 6ue conten,an tipo$ per$onali/ado$'
I@8% A+'%**+on
$all% !s "&'+ng
=u(%'o !s #n&%g%'
$olon+a !s "&'+ng
End I@8%
"u. I+8os0%'sonal+;ados323
A+( oA+'%**+on23 !s =%^ A+'%**+on
A+( s$all% !s "&'+ng
A+( +=u(%'o !s #n&%g%'
A+( s$olon+a !s "&'+ng
A+( ."al+' !s Bool%an
A+( *o1 !s #n&%g%'
Ao
,"ol+*+&a(os los da&os
s$all% B #n8u&Box2 "$all%" 3
+=u(%'o B 1al2#n8u&Box2 "=<(%'o" 33
s$olon+a B #n8u&Box2 "$olon+a" 3
,"+ fal&a *ualGu+%' da&o sal+(os
#f s$all% B "" ?' +=u(%'o B 0 ?' s$olon+a B "" Ih%n
."al+' B I'u%
Els%
,R%d+(%n*+ona(os la (a&'+;
R%d+( 0'%s%'9% oA+'%**+on2 *o1 3
,1a*+a(os los da&os
)2 E'7 Tipo$ per$onali/ado$
U+&h oA+'%**+on2*o13
-$all% B s$all%
-=u(%'o B +=u(%'o
-$olon+a B s$olon+a
End U+&h
*o1 B *o1 C 1
End #f
5oo8 Dn&+l ."al+'
,Mos&'a(os los da&os *a8&u'ados
Ko' *o1 B 5Bound2 oA+'%**+on 3 Io DBound2 oA+'%**+on 3
MsgBox oA+'%**+on2*o13-$all% : $h'2103 : /
oA+'%**+on2*o13-=u(%'o : $h'2103 : /
oA+'%**+on2*o13-$olon+a
=%x&
End "u.
).B Cmbito de ,ariables 7 ("ora me ,es, a"ora no
+omo todo en e$ta &ida% la$ &ariable$ tambi3n $e crean * 1enecen% una$ duran m;$
otra$ meno$% pero toda$ lo -acen% la buena noticia e$ 6ue no$otro$ decidimo$ cuando * cuanto% lo
cual aprenderemo$ en e$te capitulo' >l lu,ar donde declare$ una &ariable * como lo -a,a$%
determinara $u L&i$ibilidadM * tiempo de &ida% entendiendo por tiempo de &ida% el tiempo 6ue e$ta
di$ponible para poder acceder * manipular $u contenido% a e$ta &i$ibilidad * tiempo de &ida $e le
conoce como ;mbito de la &ariable% el ni&el m;$ ba2o * b;$ico *a lo conoce$ pue$% $i -a$ $e,uido
e$to$ apunte$% lo$ -a$ &enido u$ando de$de el inicio de e$ta$ nota$% &eamo$ cual e$'
).B.1 Cmbito 4ocal
>$ta$ &ariable$ $on la$ 6ue $e declararan dentro del cuerpo de una macro o 1unci4n
* $e crean al in&ocar a e$ta * $e de$tru*en al 1inali/ar% como en'
?8&+on Ex8l+*+&
"u. 1a'+a.l%s/5o*al%s1
A+( +Edad !s #n&%g%'
,Mos&'a(os %l 9alo' d% la 9a'+a.l%
MsgBox +Edad
,$a(.+a(os su 9alo'
+Edad B 34
,Mos&'a(os d% nu%9o %l 9alo' d% la 9a'+a.l%
MsgBox +Edad
End "u.
>2ecuta &aria$ &ece$ la macro anterior para 6ue ob$er&e$ como L$iempreM el &alor
inicial de la &ariable e$ cero% para comprobar 6ue e1ecti&amente% $olo e$ta macro puede L&erM a la
&ariable i>dad% crea una $e,unda macro de$de donde intentemo$ u$ar e$ta &ariable'
Aprendiendo OOo .a$ic )(
"u. 1a'+a.l%s/5o*al%s2
,#n&%n&a(os (os&'a' %l 9alo' d% la 9a'+a.l% +Edad
MsgBox +Edad
End "u.
Por $upue$to% el 9"> de $olo te mo$trara un error% $i tiene$ la precauci4n de u$ar la
palabra cla&e %ption E'plicit% lo cual% te recomiendo 6ue nunca ol&ide$ de u$ar% te e&itara
muc-o$ dolore$ de cabe/a' Si no e$ta$ u$ando Option >:plicit% la macro anterior no te dar; un
error L&i$ibleM% pero $iempre te mo$trar; un cero como re$ultado de mo$trar la &ariable' >ntonce$%
$i e2ecuta$ la $e,unda macro% Lde$pu3$M de a,re,ar la$ palabra$ cla&e Option >:plicit a ni&el de
modulo%te tiene 6ue dar un error como el de la $i,uiente ima,en'
Ob$er&a la 1lec-a en el mar,en i/6uierdo 6ue no$ indica la l=nea donde $e produ2o el
error * ob$er&a tambi3n el men$a2e 6ue e$ mu* claro% no -emo$ de1inido la &ariable para Le$a
macroM dentro de e$a macro% en re$umen% todas la ariables declaradas dentro de macros,
tienen 1mbito local' 5eamo$ un e2emplo m;$% o2o% tiene$ 6ue e2ecutar la macro 6ue $e llama
5ariable$Q#ocale$('
?8&+on Ex8l+*+&
"u. 1a'+a.l%s/5o*al%s3
A+( sI(8 !s "&'+ng
sI(8 B "!GuH no so@ nad+%"
$all "o@/K+losofo
$all "o@/A+9%'&+do
MsgBox sI(8
End "u.
"u. "o@/K+losofo
A+( sI(8 !s "&'+ng
sI(8 B "!ho'a so@ un f+losofo"
MsgBox sI(8
End "u.
"u. "o@/A+9%'&+do
A+( sI(8 !s "&'+ng
sI(8 B "!ho'a so@ d+9%'&+do"
MsgBox sI(8
End "u.
)E E'F cmbito de &ariable$ g A-ora me &e$% a-ora no
Tiene$ 6ue $er mu* ob$er&ador para 6ue note$ como la &ariable toma el &alor
a$i,nado en cada macro% cada una e$ di1erente * $e iniciali/a * termina con la macro donde $e
declara' +opia la$ do$ macro$ $i,uiente$ * e2ecuta la 6ue $e llama 2ariables&Locales3 &aria$
&ece$'
?8&+on Ex8l+*+&
"u. 1a'+a.l%s/5o*al%s4
$all $on&a'23
End "u.
"u. $on&a'
A+( +$on&ado' !s #n&%g%'
+$on&ado' B +$on&ado' C 1
MsgBox +$on&ado'
End "u.
Siempre lo mi$mo% I&erdadJ% e$ decir% $iempre te mue$tra el &alor 1% I6ue pa$ar;
$i llamamo$ a la macro &aria$ &ece$ como en el e2emplo $i,uienteJ'
?8&+on Ex8l+*+&
"u. 1a'+a.l%s/5o*al%s4
$all $on&a'23
$all $on&a'23
$all $on&a'23
End "u.
Si,ue i,ual% I&erdadJ% &amo$ a -acer un pe6ueKo cambio a la macro Contar%
e$pec=1icamente en la declaraci4n de la &ariable * &ol&emo$ a e2ecutar la macro
2ariables&Locales3% pero e$ta $e,unda &er$i4n donde llamamo$ &aria$ &ece$ a la macro Contar'
?8&+on Ex8l+*+&
"u. 1a'+a.l%s/5o*al%s4
$all $on&a'23
$all $on&a'23
$all $on&a'23
End "u.
"u. $on&a'
"&a&+* +$on&ado' !s #n&%g%'
+$on&ado' B +$on&ado' C 1
MsgBox +$on&ado'
End "u.
I#o nota$teJ% ob$er&a como declaramo$ la &ariable iContador en la macro +ontar%
pero a-ora% en &e/ de u$ar la palabra cla&e Dim% u$amo$ la palabra cla&e Static% con lo 6ue le
Aprendiendo OOo .a$ic )5
e$tamo$ indicando 6ue con$er&e el &alor entre la$ llamada$ a la macro% e$te &alor lo con$er&ara
mientra$ $e e2ecute la macro 6ue llamo a la macro donde e$ta declarada la &ariable Static% como
podr;$ demo$trarlo% e2ecutando &aria$ &ece$ la macro 2ariables&Locales3% el &alor m;:imo
$iempre e$ tre$% en nue$tro ca$o% por 6ue llamamo$ a la macro +ontar tre$ &ece$ * e$ta%
incrementa el &alor de la &ariable una unidad cada &e/' OjO% aun6ue e$temo$ declarando la
&ariable i+ontador como Static% dentro de la macro +ontar% no por ello de2a de $er una &ariable de
;mbito local% como puede$ comprobarlo 1;cilmente tratando de mo$trar $u &alor de$de la macro
2ariables&Locales3% el $i,uiente cambio en la macro te deber=a dar un error de -&ariable no
de1inida-'
?8&+on Ex8l+*+&
"u. 1a'+a.l%s/5o*al%s4
$all $on&a'23
$all $on&a'23
$all $on&a'23
,5a s+gu+%n&% l+n%a Wd%.%'HaV da'&% un %''o'
MsgBox +$on&ado'
End "u.
I5erdad 6ue e$ mu* di&ertidoJ% a-ora% le -aremo$ un pe6ueKo cambio a la macro
2ariables&Locales3% para 6ue cuente -a$ta 6ue le di,amo$ 6ue LNoM% $i lo pre1iere$% puede$
crear otra macro para 6ue la anterior 6uede tal cual' >$pero 6ue lo -a*a$ notado% pero
continuamente te in&ito a e:perimentar * a 6ue tome$ tu$ propia$ deci$ione$ * te 1or2e$ tu$ propio$
criterio$ para tu pro,ramaci4n% a6u= como en la &ida% dice el mae$tro Sa&ater% -no$ &ienen bien la$
en$eKan/a$ de lo$ mae$tro$% pero al 1inal% e$tamo$ $olo$ para decidir-% pue$ e$o% t? decide$'
?8&+on Ex8l+*+&
"u. 1a'+a.l%s/5o*al%s5
A+( +R%s8u%s&a !s #n&%g%'
Ao
$all $on&a'23
+R%s8u%s&a B MsgBox2 "M$on&+nua' *on&andoN"7 4 C 327 "$on&+nua'"3
,R%*u%'da Gu% s+ %l usua'+o 8'%s+ona "+7 %l 9alo' Gu% d%9u%l9% MsgBox %s 6
5oo8 Uh+l% +R%s8u%s&a B 6
End "u.
).B.2 Cmbito +ri,ado
>$te $e,undo ni&el% corre$ponde a la$ &ariable$ declarada$ en la cabecera de un
modulo u$ando la palabra cla&e +ri,ate% recuerda 6ue la cabecera e$ el inicio de un modulo%
donde L$iempreM tiene$ 6ue a,re,ar la otra importante palabra cla&e %ption E'plicit% para 6ue
no$ a&i$e $iempre $i no -emo$ declarado una &ariable% e$to% te recuerdo% no e$ obli,atorio% pero te
a$e,uro 6ue lo a,radecer;$ m;$ de una &e/' Ob$er&a el e2emplo $i,uiente<
?8&+on Ex8l+*+&
,?.s%'9a Gu% %n 9%; d% A+( %s&a(os usando 0'+9a&%
0'+9a&% +n&$on&ado' !s #n&%g%'
)) E'F cmbito de &ariable$ g A-ora me &e$% a-ora no
"u. "u(a'/@/R%s&a'
,5la(a(os a la (a*'o "u(a'
$all "u(a'23
,Mos&'a(os %l 9alo' d% la 9a'+a.l%
MsgBox +n&$on&ado'
,5la(a(os a la (a*'o R%s&a'
$all R%s&a'23
,Mos&'a(os d% nu%9o %l 9alo' d% la 9a'+a.l%
MsgBox +n&$on&ado'
End "u.
"u. "u(a'
,!GuH au(%n&a(os la 9a'+a.l% %n dos un+dad%s
+n&$on&ado' B +n&$on&ado' C 2
End "u.
"u. R%s&a'
,@ aGuH '%s&a(os a la 9a'+a.l% una un+dad
+n&$on&ado' B +n&$on&ado' T 1
End "u.
Nota como a-ora% la &ariable intContador% e$ L&i$ibleM * manipulable por cual6uier
macro o 1unci4n declarada en el modulo% ojo, la teorDa dice que estas ,ariables, solo son
,isibles para el modulo donde se declaran, pero en mis pruebas 5(M&IE0 son ,isibles en
otros mdulos% ante$ de demo$trarte e$to% &eamo$ una &ariante de la macro anterior para $e,uir
$umando * re$tando'
?8&+on Ex8l+*+&
0'+9a&% +n&$on&ado' !s #n&%g%'
"u. "u(a'/@/R%s&a'2
A+( +R%s !s #n&%g%'
Ao
+R%s B MsgBox2 "0a'a su(a' 8'%s+ona "#" : $h'2133 : "0a'a '%s&a' 8'%s+ona =?" : /
$h'2133 : "0a'a sal+' 8'%s+ona $!=$E5!R"7 37 ""u(a' @ R%s&a'"3
"%l%*& $as% +R%s
$as% 6
$all "u(a'23
$as% 7
$all R%s&a'23
End "%l%*&
MsgBox +n&$on&ado'
5oo8 Dn&+l +R%s B 2
End "u.
A-ora $i% &amo$ a adelantarno$ un po6uito en lo$ tema$ * &eremo$ como a,re,ar un
$e,undo modulo a nue$tra biblioteca para a,re,ar m;$ macro$ * demo$trar como la$ &ariable$
declarada$ a ni&el modulo con Pri&ate $on &i$ible$ por cual6uier otro modulo% para ello% da un clic
con el bot4n $ecundario de tu rat4n (normalmente el derec-o) $obre la eti6ueta del modulo actual
donde e$t3$ traba2ando% e$ta acci4n te tiene 6ue mo$trar un men? conte:tual% de e$te% $elecciona$
-nsertar * de$pu3$ Modulo BAS-C como te mue$tro en la $i,uiente ima,en'
Aprendiendo OOo .a$ic )7
Tiene$ 6ue &er el nue&o modulo al lado del anterior% como $e 6ue ere$ ob$er&ador%
notara$ en el men? conte:tual anterior% tiene$ la opci4n de cambiar el nombre del modulo% te de2o
a tu criterio 6ue lo -a,a$% por a-ora% no$ ba$ta tener do$ m4dulo$ para prueba$ como en'
Nota 6ue al in$ertar un modulo% de 1orma predeterminada% e$te a,re,a la declaraci4n
de una nue&a macro% &amo$ a renombrarla * trataremo$ de acceder a la &ariable int+ontador
declarada * u$ada en el modulo uno% &eamo$ 6ue pa$a<
?8&+on Ex8l+*+&
"u. Mos&'a'1alo'23
MsgBox +n&$on&ado'
End "u.
Nota 6ue la macro anterior e$ta en el modulo 2 * al e2ecutarla no$ mue$tra el &alor de
la &ariable% 6ue e$ cero% pue$ recuerda 6ue el &alor inicial de toda &ariable num3rica e$ cero% pero
ob$er&a como LnoM no$ da error% como dice la teor=a% pue$ toma la declaraci4n de la &ariable del
modulo 1' 5ol&amo$ al modulo 1% copia * e2ecuta la $i,uiente macro'
?8&+on Ex8l+*+&
0'+9a&% +n&$on&ado' !s #n&%g%'
"u. 1alo'1a'+a.l%
+n&$on&ado' B 100
,5la(a(os a la (a*'o d%l (odulo 2
$all Mos&'a'1alo'23
End "u.
+reo 6ue e$ ba$tante claro 6ue la &ariable $e puede manipular * acceder de$de
cual6uier otro modulo% aun * cuando $e declare con Pri&ate% lo cual e$pero $e arre,le en 1utura$
&er$ione$% pue$ de e$te modo% u$ar Pri&ate * "im e$ indi$tinto * el $i,uiente tema no tiene ra/4n
de $er% inclu$o% en mi$ prueba$% la &ariable e$ accedida de$de otra$ biblioteca$ del arc-i&o' Te
a,radecer3 $i -ace$ tu$ prueba$ * $i nota$ al,o di1erente o te 1unciona como Ldeber=aM me lo
-a,a$ $aber'
)F E'F cmbito de &ariable$ g A-ora me &e$% a-ora no
).B. Cmbito de Dominio +ublico
>n e$te ;mbito% $e $upone% 6ue la$ &ariable$ declarada$ a ni&el cabecera de modulo
u$ando la palabra cla&e "im% $on &i$ible$ para cual6uier modulo de la biblioteca% pero en mi$
prueba$ e$ &i$ible -a$ta por lo$ m4dulo$ de otra$ biblioteca$ del arc-i&o * $e comporta
e:actamente del mi$mo modo 6ue la$ &ariable$ de ;mbito pri&ado &i$ta$ en el tema anterior% por lo
6ue no lo repetir3 a6u=% $olo e$peremo$ 6ue pronto $e arre,le * 1uncione como dicen 6ue debe
-acerlo'
?8&+on Ex8l+*+&
A+( +n&$on&ado' !s #n&%g%'
).B.) Cmbito Elobal
>$te ;mbito e$ i,ual al de dominio publico en cuanto a $u &i$ibilidad% pero di1iere en
cuanto a $u 1unci4n% pue$ e$ta ,uarda $u ultimo &alor% aun * cuando $e termina la macro' Para
6ue una &ariable $ea de ;mbito ,lobal% debe $er declarada en la cabecera de un m4dulo con la
palabra cla&e lobal de la $i,uiente manera'
?8&+on Ex8l+*+&
Elo.al +n&g$on&ado' !s #n&%g%'
"u. 1a'+a.l%/Elo.al23
+n&g$on&ado' B +n&g$on&ado' C 100
MsgBox +n&g$on&ado'
End "u.
Al e2ecutar &aria$ &ece$ la macro anterior% notara$ como ,uarda el &alor% aun *
cuando *a termino la e2ecuci4n de la macro' Su u$o podr=a comparar$e en 1unci4n a la$ &ariable$
de ;mbito local% declarada$ con la palabra cla&e Static% pero a ni&el ,lobal de toda$ la$ macro$ del
arc-i&o'
O con e$to terminamo$ un tema m;$% la recomendaci4n para e$te tema e$ procurar
u$ar lo m;$ po$ible &ariable$ de ;mbito local * de$pu3$ de ;mbito publico% e$to e$ por 6ue
con1orme *a no u$e$ una &ariable% al $er de ;mbito local% e$ta $e de$tru*e * $e libera la memoria
u$aba por ella al concluir la macro donde $e u$e% por $upue$to e$to no e$ re$tricti&o $olo tu
practica * e:periencia te dir;n cual e$ la me2or opci4n' >l decidir 6ue &ariable$ u$ar * con 6ue
;mbito no e$ un tema menor * cuando uno &a empe/ando $e con&ierte ca$i en un problema
e:i$tencial% pero no te preocupe$% e$peremo$ 6ue con lo$ muc-o$ e2emplo$ 6ue mo$tramo$% te
$ea m;$ 1;cil aprender a decidir lo me2or en cada ca$o'
Aprendiendo OOo .a$ic )G
).F Funciones y subrutinas 7 Di,ide y ,encerGs
odo lo comple!o puede dividirse en partes simples
8ene Descartes
>n oca$ione$% la$ 1uncione$ e in$truccione$ incorporada$ del len,ua2e% no $on
$u1iciente$ para re$ol&er al,?n problema planteado o $u comple2idad no$ obli,a a pen$ar en otra
alternati&a% en otra$ oca$ione$% el c4di,o $e &uel&e tan lar,o 6ue $e &uel&e di1=cil de leer% anali/ar
o me2orar' >n e$to$ ca$o$% como en otro$ m;$ 6ue tal &e/ $e te pre$enten% recurrimo$ a crear
nue$tra$ propia$ 1uncione$ * $ubrutina$' >n e$te capitulo &eremo$ como declararla$ * u$arla$.
>n el tema E'2 9n$truccione$ * 1uncione$ en OOo .a$ic % &imo$ al,uno$ concepto$
6ue no$ $er;n mu* ?tile$ en e$te% comencemo$ con lo$ e2emplo$ * de$pu3$ la$ e:plicacione$%
copia * e2ecuta la $i,uiente macro'
?8&+on Ex8l+*+&
"u. Mos&'a'M%nsa)%123
MsgBox "Es&o@ a8'%nd+%ndo ??o Bas+*"7 487 "!8'%nd+%ndo ??o Bas+*"
MsgBox "Es f>*+l @ d+9%'&+do"7 487 "!8'%nd+%ndo ??o Bas+*"
MsgBox "Oa 9o@ a (%d+o *a(+no"7 487 "!8'%nd+%ndo ??o Bas+*"
End "u.
Si% no tiene nada de e:traordinario% pero no$ re$ultara mu* ?til para nue$tro$
prop4$ito$' 5amo$ a $uponer una $e,unda macro $imilar a la anterior'
"u. Mos&'a'M%nsa)%223
MsgBox "Es un 8o*o &a'd%"7 487 "!8'%nd+%ndo ??o Bas+*"
MsgBox "Oa &%ngo su%\o"7 487 "!8'%nd+%ndo ??o Bas+*"
MsgBox ""olo a*a.a(os %s&% &%(a"7 487 "!8'%nd+%ndo ??o Bas+*"
End "u.
A-ora tenemo$ do$ macro$ 6ue -acen co$a$ mu* $imilare$% * $i,amo$ con nue$tra$
$upo$icione$% $upon,amo$ 6ue de nue$tro$ men$a2e$% el icono mo$trado * el titulo del cuadro de
dialo,o% $iempre $on lo$ mi$mo$% por lo 6ue lo ?nico 6ue cambia e$ la cadena mo$trada% e$te
ca$o e$ id4neo para 6ue -a,amo$ una $ubrutina% 6ue no e$ m;$ 6ue una macro creada por
no$otro$ a la 6ue com?nmente (no e$ obli,atorio) $e le pa$a un0uno$ par;metro($) o ar,umento($)
* realice una tarea' >$ decir L-a,aM al,o' +opia la $i,uiente macro * modi1ica la$ do$ primera$
macro$ para 6ue 6ueden de la $i,uiente manera'
?8&+on Ex8l+*+&
"u. Mos&'a'M%nsa)%323
70 E'G !uncione$ * $ubrutina$ g "i&ide * &encer;$
$all Mu%s&'aM%nsa)%2 "Es&o@ a8'%nd+%ndo ??o Bas+*" 3
$all Mu%s&'aM%nsa)%2 "Es f>*+l @ d+9%'&+do" 3
$all Mu%s&'aM%nsa)%2 "Oa 9o@ a (%d+o *a(+no" 3
$all Mu%s&'aM%nsa)%2 "Es un 8o*o &a'd%" 3
$all Mu%s&'aM%nsa)%2 "Oa &%ngo su%\o" 3
$all Mu%s&'aM%nsa)%2 ""olo a*a.a(os %s&% &%(a" 3
End "u.
"u. Mu%s&'aM%nsa)%2M%nsa)% !s "&'+ng3
MsgBox M%nsa)%7 487 "!8'%nd+%ndo ??o Bas+*"
End "u.
#o importante e$ 6ue aprenda$ como llamamo$ a una macro con ar,umento$ * e$
mu* importante 6ue lo$ ar,umento$ pa$ado$ $ean del mi$mo tipo de lo$ e$perado$% ob$er&a
como la macro !uestra!ensa'e Lnece$itaM un ar,umento llamado Men$a2e 6ue e$ de tipo Strin,%
entonce$% al llamarla% Lnece$itamo$M pa$arle una &ariable% no importa el nombre% $ino 6ue $ea de
tipo Strin,' Tambi3n ob$er&a 6ue u$amo$ la palabra cla&e +all para llamar a la macro% e$to no e$
re6ui$ito% la$ $i,uiente l=nea$ $on e6ui&alente$<
"u. Mos&'a'M%nsa)%323
$all Mu%s&'aM%nsa)%2 "Es&o@ a8'%nd+%ndo ??o Bas+*" 3
Mu%s&'aM%nsa)%2 "Es&o@ a8'%nd+%ndo ??o Bas+*" 3
Mu%s&'aM%nsa)% "Es&o@ a8'%nd+%ndo ??o Bas+*"
End "u.
Ob$er&a como en la primera u$amo$ +all * par3nte$i$% en la $e,unda omitimo$ +all *
en la tercera 6uitamo$ +all * lo$ par3nte$i$' >n lo per$onal el u$o de +all $olo lo u$o para $aber
6ue e$ una $ubrutina per$onali/ada% 6ueda a tu criterio $u u$o u omi$i4n' >l u$o de par3nte$i$
como abra$ notado tambi3n e$ opcional% como muc-a$ in$truccione$ 6ue u$a OpenO11ice'or,
-acen u$o de lo$ par3nte$i$% tambi3n% en lo per$onal% -a,o u$o de ello$% pero *a $abe$% tiene$ la
ultima palabra'
A-ora% &eremo$ un tema importante% a una $ubrutina% $e le pueden pa$ar lo$
ar,umento$ o par;metro$ de do$ manera$% una e$ por &alor * otra por re1erencia% la di1erencia e$
mu* $encilla pero e$ de $uma importancia $aber la di1erencia' +uando pa$amo$ lo$ ar,umento$
por &alor% en realidad lo 6ue $e -ace e$ pa$arle una LcopiaM del &alor de la &ariable% por lo cual% el
&alor de e$te ar,umento $olo $e puede u$ar LdentroM de la $ubrutina 6ue la u$a% en cambio%
cuando lo$ ar,umento$ $e pa$an por re1erencia% lo 6ue e$tamo$ -aciendo e$ pa$arle la
Lubicaci4nM de la &ariable en la memoria% por lo cual% podemo$ modi1icar $u &alor LdentroM de la
$ubrutina% comprobemo$lo con un e2emplo'
?8&+on Ex8l+*+&
"u. 0aso0o'R%f%'%n*+a23
A+( sM%nsa)% !s "&'+ng
,!s+gna(os una *ad%na a la 9a'+a.l%
sM%nsa)% B "5a &'a9%sHa d% (+l ]+l6(%&'os *o(+%n;a *on un 8aso"
,5la(a(os a la su.'u&+na @ l% 8asa(os %l a'gu(%n&o
$all $a(.+a1alo'2 sM%nsa)% 3
,Mos&'a(os la 9a'+a.l% *on %l nu%9o 9alo'7 *a(.+ado %n la su.'u&+na
MsgBox sM%nsa)%
Aprendiendo OOo .a$ic 71
End "u.
"u. $a(.+a1alo'2$ad%na !s "&'+ng3
,Mos&'a(os %l (%nsa)% *on la *ad%na 8asada
MsgBox $ad%na7 487 "$ad%na ?'+g+nal"
,Mod+f+*a(os %l a'gu(%n&o 8asado
$ad%na B "Eso lo d+)o 5ao Is%"
End "u.
Ob$er&a como en e$te ca$o% modi1icamo$ el ar,umento pa$ado * el cambio $e &e
re1le2ado en la &ariable ori,en% no a$=% en el $i,uiente e2emplo'
?8&+on Ex8l+*+&
"u. 0aso0o'1alo'23
A+( sM%nsa)% !s "&'+ng
,!s+gna(os una *ad%na a la 9a'+a.l%
sM%nsa)% B "El &'a.a)o %s %l '%fug+o d% los Gu% no &+%n%n nada Gu% ha*%'"
,5la(a(os a la su.'u&+na @ l% 8asa(os %l a'gu(%n&o
$all =o$a(.+a1alo'2 sM%nsa)% 3
,Mos&'a(os la 9a'+a.l% Gu% nos (u%s&'a lo (+s(o7 %s d%*+'
,no h%(os 8od+do *a(.+a' su 9alo' %n la su.'u&+na
MsgBox sM%nsa)%
End "u.
,?.s%'9a %l *a(.+o %n la d%*la'a*+on d%l a'gu(%n&o usando B@1al
"u. =o$a(.+a1alo'2 B@1al $ad%na !s "&'+ng 3
,Mos&'a(os %l (%nsa)% *on la *ad%na 8asada
MsgBox $ad%na7 487 "$ad%na ?'+g+nal"
,#n&%n&a(os (od+f+*a' %l a'gu(%n&o 8asado
$ad%na B "Eso lo d+)o ?s*a' U+ld%"
End "u.
A-ora% la &ariable ori,en 6uedo intacta% pero ob$er&a la di1erencia en la declaraci4n
de la $ubrutina% para pa$ar un ar,umento por &alor% tiene$ 6ue u$ar la palabra cla&e &y-al Lante$M
del nombre del ar,umento' Por de1ault% $al&o 6ue $e indi6ue lo contrario% lo$ ar,umento$ $e pa$an
por re1erencia' Una pre,unta 6ue no$ a*uda a $aber $i declaramo$ una &ariable por &alor o
re1erencia e$< Inece$ito manipular $u &alor en la $ubrutinaJ% $i la re$pue$ta e$ $i $e pa$a por
re1erencia% $i e$ no% $e pa$a por &alor' de ob$er&ado 6ue -a* do$ criterio$ encontrado$ en el u$o
de lo$ ar,umento$ por &alor o re1erencia% al,uno$ pro,ramadore$ opinan 6ue todo$ lo$
ar,umento$ deber=an pa$ar$e por re1erencia% pue$ al pa$ar la direcci4n de la &ariable en memoria%
no e$tamo$ u$ando m;$ memoria a e$te criterio podr=a ar,umentar$e 6ue lo$ e6uipo$ actuale$
tienen muc-a m;$ memoria% otro$ dicen 6ue todo$ lo$ ar,umento$ deber=an pa$ar$e por &alor%
pue$ una $ubrutina tiene 6ue $er como una unidad completa por $i mi$ma% * la memoria u$ada $e
libera al 1inali/ar la $ubrutina' #a$ preocupacione$ del u$o de la memoria% por el momento% $e la$
&amo$ a de2ar a ,rande$ pro*ecto$% como OpenO11ice'or, por e2emplo% donde e$t;n in&olucrada$
millone$ de l=nea$ de c4di,o% para nue$tro$ 1ine$ pr;ctico$% t? decide$% $i pa$a$ lo$ ar,umento$ en
$ubrutina$ * 1uncione$ por &alor o re1erencia'
72 E'G !uncione$ * $ubrutina$ g "i&ide * &encer;$
Toda$ la$ $ubrutina$ 6ue ten,an ar,umento$ tienen 6ue $er in&ocada$ (llamada$)
de$de otra macro% $i intenta$ e2ecutar directamente una $ubrutina con ar,umento$ de$de el 9">%
te dar; el $i,uiente error'
O $i la intenta$ e2ecutar de$de la inter1a/ del u$uario% e$ decir% de$de el men?
4erramientas 5 !acros 5 #'ecutar macro(((% te dar; el $i,uiente error'
#a$ $ubrutina$ no$ a*udan a di&idir nue$tro c4di,o en blo6ue$ l4,ico$ m;$
mane2able$% cierta oca$i4n% no recuerdo donde% le= 6ue una macro% procedimiento o $ubrutina% no
Ldeber=aM tener m;$ de una p;,ina de l=nea$% e$to por $upue$to e$ $umamente $ub2eti&o% e$cribir
Lc4di,o compactoM no e$ $in4nimo de Lc4di,o e1icienteM% una &e/ m;$% la practica diaria te dictara
lo$ me2ore$ ar,umento$ para pro,ramar'
dabr; oca$ione$% en 6ue 6uiera$ $alir anticipadamente de una $ubrutina% para ello%
e:i$te una in$trucci4n 6ue $e llama E'it Sub% &eamo$ $u u$o'
?8&+on Ex8l+*+&
"u. E)%(8lo/Ex+&"u.23
A+( sK'as% !s "&'+ng
sK'as% B I'+(2#n8u&Box2"Es*'+.% una f'as%"33
$all $on&a'5%&'as2 sK'as% 3
End "u.
"u. $on&a'5%&'as2 $ad%na !s "&'+ng3
#f $ad%na B "" Ih%n
Ex+& "u.
Els%
MsgBox "Ha@" : "&'25%n2$ad%na33 : " l%&'as %n la *ad%na" : $h'2133 : $h'2133 : $ad%na
End #f
End "u.
Ob$er&a como en la $ubrutina ContarLetras $i el ar,umento pa$ado e$ta &ac=o% $ale
inmediatamente de la macro con la in$trucci4n E'it Sub% al,uno$ autore$ no recomiendan el u$o
de la in$trucci4n >:it Sub% en Lteor=aM una $ubrutina Ldeber=aM $er completa% e$ decir% no Ldeber=aM
nece$itar $alida$ L1or/ada$M% por $upue$to 6ueda a tu criterio * e:periencia $u u$o% por e2emplo% la
$ubrutina anterior podr=a 6uedar a$='
Aprendiendo OOo .a$ic 7(
"u. $on&a'5%&'as12 $ad%na !s "&'+ng3
#f $ad%na XY "" &h%n
MsgBox "Ha@" : "&'2 5%n2$ad%na3 3 : " l%&'as %n la *ad%na" : $h'2133 : $h'2133 : $ad%na
End #f
End "u.
Ob$er&a como $olo e2ecutamo$ el c4di,o $i el ar,umento +adena LnoM e$ta &ac=o%
inclu$o% al,uno$ autore$ m;$ e:i,ente$% ar,umentan 6ue la /,alidacin de datos2 (no $e te
ol&ide e$ta 1ra$e)% $e tiene 6ue -acer Lante$M de llamar a una $ubrutina% e$ decir% 6ue e$ta$
Ldeber=anM -acer $olo $u traba2o * pa$arle lo$ dato$ correcto$% para e2empli1icar e$to% ob$er&a la$
modi1icacione$ a la$ macro$ anteriore$'
"u. E)%(8lo/Ex+&"u.223
A+( sK'as% !s "&'+ng
sK'as% B I'+(2#n8u&Box2"Es*'+.% una f'as%"33
#f sK'as% XY "" Ih%n
$all $on&a'5%&'as22 sK'as% 3
End #f
End "u.
"u. $on&a'5%&'as22 $ad%na !s "&'+ng3
MsgBox "Ha@" : "&'25%n2$ad%na33 : " l%&'as %n la *ad%na" : $h'2133 : $h'2133 : $ad%na
End "u.
Nota 6ue la &alidaci4n la -acemo$ con la linea'
#f sK'as% XY "" Ih%n
Por lo 6ue al llamar a la macro ContarLetras6% *a le e$tamo$ pa$ando un dato
&alidado% e$ decir correcto% por 6ue dentro de la $ubrutina no e$ nece$ario -acer nin,una
&alidaci4n% por $upue$to e$to tiene $u$ pro$ * $u$ contra$% $u$ de1en$ore$ * $u$ detractore$' Solo
te di,o% aplica tu criterio 6ue la e:periencia * la practica $er;n tu$ me2ore$ aliada$' #o 6ue $i
nunca% otra &e/ lo repito% nunca debe$ de de2ar de -acer% e$ /,alidar tus datos2% ,aranti/ar 6ue
$ean correcto$% no importa donde lo -a,a$ pero &alidalo$% un ,ran porcenta2e de errore$ en
muc-o$ pro,rama$ e$ por una de1iciente &alidaci4n de dato$ * tambi3n% *a te dar;$ cuenta% 6ue
un ,ran porcenta2e de c4di,o% $e no$ &a% &alidando dato$'
5eamo$ otro e2emplo de una $ubrutina' Supon,amo$ 6ue no$ piden -acer una macro
6ue $olicite el radio de un circulo * calcule $u ;rea'
?8&+on Ex8l+*+&
"u. $al*ula'!'%a$+'*ulo123
A+( d!'%a !s Aou.l%
A+( sRad+o !s "+ngl%
$ons& 0# !s "+ngl% B 3-1416
,"ol+*+&a(os %l 'ad+o d%l *+'*ulo a *al*ula'7 o.s%'9a Gu% 8'+(%'o l+(8+a(os los %s8a*+os
,*on I'+(7 d%s8uSs *on9%'&+(os %l 9alo' a &+8o "+ngl%7 Gu% %s %l &+8o d% 9a'+a.l% %s8%'ado
sRad+o B $"ng2 I'+(2 #n8u&Box2 "M$ual %s %l 'ad+oN"7 "i'%a d% un *+'*ulo"7 "1" 3 3 3
,"olo s+ &%n%(os 9alo'%s (a@o'%s a *%'o
7E E'G !uncione$ * $ubrutina$ g "i&ide * &encer;$
#f sRad+o Y 0 Ih%n
d!'%a B 0# 2 sRad+o j 2 3
MsgBox "El >'%a d% un *+'*ulo d% 'ad+o B " : "&'2sRad+o3 : " %s B4 " : "&'2d!'%a3
End #f
End "u.
Si creamo$ una $ubrutina% podr=a $er al,o a$='
?8&+on Ex8l+*+&
"u. $al*ula'!'%a$+'*ulo223
A+( d!'%a !s Aou.l%
A+( sRad+o !s "+ngl%
sRad+o B $"ng2 I'+(2 #n8u&Box2 "M$ual %s %l 'ad+oN"7 "i'%a d% un *+'*ulo"7 "1" 3 3 3
#f sRad+o Y 0 Ih%n
$all A%9u%l9%!'%a$+'*ulo2 sRad+o7 d!'%a 3
MsgBox "El >'%a d% un *+'*ulo d% 'ad+o " : "&'2sRad+o3 : " %s B4 " : "&'2d!'%a3
End #f
End "u.
"u. A%9u%l9%!'%a$+'*ulo2 Rad+o !s "+ngl%7 !'%a !s Aou.l% 3
$ons& 0# !s "+ngl% B 3-1416
!'%a B 0# 2 Rad+o j 2 3
End "u.
Si bien lo anterior 1unciona% no e$ com?n u$ar $ubrutina$ para manipular &ariable$ *
ar,umento$% lo m;$ u$ual% $i $e 6uiere Lde&ol&erM un &alor% e$ u$ar una 1unci4n en &e/ de una
$ubrutina% la macro anterior% u$ando una 1unci4n% 6uedar=a de la $i,uiente manera'
?8&+on Ex8l+*+&
"u. $al*ula'!'%a$+'*ulo323
A+( d!'%a !s Aou.l%
A+( sRad+o !s "+ngl%
sRad+o B $"ng2 I'+(2 #n8u&Box2 "M$ual %s %l 'ad+oN"7 "!'%a d% un *+'*ulo"7 "1" 3 3 3
#f sRad+o Y 0 Ih%n
,?.s%'9a *o(o usa(os la fun*+on @ as+gna(os %l '%sul&ado a una 9a'+a.l%
d!'%a B !'%a$+'*ulo2 sRad+o 3
MsgBox "El a'%a d% un *+'*ulo d% 'ad+o B " : "&'2sRad+o3 : " %s B4 " : "&'2d!'%a3
End #f
End "u.
Kun*&+on !'%a$+'*ulo2 Rad+o !s "+ngl% 3 !s Aou.l%
$ons& 0# !s "+ngl% B 3-1416
,?.s%'9a *o(o usa(os %l no(.'% d% la fun*+6n 8a'a d%9ol9%' al 9alo'
!'%a$+'*ulo B 0# 2 Rad+o j 2 3
End Kun*&+on
Ob$er&a el modo de declarar una 1unci4n% a-ora% en &e/ de u$ar la palabra cla&e
Sub% u$amo$ una nue&a palabra cla&e Function% la declaraci4n de lo$ ar,umento$ tiene la$
mi$ma$ caracter=$tica$ u$ada$ en la$ $ubrutina$% como el pa$o por &alor o re1erencia% pero un
cambio importante% e$ el tipo de &alor Lde&ueltoM por una 1unci4n% e$ decir% la$ 1uncione$ tambi3n
Aprendiendo OOo .a$ic 75
de&uel&en un LtipoM e$peci1ico de &alor% por $upue$to% tambi3n pueden de&ol&er el tipo por de1ault
de la$ &ariable$ 6ue e$ 5ariant pero la recomendaci4n e$ e$peci1icar $iempre 6ue te $ea po$ible el
tipo de &alor 6ue e$pera$ de&uel&a la 1unci4n' Otro cambio importante e$ 6ue para de&ol&er el
&alor dentro de la 1unci4n% en &e/ de u$ar otro ar,umento o &ariable% u$amo$ el mi$mo nombre de
la 1unci4n como de$tino * para 1inali/ar% en &e/ de u$ar >nd Sub como -a$ta a-ora% en Ltoda$M la$
declaracione$ de Function% debemo$ cerrarla$ con End Function, $ino% te dar; un error'
>l pa$o de ar,umento$ en $ubrutina$ * 1uncione$% tiene otra po$ibilidad mu*
intere$ante% el pa$o de ar,umento$ opcionale$% continuemo$ con nue$tro e2emplo del circulo%
$upon,amo$ 6ue a-ora $e no$ pide -acer una macro 6ue calcule *a $ea el ;rea o el per=metro de
un circulo% para u$ar la mi$ma 1unci4n% le a,re,aremo$ un ar,umento opcional para $aber $i lo 6ue
6ueremo$ calcular e$ el per=metro'
?8&+on Ex8l+*+&
"u. $al*ula'$+'*ulo
A+( d!'%a !s Aou.l%
A+( d0%'+ !s Aou.l%
A+( sRad+o !s "+ngl%
sRad+o B $"ng2 I'+(2 #n8u&Box2 "M$ual %s %l 'ad+oN"7 "$+'*ulo"7 "1" 3 3 3
#f sRad+o Y 0 Ih%n
,!GuH usa(os la fun*+6n "#= %l a'gu(%n&o o8*+onal
d!'%a B $+'*ulo2 sRad+o 3
,O aGuH usa(os la fun*+6n $?= %l a'gu(%n&o o8*+onal
d0%'+ B $+'*ulo2 sRad+o7 I'u% 3
MsgBox "i'%a B " : "&'2d!'%a3 : *h'2133 : /
"0%'H(%&'o B " : "&'2d0%'+37 647 "$+'*ulo"
End #f
End "u.
Kun*&+on $+'*ulo2 Rad+o !s "+ngl%7 ?8&+onal 0%'+(%&'o !s Bool%an 3 !s Aou.l%
$ons& 0# !s "+ngl% B 3-1416
,$o(8'o.a(os s+ %l 8a'>(%&'o s% 8aso o no
#f #sM+ss+ng2 0%'+(%&'o 3 Ih%n
,"+ no s% 8aso l% as+gna(os %l 9alo' 8o' d%faul&
0%'+(%&'o B Kals%
End #f
#f 0%'+(%&'o Ih%n
$+'*ulo B 0# 2 Rad+o 2 3
Els%
$+'*ulo B 0# 2 Rad+o j 2 3
End #f
End Kun*&+on
Nota el u$o de la palabra cla&e %ptional% para 1ine$ de lo 6ue $e no$ pide u$amo$
una &ariable tipo boleana% &erdadera o 1al$a (.oolean)% pero en tu$ 1uncione$ puede declarar al
i,ual 6ue lo$ otro$ ar,umento$% del tipo 6ue nece$ite$% puede$ declarar tanto$ ar,umento$
opcionale$ como nece$ite$% el punto importante e$ 6ue Lcompruebe$M $i $e pa$o o no el
ar,umento para 6ue en $u de1ecto% le a$i,ne$ un &alor por de1ault a dic-o ar,umento% para
&eri1icar $i $e pa$o o no un ar,umento u$a$ la 1unci4n de OOo .a$ic IsMissin*? (r*umento @%
como $e &e en el e2emplo anterior' Todo$ lo$ par;metro$ 6ue declare$ como opcionale$ deben de
ir como ?ltimo$ ar,umento$ declarado$'
7) E'G !uncione$ * $ubrutina$ g "i&ide * &encer;$
"e tarea% modi1ica la macro para 6ue le pre,unte$ al u$uario% I6ue e$ lo 6ue de$ea
calcularJ * por $upue$to% $olo mue$tra el &alor del calculo $olicitado'
A la$ 1uncione$ tambi3n e$ po$ible pa$arle como ar,umento$% matrice$% lo ?nico 6ue
tiene$ 6ue con$iderar e$ 6ue lo$ ar,umento$ e$perado$ como matrice$% tiene$ $iempre 6ue
declararlo$ como 5ariant $i para llenar dic-a matri/ u$a$ la 1unci4n Arra*% en otro$ ca$o$% puede$
u$ar el mi$mo tipo con 6ue declare$ tu matri/% &eamo$ un e2emplo de uno * otro'
?8&+on Ex8l+*+&
"u. "u(ando
A+( (Aa&os293 !s #n&%g%'
A+( *o1 !s #n&%g%'
,5l%na(os la (a&'+; *on da&os al%a&o'+os %n&'% 1 @ 100
Ko' *o1 B 5Bound2 (Aa&os23 3 Io DBound2 (Aa&os23 3
(Aa&os2 *o1 3 B Rnd23 100 C 1
=%x&
MsgBox "5a su(a d% la (a&'+; %s B " : "&'2 "u(aMa&'+;2 (Aa&os23 3 3
End "u.
Kun*&+on "u(aMa&'+; 2 Aa&os23 !s #n&%g%' 3 !s #n&%g%'
A+( *o1 !s #n&%g%'
Ko' *o1 B 5Bound2 Aa&os23 3 Io DBound2 Aa&os23 3
"u(aMa&'+; B "u(aMa&'+; C Aa&os2 *o1 3
=%x&
End Kun*&+on
Ob$er&a como $e declar4 la matri/ tipo 9nte,er% tanto la &ariable en la macro como el
ar,umento en la declaraci4n de la 1unci4n% a-ora% intentemo$ u$ar una matri/% -aciendo u$o de la
1unci4n Arra* * &eamo$ 6ue pa$a'
?8&+on Ex8l+*+&
"u. "u(ando223
A+( (Aa&os23 !s #n&%g%'
A+( +"u(a !s #n&%g%'
,5l%na(os la (a&'+; *on la fun*+on !''a@
(Aa&os23 B !''a@2107207307407507607707807903
,#n&%n&a(os su(a' la (a&'+;
+"u(a B "u(aMa&'+;2 (Aa&os23 3
MsgBox "&'2 +"u(a 3
End "u.
Kun*&+on "u(aMa&'+; 2 Aa&os23 !s #n&%g%' 3 !s #n&%g%'
A+( *o1 !s #n&%g%'
Ko' *o1 B 5Bound2 Aa&os23 3 Io DBound2 Aa&os23 3
"u(aMa&'+; B "u(aMa&'+; C Aa&os2 *o1 3
=%x&
End Kun*&+on
Aprendiendo OOo .a$ic 77
No$ da un error% I&erdadJ% la ra/4n e$ 6ue la 1unci4n e$pera una matri/ de tipo
9nte,er * $e le e$ta pa$ando una matri/ de tipo 5ariant% e$to e$ por 6ue la 1unci4n Arra*% siempre%
no importa como -a*a$ declarado la matri/% $iempre de&uel&e una matri/ tipo 5ariant' +orri,e la
declaraci4n de la 1unci4n * a-ora $i% debe de 1uncionar'
Kun*&+on "u(aMa&'+; 2 Aa&os23 !s 1a'+an& 3 !s #n&%g%'
A+( *o1 !s #n&%g%'
Ko' *o1 B 5Bound2 Aa&os23 3 Io DBound2 Aa&os23 3
"u(aMa&'+; B "u(aMa&'+; C Aa&os2 *o1 3
=%x&
End Kun*&+on
Ob$er&a como cambiamo$ a tipo 5ariant el tipo de matri/ 6ue e$pera con lo cual% *a
no no$ da error'
>n la$ 1uncione$% tambi3n e$ po$ible -acer u$o de la in$trucci4n >:it% claro% a6u=
u$aremo$ E'it Function% tiene la$ mi$ma$ con$ideracione$ 6ue te comente para la in$trucci4n
>:it Sub% a$= 6ue no a-ondare en ello% tan $olo te mue$tro un $encillo e2emplo de $u u$o'
?8&+on Ex8l+*+&
"u. $o''%o23
A+( s$o''%o !s "&'+ng
s$o''%o B I'+(2#n8u&Box2"Aa(% &u *o''%o"33
#f 1al+da'$o''%o2 s$o''%o 3 Ih%n
MsgBox "$o''%o 1al+do"
Els%
MsgBox "$o''%o =? 9al+do"
End #f
End "u.
,0a'a f+n%s d+d>*&+*os7 solo 9al+da'%(os Gu% %l *o''%o &%nga
,%l o.l+gado sH(.olo d% a''o.a 2k3 @ Gu% no s%a n+ %l 8'+(%'
,n+ %l ul&+(o *a'>*&%'
Kun*&+on 1al+da'$o''%o2 $o''%o !s "&'+ng 3 !s Bool%an
A+( 8os !s #n&%g%'
,"+ %l a'gu(%n&o $o''%o %s&a 9a*Ho7 sal+(os d% la fun*+6n
#f $o''%o B "" Ih%n
,"+ lo d%s%as %s&a l+n%a la 8u%d%s o(+&+'7 8u%s al sal+' *on Ex+& Kun*&+on
,la fun*+6n d%9u%l9% Kalso7 8%'o &al 9%; %n o&'os *asos Gu% no s%a .ool%ana
,la '%s8u%s&a7 n%*%s+&%s as+gna'l% un 9alo' 8'%d%&%'(+nado d+f%'%n&%
1al+da'$o''%o B Kals%
Ex+& Kun*&+on
Els%
,Bus*a(os la 8os+*+6n d% la a''o.a *on la fun*+6n #n"&'
8os B #n"&'2 17 $o''%o7 "k" 3
,=o d%.% s%' n+ %l 8'+(%'o n+ %l ul&+(o *a'>*&%'
,%n %l s+gu+%n&% &%(a a8'%nd%'%(os (>s d% los o8%'ado'%s l6g+*os
#f 8os Y 1 !nd 8os X 5%n2$o''%o3 Ih%n
1al+da'$o''%o B I'u%
Els%
1al+da'$o''%o B Kals%
End #f
End #f
End Kun*&+on
7F E'G !uncione$ * $ubrutina$ g "i&ide * &encer;$
Para terminar e$te tema% &eamo$ el e2emplo de una 1unci4n 6ue -ace u$o de una
1unci4n incorporada del len,ua2e 6ue e$ mu* bonita' Supon,amo$ 6ue tenemo$ 6ue mo$trar
muc-o$ men$a2e$ al u$uario% por e2emplo% el $i,uiente'
?8&+on Ex8l+*+&
"u. Mos&'a'M%nsa)%s123
A+( sM%nsa)% !s "&'+ng
sM%nsa)% B "0o' fa9o' %s*og% una o8*+on4 $!=$E5!R B "al%s d%l 8'og'a(a " : /
"RE0EI#R B #n&%n&a d% nu%9o #E=?R!R B =o ha*% nada"
MsgBox sM%nsa)%7 27 "?8*+on"
End "u.
+omo podr;$ notar% la e$t3tica no e$ mu* bonita 6ue di,amo$'
Me2oremo$ un poco la &i$ta de nue$tro cuadro de men$a2e% in$ertando uno$ $alto$ de
linea% 6ue% como $abe$% $e -ace u$ando la 1unci4n +-r pa$andole el ar,umento 10% 6ue e$ el &alor
AS+99 para el $alto de linea% de la $i,uiente manera'
"u. Mos&'a'M%nsa)%s223
A+( sM%nsa)% !s "&'+ng
sM%nsa)% B "0o' fa9o' %s*og% una o8*+on4" : $h'2103 : $h'2103 : /
"$!=$E5!R B "al%s d%l 8'og'a(a" : $h'2103 : /
"RE0EI#R B #n&%n&a d% nu%9o" : $h'2103 : /
"#E=?R!R B =o ha*% nada"
MsgBox sM%nsa)%7 27 "?8*+6n"
End "u.
A-ora $i% nue$tro cuadro de men$a2e tiene muc-a me2or pre$entaci4n'
Pero ima,inate 6ue tiene$ 6ue mo$trar m?ltiple$ men$a2e$ con di1erente$ cadena$ *
e$tar concatenando lo$ $alto$ de linea en cada una% no e$ una acti&idad 6ue di,amo$ mu*
placentera% para ello% -a,amo$ una 1unci4n 6ue lo -a,a por no$otro$'
Kun*&+on #ns%'&a'"al&os2 Aa&os23 3 !s "&'+ng
#ns%'&a'"al&os B [o+n2 Aa&os237 $h'2133 3
Aprendiendo OOo .a$ic 7G
End Kun*&+on
Ob$er&a 6ue 1unci4n m;$ $encilla * 6ue ?til * linda e$% la 1unci4n >oin de OOo .a$ic%
e$ una 1unci4n 6ue me ,u$ta muc-o% e$pera como ar,umento$% una matri/ * un car;cter
$eparador% lo 6ue -ace e$ 2untar cada elemento de la matri/ $eparado$ por el car;cter $eparador%
en el e2emplo $i,uiente% 2untamo$ en una cadena uno$ n?mero$ $eparado$ por un ,uion'
"u. [un&a'Aa&os23
A+( (Aa&os23 !s 1a'+an&
A+( s$ad%na !s "&'+ng
(Aa&os23 B !''a@210072007300740075003
s$ad%na B [o+n2 (Aa&os237 "T"3
MsgBox s$ad%na
End "u.
#a 1unci4n -nsertarSaltos la u$amo$ de la $i,uiente manera'
"u. Mos&'a'M%nsa)%s323
A+( (M%nsa)%s23 !s 1a'+an&
A+( sM%nsa)% !s "&'+ng
,R%*u%'da Gu% la fun*+6n !''a@ "#EM0RE d%9u%l9% una (a&'+; 1a'+an&
(M%nsa)%s23 B !''a@2"0o' fa9o' %s*og% una o8*+6n4"7""7"$!=$E5!R B "al%s d%l 8'og'a(a"7"RE0EI#R B
#n&%n&a d% nu%9o"7"#E=?R!R B =o ha*% nada"3
,5la(a(os a la fun*+6n Gu% +ns%'&a los sal&os d% l+n%a
sM%nsa)% B #ns%'&a'"al&os2 (M%nsa)%s23 3
,Mos&'a(os %l (%nsa)%
MsgBox sM%nsa)%7 27 "?8*+6n"
End "u.
"i&idir nue$tro c4di,o en $ubrutina$ * 1uncione$% e$ el pan nue$tro de cada d=a
cuando $e de$arrollan aplicacione$% no debe$ de tener duda pue$ m;$ adelante la$ u$aremo$
1recuentemente% por a-ora% otro tema -a lle,ado a $u 1in'
VV!eli/ pro,ramaci4nWW
F0 E'10 Operadore$
).1H %peradores
OOo .a$ic $oporta lo$ $i,uiente operadore$ aritm3tico$% de relaci4n * l4,ico$'
).1H.1 / I 2 E'ponenciacin ?aritm$tico@
Se u$a para ele&ar un n?mero llamado ba$e a otro llamado e:ponente' >l n?mero
re$ultante del $i,uiente e2emplo% tal &e/ te re$ulte 1amiliar'
?8&+on Ex8l+*+&
"u. 0o&%n*+as123
A+( +=u(1 !s #n&%g%'
A+( +=u(2 !s #n&%g%'
A+( +R%sul !s #n&%g%'
+=u(1 B 2 ,Bas%
+=u(2 B 10 ,Ex8on%n&%
+R%sul B +=u(1 j +=u(2
MsgBox "&'2+R%sul3
End "u.
>n ,eneral con todo$ lo$ operadore$% debe$ de tener la precauci4n de pre&er lo
me2or po$ible% 6ue el re$ultado de la operaci4n no e:ceda el LtamaKoM de la &ariable de$tino% por
e2emplo% la $i,uiente operaci4n te tiene 6ue dar un error de de$bordamiento% e$ decir% el re$ultado
no cabe en la &ariable i@e$ul declarada como entera (9nte,er)'
"u. 0o&%n*+as223
A+( +=u(1 !s #n&%g%'
A+( +=u(2 !s #n&%g%'
A+( +R%sul !s #n&%g%'
+=u(1 B 3 ,Bas%
+=u(2 B 10 ,Ex8on%n&%
+R%sul B +=u(1 j +=u(2
MsgBox "&'2+R%sul3
End "u.
a
n
Aprendiendo OOo .a$ic F1
#a $oluci4n e$ cambiar la &ariable i@e$ul por una m;$ ,rande% en e$te ca$o #on,%
pero $e,?n tu$ nece$idade$ podr=a $er inclu$o m;$ ,rande'
A+( +R%sul !s 5ong
#a ba$e * el e:ponente no tienen por 6ue $er entero$% ob$er&a el cambio de
declaraci4n de la$ &ariable$'
"u. 0o&%n*+as323
A+( +=u(1 !s "+ngl%
A+( +=u(2 !s "+ngl%
A+( +R%sul !s Aou.l%
+=u(1 B 2-53 ,Bas%
+=u(2 B 5-54 ,Ex8on%n&%
+R%sul B +=u(1 j +=u(2
MsgBox "&'2+R%sul3
End "u.
Tampoco tienen por 6ue $er po$iti&o$% cuando la ba$e e$ ne,ati&a% el $i,no de la
potencia lo determinar; el e:ponente% $i e$te e$ par $er; po$iti&a% $i e$ impar $er; ne,ati&a% de
acuerdo a la$ le*e$ de lo$ $i,no$ 6ue *a conoce$ de$de la e$cuela elemental% como $e
comprueba en lo$ $i,uiente e2emplo$'
"u. 0o&%n*+as423
A+( +=u(1 !s "+ngl%
A+( +=u(2 !s "+ngl%
A+( +R%sul !s Aou.l%
+=u(1 B T2 ,Bas%
+=u(2 B 4 ,Ex8on%n&%
+R%sul B +=u(1 j +=u(2
MsgBox "&'2+R%sul3 ,R%sul&ado 8os+&+9o
+=u(1 B T2 ,Bas%
+=u(2 B 5 ,Ex8on%n&%
+R%sul B +=u(1 j +=u(2
MsgBox "&'2+R%sul3 ,R%sul&ado n%ga&+9o
End "u.
>n el ca$o de 6ue el e:ponente $ea ne,ati&o% lo 6ue -ace el len,ua2e% como lo dictan
la$ matem;tica$% in&ierte la ba$e para 6ue el e:ponente $ea po$iti&o'
F2 E'10 Operadore$
"u. 0o&%n*+as523
A+( +=u(1 !s "+ngl%
A+( +=u(2 !s "+ngl%
A+( +R%sul !s Aou.l%
+=u(1 B 2 ,Bas%
+=u(2 B T3 ,Ex8on%n&%
+R%sul B +=u(1 j +=u(2
MsgBox "&'2+R%sul3
End "u.
).1H.2 / J 2 Multiplicacin ?aritm$tico@
#a multiplicaci4n e$ la operaci4n aritm3tica 6ue no$ permite -acer una $uma
abre&iada% al re$ultado $e le llama producto * lo$ n?mero$ multiplicado$ 1actore$'
?8&+on Ex8l+*+&
"u. Mul&+8l+*a*+on123
A+( +=u(1 !s #n&%g%'
A+( +=u(2 !s #n&%g%'
A+( +R%sul !s #n&%g%'
,Ka*&o'%s
+=u(1 B 365
+=u(2 B 34
+R%sul B +=u(1 +=u(2
MsgBox "&'2+R%sul3
End "u.
@ecuerda 6ue la &ariable donde a$i,ne$ el re$ultado% debe $er lo $u1icientemente
,rande para contenerlo% 6ue puede$ multiplicar &alore$ entero$ * no entero$% po$iti&o$ * ne,ati&o$%
en e$te ca$o% la$ le*e$ de lo$ $i,no$ aplican correctamente'
?8&+on Ex8l+*+&
"u. Mul&+8l+*a*+on223
A+( +=u(1 !s #n&%g%'
A+( +=u(2 !s #n&%g%'
A+( +R%sul !s #n&%g%'
+=u(1 B 11
+=u(2 B 56
+R%sul B +=u(1 +=u(2
MsgBox "&'2+R%sul3
+=u(1 B T11
+=u(2 B 56
+R%sul B +=u(1 +=u(2
MsgBox "&'2+R%sul3
+=u(1 B 11
"
#
=
1
"
#
=
1
$
=%&1"'
Aprendiendo OOo .a$ic F(
+=u(2 B T56
+R%sul B +=u(1 +=u(2
MsgBox "&'2+R%sul3
+=u(1 B T11
+=u(2 B T56
+R%sul B +=u(1 +=u(2
MsgBox "&'2+R%sul3
End "u.
@ecuerda 6ue en la$ multiplicacione$ el orden de lo$ 1actore$ no altera el producto
(propiedad conmutati&a)'
"u. Mul&+8l+*a*+on323
A+( +=u(1 !s #n&%g%'
A+( +=u(2 !s #n&%g%'
A+( +R%sul !s 5ong
+=u(1 B 12345
+=u(2 B 18
+R%sul B +=u(1 +=u(2
MsgBox "&'2+R%sul3
+=u(1 B 18
+=u(2 B 12345
+R%sul B +=u(1 +=u(2
MsgBox "&'2+R%sul3
End "u.
).1H. / K 2 Di,isin ?aritm$tico@
Operaci4n aritm3tica para $aber cuanta$ &ece$ cabe un n?mero en otro% e$% podr=a
decir$e% una re$ta abre&iada' >l n?mero a di&idir $e llama Ldi&idendoM% al otro Ldi&i$orM% al re$ultado
entero $e le llama LcocienteM * $i no e$ e:acta la di&i$i4n a lo 6ue re$ta $e le llama Lre$iduoM' >$ la
operaci4n in&er$a a la multiplicaci4n'
Puede$ di&idir numero entero$ * no entero$% ne,ati&o$ * po$iti&o$% la$ le*e$ de lo$
$i,no$ aplican de la mi$ma 1orma 6ue en la multiplicaci4n'
?8&+on Ex8l+*+&
"u. A+9+s+on123
A+( +=u(1 !s "+ngl%
A+( +=u(2 !s "+ngl%
A+( +R%sul !s Aou.l%
+=u(1 B 123456790 ,A+9+d%ndo
+=u(2 B 123 ,A+9+so'
+R%sul B +=u(1 / +=u(2
MsgBox "&'2+R%sul3
End "u.
FE E'10 Operadore$
"u. A+9+s+on223
A+( +=u(1 !s #n&%g%'
A+( +=u(2 !s #n&%g%'
A+( +R%sul !s #n&%g%'
+=u(1 B 589 ,A+9+d%ndo
+=u(2 B T25 ,A+9+so'
+R%sul B +=u(1 / +=u(2
MsgBox "&'2+R%sul3
End "u.
>n el ca$o de la di&i$i4n% el orden de lo$ operando$ $i importa% e$ mu* di1erente 6ue
un n?mero $ea di&idendo 6ue di&i$or como podemo$ &erlo en el $i,uiente e2emplo'
"u. A+9+s+on323
A+( +=u(1 !s "+ngl%
A+( +=u(2 !s "+ngl%
A+( +R%sul !s Aou.l%
+=u(1 B 98765
+=u(2 B 321
+R%sul B +=u(1 / +=u(2
MsgBox "&'2+R%sul3
+=u(1 B 321
+=u(2 B 98765
+R%sul B +=u(1 / +=u(2
MsgBox "&'2+R%sul3
End "u.
).1H.) / L 2 Di,isin entera ?aritm$tico@
+on e$te operador obtenemo$ $olo la parte entera de una di&i$i4n'
?8&+on Ex8l+*+&
"u. A+9+s+on/En&%'a123
A+( +=u(1 !s "+ngl%
A+( +=u(2 !s "+ngl%
A+( +R%sul !s "+ngl%
+=u(1 B 100
+=u(2 B 15
+R%sul B +=u(1 / +=u(2
MsgBox "&'2+R%sul3
,A%9u%l9% solo la 8a'&% %n&%'a
+R%sul B +=u(1 a +=u(2
MsgBox "&'2+R%sul3
End "u.
Aprendiendo OOo .a$ic F5
>n al,uno$ ca$o$% cuando el &alor decimal e$ mu* cercano al $i,uiente entero% e$te
operador te de&uel&e el $i,uiente entero% como en'
"u. A+9+s+on/En&%'a223
A+( +=u(1 !s "+ngl%
A+( +=u(2 !s "+ngl%
A+( +R%sul !s "+ngl%
+=u(1 B 100
+=u(2 B 25-1
+R%sul B +=u(1 / +=u(2
MsgBox "&'2+R%sul3
+R%sul B +=u(1 a +=u(2
MsgBox "&'2+R%sul3
End "u.
Si 6uiere$ a$e,urarte 6ue L$iempreM te re,re$e L$oloM la parte entera% me2or u$a la
1unci4n Int(&alor) 6ue te de&uel&e $olo la parte entera del &alor pa$ado% como te mue$tro a6u='
"u. A+9+s+on/En&%'a323
A+( +=u(1 !s "+ngl%
A+( +=u(2 !s "+ngl%
A+( +R%sul !s "+ngl%
+=u(1 B 100
+=u(2 B 25-1
+R%sul B +=u(1 / +=u(2
MsgBox "&'2+R%sul3
+R%sul B +=u(1 a +=u(2
MsgBox "&'2+R%sul3
+R%sul B Int2 +=u(1 / +=u(2 3
MsgBox "&'2+R%sul3
End "u.
).1H.! /Mod2 8esto de una di,isin entera ?aritm$tico@
>$te operador no$ de&uel&e el re$iduo entero de una di&i$i4n entera'
?8&+on Ex8l+*+&
"u. R%s&o/A+9+s+on123
A+( +=u(1 !s "+ngl%
A+( +=u(2 !s "+ngl%
A+( +R%sul !s "+ngl%
+=u(1 B 100
+=u(2 B 15
+R%sul B +=u(1 Mod +=u(2
MsgBox "&'2+R%sul3
15 100
)
1H
F) E'10 Operadore$
End "u.
>l $i,uiente e2emplo -ace u$o de lo$ operadore$ LModM * LmM (di&i$i4n entera) para
con&ertir un n?mero decimal en binario'
"u. A%*+(al/B+na'+o23
A+( +A%* !s #n&%g%'
A+( sB+n !s "&'+ng
A+( +Bas% !s #n&%g%'
,=<(%'o %n&%'o a *on9%'&+'
+A%* B 100
,El s+s&%(a .+na'+o %s .as% 2
+Bas% B 2
,Has&a Gu% %l n<(%'o s%a (%no' Gu% la .as%
Ao Dn&+l +A%* X +Bas%
,?.&%n%(os %l '%s+duo @ lo 9a(os *on*a&%nando
sB+n B 2+A%* Mo! +Bas%3 : sB+n
,?.&%n%(os la d+9+s+6n %n&%'a @ '%as+gna(os %l nu(%'o
,s+ no ha*%s %s&o7 &% Gu%da'as %n un *+*lo +nf+n+&o
+A%* B +A%* " +Bas%
5oo8
,0o' ul&+(o *on*a&%na(os %l ul&+(o *o*+%n&%
sB+n B +A%* : sB+n
,Mos&'a(os %l 9alo' %n .+na'+o
MsgBox sB+n
End "u.
).1H.= / M 2 Suma ?aritm$tico@
#a adici4n% e$ la operaci4n aritm3tica 6ue no$ permite combinar do$ cantidade$ para
obtener una $ola' A dic-a$ cantidade$ $e le$ llama $umando$ * al re$ultado $uma'
?8&+on Ex8l+*+&
"u. "u(as123
A+( +=u(1 !s "+ngl%
A+( +=u(2 !s "+ngl%
A+( +R%sul !s "+ngl%
+=u(1 B 159-25
+=u(2 B 489-55
+R%sul B +=u(1 C +=u(2
MsgBox "&'2 +R%sul 3
End "u.
Por $u propiedad conmutati&a% el orden de lo$ $umando$ no altera la $uma'
"u. "u(as223
A+( +=u(1 !s "+ngl%
Aprendiendo OOo .a$ic F7
A+( +=u(2 !s "+ngl%
A+( +R%sul !s "+ngl%
+=u(1 B 1974
+=u(2 B 34
+R%sul B +=u(1 C +=u(2
MsgBox "&'2 +R%sul 3
+=u(1 B 34
+=u(2 B 1974
+R%sul B +=u(1 C +=u(2
MsgBox "&'2 +R%sul 3
End "u.
Por le*e$ de lo$ $i,no$% la $uma tendr; el $i,no del ma*or $umando'
"u. "u(as323
A+( +=u(1 !s "+ngl%
A+( +=u(2 !s "+ngl%
A+( +R%sul !s "+ngl%
+=u(1 B 4268
+=u(2 B T258
+R%sul B +=u(1 C +=u(2
MsgBox "&'2 +R%sul 3
+=u(1 B T5689
+=u(2 B 197
+R%sul B +=u(1 C +=u(2
MsgBox "&'2 +R%sul 3
End "u.
).1H.A / N 2 8esta ?aritm$tico@
#a $u$tracci4n o re$ta e$ la operaci4n aritm3tica 6ue no$ permite conocer la
di1erencia entre do$ n?mero$% al primero $e le llama minuendo * al $e,undo $u$traendo' >$ la
operaci4n in&er$a de la $uma'
?8&+on Ex8l+*+&
"u. R%s&as123
A+( +=u(1 !s "+ngl%
A+( +=u(2 !s "+ngl%
A+( +R%sul !s "+ngl%
+=u(1 B 5000 ,M+nu%ndo
+=u(2 B 2125 ,"us&'a%ndo
FF E'10 Operadore$
+R%sul B +=u(1 T +=u(2
MsgBox "&'2 +R%sul 3
End "u.
#a re$ta no tiene propiedad conmutati&a% e$ decir% $i intercambia$ el minuendo * el
$u$traendo% no te dar; el mi$mo re$ultado% pero 1i2ate 6ue curio$o re$ultado'
"u. R%s&as223
A+( +=u(1 !s "+ngl%
A+( +=u(2 !s "+ngl%
A+( +R%sul !s "+ngl%
+=u(1 B 562
+=u(2 B 956
+R%sul B +=u(1 T +=u(2
MsgBox "&'2 +R%sul 3
+=u(1 B 956
+=u(2 B 562
+R%sul B +=u(1 T +=u(2
MsgBox "&'2 +R%sul 3
End "u.
).1H.B %peradores de relacin
>$to$ operadore$ no$ permiten comparar el &alor de do$ e:pre$ione$ o t3rmino$%
$iempre de&uel&en un &alor &erdadero (True) o 1al$o (!al$e)% e$ decir% un &alor booleano'
?8&+on Ex8l+*+&
"u. ?8%'ado'%s/R%la*+on23
A+( .R%sul !s Bool%an
A+( +=u(1 !s #n&%g%'
A+( +=u(2 !s #n&%g%'
+=u(1 B 99
+=u(2 B 19
.R%sul B +=u(1 = +=u(2
MsgBox ""on +gual%sN " : .R%sul
.R%sul B +=u(1 #$ +=u(2
MsgBox ""on d+s&+n&osN " : .R%sul
.R%sul B +=u(1 # +=u(2
MsgBox "M%no' Gu%N " : .R%sul
.R%sul B +=u(1 $ +=u(2
MsgBox "Ma@o' Gu%N " : .R%sul
.R%sul B +=u(1 #= +=u(2
MsgBox "M%no' o +gualN " : .R%sul
.R%sul B +=u(1 $= +=u(2
Aprendiendo OOo .a$ic FG
MsgBox "Ma@o' o +gualN " : .R%sul
End "u.
Ten cuidado de no con1undir lo$ $i,no$ de i,ual (f)% el primero de i/6uierda a
derec-a e$ el $i,no i,ual u$ado como a$i,naci4n% el re$ultado de la e:pre$i4n a la derec-a del
$i,no $e a$i,na a la &ariable a la i/6uierda del $i,no% el $e,undo $i,no i,ual (en ne,rita$ * ro2o) e$
u$ado como operador de relaci4n entre do$ t3rmino$% e$te e2emplo e$ m;$ claro pue$ e$ta entre
par3nte$i$'
.R%sul B 2 +=u(1 = +=u(2 3
).1H.F 0ot 7 0e*acin ?l*ico@
+ambia el &alor de la e:pre$i4n de 1al$o a &erdadero * &ice&er$a' Se aplica a $olo un
operador'
?8&+on Ex8l+*+&
"u. =%ga*+on23
A+( .1alo' !s Bool%an
,1alo' o'+g+nal 1%'dad%'o
.1alo' B I'u%
Msg.ox .1alo'
,5% a8l+*a(os %l o8%'ado'
.1alo' B =o& .1alo'
Msg.ox .1alo'
,1alo' o'+g+nal Kalso
.1alo' B Kals%
Msg.ox .1alo'
,5% a8l+*a(os %l o8%'ado'
.1alo' B =o& .1alo'
Msg.ox .1alo'
End "u.
Su tabla de &erdad e$ mu* $encilla% $iendo e$ta una -erramienta para conocer lo$
po$ible$ &alore$ de una e:pre$i4n cuando $e le aplican operadore$ l4,ico$'
A Not A
5 !
! 5
G0 E'10 Operadore$
).1H.1H (nd 7 O ?l*ico@
Se aplica a do$ operadore$% de&uel&e &erdadero (True) $olo en el ca$o de 6ue lo$
do$ operadore$ $ean &erdadero$ (True)% cual6uier otro &alor% de&uel&e 1al$o (!al$e)' A-ora%
primero te mue$tro $u tabla de &erdad * de$pu3$ lo$ e2emplo$'
A B A And B
5 5 5
5 ! !
! 5 !
! ! !
?8&+on Ex8l+*+&
"u. $on)un*+on23
A+( .1alo'1 !s Bool%an
A+( .1alo'2 !s Bool%an
A+( .R%sul !s Bool%an
,"olo %n *aso d% Gu% los dos s%an 9%'dad%'os
,%l '%sul&ado s%'a 9%'dad%'o
.1alo'1 B I'u%
.1alo'2 B I'u%
.R%sul B .1alo'1 !nd .1alo'2
Msg.ox .R%sul
.1alo'1 B I'u%
.1alo'2 B Kals%
.R%sul B .1alo'1 !nd .1alo'2
Msg.ox .R%sul
.1alo'1 B Kals%
.1alo'2 B I'u%
.R%sul B .1alo'1 !nd .1alo'2
Msg.ox .R%sul
.1alo'1 B Kals%
.1alo'2 B Kals%
.R%sul B .1alo'1 !nd .1alo'2
Msg.ox .R%sul
End "u.
).1H.11 %r 7 % ?l*ico@
Se aplica a do$ operadore$' Si lo$ do$ operadore$ $on 1al$o$ (!al$e)% de&uel&e 1al$o
(!al$e)% cual6uier otro &alor de&uel&e &erdadero (True)' Su tabla de &erdad e$'
A B A Or B
5 5 5
Aprendiendo OOo .a$ic G1
5 ! 5
! 5 5
! ! !
?8&+on Ex8l+*+&
"u. A+s@un*+on23
A+( .1alo'1 !s Bool%an
A+( .1alo'2 !s Bool%an
A+( .R%sul !s Bool%an
.1alo'1 B I'u%
.1alo'2 B I'u%
.R%sul B .1alo'1 ?' .1alo'2
Msg.ox .R%sul
.1alo'1 B I'u%
.1alo'2 B Kals%
.R%sul B .1alo'1 ?' .1alo'2
Msg.ox .R%sul
.1alo'1 B Kals%
.1alo'2 B I'u%
.R%sul B .1alo'1 ?' .1alo'2
Msg.ox .R%sul
.1alo'1 B Kals%
.1alo'2 B Kals%
.R%sul B .1alo'1 ?' .1alo'2
Msg.ox .R%sul
End "u.
).1H.12 Por 7 % e'clusi,a ?l*ico@
Se aplica a do$ operadore$' Si lo$ do$ operadore$ $on i,uale$ de&uel&e 1al$o
(!al$e)% $i $on di1erente$ de&uel&e &erdadero (True)' Su tabla de &erdad e$'
A B A Xor B
5 5 !
5 ! 5
! 5 5
! ! !
?8&+on Ex8l+*+&
"u. ?8%'ado'/Fo'23
A+( .1alo'1 !s Bool%an
A+( .1alo'2 !s Bool%an
A+( .R%sul !s Bool%an
.1alo'1 B I'u%
.1alo'2 B I'u%
G2 E'10 Operadore$
.R%sul B .1alo'1 Fo' .1alo'2
Msg.ox .R%sul
.1alo'1 B I'u%
.1alo'2 B Kals%
.R%sul B .1alo'1 Fo' .1alo'2
Msg.ox .R%sul
.1alo'1 B Kals%
.1alo'2 B I'u%
.R%sul B .1alo'1 Fo' .1alo'2
Msg.ox .R%sul
.1alo'1 B Kals%
.1alo'2 B Kals%
.R%sul B .1alo'1 Fo' .1alo'2
Msg.ox .R%sul
End "u.
).1H.1 Eq, 7 Equi,alencia ?opuesto a Por@ ?l*ico@
Se aplica a do$ operadore$' Si lo$ do$ operadore$ $on i,uale$ de&uel&e &erdadero
(True)% $i $on di1erente$ de&uel&e 1al$o (!al$e)' Su tabla de &erdad e$'
A B A Eqv B
5 5 5
5 ! !
! 5 !
! ! 5
?8&+on Ex8l+*+&
"u. ?8%'ado'/EG923
A+( .1alo'1 !s Bool%an
A+( .1alo'2 !s Bool%an
A+( .R%sul !s Bool%an
.1alo'1 B I'u%
.1alo'2 B I'u%
.R%sul B .1alo'1 EG9 .1alo'2
Msg.ox .R%sul
.1alo'1 B I'u%
.1alo'2 B Kals%
.R%sul B .1alo'1 EG9 .1alo'2
Msg.ox .R%sul
.1alo'1 B Kals%
.1alo'2 B I'u%
.R%sul B .1alo'1 EG9 .1alo'2
Msg.ox .R%sul
.1alo'1 B Kals%
.1alo'2 B Kals%
.R%sul B .1alo'1 EG9 .1alo'2
Aprendiendo OOo .a$ic G(
Msg.ox .R%sul
End "u.
).1H.1) Imp 7 Implicacin ?l*ico@
Se aplica a do$ operadore$' Si el primer operador e$ &erdadero (True) * el $e,undo
e$ !al$o (!al$e) de&uel&e 1al$o (!al$e)% cual6uier otro &alor% de&uel&e &erdadero (True)' Su tabla
de &erdad e$'
A B A Imp B
5 5 5
5 ! !
! 5 5
! ! 5
?8&+on Ex8l+*+&
"u. ?8%'ado'/#(823
A+( .1alo'1 !s Bool%an
A+( .1alo'2 !s Bool%an
A+( .R%sul !s Bool%an
.1alo'1 B I'u%
.1alo'2 B I'u%
.R%sul B .1alo'1 #(8 .1alo'2
Msg.ox .R%sul
.1alo'1 B I'u%
.1alo'2 B Kals%
.R%sul B .1alo'1 #(8 .1alo'2
Msg.ox .R%sul
.1alo'1 B Kals%
.1alo'2 B I'u%
.R%sul B .1alo'1 #(8 .1alo'2
Msg.ox .R%sul
.1alo'1 B Kals%
.1alo'2 B Kals%
.R%sul B .1alo'1 #(8 .1alo'2
Msg.ox .R%sul
End "u.
#o$ operadore$ de relaci4n * l4,ico$ &i$to$ en e$te apartado% $on de &ital importancia
para $u implementaci4n en cual6uier tipo de condici4n en ciclo$ o bi1urcacione$' @ecuerda 6ue
$iempre obtendr;$ un &alor &erdadero (True) o 1al$o (!al$e)' Ten a la mano $iempre la$ tabla$ de
&erdad de cada uno'
GE E'10 Operadore$
).1H.1! +recedencia de operadores
>n re$umen% lo$ operadore$ 6ue puede$ u$ar en OOo .a$ic% $on lo$ $i,uiente$%
e$t;n ordenado$ de ma*or a menor precedencia% e$ decir% la prioridad 6ue le$ a$i,na el len,ua2e
cuando en una $entencia e$t;n implicado$ do$ o ma$ operadore$' #o$ operadore$ 6ue e$t;n en la
mi$ma linea% tiene el mi$mo ni&el de precedencia
%perador %peracin 5ipo
n >:ponenciaci4n Aritm3tico
o % 0 Multiplicaci4n * di&i$i4n Aritm3tico
m "i&i$i4n entera Aritm3tico
Mod @e$to de una di&i$i4n entera Aritm3tico
R % - Suma * re$ta Aritm3tico
f % CD % C % D
Cf % Df
9,ual% di$tinto% menor 6ue% ma*or 6ue% menor o
i,ual 6ue% ma*or o i,ual 6ue
@elacionale$
Not Ne,aci4n #4,ico
And O #4,ico
Or O #4,ico
por O e:clu$i&a #4,ico
>6& >6ui&alencia (opue$to a por) #4,ico
9mp 9mplicaci4n #4,ico
#a prioridad de e2ecuci4n e$ mu* importante% pue$ $i no la utili/a$ correctamente% te
puede dar re$ultado$ di1erente$ a lo$ e$perado$% toma en cuenta la$ $i,uiente re,la$<
#a precedencia &a de ma*or a menor% e$ decir% $e e2ecutan primero lo$
operadore$ de ma*or 2erar6u=a
Si lo$ operadore$ tienen la mi$ma precedencia% $e e2ecutan de i/6uierda a
derec-a
#a precedencia $e puede LromperM (cambiar) u$ando par3nte$i$% tienen
prioridad lo$ m;$ interno$ * -acia a1uera
?8&+on Ex8l+*+&
"u. 0'%*%d%n*+a/?8%'ado'%s123
A+( nu( !s Aou.l%
,?.s%'9a *o(o la 8'+o'+dad 9a d% +;Gu+%'da a d%'%*ha
,4 16 1 3
nu( B 2 j 2 4 Mod 3 C 2
MsgBox nu(
,O aho'a 9a d% d%'%*ha a +;Gu+%'da
,16 32 34
nu( B 2 C 2 4 j 2
MsgBox nu(
End "u.
Aprendiendo OOo .a$ic G5
#o m;$ $encillo% e$ 6ue t? determine$ el orden de la$ operacione$% *a $ea en
$uce$i&a$ l=nea$ como en el primer e2emplo o u$ando par3nte$i$ como en el $e,undo e2emplo'
"u. 0'%*%d%n*+a/?8%'ado'%s223
A+( nu( !s Aou.l%
nu( B 45 56
nu( B nu( / 10
nu( B nu( j 3
nu( B nu( C 125
MsgBox nu(
nu( B 22245 563 / 103 j 33 C 125
MsgBox nu(
,?.s%'9a *o(o7 s+n los 8a'Sn&%s+s da un '%sul&ado &o&al(%n&% d+f%'%n&%
nu( B 45 56 / 10 j 3 C 125
MsgBox nu(
End "u.
#o$ par3nte$i$ no$ a*udan a determinar el orden en 6ue 6ueramo$ -acer una
operaci4n cuando la precedencia de operacione$ no e$ mu* clara' Mi recomendaci4n como ca$i
$iempre lo notara$% e$ 6ue manten,a$ el control de tu c4di,o' #o$ operadore$ de relaci4n *
l4,ico$ $on mu* importante$ al aplicar$e en condicione$ para bucle$ * bi1urcacione$% e$
importante 6ue lo$ domine$'
).11 Control de errores
>n teor=a% un pro,rama no deber=a tener errore$ o no nece$itar=a de un control de
errore$% en la practica% $abemo$ 6ue e$to no e$ a$=' >n ,eneral podr=amo$ -ablar de tre$ tipo$ de
errore$ dependiendo de cuando $e producen o en 6ue conte:to'
1) Errores en tiempo de dise<oQ $on a6uello$ 6ue $e cometen cuando $e
e$ta codi1icando% pro,ramando% e$cribiendo nue$tro c4di,o% ,eneralmente $on
detectado$ por el 9"> en cuanto tratamo$ de e2ecutar el c4di,o * normalmente no$
mue$tra un men$a2e indic;ndono$ el tipo de error cometido% mu* com?nmente $on
errore$ de $inta:i$% recordando 6ue $inta:i$ e$< -Conjunto de reglas .ue de!inen las
secuencias correctas de los elementos de un lenguaje de programacin- por e2emplo% el
$i,uiente c4di,o% te deber; mo$trar el $i,uiente men$a2e de error 6ue e$ mu* claro<
?8&+on Ex8l+*+&
"u. E''o'%s123
G) E'11 +ontrol de errore$
>n el ap3ndice punto 11'2% te mue$tro una li$ta de lo$ errore$ en tiempo de di$eKo
m;$ 1recuente$'
2) Errores l*icos< e$to$ errore$% $on lo$ m;$ di1=cile$ de detectar * corre,ir
pue$ 1recuentemente no te dan un men$a2e o no $e detiene el c4di,o% $ino $implemente
el c4di,o Lno -aceM la$ tarea$ para la$ 6ue $e $upone e$ta de$arrollado o Lno de&uel&eM
lo$ &alore$ e$perado$% entre m;$ ,rande * comple2o $ea tu c4di,o% la probabilidad de
6ue ten,a errore$ l4,ico$ aumenta con$iderablemente' da* una 1ra$e 6ue $e le atribu*e
(no -e podido comprobarlo) a #inu$ Tor&ald$ 6ue dice -ante lo$ o2o$ de muc-o$% lo$
errore$ $on e&idente$-% por $upue$to% e$to $olo puede $uceder con el $o1t7are libre%
como el 6ue tu * *o u$amo$ * de$arrollamo$% I&erdadJ% pue$ $olo en el tenemo$ a
nue$tra di$po$ici4n el c4di,o 1uente 6ue e$ la ?nica 1orma de &eri1icar 6ue un $o1t7are
-a,a lo 6ue dice 6ue -ace' qnicamente la e:periencia * la practica te a*udaran a
minimi/ar e$te tipo de errore$'
() Errores en tiempo de ejecucin< e$to$ errore$ $e producen durante el
tiempo 6ue $e e$ta e2ecutando tu pro,rama o c4di,o' OOo .a$ic cuenta con
in$truccione$ * palabra$ cla&e$ para controlar e$te tipo de errore$ * $on lo$ 6ue
aprenderemo$ en e$te capitulo'
+opia * e2ecuta la $i,uiente macro<
?8&+on Ex8l+*+&
"u. Man%)o/E''o'%s123
A+( sRu&a!'*h+9o !s "&'+ng
sRu&a!'*h+9o B I'+(2#n8u&Box2"Es*'+.% la 'u&a d%l a'*h+9o a .o''a'"33
J+ll sRu&a!'*h+9o
MsgBox "El a'*h+9o " : sRu&a!'*h+9o : " s% .o''o *o''%*&a(%n&%"
End "u.
Si e$cribe$ la ruta de un arc-i&o 6ue no e:i$te% te LdebeM dar el men$a2e de error *
nota 6ue el ultimo men$a2e con M$,.o: *a LnoM $e mue$tra'
+laro% e$tar;$ pen$ando 6ue e$ m;$ 1;cil * m;$ e1iciente el &alidar ante$ 6ue e:i$ta
el arc-i&o * e$tar;$ en lo correcto'
Aprendiendo OOo .a$ic G7
"u. Man%)o/E''o'%s223
A+( sRu&a!'*h+9o !s "&'+ng
sRu&a!'*h+9o B I'+(2#n8u&Box2"Es*'+.% la 'u&a d%l a'*h+9o a .o''a'"33
#f sRu&a!'*h+9oXY"" !nd A+'2sRu&a!'*h+9o3XY"" Ih%n
J+ll sRu&a!'*h+9o
MsgBox "El a'*h+9o " : sRu&a!'*h+9o : " s% .o''o *o''%*&a(%n&%"
Els%
MsgBox "Ru&a +n9al+da o a'*h+9o no %x+s&%"7 07 "Bo''a' a'*h+9o"
End #f
End "u.
>n la &alidaci4n anterior e$tamo$ u$ando una 1unci4n de OOo .a$ic 6ue tal &e/ no
cono/ca$% me re1iero a la 1unci4n Dir(&alor)% donde &alor puede $er una ruta de arc-i&o% $i LnoM
encuentra el arc-i&o% de&uel&e una cadena &ac=a'
+on$idera 6ue cuando accede$ a recur$o$ e:terno$% no tiene$ la $e,uridad 6ue e$o$
recur$o$ e$tar;n L$iempreM di$ponible$% en el ca$o de lo$ arc-i&o$% otro$ proce$o$ pueden acceder
* manipularlo$% por ello% en e$te * otro$ ca$o$% con$idera la utili/aci4n de un controlar de errore$
como en el e2emplo $i,uiente'
?8&+on Ex8l+*+&
"u. Man%)o/E''o'%s323
A+( sRu&a!'*h+9o !s "&'+ng
?n E''o' Eo&o $?=IR?5!ERR?RE"
sRu&a!'*h+9o B I'+(2#n8u&Box2"Es*'+.% la 'u&a d%l a'*h+9o a .o''a'"33
J+ll sRu&a!'*h+9o
MsgBox "El a'*h+9o " : sRu&a!'*h+9o : " s% .o''o *o''%*&a(%n&%"
Ex+& "u.
$?=IR?5!ERR?RE"4
"%l%*& $as% E''
$as% 0
$as% 53
MsgBox "=o s% %n*on&'6 la 'u&a %s8%*+f+*ada" : $h'2133 : $h'2133 : sRu&a!'*h+9o7 48
$as% Els%
MsgBox "?*u''+6 %l %''o' nu(%'o4 " : E'' : $h'2133 : E''o' : /
$h'2133 : "En la l+n%a " : E'l
End "%l%*&
?n E''o' Eo&o 0
End "u.
5eamo$ toda$ la$ parte$ del c4di,o anterior' "e$pu3$ de declarar la macro * la$
&ariable$ a u$ar% tenemo$ una nue&a in$trucci4n'
?n E''o' Eo&o $?=IR?5!ERR?RE"
#a $inta:i$ ,eneral de e$ta in$trucci4n e$<
On >rror oto 5ombre&ti.ueta
GF E'11 +ontrol de errore$
>n donde Nombre#ti$ueta e$ cual6uier palabra 6ue cumpla la$ caracter=$tica$
&i$ta$ para nombrar a la$ &ariable$ * literalmente $i,ni1ica ->n ca$o de error $alta (o &a) a
5ombre&ti.ueta' "e$pu3$ de iniciar el controlador de errore$% tenemo$ propiamente el c4di,o de
nue$tra macro' >n$e,uida% ob$er&a 6ue u$amo$ la in$trucci4n >:it Sub% e$to e$ para 6ue $i%
nue$tro c4di,o $e e2ecuta $in problema$% $al,a de la macro L$inM e2ecutar el controlador de errore$'
A-ora $i% ob$er&a como declaramo$ la eti6ueta u$ada en la declaraci4n del controlador de errore$%
nota 6ue e$ta eti6ueta% e:cepto por 6ue e$ indi$tinto la$ ma*?$cula$ * min?$cula$% e$
e:actamente i,ual a la u$ada en la declaraci4n del controlador de errore$% tambi3n nota% mu*
importante% 6ue e$ta termina en do$ punto$ (<) % e$to$% $on indi$pen$able$ para 6ue no te mue$tre
el $i,uiente men$a2e de error en tiempo de di$eKo'
9nmediatamente de$pu3$ de la declaraci4n de la eti6ueta% ob$er&a 6ue iniciamo$ un
Select +a$e con la &ariable Err% e$ta% e$ una &ariable tipo #on, de OOo .a$ic 6ue contiene el
n?mero de error 6ue $e -a*a pro&ocado% e$ta &ariable tendr; &alor 0 $i no ocurri4 nin,?n error'
>n nue$tro e2emplo% $abemo$ 6ue $i no $e encuentra un arc-i&o% ocurre el error 5(%
el cual manipulamo$ con la linea<
$as% 53
MsgBox "=o s% %n*on&'6 la 'u&a %s8%*+f+*ada" : $h'2133 : $h'2133 : sRu&a!'*h+9o7 48
>n ca$o de 6ue ocurra un error no e$peci1icado o de$conocido% mo$tramo$ el
n?mero de error (&ariable Err)% la de$cripci4n del error (&ariable Error) * la l=nea donde e$te
ocurri4 (&ariable Erl)% cu*a &alio$a in1ormaci4n no$ a*udara a corre,irlo'
$as% Els%
MsgBox "?*u''+6 %l %''o' nu(%'o4 " : %rr : $h'2133 : %rror : /
$h'2133 : "En la l+n%a " : %rl
"e$pu3$ de cerrar la e$tructura Select +a$e con >nd Select% tenemo$ la linea<
?n E''o' Eo&o 0
eue no -ace otra co$a 6ue reiniciali/ar la$ &ariable$ de error% e$ decir Err% Error *
Erl' #a e$tructura de control o admini$traci4n de errore$ 6ue acabamo$ de &er% a1ortunadamente%
no e$ la ?nica pero e$ la 6ue ,eneralmente $e u$a% -a* al,una$ &ariante$ 6ue a criterio puede$
u$ar% &eamo$ al,una$' >n ca$o de 6ue 6uiera$ e$tablecer un control de errore$ ,en3rico% podr=a$
u$ar el $i,uiente'
"u. Man%)o/E''o'%s423
?n E''o' Eo&o $?=IR?5!ERR?RE"
,!GuH 9a &odo &< *6d+go
Ex+& "u.
Aprendiendo OOo .a$ic GG
$?=IR?5!ERR?RE"4
#f E'' XY 0 Ih%n
MsgBox "?*u''+6 %l %''o' nu(%'o4 " : E'' : $h'2133 : E''o' : $h'2133 : "En la l+n%a " : E'l
End #f
?n E''o' Eo&o 0
End "u.
>n &e/ de mo$trar el error con M$,.o:% puede$ optar por ,uardar en un arc-i&o de
re,i$tro e$to$ errore$% aun6ue $iempre e$ bueno mo$trarle al u$uario 6ue al,o $alio mal para
poder corre,irlo'
Puede$ $imular el error 6ue 6uiera$ $implemente a$i,nando el n?mero de error a la
&ariable >rror de la $i,uiente manera'
,!Gu+ 9a &odo &< *6d+go
E''o'2123
>$ta e$ la li$ta de &alore$ de errore$ 6ue puede$ u$ar en la &ariable >rror o 6ue en
al,?n momento te pueden aparecer% toma en cuenta 6ue al,uno$ de e$to$ errore$ L$oloM ocurren
en tiempo de di$eKo * &ario$ de ello$ LnoM puede$ interceptarlo$% tan $olo corre,irlo$ en tu c4di,o'
Cdigos de error
56 /escripcin 56 /escripcin
2 >rror de $inta:i$ no e$peci1icado 70 Permi$o dene,ado
( @eturn $in o$ub 71 "i$co no preparado
E @e$taurar de$de el principio 7( Pre$taci4n no implementada
5 #lamada a procedimiento no &;lida 7E 9mpo$ible cambiar nombre con unidad
di$tinta
) "e$bordamiento 75 >rror de acce$o a ruta0arc-i&o
7 Memoria a,otada 7) @uta no encontrada
F Matri/ *a dimen$ionada G1 5ariable de ob2eto no de1inida
G Sunb=ndice 1uera de ran,o G( +adena de $ecuencia no &;lida
10 "e1inici4n duplicada GE U$o de Null no &;lido
11 "i&i$i4n por cero (2( 9mpo$ible car,ar m4dulo
12 5ariable no de1inida (E1 Andice de ob2eto no &;lido
1( "i$cordancia de tipo ()) No -a* documento o &i$ta acti&o$
1E Par;metro no &;lido (F0 5alor de propiedad incorrecto
1F 9nterrupci4n de u$uario (F2 Propiedad de $4lo lectura
20 +ontinuar $in error (GE Propiedad de $4lo e$critura
2F >$pacio de pila a,otado E20 @e1erencia de ob2eto no &;lida
(5 Sub o !unction no de1inido$ E2( Propiedad o m3todo no encontrado$
EF >rror al car,ar "## E2E Ob2eto nece$ario
EG +on&enci4n de llamada a "## incorrecta E25 U$o de ob2eto no &;lido
100 E'11 +ontrol de errore$
Cdigos de error
56 /escripcin 56 /escripcin
51 >rror interno E(0 #a cla$e no admite O#>
52 Nombre de arc-i&o o n?mero incorrecto$ E(F >l ob2eto no admite e$te m3todo
5( Arc-i&o no encontrado EE0 >rror de automati/aci4n O#>
5E Modo de arc-i&o incorrecto EE5 >l ob2eto no admite e$ta acci4n
55 Arc-i&o *a abierto EE) >l ob2eto no admite ar,umento$ con nombre
57 >rror de >0S de di$po$iti&o EE7 >l ob2eto no admite la con1i,uraci4n de
entorno local actual
5F Arc-i&o *a e:i$tente EEF Ar,umento mencionado no encontrado
5G #on,itud de re,i$tro incorrecta EEG Ar,umento no opcional
)1 "i$co lleno E50 N?mero de ar,umento$ incorrecto
)2 >ntrada m;$ all; del 1inal del arc-i&o E51 Ob2eto no e$ una colecci4n
)( N?mero de re,i$tro incorrecto E52 Ordinal no &;lido
)7 "ema$iado$ arc-i&o$ E5( !unci4n "## e$peci1icada no encontrada
)F "i$po$iti&o no di$ponible E)0 !ormato de portapapele$ no &;lido
OOo .a$ic cuenta con una in$trucci4n 6ue complementa el u$o de un controlador de
errore$% e$ta in$trucci4n e$ 8esume% b;$icamente tiene tre$ po$ible$ u$o$% de la primer 1orma%
no$ permite re,re$ar% e$ decir% &ol&er a intentar e2ecutar la l=nea 6ue pro&oco el error% por
$upue$to% e$to e$ recomendable *a 6ue $e -a*an corre,ido o atendido la$ cau$a$ del error% por
e2emplo'
?8&+on Ex8l+*+&
"u. Man%)o/E''o'%s523
A+( sRu&a!'*h+9o !s "&'+ng
A+( +R%s !s #n&%g%'
?n E''o' Eo&o $?=IR?5!ERR?RE"
sRu&a!'*h+9o B I'+(2#n8u&Box2"Es*'+.% la 'u&a d%l a'*h+9o a .o''a'"33
J+ll sRu&a!'*h+9o
MsgBox "El a'*h+9o " : sRu&a!'*h+9o : " s% .o''o *o''%*&a(%n&%"
Ex+& "u.
$?=IR?5!ERR?RE"4
"%l%*& $as% E''
$as% 0
$as% 53
+R%s B MsgBox 2"=o s% %n*on&'6 la 'u&a %s8%*+f+*ada" : $h'2133 : $h'2133 :
sRu&a!'*h+9o : $h'2133 : $h'2133 : "MA%s%as +n&%n&a'lo d% nu%9oN"7 32 C 4 3
#f +R%s B 6 Ih%n
&esume
End #f
$as% Els%
MsgBox "?*u''+6 %l %''o' nu(%'o4 " : E'' : $h'2133 : E''o' : /
$h'2133 : "En la l+n%a " : E'l
End "%l%*&
Aprendiendo OOo .a$ic 101
?n E''o' Eo&o 0
End "u.
Ob$er&a como dentro del blo6ue donde controlamo$ el error% pre,untamo$ al u$uario
$i de$ea &ol&er a intentarlo'
$as% 53
+R%s B MsgBox 2"=o s% %n*on&'6 la 'u&a %s8%*+f+*ada" : $h'2133 : $h'2133 : sRu&a!'*h+9o : $h'2133
: $h'2133 : "MA%s%as +n&%n&a'lo d% nu%9oN"7 32 C 4 3
#f +R%s B 6 Ih%n
&esume
End #f
Si no -ace$ lo anterior% puede$ 6uedar en un bucle in1inito entre la linea 6ue pro&oco
el error * el controlador de errore$'
#a $e,unda 1orma% u$ando 8esume 0e't% te permite continuar la e2ecuci4n de tu
c4di,o en la l=nea $i,uiente a la 6ue pro&oco el error% por e2emplo'
"u. Man%)o/E''o'%s623
A+( sRu&a!'*h+9o !s "&'+ng
A+( +R%s !s #n&%g%'
?n E''o' Eo&o $?=IR?5!ERR?RE"
sRu&a!'*h+9o B I'+(2#n8u&Box2"Es*'+.% la 'u&a d%l a'*h+9o a .o''a'"33
J+ll sRu&a!'*h+9o
MsgBox "El a'*h+9o " : sRu&a!'*h+9o : " s% .o''o *o''%*&a(%n&%"
Ex+& "u.
$?=IR?5!ERR?RE"4
"%l%*& $as% E''
$as% 0
$as% 53
+R%s B MsgBox 2"=o s% %n*on&'6 la 'u&a %s8%*+f+*ada" : $h'2133 : $h'2133 :
sRu&a!'*h+9o : $h'2133 : $h'2133 : "MA%s%as *on&+nua'N"7 32 C 4 3
#f +R%s B 6 Ih%n
&esume Next
End #f
$as% Els%
MsgBox "?*u''+6 %l %''o' nu(%'o4 " : E'' : $h'2133 : E''o' : /
$h'2133 : "En la l+n%a " : E'l
End "%l%*&
?n E''o' Eo&o 0
End "u.
A6u= lo importante e$ 6ue note$ como no$ mue$tra el men$a2e de con1irmaci4n de
borrado% aun * cuando e$te no $e -i/o e1ecti&amente% tu tarea e$ corre,ir e$o'
#a ultima 1orma e$ u$ar la in$trucci4n 8esumen Nombre#ti$ueta% en donde
Nombre#ti$ueta tiene la$ mi$ma$ con$ideracione$ &i$ta$ al inicio de e$te tema% e2emplo'
"u. Man%)o/E''o'%s723
A+( sRu&a!'*h+9o !s "&'+ng
A+( +R%s !s #n&%g%'
?n E''o' Eo&o $?=IR?5!ERR?RE"
102 E'11 +ontrol de errore$
RE#=IE=I!R5?4
sRu&a!'*h+9o B I'+(2#n8u&Box2"Es*'+.% la 'u&a d%l a'*h+9o a .o''a'"33
J+ll sRu&a!'*h+9o
MsgBox "El a'*h+9o " : sRu&a!'*h+9o : " s% .o''o *o''%*&a(%n&%"
Ex+& "u.
$?=IR?5!ERR?RE"4
"%l%*& $as% E''
$as% 0
$as% 53
+R%s B MsgBox 2"=o s% %n*on&'6 la 'u&a %s8%*+f+*ada" : $h'2133 : $h'2133 :
sRu&a!'*h+9o : $h'2133 : $h'2133 : "MA%s%as +n&%n&a'lo d% nu%9oN"7 32 C 4 3
#f +R%s B 6 Ih%n
&esume &%INT%NTA&L'
End #f
$as% Els%
MsgBox "?*u''+6 %l %''o' nu(%'o4 " : E'' : $h'2133 : E''o' : /
$h'2133 : "En la l+n%a " : E'l
End "%l%*&
?n E''o' Eo&o 0
End "u.
No de2e$ de ob$er&ar la declaraci4n de la eti6ueta corre$pondiente a donde &a a
$altar la in$trucci4n @e$ume% aun6ue el u$o m;$ com?n e$ rediri,ir a un $e,undo blo6ue donde $e
$ale de la macro de 1orma controlada% por e2emplo'
"u. Man%)o/E''o'%s823
A+( sRu&a!'*h+9o !s "&'+ng
?n E''o' Eo&o $?=IR?5!ERR?RE"
sRu&a!'*h+9o B I'+(2#n8u&Box2"Es*'+.% la 'u&a d%l a'*h+9o a .o''a'"33
J+ll sRu&a!'*h+9o
MsgBox "El a'*h+9o " : sRu&a!'*h+9o : " s% .o''o *o''%*&a(%n&%"
Eo&o "!5#A!$?=IR?5!A!
$?=IR?5!ERR?RE"4
"%l%*& $as% E''
$as% 0
$as% 53
MsgBox "=o s% %n*on&'6 la 'u&a %s8%*+f+*ada" : $h'2133 : $h'2133 : sRu&a!'*h+9o :
$h'2133 : $h'2133 : "El 8'og'a(a &%'(+na'a"7 48
R%su(% "!5#A!$?=IR?5!A!
$as% Els%
MsgBox "?*u''+6 %l %''o' nu(%'o4 " : E'' : $h'2133 : E''o' : /
$h'2133 : "En la l+n%a " : E'l
End "%l%*&
?n E''o' Eo&o 0
"!5#A!$?=IR?5!A!4
,!GuH 9a &odo %l *6d+go Gu% Gu+%'as7 8o' %)%(8lo
,*+%''% d% a'*h+9os @ .as%s d% da&os7 la +d%a
,%s sal+' d% fo'(a *on&'olada d% &u (a*'o
MsgBox ""% sald'> *o''%*&a(%n&%"
End "u.
Nota tambi3n 6ue en &e/ de u$ar >:it Sub% Lante$M de la eti6ueta * c4di,o de
controlador de errore$% u$amo$ la in$trucci4n Eoto Nombre#ti$ueta% para $altar directamente a la
eti6ueta de $alida' >$ta$ opcione$ $on $olo &ariante$% una &e/ m;$ t? decidir;$ 6ue e$ lo 6ue
Aprendiendo OOo .a$ic 10(
me2or $e acomoda a tu 1orma de traba2ar * de ra/onar% la recomendaci4n e$ 6ue no abu$e$ de lo$
$alto$ con @e$ume o oto% por claridad% limita $u u$o lo m;$ po$ible'
Para terminar e$te tema% te mue$tro otra in$trucci4n para LomitirM errore$% me re1iero
a la in$trucci4n %n Error 8esume 0e't% 6ue $i,ni1ica ->n ca$o de error% continua el la $i,uiente
l=nea-% * $e u$a de la $i,uiente manera<
"u. Man%)o/E''o'%s923
A+( sRu&a!'*h+9o !s "&'+ng
?n E''o' R%su(% =%x&
sRu&a!'*h+9o B I'+(2#n8u&Box2"Es*'+.% la 'u&a d%l a'*h+9o a .o''a'"33
J+ll sRu&a!'*h+9o
MsgBox "El a'*h+9o " : sRu&a!'*h+9o : " s% .o''o *o''%*&a(%n&%"
End "u.
9ntentemo$ controlar el error'
"u. Man%)o/E''o'%s1023
A+( sRu&a!'*h+9o !s "&'+ng
?n E''o' R%su(% =%x&
sRu&a!'*h+9o B I'+(2#n8u&Box2"Es*'+.% la 'u&a d%l a'*h+9o a .o''a'"33
J+ll sRu&a!'*h+9o
#f E'' B 0 Ih%n
MsgBox "El a'*h+9o " : sRu&a!'*h+9o : " s% .o''o *o''%*&a(%n&%"
End #f
End "u.
Notara$ 6ue no e$ po$ible% no importa el n?mero de errore$ 6ue $ucedan'
"u. Man%)o/E''o'%s1123
A+( sRu&a!'*h+9o !s "&'+ng
?n E''o' R%su(% =%x&
E''o'223
E''o'233
E''o'243
E''o'253
E''o'263
#f E'' B 0 Ih%n
MsgBox "=o o*u''+6 n+ng<n %''o'"
End #f
End "u.
Puede$ tener 2unta$ una de$pu3$ de otra la$ do$ in$truccione$ para controlar
errore$'
?n E''o' R%su(% =%x&
?n E''o' Eo&o $?=IR?5!ERR?RE"
10E E'11 +ontrol de errore$
Pero tendr; prioridad On >rror @e$ume Ne:t% por lo 6ue no e$ acon$e2able% de
-ec-o% no te recomiendo el u$o de On >rror @e$ume Ne:t a meno$ 6ue e$t3$ $e,uro de lo 6ue
-ace$'
).12 -alidacin de datos
+on la e:periencia te dar;$ cuenta 6ue -acer una macro o pro,rama libre de errore$
no e$ tema menor * 6ue entre m;$ ,rande $ea tu c4di,o% la probabilidad de 6ue ten,a errore$
aumenta con$iderablemente' Una 1uente 1recuente de errore$% $on lo$ dato$ 6ue un u$uario
alimenta a un pro,rama% por $upue$to% e$ nue$tra re$pon$abilidad como pro,ramadore$ el
minimi/ar e$te tipo de errore$% e$to lo lo,ramo$ 1iltrando lo$ dato$ 6ue el u$uario alimenta% e$ decir
L&alidandoM lo$ dato$% no $e te ol&ide% -(4ID(0D% 4%S D(5%S% &era$ 6ue la &alidaci4n de
dato$% con$ume ba$tante l=nea$ de c4di,o% a &ece$% muc-a$ m;$ 6ue el proce$o en $i de e$to$%
por ello e$ un tema mu* importante en pro,ramaci4n' OOo .a$ic cuenta con al,una$ 1uncione$
6ue no$ a*udan a &alidar dato$% otra$% tiene$ 6ue pro,ramartela$ (e in,eniertale$) tu mi$mo%
&eamo$ al,una$ de ella$% pero recuerda 6ue $on $olo ,u=a$% pue$ la$ opcione$ $on tanta$ * tan
&ariada$ como pro,ramadore$ la$ implementen' Para el me2or apro&ec-amiento de e$te tema%
tiene$ 6ue $aber 6ue lo$ len,ua2e$ .a$ic $on mu* noble$ en al con&er$i4n de dato$ de un tipo a
otro% muc-a$ de e$ta$ con&er$ione$ la$ puede -acer el len,ua2e de 1orma directa% a e$ta
con&er$i4n $e $e llama implDcita% pero lo recomendable e$ 6ue no$otro$ controlemo$% $iempre
6ue $ea po$ible% e$ta$ con&er$ione$% a e$ta 1orma $e le llama e'plicita * no$ apo*amo$ en &aria$
1uncione$ de OOo .a$ic para -acer e$ta$ con&er$ione$'
+omo $abe$% la in$trucci4n M$,.o:% e$pera como par;metro Lre6ueridoM un
ar,umento llamado Men$a2e de tipo Strin,% e$ decir% una cadena de te:to'
MsgBox Mensae As !tring" #$ipo As Integer%" #$itulo As !tring%
5eamo$ lo$ $i,uiente$ e2emplo$'
?8&+on Ex8l+*+&
"u. M%nsa)%s123
A+( dK%*ha !s Aa&%
A+( +=u(%'o !s #n&%g%'
d+( .?8*+on !s Bool%an
dK%*ha B Aa&%"%'+al274717153
+=u(%'o B 2008
.?8*+on B I'u%
MsgBox dK%*ha
MsgBox +=u(%'o
MsgBox .?8*+on
End "u.
Ob$er&a como% aun6ue le pa$emo$ un n?mero o una 1ec-a o inclu$o un &alor
booleano% la in$trucci4n M$,.o: $i,ue traba2ando% e$to e$ por 6ue el len,ua2e% -ace internamente
(de 1orma implDcita) una con&er$i4n de tipo$% mientra$ le $ea po$ible% con&ierte del tipo 6ue
Aprendiendo OOo .a$ic 105
reciba% a una cadena de te:to ($trin,)% lo ideal% e$ 6ue no$otro$ -a,amo$ e$ta con&er$i4n de 1orma
e:plicita% como en el $i,uiente e2emplo'
"u. M%nsa)%s223
A+( dK%*ha !s Aa&%
A+( +=u(%'o !s #n&%g%'
d+( .?8*+on !s Bool%an
dK%*ha B Aa&%"%'+al274717153
+=u(%'o B 2008
.?8*+on B I'u%
MsgBox (Str2 dK%*ha 3
MsgBox (Str2 +=u(%'o 3
MsgBox (Str2 .?8*+on 3
End "u.
Ob$er&a como -acemo$ u$o de la 1unci4n CStr(&alor) 6ue con&ierte el tipo de L&alorM
a una cadena de te:to (Strin,)' "e e$ta 1orma% Lca$iM podemo$ e$tar $e,uro$ de 6ue no no$ dar;
un error ine$perado' OOo .a$ic cuenta con 1uncione$ para con&ertir a la ma*or=a de lo$ tipo$ de
&ariable$ po$ible$'
4uncin /escripcin
+Str(&alor) +on&ierte a cadena de te:to (Strin,)
+.*te(&alor) +on&ierte a tipo .*te
+9nt(&alor) +on&ierte a tipo entero (9nte,er)
+#n,(&alor) +on&ierte a tipo entero lar,o (#on,)
+Sn,(&alor) +on&ierte a tipo $imple (Sin,le)
+"bl(&alor) +on&ierte a tipo doble ("ouble)
+.ool(&alor) +on&ierte a tipo booleano (.oolean)
+"ate(&alor) +on&ierte a tipo 1ec-a ("ate)
OOo .a$ic cuenta con otra$ 1uncione$ 6ue no$ a*udan a $aber 6ue tipo de dato tiene
una &ariable% &eamo$ la$ $i,uiente$'
+uando nece$ite$ $aber $i una &ariable contiene un n?mero u$amo$ Is0umeric.
?8&+on Ex8l+*+&
"u. Es=u(%'o23
A+( sAa&o !s "&'+ng
sAa&o B I'+(2 #n8u&Box2 "#n&'odu*% un nu(%'o" 3 3
#f IsNumeri)2 sAa&o 3 Ih%n
MsgBox "Es un nu(%'o"
Els%
MsgBox "=o %s un nu(%'o"
End #f
End "u.
10) E'12 5alidaci4n de dato$
+uando nece$ite$ $aber $i una &ariable contiene una 1ec-a u$amo$ IsDate.
"u. EsK%*ha23
A+( sAa&o !s "&'+ng
sAa&o B I'+(2 #n8u&Box2 "#n&'odu*% una f%*ha" 3 3
#f Is*ate2 sAa&o 3 Ih%n
MsgBox "Es una f%*ha"
Els%
MsgBox "=o %s una f%*ha"
End #f
End "u.
O cuando nece$ite$ $aber $i una &ariable e$ una matri/ u$amo$ Is(rray.
"u. EsMa&'+;23
A+( (Aa&o !s 1a'+an&
#f IsArra+2 (Aa&o23 3 Ih%n
MsgBox "Es una (a&'+;"
Els%
MsgBox "=o %s una (a&'+;"
End #f
(Aa&o B !''a@21727374753
#f IsArra+2 (Aa&o23 3 Ih%n
MsgBox "Es una (a&'+;"
Els%
MsgBox "=o %s una (a&'+;"
End #f
End "u.
5eamo$ al,uno$ e2emplo$ de &alidacione$ comune$% como dicen en mi pueblo -ni
$on toda$ la$ 6ue e$t;n% ni e$t;n toda$ la$ 6ue $on-% $olo pretendo 6ue $ean de re1erencia * la$
adapte$ * complemente$ a tu$ nece$idade$'
Obli,amo$ al u$uario a introducir un dato% el 6ue $ea% la ?nica condici4n e$ 6ue no
$ea una cadena &ac=a'
"u. 1al+da'123
A+( sAa&o !s "&'+ng
A+( ."al+' !s Bool%an
Ao
sAa&o B I'+(2 #n8u&Box2"#n&'odu*% los da&os"3 3
#f sAa&o XY "" Ih%n
."al+' B I'u%
End #f
5oo8 Dn&+l ."al+'
End "u.
dabr;$ ob$er&ado en el e2emplo anterior% 6ue aun cuando el u$uario pre$ione
+ancelar% de todo$ modo$ no le -acemo$ ca$o * lo obli,amo$ a introducir un dato% $i bien lo
podemo$ -acer% no e$ com?n% lo -abitual e$ proporcionar $iempre al u$uario una 1orma de
cancelar un proce$o'
Aprendiendo OOo .a$ic 107
"u. 1al+da'223
A+( sAa&o !s "&'+ng
A+( ."al+' !s Bool%an
A+( +R%s !s #n&%g%'
Ao
sAa&o B I'+(2 #n8u&Box2"#n&'odu*% los da&os"3 3
#f sAa&o XY "" Ih%n
,!GuH 9a &u *6d+go 8a'a (an+8ula' los da&os
."al+' B I'u%
Els%
+R%s B MsgBox2 "0a'%*% Gu% no %s*'+.+s&% nada7 MA%s%as sal+'N"7 32 C 47 ""al+'" 3
#f +R%s B 6 Ih%n
."al+' B I'u%
End #f
End #f
5oo8 Dn&+l ."al+'
End "u.
A-ora% obli,amo$ al u$uario a introducir una cadena de te:to% 6ue LnoM $ea n?mero ni
1ec-a'
"u. 1al+da'323
A+( sAa&o !s "&'+ng
A+( ."al+' !s Bool%an
A+( +R%s !s #n&%g%'
Ao
sAa&o B I'+(2 #n8u&Box2"#n&'odu*% los da&os"3 3
#f sAa&o XY "" Ih%n
#f =o&2#sAa&%2sAa&o33 !nd =o&2#s=u(%'+*2sAa&o33 Ih%n
,!GuH 9a &u *6d+go 8a'a (an+8ula' los da&os
MsgBox "Es una *ad%na" : $h'2133 : $h'2133 : sAa&o
."al+' B I'u%
Els%
MsgBox "1alo' =? 9al+do"
End #f
Els%
+R%s B MsgBox2 "0a'%*% Gu% no %s*'+.+s&% nada7 MA%s%as sal+'N"7 32 C 47 ""al+'" 3
#f +R%s B 6 Ih%n
."al+' B I'u%
End #f
End #f
5oo8 Dn&+l ."al+'
End "u.
eue $olo introdu/ca n?mero$'
"u. 1al+da'423
A+( sAa&o !s "&'+ng
A+( ."al+' !s Bool%an
A+( +R%s !s #n&%g%'
Ao
sAa&o B I'+(2 #n8u&Box2"#n&'odu*% un nu(%'o"3 3
#f sAa&o XY "" Ih%n
#f #s=u(%'+*2sAa&o3 Ih%n
,!GuH 9a &u *6d+go 8a'a (an+8ula' los da&os
MsgBox "Es un nu(%'o" : $h'2133 : $h'2133 : sAa&o
."al+' B I'u%
10F E'12 5alidaci4n de dato$
Els%
MsgBox "1alo' =? 9al+do"
End #f
Els%
+R%s B MsgBox2 "0a'%*% Gu% no %s*'+.+s&% nada7 MA%s%as sal+'N"7 32 C 47 ""al+'" 3
#f +R%s B 6 Ih%n
."al+' B I'u%
End #f
End #f
5oo8 Dn&+l ."al+'
End "u.
eue introdu/ca una 1ec-a'
"u. 1al+da'523
A+( sAa&o !s "&'+ng
A+( ."al+' !s Bool%an
A+( +R%s !s #n&%g%'
Ao
sAa&o B I'+(2 #n8u&Box2"#n&'odu*% una f%*ha"3 3
#f sAa&o XY "" Ih%n
#f #sAa&%2sAa&o3 Ih%n
,!GuH 9a &u *6d+go 8a'a (an+8ula' los da&os
MsgBox "Es una f%*ha" : $h'2133 : $h'2133 : sAa&o
."al+' B I'u%
Els%
MsgBox "1alo' =? 9al+do"
End #f
Els%
+R%s B MsgBox2 "0a'%*% Gu% no *a8&u'as&% nada7 MA%s%as sal+'N"7 32 C 47 ""al+'" 3
#f +R%s B 6 Ih%n
."al+' B I'u%
End #f
End #f
5oo8 Dn&+l ."al+'
End "u.
Un n?mero% con un ran,o de1inido% di,amo$% entre 50 * 100'
"u. 1al+da'623
A+( sAa&o !s "&'+ng
A+( ."al+' !s Bool%an
A+( +R%s !s #n&%g%'
Ao
sAa&o B I'+(2 #n8u&Box2"#n&'odu*% un nu(%'o"3 3
#f sAa&o XY "" Ih%n
#f #s=u(%'+*2sAa&o3 !nd 1al2sAa&o3YB50 !nd 1al2sAa&o3XB100 Ih%n
,!GuH 9a &u *6d+go 8a'a (an+8ula' los da&os
MsgBox "Es un nu(%'o7 %n %l 'ango 50T100" : $h'2133 : $h'2133 : sAa&o
."al+' B I'u%
Els%
MsgBox "1alo' =? 9al+do"
End #f
Els%
+R%s B MsgBox2 "0a'%*% Gu% no *a8&u'as&% nada7 MA%s%as sal+'N"7 32 C 47 ""al+'" 3
#f +R%s B 6 Ih%n
."al+' B I'u%
End #f
End #f
Aprendiendo OOo .a$ic 10G
5oo8 Dn&+l ."al+'
End "u.
Una 1ec-a 6ue no $ea 1ec-a 1utura'
"u. 1al+da'723
A+( sAa&o !s "&'+ng
A+( ."al+' !s Bool%an
A+( +R%s !s #n&%g%'
Ao
sAa&o B I'+(2 #n8u&Box2"#n&'odu*% una f%*ha"3 3
#f sAa&o XY "" Ih%n
#f #sAa&%2sAa&o3 Ih%n
#f $Aa&%2sAa&o3 XB Aa&%23 Ih%n
,!GuH 9a &u *6d+go 8a'a (an+8ula' los da&os
MsgBox "Es una f%*ha 9al+da" : $h'2133 : $h'2133 : sAa&o
."al+' B I'u%
Els%
MsgBox "Es una f%*ha fu&u'a"
End #f
Els%
MsgBox "1alo' =? 9al+do"
End #f
Els%
+R%s B MsgBox2 "0a'%*% Gu% no *a8&u'as&% nada7 MA%s%as sal+'N"7 32 C 47 ""al+'" 3
#f +R%s B 6 Ih%n
."al+' B I'u%
End #f
End #f
5oo8 Dn&+l ."al+'
End "u.
>l $i,uiente e2emplo e$ mu* di&ertido% le pedimo$ al u$uario 6ue introdu/ca $olo
&ocale$% pero *a $abe$ como $on lo$ u$uario$% $e,uro capturan lo 6ue $e le$ da la ,ana% a$= 6ue
1iltraremo$ $u te:to% de2ando $olo la$ &ocale$'
"u. 1al+da'823
A+( sAa&o !s "&'+ng
A+( ."al+' !s Bool%an
A+( +R%s !s #n&%g%'
A+( *o1 !s #n&%g%'
A+( s5%&'a !s "&'+ng
A+( sI(8 !s "&'+ng
A+( 8os !s #n&%g%'
Ao
sAa&o B I'+(2 #n8u&Box2"#n&'odu*% solo 9o*al%s"3 3
#f sAa&o XY "" Ih%n
#f =o&2#sAa&%2sAa&o33 !nd =o&2#s=u(%'+*2sAa&o33 Ih%n
,!GuH 9a &u *6d+go 8a'a (an+8ula' los da&os
Ko' *o1 B 1 Io 5%n2sAa&o3
,Io(a(os una 8o' una *ada l%&'a *a8&u'ada
s5%&'a B M+d2sAa&o7*o1713
,!9%'+gua(os s+ %s una 9o*al (a@<s*ula o (+n<s*ula
8os B #n"&'217"a%+ou!E#?D"7s5%&'a3
,"+ %n*u%n&'a la l%&'a %n la l+s&a d% 9o*al%s #n"&' &%
,d%9u%l9% la 8os+*+6n7 *on Gu% s%a (a@o' a *%'o sa.%(os
,Gu% ha s+do %n*on&'ada
#f 8os Y 0 Ih%n
sI(8 B sI(8 : s5%&'a
110 E'12 5alidaci4n de dato$
End #f
=%x&
MsgBox sI(8
."al+' B I'u%
Els%
MsgBox "1alo' no 9al+do"
End #f
Els%
+R%s B MsgBox2 "0a'%*% Gu% no *a8&u'as&% nada7 MA%s%as sal+'N"7 32 C 47 ""al+'" 3
#f +R%s B 6 Ih%n
."al+' B I'u%
End #f
End #f
5oo8 Dn&+l ."al+'
End "u.
>n e$ta macro tenemo$ do$ nue&a$ in$truccione$ de OOo .a$ic% Mid% 6ue no$ $ir&e
para e:traer una cadena de otra e 9nStr 6ue encuentra la po$ici4n de una cadena en otra'
No 6uiero 6ue $e te ol&ide% la -(4ID(CI%0 de lo$ dato$ 6ue introduce el u$uario e$
Lmu* importanteM * $i con2u,a$ e$to con el control de errore$% te a$e,uro 6ue podr;$ minimi/ar el
rie$,o de 1allo$ en tu$ aplicacione$% $ino un 100U% $i en un porcenta2e ba$tante alto'
Si tiene$ una &alidaci4n intere$ante * 6ue e$te al ni&el b;$ico 6ue &enimo$
mane2ando% puede$ en&i;rmela para incluirla a6u= o en $u de1ecto% $i tiene$ problema$ con al,una
&alidaci4n% planteala en la$ li$ta$ de correo o 1oro$ * $i e$ lo $u1icientemente ilu$trati&a% tambi3n la
incluiremo$ a6u='
VV!eli/ pro,ramaci4nWW
).1 El IDE 7 Muc"o mGs que un editor
A e$ta$ altura$ *a -abr;$ notado la ,ran utilidad del 9">% te colorea la$ palabra$
dependiendo de $u conte:to * te mue$tra men$a2e$ pre&enti&o$ o de error $iempre 6ue $ea
po$ible' >n e$te capitulo% &eremo$ al,una$ otra$ caracter=$tica$ del 9"> 6ue no$ pueden a*udar a
depurar nue$tra$ macro$% entendiendo por depurar% la$ t3cnica$ 6ue no$ a*udan a encontrar m;$
1;cilmente un error% $obre todo l4,ico% 6ue $on% a &ece$% lo$ m;$ complicado$ de encontrar'
Para empe/ar demo$ un repa$o a nue$tro centro de traba2o% e$ decir% al 9"> * $u$
di1erente$ parte$<
1' .arra de titulo
2' .arra de men?$
(' .arra$ de -erramienta$
E' 5entana de edici4n
5' 5entana de ob$er&ador
)' 5entana de llamada$
7' .arra de de$pla/amiento de m4dulo$ * di;lo,o$
Aprendiendo OOo .a$ic 111
F' .arra de e$tado
Al,una$ de e$ta$ *a te $er;n mu* 1amiliare$% otra$ $on nue&a$ pero la$ &eremo$ en
e$te capitulo' +omo *a mencionamo$% el 9">% e$ $olo otra aplicaci4n de OpenO11ice'or,% 6ue no$
permite crear * editar nue$tra$ macro$% la barra de titulo * la de men?$ e$ con$i$tente con la$
dem;$ aplicacione$ 6ue inte,ran la aplicaci4n% por lo 6ue no la$ &eremo$ a6u=% #a$ barra$ de
-erramienta$ la$ &eremo$ a continuaci4n'
#a primer barra de -erramienta$ $e llama Macro.ar% por lo 6ue $upon,o 6ue en
ca$tellano $er;% .arra de macro$% *a 6ue el nombre no aparece en $u barra de titulo% como $i lo
-ace en la ma*or=a de la$ barra$ de -erramienta$'
>l primer control 6ue e$ un cuadro de li$ta de$ple,able (control +ombo.o:) te
permite $eleccionar el arc-i&o 6ue e$te abierto * la biblioteca 6ue 6uiera$ editar'
112 E'1( >l 9"> g Muc-o m;$ 6ue un editor
Ob$er&a como la primer opci4n e$ Todo$% $i $elecciona$ e$ta opci4n% en la barra de
de$pla/amiento de m4dulo$% te mo$trara Ltodo$M lo$ m4dulo$ * di;lo,o$ de todo$ lo$ arc-i&o$
abierto$% a$= como del arc-i&o e$pecial Mi$ macro$ * lo$ inte,rado$ en OpenO11ice'or,% por lo 6ue
e$ta opci4n te podr=a lle,ar a mo$trar &aria$ decena$ de m4dulo$ dependiendo de cuanto$
arc-i&o$ ten,a$ abierto$ * de cuanto$ m4dulo$ ten,a$ con c4di,o'
>l re$to de lo$ botone$ $on lo$ $i,uiente$'
1' 9cono de compilar< Me ,u$tar=a muc-o 6ue el c4di,o de nue$tra$ macro$ $e
pudie$e compilar% 6ue e$ lo 6ue dice -ace e$te icono% pero todo el c4di,o de nue$tra$
macro$ e$ interpretado% por lo 6ue e$te icono% lo ?nico 6ue -ace e$ &ol&er a recorrer el
c4di,o del modulo actual en bu$ca de errore$% pero no compila c4di,o'
2' 9cono de e2ecutar< >$te icono e2ecuta L$oloM la primer macro del m4dulo acti&o%
pero *a &imo$ la$ t3cnica$ para e2ecutar la$ dem;$ macro$% e6ui&ale a pre$ionar la tecla
!5' @ecuerda 6ue en al,una$ di$tribucione$ de OpenO11ice'or,% puede$ e2ecutar la macro
donde $e encuentre el cur$or% pero en la o1icial aun no'
(' 9cono de detener macro< Solo e$ta acti&o cuando e2ecutamo$ una macro%
normalmente $e u$a en con2unci4n con lo$ icono$ E * 5'
E' 9cono pa$ar al $i,uiente< Permite e2ecutar l=nea a l=nea el c4di,o de nue$tra
macro% mu* ?til para depurar * encontrar errore$% normalmente $e u$a 2unto con el
LOb$er&adorM para encontrar errore$% e6ui&ale a pre$ionar la tecla !F
5' 9cono entrar en el proce$o< @eali/a la mi$ma acci4n del icono E% lo$ icono$ E *
5% $olo $e e2ecutan en la primer macro del modulo acti&o% por lo 6ue para depurar macro$%
e$ me2or u$ar Lpunto$ de rupturaM% te da$ cuenta 6ue l=nea e$ la $i,uiente a e2ecutar por una
1lec-a amarilla en el mar,en i/6uierdo del editor'
)' 9cono $alir de proce$o< +uando e2ecutamo$ una macro l=nea por l=nea% e$te
icono no$ permite continuar la e2ecuci4n de la macro normalmente% e6ui&ale a pre$ionar la
tecla !5'
Aprendiendo OOo .a$ic 11(
7' 9cono de acti&ar0de$acti&ar punto$ de ruptura< Un punto de ruptura e$ una
L$eKalM 6ue le indica al 9"> 6ue deten,a la e2ecuci4n en la linea indicada por un punto ro2o
en el mar,en i/6uierdo de nue$tro editor% con e$te icono acti&amo$ (mo$tramo$) *
de$acti&amo$ (ocultamo$) lo$ punto$ ro2o$ 6ue $on punto$ de ruptura en la l=nea actual
donde e$te el cur$or de e$critura% recuerda 6ue el cur$or de e$critura e$ la ra*a &ertical
ne,ra de todo editor de te:to% tambi3n puede$ acti&ar * de$acti&ar punto$ de ruptura con la
tecla !G o dando un doble clic en la l=nea 6ue 6uiera$% pero mu* importante% dentro del
mar,en i/6uierdo del editor' Ob$er&a en la $i,uiente ima,en lo$ punto$ ro2o$'
F' 9cono ,e$tionar punto$ de ruptura< No$ permite admini$trar lo$ punto$ de
ruptura e:i$tente$ en nue$tro modulo actual% e$ decir% no$ permite a,re,ar% eliminar o
de$acti&ar punto$ de ruptura en un cuadro de dialo,o' +ada punto de ruptura e$tar;
indicado por la l=nea en donde $e encuentre * podr;$ $eleccionar * de$acti&ar el punto 6ue
6uiera$% con lo cual el punto ro2o pa$ar; a $er un punto ,ri$% tambi3n puede eliminar el
punto de interrupci4n 6ue 6uiera$ tan $olo $eleccion;ndolo * pre$ionando el bot4n >liminar%
a$= mi$mo% puede$ a,re,ar el 6ue 6uiera$% tan $olo indicando el numero de l=nea donde
de$ea$ e$tablecerlo$ * pre$ionar el bot4n nue&o% pero lo me2or e$ a,re,ar lo$ punto$ de$de
el editor% e:actamente en la l=nea 6ue 6uiera$'
G' 9cono de -abilitar in$pecci4n< Permite a,re,ar la &ariable $eleccionada a la
&entana de ob$er&ador para &i$uali/ar el &alor de dic-a &ariable durante la e2ecuci4n de una
macro% e$ta &entana normalmente $e u$a e2ecutando la macro l=nea a l=nea (!F) o 2unto con
punto$ de ruptura para poder ob$er&ar el &alor de la$ &ariable$% m;$ adelante &eremo$ a
detalle e$ta -erramienta
10' 9cono de bu$car par3nte$i$< +on el cur$or de e$critura po$icionado Lante$M de
un par3nte$i$ de apertura o cierre% no$ permite $eleccionar todo el te:to dentro de dic-o$
11E E'1( >l 9"> g Muc-o m;$ 6ue un editor
par3nte$i$ e inclu*endo lo$ par3nte$i$% mu* ?til $obre todo en ,rande$ 1uncione$ anidada$
donde $e pierden lo$ par3nte$i$'
11' 9cono de in$ertar c4di,o .a$ic< Permite% a partir de un arc-i&o de te:to
(normalmente con e:ten$i4n .AS) in$ertar el c4di,o .a$ic 6ue conten,o en el modulo
actual en la po$ici4n del cur$or de e$critura actual'
12' 9cono de ,uardar c4di,o .a$ic< No$ permite e:portar a un arc-i&o de te:to con
e:ten$i4n .AS el c4di,o $eleccionado o todo el modulo $i no -a* nada $eleccionado'
1(' 9cono de importaci4n de "ialo,o< No$ permite importar un cuadro de di;lo,o'
#a $i,uiente barra de -erramienta$ $e llama >$t;ndar% * e$ mu* $imilar a la ma*or=a
de la$ barra$ e$t;ndar de la$ dem;$ aplicacione$% te permite abrir% ,uardar% imprimir% copiar%
pe,ar% etc% por lo 6ue no &eremo$ a6u= e$ta$ opcione$% $al&o por lo$ tre$ icono$ $i,uiente$ $olo
di$ponible$ en el 9">'
1' 9cono catalo,o de ob2eto$< No$ mue$tra un cuadro de dialo,o 6ue no$ permite
na&e,ar en 1orma de ;rbol entre lo$ arc-i&o$ abierto$ * dentro de $u$ biblioteca$% m4dulo$
* macro$ di$ponible$% con un doble clic $obre la macro $eleccionada no$ lle&a a ella o
u$ando el bot4n Mo$trar (circulo ro2o en la ima,en)'
2' 9cono de $eleccionar macro< No$ mue$tra un cuadro de dialo,o para
admini$trar nue$tra$ macro$% no$ permite tambi3n na&e,ar entre lo$ arc-i&o$ abierto$% $u$
biblioteca$ * $u$ m4dulo$% por a-ora% principalmente la -emo$ u$ado$ para e2ecutar la
macro 6ue 6ueramo$% pero tambi3n podemo$ editar * eliminarla$% una opci4n mu*
intere$ante * podero$a e$ LA$i,narM una macro% 6ue $e &er; m;$ adelante'
Aprendiendo OOo .a$ic 115
(' 9cono $eleccionar modulo< No$ mue$tra un cuadro de dialo,o 6ue no$ permite
admini$trar m4dulo$% di;lo,o$ * biblioteca$% a,re,arlo$ * eliminarlo$ entre otra$ opcione$
como a,re,ar una contra$eKa a una biblioteca'
Ob$er&a la lla&e al lado i/6uierdo de mi&iblioteca 6ue no$ indica 6ue e$ta biblioteca tiene
e$tablecida una contra$eKa para $u &i$uali/aci4n% la cual te $olicitara $i intenta$ editarla'
11) E'1( >l 9"> g Muc-o m;$ 6ue un editor
5eamo$ a-ora como no$ pueden a*udar lo$ punto$ de ruptura% la e2ecuci4n l=nea a
l=nea% la &entana de ob$er&ador * la &entana de llamada$ a depurar nue$tra$ macro$' Puede$ u$ar
cual6uier macro de la$ 6ue -a*amo$ de$arrollado en e$to$ apunte$ o cual6uiera 6ue ten,a$% lo
importante e$ $e,uir la $ecuencia correcta de lo$ pa$o$ $i,uiente$% por e2emplo% el $i,uiente
c4di,o% copialo en la parte $uperior de cual6uier m4dulo% e$ decir% a$e,urate de 6ue $ea la
LprimerM macro de dic-o m4dulo de c4di,o'
?8&+on Ex8l+*+&
,$ons&'u+(os un s%udoTRK$7 %l RK$ %s un da&o 8%'sonal @ <n+*o %n MSx+*o @ d+go s%udo
,8o' Gu% no %s &an s+(8l% *o(o lo 8ongo aGuH7 8%'o nos s+'9% (u@ .+%n d% %)%(8lo
,0'+(%'as dos l%&'as d%l a8%ll+do 8a&%'no
,0'+(%'a l%&'a d%l a8%ll+do (a&%'no
,0'+(%'a l%&'a d%l no(.'%
,!\o d% na*+(+%n&o d% dos dHg+&os
,M%s d% na*+(+%n&o d% dos dHg+&os
,A+a d% na*+(+%n&o d% dos dHg+&os
"u. ?.&%n%'RK$123
A+( s=o(.'% !s "&'+ng
A+( d=a*+(+%n&o !s Aa&%
A+( 8os1 !s B@&%7 8os2 !s B@&%
A+( RK$ !s "&'+ng
,1a(os a su8on%' Gu% *a8&u'a(os un no(.'% %s&anda' =o(.'% 0a&%'no Ma&%'no
,8o' %)%(8lo 1an%ssa Bau*h% $ha9+'a
s=o(.'% B I'+(2 #n8u&Box2 "Es*'+.% &u no(.'% *o(8l%&o"7 "=o(.'%" 33
,1a(os a su8on%' una f%*ha *o''%*&a7 8o' aho'a no ha'%(os 9%'+f+*a*+6n
,?[? solo 8o' aho'a7 asH Gu% 8'u%.a f%*has *o''%*&as
d=a*+(+%n&o B $Aa&%2 #n8u&Box2 "!ho'a &u f%*ha d% na*+(+%n&o"7 "K%*ha" 33
,En*on&'a(os la 8os+*+6n d%l 8'+(%' %s8a*+o
8os1 B #n"&'217s=o(.'%7" "3
,En*on&'a(os la 8os+*+on d%l s%gundo %s8a*+o
8os2 B #n"&'28os1C17s=o(.'%7" "3
RK$ B D$as%2 M+d2s=o(.'%78os1C1723 : M+d2s=o(.'%78os2C1713 : M+d2s=o(.'%71713 3 : /
R+gh&2$"&'2O%a'2d=a*+(+%n&o33723 : Ko'(a&2Mon&h2d=a*+(+%n&o37"00" 3 : /
Ko'(a&2Aa@2d=a*+(+%n&o37"00" 3
,Mos&'a(os %l RK$ *ons&'u+do
MsgBox RK$
End "u.
Tiene$ 6ue $er mu* ob$er&ador% pre$iona la tecla !5% por $upue$to nue$tra macro $e
e2ecutara de 1orma normal% captura lo$ dato$ $olicitado$ correctamente * &eri1ica 6ue el re$ultado
$ea el e$perado' A-ora% pre$iona !F% nota como aparece una 1lec-a amarilla en el mar,en
i/6uierdo de nue$tro editor% empe/ando por la primer l=nea de nue$tra macro% continua
pre$ionando !F * nota como la 1lec-a amarilla &a a&an/ando l=nea por l=nea en nue$tro c4di,o%
continua a$= -a$ta terminar de e2ecutar la macro'
Aprendiendo OOo .a$ic 117
5uel&e a empe/ar pre$ionando !F% pero a-ora% detente e:actamente en la l=nea
$i,uiente% 6ue $i copia$te el c4di,o anterior% tiene 6ue $er la l=nea 2F apro:imadamente'
RK$ B D$as%2 M+d2s=o(.'%78os1C1723 : M+d2s=o(.'%78os2C1713 : M+d2s=o(.'%71713 3 : /
R+gh&2$"&'2O%a'2d=a*+(+%n&o33723 : Ko'(a&2Mon&h2d=a*+(+%n&o37"00" 3 : /
Ko'(a&2Aa@2d=a*+(+%n&o37"00" 3
Po$iciona el cur$or $obre cada una de la$ &ariable$ $Nombre% dNacimiento% po$1%
po$2 * @!+% I6ue nota$J% mu* bien% mu* bien% ob$er&a como el 9"> no$ mue$tra el &alor
almacenado$ en cada una de la$ &ariable$ en un pe6ueKo cuadro de te:to amarillo 6ue
de$aparece en cuanto mo&emo$ el cur$or' No e$ta de m;$ aclararte 6ue la ima,en $i,uiente e$ta
editada para mo$trarte el &alor de toda$ la &ariable$'
Tambi3n ob$er&a 6ue% mientra$ e$ta$ e2ecutando el c4di,o% l=nea por l=nea% en
cual6uier momento puede$ continuarla de 1orma normal pre$ionando !5 o de plano detener la
macro con el bot4n "etener Macro o pre$ionando +trlRS-i1tRe'
+on 2u$ta ra/4n te pre,untara$% Ie$to no e$ mu* practico cuando tenemo$ decena$
de &ariable$J O $i% tendr;$ ra/4n% a-ora para ello% para &er el &alor de la$ &ariable$% u$aremo$ la
&entana del ob$er&ador de la $i,uiente manera' Selecciona una &ariable * pre$iona el icono
Ldabilitar in$pecci4nM o pre$iona la tecla !7 6ue tiene el mi$mo e1ecto% repite e$te proce$o con
toda$ la$ re$tante$ &ariable$ * &e ob$er&ando como en la &entana del ob$er&ador $e &an li$tando
la$ &ariable$'
A-ora% &uel&e a e2ecutar la macro pa$o a pa$o% e$ decir% l=nea a l=nea * &e
ob$er&ando la &entana de in$pecci4n% al lle,ar a la l=nea donde con$truimo$ el @!+% tiene$ 6ue &er
al,o mu* $imilar a'
11F E'1( >l 9"> g Muc-o m;$ 6ue un editor
Mira 6ue lindo% tenemo$ el &alor de toda$ nue$tra$ &ariable$% adem;$% te mue$tra el
tipo de &ariable 6ue e$% por $upue$to $i e$ta$ &ariable$ cambian $u &alor en el tran$cur$o de
e2ecuci4n de nue$tra macro% e$to$ cambio$ lo$ podr;$ ir anali/ando en la &entana del ob$er&ador%
-e a-= $u importancia% una 1recuente 1uente de errore$% e$ preci$amente 6ue en oca$ione$ al
proce$ar lo$ dato$ tan r;pido% puede $er 6ue una &ariable no ten,a o no obten,a lo$ dato$ 6ue
nece$itamo$' O $ur,e una nue&a pre,unta% Itenemo$ 6ue e2ecutar nue$tro c4di,o l=nea a l=nea
para poder &er lo$ &alore$ de la$ &ariable$J% I* $i tenemo$ decena$ o centena$ de l=nea$ de
c4di,oJ% mu* buena pre,unta% &eo 6ue ere$ un alumno atento% para e$to$ ca$o$% en &e/ de
e2ecutar nue$tro c4di,o l=nea a l=nea% u$aremo$ punto$ de interrupci4n% 6ue% como &imo$ m;$
atr;$% $on $eKale$ 6ue le de2amo$ al 9"> para 6ue $e deten,a en la l=nea indicada' Para
a,re,arlo$ u$amo$ el icono Lacti&ar0de$acti&ar punto$ de rupturaM o pre$ionamo$ la tecla !G% pero%
Lmu* importanteM% primero po$icionamo$ el cur$or $obre la l=nea donde no$ intere$e e$tablecer el
punto de interrupci4n' A,re,a un punto de interrupci4n en la linea donde con$truimo$ el @!+ de
modo 6ue te 6uede de la $i,uiente manera'
Ob$er&a como aun tenemo$ la$ &ariable$ en la &entana del ob$er&ador% a-ora%
e2ecuta la macro con !5 * ob$er&a como de$pu3$ de alimentar lo$ dato$% el c4di,o $e detiene
e:actamente en la l=nea 6ue e$tablecimo$'
Aprendiendo OOo .a$ic 11G
A-ora% puede$ continuar e2ecutando l=nea a l=nea (!F) o continuar normalmente (!5)%
puede$ e$tablecer tanto$ punto$ de interrupci4n como 6uiera$ o nece$ite$' #a$ &ariable$ 6ue
a,re,ue$ a la &entana del ob$er&ador * lo$ punto$ de interrupci4n 6ue e$table/ca$% $olo e$tar;n
di$ponible$ en tu $e$i4n actual% $i cierra$ tu arc-i&o lo$ perder;$' >n cual6uier momento puede$
6uitar lo$ punto$ de interrupci4n con !G $obre la l=nea donde e$ta el punto de interrupci4n o la$
&ariable$ de la &entana del ob$er&ador% $olo $elecciona la &ariable 6ue 6uiera$ 6uitar en la
&entana del ob$er&ador * la elimina$ de e$ta con el icono 6ue e$ta inmediatamente encima de
e$ta$'
Para terminar e$te tema tan di&ertido% &eamo$ para 6ue $ir&e la &entana de llamada$
* &eamo$ como la &entana de ob$er&ador tambi3n no$ puede mo$trar el &alor de una matri/ de
dato$% para e$to% modi1ica el c4di,o anterior para di&idirlo en una $ubrutina * en una 1unci4n% de
modo 6ue 6uede de la $i,uiente manera'
?8&+on Ex8l+*+&
"u. ?.&%n%'RK$223
A+( s=o(.'% !s "&'+ng
A+( d=a*+(+%n&o !s Aa&%
A+( RK$ !s "&'+ng
A+( (Aa&os223 !s "&'+ng
,?.&%n%(os los da&os
s=o(.'% B I'+(2 #n8u&Box2 "Es*'+.% &u no(.'% *o(8l%&o"7 "=o(.'%"7"1an%ssa Bau*h% $ha9+'a" 33
d=a*+(+%n&o B $Aa&%2 #n8u&Box2 "!ho'a &u f%*ha d% na*+(+%n&o"7 "K%*ha"7 "15/01/74" 33
,5os 8'o*%sa(os
$all ?.&%n%'#n+*+al%s2 s=o(.'%7 (Aa&os23 3
RK$ B [o+n2(Aa&os237""3
RK$ B RK$ : K%*haRK$2 d=a*+(+%n&o 3
,Mos&'a(os %l '%sul&ado
MsgBox RK$
End "u.
"u. ?.&%n%'#n+*+al%s2B@1al =o(.'% !s "&'+ng7 (Aa&os3
A+( 8os1 !s B@&%7 8os2 !s B@&%
8os1 B #n"&'217=o(.'%7" "3
8os2 B #n"&'28os1C17=o(.'%7" "3
(Aa&os203BD$as%2M+d2=o(.'%78os1C17233
(Aa&os213BD$as%2M+d2=o(.'%78os2C17133
(Aa&os223BD$as%2M+d2=o(.'%717133
End "u.
Kun*&+on K%*haRK$2B@1al =a*+(+%n&o !s Aa&%3 !s "&'+ng
K%*haRK$B R+gh&2$"&'2O%a'2=a*+(+%n&o33723 : Ko'(a&2Mon&h2=a*+(+%n&o37"00" 3 :
Ko'(a&2Aa@2=a*+(+%n&o37"00" 3
End Kun*&+on
>2ecuta el c4di,o primero (!5) para &eri1icar 6ue obtenemo$ lo$ re$ultado$
e$perado$% de$pu3$ a,re,a la &ariable m"ato$ a la &entana del ob$er&ador (!7) * e2ecuta el
c4di,o pa$o a pa$o (!F)% detente en la primer l=nea donde aparece la &ariable $Nombre% para
tener al,o mu* $imilar a la $i,uiente ima,en'
120 E'1( >l 9"> g Muc-o m;$ 6ue un editor
Tal &e/ en la &entana del ob$er&ador tendr;$ 6ue darle un clic al $=mbolo del $i,no
m;$ a la i/6uierda del nombre de la &ariable para 6ue te de$plie,ue el contenido de la matri/% 6ue%
en e$ta ca$o% e$ta &ac=a' +ontinua e2ecutando pa$o a pa$o (!F) * detente en'
@eitero% tiene$ 6ue $er mu* ob$er&ador% nota como al lle,ar a la l=nea donde
llamamo$ a la $ubrutina% el c4di,o $alta a dic-a $ubrutina * mu* importante% ob$er&a la &entana de
llamada$ como te mue$tra el nombre de la $ubrutina * adem;$% lo$ &alore$ 6ue $e le e$t;n
pa$ando% mu* ?til para $aber $i e$tamo$ e$tableciendo correctamente lo$ &alore$' +ontinua la
e2ecuci4n pa$o a pa$o * detente en'
Ob$er&a como a-ora la matri/ *a tiene dato$ * e$to$ $e mue$tran en la &entana del
ob$er&ador' +ontinua pa$o a pa$o -a$ta el inicio de la 1unci4n !ec-a@!+ * ob$er&a la &entana de
llamada$ 6ue una &e/ m;$ mue$tra la 1unci4n * $u$ &alore$ pa$ado$'
Aprendiendo OOo .a$ic 121
Termina la e2ecuci4n de la macro (!5) * ob$er&a 6ue la pila de llamada$ $e &ac=a% a$=
como el &alor de la$ &ariable en la &entana del ob$er&ador' O $in 6uerer 6ueriendo dimo$ un bre&e
repa$o a &ario$ tema$ &i$to$ anteriormente' No $e te ol&ide 6ue la$ tecla$ !5 * !F $olo tienen
e1ecto en la primer macro declarada en el modulo acti&o% para e2ecutar pa$o a pa$o otra$ macro$%
e$tablece primero un punto de ruptura en la linea 6ue te intere$e dentro de dic-a macro * de$pu3$
e2ecuta$ la macro de 1orma normal para 6ue $e deten,a en el punto de ruptura e$tablecido% a
partir de a-= *a puede$ u$ar !F para continuar pa$o a pa$o'''
M;$ adelante% aprenderemo$ 6ue el Ob$er&ador tambi3n no$ $ir&e para anali/ar
Lob2eto$M'
VV!eli/ pro,ramaci4nWW
122 5 Traba2ando con OpenO11ice'or,
! 5rabajando con %pen%33ice.or*
A mi 2uicio% entender como e$ta con$truido OpenO11ice'or,% e$ la di1erencia entre
apro&ec-ar todo el potencial 6ue tiene OOo .a$ic o perderte en un laberinto in1ran6ueable por
andar bu$cando H$imilitude$H con Hotro$H pro,rama$' Tal &e/ pecando de un e:ce$i&o
reduccioni$mo% OpenO11ice'or, e$ un #>O% el 1amo$o 2ue,o de con$trucci4n con pie/a$ de
pl;$tico% 6ue $i no $abe$ 6ue e$% te e$ta$ perdiendo de un mara&illo$o 2ue,o' +ada pie/a del
#>O e$ una pie/a completa% pero 6ue $e puede embonar per1ectamente bien con mile$ de
pie/a$ m;$ para HarmarH * HcrearH nue&o$ componente$% e$o e$ OpenO11ice'or, preci$amente%
e$ta di&ido en una 1inita * conocida cantidad de parte$% a cada una de e$ta$ parte$% le podemo$
llamar Hob2etoH% pero en el len,ua2e de OpenO11ice'or, $e le denomina HsericioH% 6ue no $e te
ol&ide HsericioH% *a 6ue e$te $er; el nombre 6ue u$aremo$ de a6u= en adelante% a $u &e/% e$to$
H$er&icio$H $e or,ani/an en Hm4dulo$H% pero o2o% no con1unda$ e$to$ Hm4dulo$H% con lo$ &i$to$ en
el capitulo 2% de -ec-o% e$ta 1orma de or,ani/aci4n no tiene ma*or rele&ancia para lo$ 6ue
pro,ramamo$ en OO .a$ic% no a$= para lo$ 6ue u$an otro$ len,ua2e$ con OpenO11ice'or, (ja&a%
+RR% etc')% a$= 6ue $olo como conocimiento recuerdalo * concentrate en lo$ HsericiosH' A $u &e/%
e$to$ Hsericios7% pueden contener otro$ Hsericios7% por lo 6ue $i $abe$ u$ar un Hsericio7 *
e$te e$ta implementado en otro componente% puede$ aplicar tu$ conocimiento$ de e$te Hsericio7
en el nue&o componente $in nin,?n problema' >n OpenO11ice'or,% a tra&3$ de OOo .a$ic% -a*
1orma de $aber 6ue Hsericios7 implementa un componente% lo cual% por $u importancia * por la
1alta de documentaci4n en e$paKol e$ lo 6ue trataremo$ de aprender a -acer de la me2or 1orma%
tambi3n% para 6ue recuerde$ 6ue Hno -a* 6ue e$tar adi&inandoH nada% $abiendo Hpre,untarH lo
correcto * con$ultando el lu,ar correcto% podemo$ pro1undi/ar 4ptimamente en la$ entraKa$ de
OpenO11ice'or,% mi prop4$ito en e$te capitulo% e$ en$eKarte a Hpre,untarleH a lo$ HsericiosH la
in1ormaci4n nece$aria para ponerlo$ a traba2ar'
0%5( M:O IM+%85(05E
Te $u,iero ampliamente% no continuar con lo$ $i,uiente$ cap=tulo$% -a$ta no -aber
comprendido cabalmente e$te% a$= mi$mo% do* por $entado 6ue no tiene$ duda$ de lo &i$to *
e:plicado en cap=tulo$ anteriore$% $e 6ue mi$ -erramienta$ peda,4,ica$ no $on la$ me2ore$% pero
e$to* en la me2or di$po$ici4n de a*udarte a re$ol&er tu$ duda$% a$= 6ue anda% $i tiene$ al,una%
&uel&e a leer el tema% $i aun 6ueda al,una% en&=ame lo ma$ claramente po$ible% 6ue e$ lo 6ue no
6ueda claro% por $upue$to% $i tiene$ al,?n aporte para a*udar a tran$parentar e$te tema% no de2e$
de mencionarlo'
Aprendiendo OOo .a$ic 12(
!.1 Mis macros 7 un arc"i,o especial.
da$ta a-ora% la ma*or=a de la$ macro$ 6ue -emo$ de$arrollado * probado% la$
-emo$ e$crito LdentroM de un documento de OpenO11ice'or,% $i -a$ $e,uido e$ta$ nota$ de$de el
inicio% propu$imo$ un arc-i&o de +alc% aun6ue mu* bien pudi$te -aber u$ado un arc-i&o de Nriter'
+omo $e 6ue ere$ ob$er&ador% $e,uro -abr;$ notado cada &e/ 6ue -abr=a$ tu arc-i&o para editar
la$ macro$ o e2ecutaba$ al,una% aparte del arc-i&o 6ue e$tu&iera$ u$ando% el or,ani/ador de
macro$ te mo$traba o bien% todo$ lo$ arc-i&o$ 6ue tiene$ abierto$ o $olo el arc-i&o acti&o para
e2ecutar una macro% &eamo$ en 6ue ca$o$ te mo$traba uno * en 6ue ca$o$ lo otro% e$ta di1erencia
e$ importante para el de$arrollo de lo$ $i,uiente$ tema$' Para empe/ar a clari1icar e$to% crea do$
nue&o$ arc-i&o$% uno de +alc * otro de Nriter% ,uardarlo$ con el nombre 6ue 6uiera$% a,re,ale$
una macro de prueba 6ue no$ mue$tre un men$a2e% por e2emplo'
?8&+on Ex8l+*+&
"u. M%nsa)%/$al*23
MsgBox "Es&o@ %n (+ a'*h+9o d% $al*"
End "u.
"u. M%nsa)%/U'+&%'23
MsgBox "Es&o@ %n (+ a'*h+9o d% U'+&%'"
End "u.
Toma nota de 6ue $on do$ macro$ en Ldo$M arc-i&o$ di1erente$' A-ora% trata de
e2ecutar cada macro de$de el men? derramienta$ r Macro$ r >2ecutar macro$'''% intentemo$
primero con la macro 6ue e$ta en el arc-i&o de Nriter% ob$er&a como $olo no$ mue$tra el arc-i&o
de Nriter * no el de +alc'
A-ora la macro 6ue e$ta en el arc-i&o de +alc * ob$er&a como $olo no$ mue$tra el
arc-i&o de +alc * no el de Nriter'
12E 5'1 Mi$ macro$ g un arc-i&o e$pecial'
Por $upue$to% podemo$ L1or/arM 6ue no$ mue$tre todo$ lo$ arc-i&o$ abierto$% $i% en
&e/ de ir al men? #erramientas $ Macros $ &jecutar macros%%%% optamo$ por ir al men?
#erramientas $ Macros $ Organizar macros $ OpenO!!ice%org Basic%%%% 6ue no$ mo$trar;<
A-ora $i% ob$er&a como no$ mue$tra todo$ lo$ arc-i&o$ abierto$ * podemo$ tanto
editar la$ macro$ 6ue conten,a o e2ecutarla$' Para 6ue ten,amo$ di$ponible$ nue$tra$ macro$
con cual6uier arc-i&o * poder e2ecutarla$ de$de #erramientas $ Macros $ &jecutar macros%%%%
podemo$ optar por u$ar el arc-i&o e$pecial 6ue $e llama Mi$ macro$% 6ue puede$ &er a6u=<
Aprendiendo OOo .a$ic 125
"entro de el% puede$ crear toda$ la$ biblioteca$ 6ue 6uiera$ * todo$ lo$ m4dulo$ 6ue
6uiera$% a$= como lo$ di;lo,o$ 6ue aprenderemo$ a crear * pro,ramar m;$ adelante' A partir de
a6u=% 6ueda a tu criterio decidir donde ,uarda$ tu$ macro$% $i dentro de arc-i&o$ indi&iduale$ o
dentro de Mi$ macro$' >$te arc-i&o $e encuentra en el directorio del u$uario dentro de la carpeta
oculta (en NU0#inu:) de OpenO11ice'or,% por e2emplo<
>n NU0#inu:< 0-ome0USUA@9O0'openo11ice'or,0(0u$er0ba$ic'
>n Nindo7$ 7< +<mU$er$mUSUA@9OmApp"atam@oamin,mOpenO11ice'or,m(mu$ermba$ic
>n e$te directorio podr;$ &er como carpeta$ la$ biblioteca$ 6ue &a*a$ a,re,ando *
dentro de ella$ lo$ m4dulo$ creado$% por $upue$to% e$ mu* ?til re$paldar de &e/ en cuando e$ta
carpeta' >n e$ta carpeta tambi3n $e ,uardar;n la ma*or=a de la$ e:ten$ione$ 6ue in$tale$% en la
$i,uiente ima,en &emo$ una e:ten$i4n in$talada'
12) 5'2 A$i,nando macro$
!.2 (si*nando macros
da$ta a-ora% -emo$ e2ecutado toda$ nue$tra$ macro$ de$de el 9"> o llam;ndola$
de$de el men? -erramienta$% pero tambi3n podemo$ a$i,nar la$ macro$ para e2ecutarla$ a
men?$% barra$ de -erramienta$% combinacione$ de tecla$ e inclu$o a$i,narla$ a $uce$o$ de la
aplicaci4n% por e2emplo8 cuando abrimo$ un arc-i&o% e$to e$ $umamente ?til * podero$o% &eamo$
al,uno$ e2emplo$ de como -acer e$to% como primer pa$o% -a* 6ue e$cribir la macro 6ue no$
intere$a a$i,nar% al,o tan $encillo como mo$trar la 1ec-a * -ora actuale$% claro% con un poco de
1ormato para 6ue $ea &ea bien<
"u. Mos&'a'K%*ha@Ho'a23
A+( sM%nsa)% !s "&'+ng
sM%nsa)% B Ko'(a&2 =o^237 "dddd dd ada% (((( ada%l @@@@ " : $h'2133 : /
"@ ason laas HH ahoa'aas *on (( a(+nu&oas"
MsgBox sM%nsa)%7 647"Ho@ %s"
End "u.
A-ora% tiene$ 6ue decidir LcuandoM o LcomoM 6uiere$ e2ecutarla% &eamo$ primero lo
m;$ $encillo% -a,amo$ 6ue $e e2ecute con una combinaci4n de teclado% para ello% de$de cual6uier
aplicaci4n de OpenO11ice'or,% &e al men? 2er 5 Barra de herramientas 5 Personali0ar((( 6ue te
mo$trara el $i,uiente cuadro de dialo,o<
A$e,urate de 6ue e$te $eleccionada la 1ic-a Teclado (1)% a$= como mo$trar la$
+ombinacione$ de tecla$ de OpenO11ice'or, (2)' >l $i,uiente pa$o e$ 6ue e$co2a$ la combinaci4n
de tecla$ 6ue 6uiere$ a$i,nar a nue$tra macro% para ello% de$pla/ate en el cuadro de li$ta
Aprendiendo OOo .a$ic 127
+ombinaci4n de tecla$ (() * e$co,e la 6ue m;$ te ,u$te% cuida de $eleccionar una 6ue e$te libre%
te &a a dar cuenta la$ 6ue *a e$t;n en u$o% por 6ue delante de ella$ tienen la tarea a$i,nada (E)%
tambi3n notara$ 6ue al,una$ tecla$% como por e2emplo la tecla !1% e$t;n en ,ri$ de$acti&ada$%
e$to e$ por 6ue e$ta$ tecla$ no puede$ rea$i,narla$' Pero ob$er&a 6ue tiene$ una amplia ,ama de
opcione$ de donde e$co,er% para nue$tro e2emplo% -emo$ $eleccionado +T@# R Sd9!T R M (5)% el
$i,uiente pa$o e$ $eleccionar la macro 6ue de$eamo$ e2ecutar con e$ta combinaci4n de tecla$%
para nue$tro e2emplo% primero de$pla/ate en el cuadro de li$ta crea ()) -a$ta encontrar la opci4n
Macro$ de OpenO11ice'or,% de$plie,a $u contenido * $eleccionar Lu$erM 6ue $e re1iere al arc-i&o
e$pecial LMi$ Macro$M% $olo te re$ta $eleccionar la biblioteca * el modulo donde e$ta la macro a
a$i,nar% para nue$tro e2emplo $e llama Mo$trar!ec-a*dora (7)'
Ob$er&a como tiene$ opci4n de car,ar combinacione$ de tecla$ ,uardada$% a$=
como de ,uardar la$ actuale$ * re$tablecer la$ predeterminada$% te 6ueda de tarea L2u,arM *
e:perimentar con e$ta$ opcione$'
+omo ultimo pa$o% pre$iona el bot4n de comando Modi1icar (F) 6ue a$i,na 1inalmente
la combinaci4n de tecla$ (G) a la macro $eleccionada (10)' Para terminar% pre$iona el bot4n de
comando Aceptar'
12F 5'2 A$i,nando macro$
A-ora% $olo no$ re$ta probar 6ue 1uncione% de$de cual6uier documento% pre$iona la
combinaci4n de tecla$ $eleccionada (+trlRS-i1tRM) * $i todo e$ta correcto% te tiene 6ue mo$trar<
+on un poco de ima,inaci4n puede$ crear tu$ acce$o$ directo$ para probar toda$ la$
macro$ 6ue 6uiera$ de una 1orma $encilla' A-ora &eamo$ como a$i,nar una macro a un e&ento% a
un $uce$o del $i$tema% para ello% &amo$ a crear una $encilla macro de e2emplo<
"u. Mos&'a'M%nsa)%23
A+( sM%nsa)% !s "&'+ng
sM%nsa)% B "=o &% ol9+d%s d% gua'da' &u do*u(%n&o"
MsgBox sM%nsa)%7 647"$'%ando do*u(%n&o"
End "u.
5e al men? 1er $ Barra de (erramientas $ Personalizar%%%% e$ta &e/% $elecciona la 1ic-a
>&ento$ (1) * a$e,urate de $eleccionar OpenO11ice'or, (2) para ,uardar la a$i,naci4n 6ue
-a,amo$' Para nue$tro e2emplo $eleccionaremo$ el Le,entoM +rear documento (() 6ue $e e2ecuta
cada &e/ 6ue creamo$ un nue&o documento'
Aprendiendo OOo .a$ic 12G
A-ora% con el bot4n de comando Macro''' (E)% te de$ple,ara un cuadro de dialo,o
6ue *a conoce$% $olo te re$ta na&e,ar dentro del arc-i&o% la biblioteca * el modulo 6ue contiene la
macro de$eada% $elecciona la macro% pre$iona Aceptar * li$to'
Ob$er&a como delante del Le&entoM 6ueda $eleccionada la macro% $olo te re$ta
pre$ionar el bot4n de comando Aceptar * probar la macro% crea tanto$ nue&o$ documento$ como
6uiera$'
1(0 5'2 A$i,nando macro$
+on cada nue&o documento creado% de cual6uier aplicaci4n de OOo% te tiene 6ue
mo$trar el men$a2e<
A$i,nar macro$ a e&ento$ no e$ un tema menor% pue$ puede $er tan $encillo como
nue$tro$ e2emplo$ o tan comple2o como conectarte a ba$e$ de dato$ o a una p;,ina 7eb *
muc-a$ co$a$ m;$% m;$ adelante &eremo$ a detalle el tema de lo$ e&ento$ * la a$i,naci4n de
macro$' A$i,nar una macro a un men? o a una barra de -erramienta$ e$ tri&ial% a$= 6ue te 6ueda
de tarea intentar -acerlo'
!. Creando nuestro primer /ser,icio2 ?objeto@.
Para crear% acceder * manipular un $er&icio% Lnece$ita$M a$i,narlo a una &ariable de
ob2eto% de la $i,uiente manera'
A+( =o(.'%1a'+a.l% !s ?.)%*&
> iniciali/arla para poder u$arla% para ello% u$amo$ la 1unci4n create7noService'
Aprendiendo OOo .a$ic 1(1
"u. !**%d+%ndo!?8%n?ff+*%123
A+( a88?8%n?ff+*% !s ?.)%*&
a88?8%n?ff+*% B *'%a&%Dno"%'9+*%2 "*o(-sun-s&a'-f'a(%-A%s]&o8" 3

End "u.
>l $er&icio com'$un'$tar'1rame'"e$stop e$ u$ado mu* 1recuentemente% pue$ no$
permite acceder a LtodaM la aplicaci4n * $u$ componente$% por ello% e:i$te una palabra cla&e 6ue
no$ da acce$o inmediato a e$te L$er&icioM8 /StarDesRtop2 por lo 6ue% la $i,uiente$ do$ l=nea$ $on
e6ui&alente$'
a88?8%n?ff+*% B *'%a&%Dno"%'9+*%2 "*o(-sun-s&a'-f'a(%-A%s]&o8" 3
a88?8%n?ff+*% B "&a'A%s]&o8
>2ecutando la macro anterior% por a-ora% no &era$ nin,?n e1ecto% pero a6u= empie/a
lo di&ertido e intere$ante% &amo$ a e:plorar por dentro del OpenO11ice'or,% modi1ica la macro para
6ue 6uede de la $i,uiente manera'
?8&+on Ex8l+*+&
"u. !**%d+%ndo!?8%n?ff+*%223
A+( a88?8%n?ff+*% !s ?.)%*&
A+( o!*&+9o !s ?.)%*&
,#n+*+al+;a(os una 9a'+a.l% *on %l s%'9+*+o *o(-sun-s&a'-f'a(%-A%s]&o8
a88?8%n?ff+*% B "&a'A%s]&o8
,?.&%n%(os una '%f%'%n*+a al *o(8on%n&% a*&+9o
o!*&+9o B a88?8%n?ff+*%-$u''%n&$o(8on%n&
,Mos&'a(os %l &+8o d% *o(8on%n&%
MsgBox o!*&+9o-#d%n&+f+%'
End "u.
A-ora $i% al e2ecutar te tiene 6ue mo$trar el $i,uiente men$a2e'
Pero% tal &e/ te mue$tre e$te otro'
9nclu$o tal &e/ el $i,uiente'
1(2 5'( +reando nue$tro primer L$er&icioM (ob2eto)'
IPor 6u3J Por6ue depender; de$de donde Lllame$M (e2ecute$) la macro% &eri1=calo%
tal &e/ la e2ecuta$te directamente de$de el 9">% o tal &e/ la llama$te de$de una -o2a de calculo o
de$de un arc-i&o de te:to' >n el tema anterior &imo$ como llamar a una macro de$de donde
6ueramo$% aun6ue lo m;$ practico para lo$ $i,uiente$ e2emplo$ e$ 6ue pro,rame$ tu$ macro$
dentro del arc-i&o LMis macrosM% 6ueda a tu criterio'
Abre $ei$ arc-i&o$% uno por cada tipo de documento 6ue podemo$ mane2ar en
OpenO11ice'or, (-o2a de calculo% documento de te:to% pre$entaci4n% dibu2o% ba$e de dato$ *
1ormula) no nece$ariamente tiene$ 6ue ,uardarlo$% pero no e$tar=a de m;$ por 6ue lo$ &amo$ a
u$ar en repetida$ oca$ione$' >2ecuta la macro anterior de$de cada uno de e$to$ documento$'
Todo$ e:cepto la ba$e de dato$ te tienen 6ue mo$trar el men$a2e correctamente * en el ca$o de la
ba$e de dato$% te tiene 6ue mo$trar el error $i,uiente'
Aprendete mu* bien e$ta$ do$ nue&a$ palabra$ LpropiedadM * Lm$todoM% la$ &a$ a
u$ar de a6u= en adelante * $iempre 6ue pro,rame$ en OOo .a$ic' >n e$te ca$o% e$ una
/propiedad2 lo 6ue e$ta mal% e$ decir% la propiedad Identi3ier% no la implementan la$ ba$e$ de
dato$' Sabiendo e$to% podr=amo$ empe/ar a proponer una macro ,en3rica para $aber 6ue tipo de
documento e$ el acti&o% probemo$ con la $i,uiente'
"u. !**%d+%ndo!?8%n?ff+*%323
A+( a88?8%n?ff+*% !s ?.)%*&
A+( o!*&+9o !s ?.)%*&
,#n+*+al+;a(os una 9a'+a.l% *on %l s%'9+*+o *o(-sun-s&a'-f'a(%-A%s]&o8
a88?8%n?ff+*% B "&a'A%s]&o8
,?.&%n%(os una '%f%'%n*+a al *o(8on%n&% a*&+9o
o!*&+9o B a88?8%n?ff+*%-$u''%n&$o(8on%n&
,Mos&'a(os %l &+8o d% *o(8on%n&%
"%l%*& $as% o!*&+9o-#d%n&+f+%'
$as% "*o(-sun-s&a'-sh%%&-"8'%adsh%%&Ao*u(%n&"
MsgBox ""o@ una ho)a d% *al*ulo"
$as% "*o(-sun-s&a'-8'%s%n&a&+on-0'%s%n&a&+onAo*u(%n&"
MsgBox ""o@ una 8'%s%n&a*+on"
$as% "*o(-sun-s&a'-d'a^+ng-A'a^+ngAo*u(%n&"
MsgBox ""o@ un d+.u)o"
$as% "*o(-sun-s&a'-fo'(ula-Ko'(ula0'o8%'&+%s"
MsgBox ""o@ una fo'(ula"
$as% "*o(-sun-s&a'-&%x&-I%x&Ao*u(%n&"
MsgBox ""o@ un do*u(%n&o d% &%x&o"
End "%l%*&
End "u.
Aprendiendo OOo .a$ic 1((
>2ecuta la macro anterior de$de cada uno de lo$ $ei$ arc-i&o$% e:cepto de$de la
ba$e de dato$ pue$ te dar; un error% claro% puede$% $i 6uiere$% implementar un controlador de
errore$ pero por a-ora no lo -aremo$% bu$6uemo$ otra alternati&a% por e2emplo% probemo$ a-ora
la propiedad Implementation0ame * &eamo$ 6ue pa$a%
"u. !**%d+%ndo!?8%n?ff+*%423
A+( o!*&+9o !s ?.)%*&
,?.&%n%(os una '%f%'%n*+a al *o(8on%n&% a*&+9o
o!*&+9o B "&a'A%s]&o8-$u''%n&$o(8on%n&
,Mos&'a(os %l &+8o d% *o(8on%n&%
MsgBox o!*&+9o-#(8l%(%n&a&+on=a(%
End "u.
>$ta &e/ $i no$ mue$tra un men$a2e en todo$ lo$ documento$% pero notara$ 6ue e$ta
propiedad en al,uno$ documento$ no e$ mu* clara% a6u= el re$umen de lo 6ue tendr=a$ 6ue
obtener en cada ca$o<
Aplicacin 0ipo de documento Propiedad -mplementation5ame
Nriter "ocumento de te:to S7pTe:t"ocument
+alc do2a de calculo ScModelOb2
9mpre$$ Pre$entacione$ Sdp9mpre$$"ocument
"ra7 "ibu2o Sdp9mpre$$"ocument
.a$e .a$e de dato$ com'$un'$tart'comp'dba'O"ataba$e"ocument
Mat- !ormula com'$un'$tart'comp'mat-'!ormula"ocument
ITe 1i2a$ 6ue intere$anteJ% nota el &alor de&uelto en la$ -o2a$ de calculo * como la$
pre$entacione$ * lo$ dibu2o$ de&uel&en el mi$mo re$ultado% por lo 6ue e$ta propiedad% a pe$ar de
e$tar implementada en todo$ lo$ tipo$ de documento$% no re$ulta mu* id4nea para di1erenciar a
cada uno' IO $i en &e/ de de&ol&er una cadena de te:to% le pre,untamo$ a cada componente $i
$on lo 6ue dicen $erJ% e$ decir% por e2emplo% una -o2a de calculo implementa propiedade$ *
m3todo$ ($er&icio$) para manipular -o2a$ de calculo% en e$te ca$o% e$te $er&icio $e llama
Hcom'$un'$tar'$-eet'Spread$-eet"ocumentM% * cada documento $oporta un tipo de $er&icio
di1erente' Todo$ lo$ ob2eto$ admiten un m3todo 6ue no$ permite pre,untar $i dic-o ob2eto $oporta
un $er&icio en e$pecial% e$te m3todo $e llama supportsSer,ice * -a* 6ue pa$arle como
ar,umento el nombre del $er&icio 6ue 6ueremo$ &alidar * no$ de&ol&er; &erdadero (True) o 1al$o
(!al$e) $e,?n $oporte o no el $er&icio% por lo 6ue la $inta:i$ competa de e$te m3todo e$<
1a'+a.l% !s Bool%an B ?.)%&o-su88o'&s"%'9+*%2 =o(.'%/d%l/"%'9+*+o !s "&'+ng3
5eamo$lo traba2ando en el $i,uiente e2emplo'
"u. !**%d+%ndo!?8%n?ff+*%523
A+( o!*&+9o !s ?.)%*&
A+( .#(8l%(%n&a"%'9+*+o !s Bool%an
o!*&+9o B "&a'A%s]&o8-$u''%n&$o(8on%n&
.#(8l%(%n&a"%'9+*+o B o!*&+9o-su88o'&s"%'9+*%2"*o(-sun-s&a'-sh%%&-"8'%adsh%%&Ao*u(%n&"3
1(E 5'( +reando nue$tro primer L$er&icioM (ob2eto)'
#f .#(8l%(%n&a"%'9+*+o Ih%n
MsgBox ""o@ una ho)a d% *al*ulo"
Els%
MsgBox "=? so@ una ho)a d% *al*ulo"
End #f
End "u.
O prueba de$de todo$ nue$tro$ documento$ 6ue 1unciona correctamente por lo 6ue
*a podemo$ implementar una macro me2or para $aber 6ue tipo de documento tenemo$ acti&o%
$implemente con$ultando $i $oporta $u re$pecti&o Lservicio8%
"u. !**%d+%ndo!?8%n?ff+*%623
A+( o!*&+9o !s ?.)%*&
o!*&+9o B "&a'A%s]&o8-$u''%n&$o(8on%n&
#f o!*&+9o-su88o'&s"%'9+*%2"*o(-sun-s&a'-sh%%&-"8'%adsh%%&Ao*u(%n&"3 Ih%n
MsgBox ""o@ una ho)a d% *al*ulo"
Els%#f o!*&+9o-su88o'&s"%'9+*%2"*o(-sun-s&a'-&%x&-I%x&Ao*u(%n&"3 Ih%n
MsgBox ""o@ un do*u(%n&o d% &%x&o"
Els%#f o!*&+9o-su88o'&s"%'9+*%2"*o(-sun-s&a'-8'%s%n&a&+on-0'%s%n&a&+onAo*u(%n&"3 Ih%n
MsgBox ""o@ una 8'%s%n&a*+on"
Els%#f o!*&+9o-su88o'&s"%'9+*%2"*o(-sun-s&a'-d'a^+ng-A'a^+ngAo*u(%n&"3 Ih%n
MsgBox ""o@ un d+.u)o"
Els%#f o!*&+9o-su88o'&s"%'9+*%2"*o(-sun-s&a'-sd.-?ff+*%Aa&a.as%Ao*u(%n&"3 Ih%n
MsgBox ""o@ una .as% d% da&os"
Els%#f o!*&+9o-su88o'&s"%'9+*%2"*o(-sun-s&a'-fo'(ula-Ko'(ula0'o8%'&+%s"3 Ih%n
MsgBox ""o@ una fo'(ula"
Els%#f o!*&+9o-su88o'&s"%'9+*%2"*o(-sun-s&a'-s*'+8&-Bas+*#AE"3 Ih%n
MsgBox ""o@ %l %d+&o' d% *od+go #AE"
Els%
MsgBox "=? s% Gu% &+8o d% do*u(%n&o so@"
End #f
End "u.
A-ora $i% *a podemo$ di$criminar correctamente lo$ documento$' Saber $i un ob2eto
implementa un determinado $er&icio% e$ mu* importante para minimi/ar el rie$,o de errore$ * para
con$ultar directamente la$ propiedade$ * m3todo$ 6ue implementa dic-o $er&icio $in tener 6ue
e$tar Ladi&inandoM nada * preci$amente para no e$tar adi&inando% e:i$te una propiedad 6ue no$
de&uel&e una matri/ (arra*) con lo$ $er&icio$ 6ue $oporta un ob2eto% e$ta propiedad $e llama
SupportedSer,ice0ames * $u $inta:i$ e$'
1a'+a.l% !s !''a@ B ?.)%&o-"u88o'&%d"%'9+*%=a(%s
+omo $iempre% no -a* como lo$ e2emplo$'
"u. !**%d+%ndo!?8%n?ff+*%723
A+( o!*&+9o !s ?.)%*&
A+( ("%'9+*+os23 !s "&'+ng
A+( *o1 !s B@&%
,?.&%n%(os una '%f%'%n*+a al *o(8on%n&% a*&+9o
o!*&+9o B "&a'A%s]&o8-$u''%n&$o(8on%n&
,?.&%n%(os una (a&'+; *on los s%'9+*+os Gu% +(8l%(%n&a
("%'9+*+os23 B o!*&+9o-"u88o'&%d"%'9+*%=a(%s
,O (os&'a(os %l no(.'% d% *ada s%'9+*+o
Aprendiendo OOo .a$ic 1(5
Ko' *o1 B 5Bound2 ("%'9+*+os23 3 Io DBound2 ("%'9+*+os23 3
MsgBox ("%'9+*+os2 *o1 3
=%x&
End "u.
O $i e2ecuta$ la macro anterior de$de cada uno de nue$tro$ $ei$ documento$
abierto$% tiene$ 6ue obtener la $i,uiente li$ta de $er&icio$ en cada uno'
Aplicacin 0ipo de documento Propiedad SupportedService5ames
Nriter "ocumento de te:to com'$un'$tar'document'O11ice"ocument
com'$un'$tar'te:t'enericTe:t"ocument
com'$un'$tar'te:t'Te:t"ocument
+alc do2a de calculo com'$un'$tar'$-eet'Spread$-eet"ocument
com'$un'$tar'$-eet'Spread$-eet"ocumentSettin,$
9mpre$$ Pre$entacione$ com'$un'$tar'document'O11ice"ocument
com'$un'$tar'dra7in,'eneric"ra7in,"ocument
com'$un'$tar'dra7in,'"ra7in,"ocument!actor*
com'$un'$tar'pre$entation'Pre$entation"ocument
"ra7 "ibu2o com'$un'$tar'document'O11ice"ocument
com'$un'$tar'dra7in,'eneric"ra7in,"ocument
com'$un'$tar'dra7in,'"ra7in,"ocument!actor*
com'$un'$tar'dra7in,'"ra7in,"ocument
.a$e .a$e de dato$ com'$un'$tar'document'O11ice"ocument
com'$un'$tar'$db'O11ice"ataba$e"ocument
Mat- !ormula com'$un'$tar'document'O11ice"ocument
com'$un'$tar'1ormula'!ormulaPropertie$
Nota como 9mpre$$ * "ra7 implementan ca$i lo$ mi$mo$ $er&icio$ * ob$er&a como
-a* un $er&icio (com'$un'$tart'document'O11ice"ocument)% 6ue% e:cepto en la -o2a de calculo% e$
com?n a todo$ lo$ documento$% pero no crea$ 6ue la -o2a de calculo no lo implementa% podemo$
demo$trar 6ue lo implementa con el $i,uiente e2emplo 6ue tiene$ 6ue e2ecutar de$de cual6uier
-o2a de calculo% en todo$ lo$ dem;$ documento$ tambi3n te 1uncionara% pero recuerda 6ue $olo
6ueremo$ comprobar $i la -o2a de calculo implementa e$te $er&icio'
"u. !**%d+%ndo!?8%n?ff+*%823
A+( o!*&+9o !s ?.)%*&
A+( .#(8l%(%n&a"%'9+*+o !s Bool%an
o!*&+9o B "&a'A%s]&o8-$u''%n&$o(8on%n&
.#(8l%(%n&a"%'9+*+o B o!*&+9o-su88o'&s"%'9+*%2"*o(-sun-s&a'-do*u(%n&-?ff+*%Ao*u(%n&"3
#f .#(8l%(%n&a"%'9+*+o Ih%n
MsgBox "1%'dad Gu% s+ %s&a +(8l%(%n&ado %l s%'9+*+o"
Els%
MsgBox "=? %s&a +(8l%(%n&ado %l s%'9+*+o"
End #f
End "u.
1() 5'( +reando nue$tro primer L$er&icioM (ob2eto)'
>$te $er&icio com?n a todo$ lo$ documento$% tambi3n e$ mu* u$ado e importante
como m;$ adelante podr;$ comprobarlo' Por a-ora% copia la $i,uiente macro * pruebala de nue&o
con todo$ lo$ documento$'
"u. !**%d+%ndo!?8%n?ff+*%923
A+( o!*&+9o !s ?.)%*&
A+( ("%'9+*+os23 !s "&'+ng
A+( *o1 !s B@&%
o!*&+9o B "&a'A%s]&o8-$u''%n&$o(8on%n&
("%'9+*+os23 B o!*&+9o-getSupporte!Ser,i)eNames23
Ko' *o1 B 5Bound2 ("%'9+*+os23 3 Io DBound2 ("%'9+*+os23 3
MsgBox ("%'9+*+os2 *o1 3
=%x&
End "u.
Notara$ 6ue traba2a e:actamente i,ual 6ue la anterior% pero &e 6ue no -emo$ u$ado
la propiedad SupportedSer,ice0ames% $ino el m3todo *etSupportedSer,ice0ames?@%
di1erenciado$ por el pre1i2o ,et * lo$ par3nte$i$% lo$ do$ -acen lo mi$mo% pero en OOo .a$ic% ca$i
todo$ lo$ m3todo$ tienen $u corre$pondencia en una propiedad% $i te e$ ?til% recuerda tu$ cla$e$
elementale$ de e$paKol% lo$ ob2eto$ $on como lo$ $u$tanti&o$% la$ propiedade$ $on ad2eti&o$ * lo$
m3todo$ $on &erbo$% a$= mi$mo * mu* importante% la$ propiedade$ $iempre $on de un tipo de dato
$oportado por OOo .a$ic ($trin,% inte,er% arra*% etc')% por lo 6ue tiene$ 6ue tener la$ mi$ma$
con$ideracione$ (* precaucione$) &i$ta$ en &ario$ tema$ atr;$% principalmente cuando &imo$
&ariable$ * 1uncione$% a$= mi$mo lo$ m3todo$% cuando $e le$ pa$an ar,umento$ * cuando
de&uel&en un &alor $e &en a1ectado$ por e$ta$ con$ideracione$% por lo 6ue reitero% ten cuidado con
lo$ tipo$ de dato$ 6ue u$a$ en ello$'
A lo lar,o de e$te capitulo% te mo$trare% en la medida de lo po$ible% el u$o como
m3todo * como propiedad% m;$ adelante me limitare a u$ar m3todo$ * t? u$ara$ el 6ue m;$ de
a,rade'
da$ta a-ora% -emo$ accedido a un $olo documento% pero podemo$ acceder a todo$
lo$ documento$ actualmente abierto$ en OpenO11ice'or,% copia * prueba la $i,uiente macro'
?8&+on Ex8l+*+&
"u. $on&'olando/?8%n?ff+*%123
A+( oAo*u(%n&os !s ?.)%*&
A+( oAo*u(%n&o !s ?.)%*&
A+( oEnu(%'aAo*u(%n&os !s ?.)%*&
,!**%d%(os a &odos los do*u(%n&os a*&ual(%n&% a.+%'&os
oAo*u(%n&os B "&a'A%s]&o8-g%&$o(8on%n&s23
,Enu(%'a(os *ada uno
oEnu(%'aAo*u(%n&os B oAo*u(%n&os-*'%a&%Enu(%'a&+on23
,hasMo'%El%(%n&s d%9u%l9% 9%'dad%'o 2I'u%3 (+%n&'as ha@a %l%(%n&os
Ao Uh+l% oEnu(%'aAo*u(%n&os-hasMo'%El%(%n&s23
,=os d%s8la;a(os al s+gu+%n&% %l%(%n&o @ lo as+gna(os
oAo*u(%n&o B oEnu(%'aAo*u(%n&os-n%x&El%(%n&23
,Mos&'a(os %l &+8o d% do*u(%n&o
MsgBox ""o@ un do*u(%n&o d% " : I+8oAo*u(%n&o2 oAo*u(%n&o 3
5oo8
End "u.
Kun*&+on I+8oAo*u(%n&o2B@R%f Ao*u(%n&o !s ?.)%*&3 !s "&'+ng
A+( s!8l+*a*+on !s "&'+ng
Aprendiendo OOo .a$ic 1(7
#f Ao*u(%n&o-su88o'&s"%'9+*%2"*o(-sun-s&a'-sh%%&-"8'%adsh%%&Ao*u(%n&"3 Ih%n
s!8l+*a*+on B "$al*"
Els%#f Ao*u(%n&o-su88o'&s"%'9+*%2"*o(-sun-s&a'-&%x&-I%x&Ao*u(%n&"3 Ih%n
s!8l+*a*+on B "U'+&%'"
Els%#f Ao*u(%n&o-su88o'&s"%'9+*%2"*o(-sun-s&a'-8'%s%n&a&+on-0'%s%n&a&+onAo*u(%n&"3 Ih%n
s!8l+*a*+on B "#(8'%ss"
Els%#f Ao*u(%n&o-su88o'&s"%'9+*%2"*o(-sun-s&a'-d'a^+ng-A'a^+ngAo*u(%n&"3 Ih%n
s!8l+*a*+on B "A'a^"
Els%#f Ao*u(%n&o-su88o'&s"%'9+*%2"*o(-sun-s&a'-sd.-?ff+*%Aa&a.as%Ao*u(%n&"3 Ih%n
s!8l+*a*+on B "Bas%"
Els%#f Ao*u(%n&o-su88o'&s"%'9+*%2"*o(-sun-s&a'-fo'(ula-Ko'(ula0'o8%'&+%s"3 Ih%n
s!8l+*a*+on B "Ma&h"
Els%#f Ao*u(%n&o-su88o'&s"%'9+*%2"*o(-sun-s&a'-s*'+8&-Bas+*#AE"3 Ih%n
s!8l+*a*+on B "Bas+*"
Els%
s!8l+*a*+on B "A%s*ono*+do"
End #f
I+8oAo*u(%n&o B s!8l+*a*+on
End Kun*&+on
Toma nota de como -emo$ con&ertido una macro u$ada anteriormente en una
1unci4n 6ue no$ de&uel&e el tipo de documento abierto' Muc-o$ ob2eto$ en OpenO11ice'or,% $olo
$on acce$ible$ creando una Lenumeraci4nM% a$= 6ue la e$tructura de la macro anterior la podr=a$
u$ar con 1recuencia' Una Lenumeraci4nM% e$ como un li$tado de ob2eto$% $e crean con el m3todo
create>numeration()% el m3todo '-a$More>lement$() no$ $ir&e para $aber $i toda&=a -a*
elemento$ * el m3todo 'ne:t>lement()% permite mo&erno$ al $i,uiente elemento de la
enumeraci4n'
>mpecemo$ con c4di,o un poco m;$ di&ertido% la $i,uiente &ariante de la macro
anterior% te cerrara Ltodo$M lo$ arc-i&o$ de +alc 6ue no ten,an cambio$ por ,uardar% C:ID(D%% $i
e2ecuta$ la $i,uiente macro de$de un arc-i&o de +alc podr=a$ cerrarte el arc-i&o con re$ultado$
ine$perado$% como dicen en mi pueblo -$obre ad&ertencia no -a* en,aKo-'
"u. $on&'olando/?8%n?ff+*%223
A+( oAo*u(%n&os !s ?.)%*&
A+( oAo*u(%n&o !s ?.)%*&
A+( oEnu(%'aAo*u(%n&os !s ?.)%*&
A+( *o1 !s #n&%g%'
oAo*u(%n&os B "&a'A%s]&o8-g%&$o(8on%n&s23
oEnu(%'aAo*u(%n&os B oAo*u(%n&os-*'%a&%Enu(%'a&+on23
Ao Uh+l% oEnu(%'aAo*u(%n&os-hasMo'%El%(%n&s23
oAo*u(%n&o B oEnu(%'aAo*u(%n&os-n%x&El%(%n&23
,1%'+f+*a(os Gu% s%a un a'*h+9o d% $al*
#f I+8oAo*u(%n&o2 oAo*u(%n&o 3 B "$al*" Ih%n
,"+ no ha s+do (od+f+*ado o los *a(.+os @a %s&>n gua'dados
,%l (S&odo +sMod+f+%d d%9ol9%'> falso 2Kals%3
#f =o& oAo*u(%n&o-+sMod+f+%d23 Ih%n
,%l (S&odo d+s8os% *+%''a %l a'*h+9o
oAo*u(%n&o-d+s8os%23
*o1 B *o1 C 1
End +f
End #f
5oo8
MsgBox ""% *%''a'on un &o&al d% " : $"&'2*o13 : " a'*h+9os d% $al*"
End "u.
1(F 5'( +reando nue$tro primer L$er&icioM (ob2eto)'
Ten muc-o cuidado con el m3todo dispose% te cerrar; el arc-i&o $in pre,untarte
nada% ten,a o no ten,a cambio$ ,uardado$% u$alo con conocimiento de cau$a' Ob$er&a como
u$amo$ la propiedad isModi3ied()% para $aber $i el documento -a $ido modi1icado'
#a 9nter1a/ de Pro,ramaci4n de la Aplicaci4n (AP9 por $u$ $i,la$ en in,le$)
proporciona% decena$ inclu$o centena$ de $er&icio$ con m3todo$ * propiedade$ para controlar *
manipular OpenO11ice'or,% la puede$ con$ultar en linea en la p;,ina o1icial de OpenO11ice'or, (por
a-ora $olo en in,le$) en< -ttp<00api'openo11ice'or,0doc$0common0re10com0$un0$tar0module-i:'-tml
Tambi3n puede$ de$car,arla * de$pu3$ con$ultarla 1uera de l=nea para $u acce$o
inmediata o $i no tiene$ cone:i4n permanente a 9nternet% en el Ap3ndice te mue$tro como -acerlo'
Para una con$ulta 4ptima de e$ta documentaci4n% lo ideal e$ $aber de 1orma anticipada 6ue
$er&icio% m3todo o propiedad e$tamo$ bu$cando% para ello% todo$ lo$ ob2eto$ cuentan con una$
propiedade$ e$peciale$ 6ue no$ dan muc-a in1ormaci4n% &eamo$ cuale$ $on'
!..1 +ropiedades especiales de depuracin
Oa &imo$ en el tema anterior como $aber con el m3todo LsupportsSer,iceM $i un
ob2eto $oporta un determinado $er&icio% pero tiene el incon&eniente de 6ue tenemo$ 6ue $aber
anticipadamente el nombre de dic-o $er&icio% lo cual a &ece$ e$ un poco complicado' Tambi3n
&imo$ el u$o del m3todo *etSupportedSer,ice0ames?@ 6ue no$ de&uel&e una matri/ con lo$
nombre$ de lo$ $er&icio$ 6ue implementa el ob2eto'
Para obtener toda la in1ormaci4n de un ob2eto% e$te cuenta con tre$ propiedade$ 6ue
no$ in1orman de toda$ la$ propiedade$% m3todo$ e /inter3aces2 6ue implementa dic-o ob2eto%
e$ta$ propiedade$ $on tre$<
1' "b,QSupported9nter1ace$
2' "b,QPropertie$
(' "b,QMet-od$
#a$ tre$ $on de tipo te:to ($trin,) * $e u$an de la $i,uiente manera'
"u. $onsul&ando?.)%&os123
A+( sAa&os !s "&'+ng
MsgBox "&a'A%s]&o8-A.g/0'o8%'&+%s
MsgBox "&a'A%s]&o8-A.g/M%&hods
MsgBox "&a'A%s]&o8-A.g/"u88o'&%d#n&%'fa*%s
End "u.
No te me con1unda$ con e$to de la$ /inter3aces2% para nue$tro$ 1ine$ e$
per1ectamente &alido 6ue lo$ llamemo$ L$er&icio$M% $implemente pien$a en la$ inter1ace$ como una
1orma de or,ani/ar $er&icio$% pero en OOo .a$ic no tiene importancia por 6ue accedemo$
directamente a la$ propiedade$ * m3todo$ de lo$ $er&icio$'
#a pe6ueKa macro anterior% te tiene 6ue mo$trar un cuadro de men$a2e con la$
propiedade$ del ob2eto'
Aprendiendo OOo .a$ic 1(G
Su$ m3todo$<
O $u$ inter1ace$ ($er&icio$)<
1E0 5'( +reando nue$tro primer L$er&icioM (ob2eto)'
Ob$er&a el $er&icio $eKalado con una 1lec-a% $i &amo$ a $u documentaci4n% en l=nea
(-ttp<00api'openo11ice'or,0doc$0common0re10com0$un0$tar01rame0p+omponent#oader'-tml) o local
(1ile<000opt0openo11ice0$ds0doc$0common0re10com0$un0$tar01rame0p+omponent#oader'-tml)% te dar;$
cuenta 6ue $olo tiene un m3todo loadComponentFrom:84% pero un m3todo mu* importante%
pue$ no$ permite crear documento$ nue&o$ o abrir arc-i&o$ e:i$tente$% lo cual &eremo$ al
terminar e$te tema'
A-ora probemo$ con lo$ dato$ del documento acti&o'
"u. $onsul&ando?.)%&os223
A+( sAa&os !s "&'+ng
MsgBox "&a'A%s]&o8-g%&$u''%n&$o(8on%n&-A.g/0'o8%'&+%s
MsgBox "&a'A%s]&o8-g%&$u''%n&$o(8on%n&-A.g/M%&hods
MsgBox "&a'A%s]&o8-g%&$u''%n&$o(8on%n&-A.g/"u88o'&%d#n&%'fa*%s
End "u.
>$ta &e/ no$ mue$tra muc-o$ m;$ dato$% I&erdadJ% ob$er&a de 6ue 1orma tan
$imple podemo$ obtener muc-a in1ormaci4n% en la$ propiedade$% nota 6ue $e no$ mue$tra el tipo
de &alor 6ue puede$ obtener de la$ propiedade$ * 6ue $er; el mi$mo tipo para e$tablecerla $i la
propiedad e$ de e$critura' Por e2emplo% $i e2ecutamo$ la macro anterior de$de una -o2a de calculo
podremo$ &er entre $u$ propiedade$ la$ $i,uiente$<
1' Sb:A@@AO Printer
2' Sb:ST@9N #ocation
(' Sb:O.j>+T S-eet$
Tenemo$ una propiedad 6ue de&uel&e un arra* (1)% otra una cadena (2'- $trin,) * por
ultimo un ob2eto (('- ob2ect)'
A-ora% en lo$ m3todo$ tambi3n no$ mue$tra in1ormaci4n &alio$a% por e2emplo *
$i,uiendo en la $upo$ici4n de 6ue no$ in1ormamo$ de una -o2a de calculo% tenemo$<
1' Sb:ST@9N ,etU@# ( &oid )
Aprendiendo OOo .a$ic 1E1
2' Sb:5O9" $toreA$U@# ( Sb:ST@9N% Sb:A@@AO )
(' Sb:9NT>>@ re$etAction#ocs$ ( &oid )

>n e$te ca$o tenemo$ el m3todo *et:rl 6ue de&uel&e una cadena ($trin,) * no
nece$ita ar,umento$ (1)% el m3todo store(s:84 re6uiere una cadena ($trin,) * un arra* como
ar,umento$ (2)% pero no de&uel&e nin,?n &alor * por ultimo el m3todo reset(ction4ocRs%
de&uel&e un entero (inte,er) * no nece$ita ar,umento$ (()' Por a-ora lo importante e$ $aber
reconocer la $inta:i$ de e$ta in1ormaci4n para u$arla en nue$tra$ macro$'
Por ultimo% cual6uiera de lo$ $er&icio$ mo$trado$% mue$tra la in1ormaci4n nece$aria
para ir a la documentaci4n del AP9 * $aber 6ue otro$ $er&icio$ $oporta% 6ue m3todo$ * 6ue
propiedade$'
1' com'$un'$tar'datatran$1er'pTran$1erable
2' com'$un'$tar'&ie7'pPrintable
(' com'$un'$tar'$-eet'pSpread$-eet"ocument
+reo 6ue con e$to 6ueda demo$trado 6ue no -a* 6ue e$tar adi&inando nada% $olo
-a* 6ue -acer la$ pre,unta$ * b?$6ueda$ correcta$'
"entro de la$ macro$ incorporada$ en OpenO11ice'or,% e:i$ten &aria$ 6ue no$
a*udan a depurar nue$tra$ macro$% para el tema 6ue e$tamo$ tratando% e:i$te una en e$pecial
6ue te e$cribe la in1ormaci4n de la$ tre$ propiedade$ &i$ta$ en un nue&o documento de Nriter% la
macro $e llama ;ritedD*In3o * $olo -a* 6ue pa$arle el ob2eto del cual 6ueremo$ obtener $u
in1ormaci4n% &eamo$lo con un e2emplo<
"u. $onsul&ando?.)%&os323
Bas+*5+.'a'+%s-5oad5+.'a'@2 "Iools" 3
$all U'+&%d.g#nfo2 "&a'A%s]&o8-g%&$u''%n&$o(8on%n&23 3
End "u.
Prueba la macro anterior% llam;ndola de$de di1erente$ documento$% aun6ue la
puede$ e2ecutar $iempre * cuando la &ariable pa$ada apunte Le1ecti&amenteM a una &ariable de
ob2eto' +on una$ pe6ueKa$ &ariante$ podemo$ -acer 6ue en &e/ de un documento de Nriter% no$
e$criba la in1ormaci4n en una -o2a de calculo% en el Ap3ndice te mue$tro como -acerlo'
Para terminar e$te tema% &eamo$ como no$ puede a*udar la &entana del Ob$er&ador
tambi3n con lo$ ob2eto$% copia la $i,uiente macro% e$tablece un punto de ruptura como te mue$tro
en la ima,en $i,uiente * a,re,a al ob$er&ador la &ariable oActi&o'
>2ecuta la macro% re,re$a al 9"> * ob$er&a lo$ dato$ de la &ariable 6ue tenemo$ en
ob$er&aci4n<
1E2 5'( +reando nue$tro primer L$er&icioM (ob2eto)'
Por a-ora% la ma*or parte de e$ta in1ormaci4n no te dir; muc-o% pero ob$er&a 6ue
intere$ante no$ mue$tra el t=tulo del documento (1) * lo$ tipo$ de e$tilo$ (2) 6ue aprenderemo$ a
u$ar m;$ adelante' Por a-ora% $olo 1amiliari/ate con la 1orma en 6ue $e mue$tra la in1ormaci4n% el
tipo de e$te * el &alor mo$trado% e$to% e$ de muc-a utilidad como podremo$ comprobarlo m;$
adelante'
!.) 5rabajando con documentos
>n donde &eremo$ como manipular documento$ de OpenO11ice'or,% crearlo$ *
,uardarlo$' >l traba2o com?n a la ma*or=a de lo$ documento$'
!.).1 Creando nue,os documentos
+omo *a di2imo$% el m3todo 6ue no$ permite crear nue&o$ documento$ $e llama
loadComponentFrom:84 * e$ un m3todo del $er&icio Lcom'$un'$tar'1rame'p+omponent#oaderM%
&eamo$ primero lo$ e2emplo$ * de$pu3$ la$ e:plicacione$'
?8&+on Ex8l+*+&
"u. $'%ando=u%9osAo*u(%n&os123
A+( sRu&a !s "&'+ng
A+( (!'g23
Aprendiendo OOo .a$ic 1E(
A+( o=u%9oAo*u(%n&o !s ?.)%*&
sRu&a B "8'+9a&%4fa*&o'@/s*al*"
o=u%9oAo*u(%n&o B "&a'A%s]&o8-load$o(8on%n&K'o(DR52 sRu&a7 "/d%faul&"7 07 (!'g23 3
End "u.
IOa la proba$teJ% mu* 1;cil InoJ% creamo$ una nue&a -o2a de calculo% * $i% lo
deduce$ bien% $olo -a* 6ue -acer uno$ pe6ueKo$ cambio$ para crear un documento de te:to'
"u. $'%ando=u%9osAo*u(%n&os223
A+( sRu&a !s "&'+ng
A+( (!'g23
A+( o=u%9oAo*u(%n&o !s ?.)%*&
sRu&a B "8'+9a&%4fa*&o'@/s^'+&%'"
o=u%9oAo*u(%n&o B "&a'A%s]&o8-load$o(8on%n&K'o(DR52 sRu&a7 "/d%faul&"7 07 (!'g23 3
End "u.
O lo$ dem;$ tipo$ de documento$'
"u. $'%ando=u%9osAo*u(%n&os323
A+( sRu&a !s "&'+ng
A+( (!'g23
A+( o=u%9oAo*u(%n&o !s ?.)%*&
sRu&a B "8'+9a&%4fa*&o'@/s+(8'%ss"
o=u%9oAo*u(%n&o B "&a'A%s]&o8-load$o(8on%n&K'o(DR52 sRu&a7 "/d%faul&"7 07 (!'g23 3
sRu&a B "8'+9a&%4fa*&o'@/sd'a^"
o=u%9oAo*u(%n&o B "&a'A%s]&o8-load$o(8on%n&K'o(DR52 sRu&a7 "/d%faul&"7 07 (!'g23 3
sRu&a B "8'+9a&%4fa*&o'@/s(a&h"
o=u%9oAo*u(%n&o B "&a'A%s]&o8-load$o(8on%n&K'o(DR52 sRu&a7 "/d%faul&"7 07 (!'g23 3
End "u.
IO una ba$e de dato$J% probemo$'
"u. $'%ando=u%9osAo*u(%n&os423
A+( sRu&a !s "&'+ng
A+( (!'g23
A+( o=u%9oAo*u(%n&o !s ?.)%*&
sRu&a B "8'+9a&%4fa*&o'@/s.as%"
o=u%9oAo*u(%n&o B "&a'A%s]&o8-load$o(8on%n&K'o(DR52 sRu&a7 "/d%faul&"7 07 (!'g23 3
End "u.
No$ da un error I&erdadJ
1EE 5'E Traba2ando con documento$
No e$ta $oportado' Para $aber por 6ue no$ da un error% intenta abrir una ba$e de
dato$ nue&a% ob$er&a como primero% $i 6ueremo$ traba2ar con ella% el a$i$tente no$ Lobli,aM
primero a ,uardarla con un nombre * de$pu3$ *a podemo$ manipularla% e$to% $olo pa$a con la$
ba$e$ de dato$% de lo$ dem;$ documento$ podemo$ crear tanto$ nue&o$ documento$ como
6ueramo$ $in tener 6ue ,uardar nada% entonce$ Icomo creamo$ una nue&a ba$e de dato$J% la
re$pue$ta e$ $encilla% del mi$mo modo 6ue lo -acemo$ de$de la inter1a/ de u$uario% e$ decir%
tenemo$ 6ue ,uardar primero la ba$e de dato$'
?8&+on Ex8l+*+&
"u. $'%andoBas%A%Aa&os123
A+( oBA"%'9+*+o !s ?.)%*&
A+( oBA=u%9a !s ?.)%*&
A+( sRu&a !s "&'+ng
A+( (!'g23
,Ru&a @ no(.'% dond% Gu%da'a gua'dada la .as% d% da&os
sRu&a B "/ho(%/(au/M+/Bas%/Aa&os-od."
,$'%a(os %l s%'9+*+o Gu% nos 8%'(+&% (an+8ula' .as%s d% da&os
oBA"%'9+*+o B *'%a&%Dno"%'9+*%2 "*o(-sun-s&a'-sd.-Aa&a.as%$on&%x&" 3
,$'%a(os una nu%9a +ns&an*+a d% una .as% d% da&os
oBA=u%9a B oBA"%'9+*+o-*'%a&%#ns&an*%23
,Es&a.l%*%(os %l &+8o d% .as%
oBA=u%9a-DR5 B "sd.*4%(.%dd%d4hsGld."
,O la gua'da(os
oBA=u%9a-Aa&a.as%Ao*u(%n&-s&o'%!sDR52 sRu&a7 (!'g23 3
End "u.
Toma en cuenta do$ co$a$ mu* importante$ en la macro anterior% el nombre 6ue
u$e$% $i *a e:i$te% $implemente lo reempla/ara% no te pre,untara nada% a$= 6ue ten cuidado de no
u$ar una ruta o nombre de una ba$e importante 6ue ten,a$ * $e,undo% la ba$e de dato$ a$=
creada% no 6uedara Lre,i$tradaM en OpenO11ice'or,% con lo 6ue no tendr;$ acce$o de$de otro$
pro,rama$ de la aplicaci4n% m;$ adelante &eremo$ como re,i$trar una ba$e de dato$ por c4di,o'
!.).2 8utas de arc"i,os y directorios
OpenO11ice'or,% al $er multiplata1orma% -ace u$o de la$ ruta$ de arc-i&o$ *
directorio$% en el 1ormato U@#% por e2emplo'
1ile<000-ome0u$uario0dato$0miarc-i&o'od$
1ile<000d<0dato$0miarc-i&o'od$
Toma en cuenta 6ue e$te 1ormato -ace u$o de lo$ caractere$ 0-G% a-/ * A-l% *
cual6uier otro car;cter $er; con&ertido * mo$trado con $u re$pecti&o c4di,o% por e2emplo% lo$
e$pacio$ lo$ reempla/ara con U20' Siempre 6ue le pa$e$ una ruta de arc-i&o a cual6uier $er&icio
de OpenO11ice'or,% procura% ca$i como una re,la% pa$arle la ruta en 1ormato Url% para ello% OOo
.a$ic cuenta con do$ 1uncione$ mu* ?tile$ 6ue -acen el traba2o +on&ertToUrl * +on&ert!romUrl%
&eamo$ como $e u$an'
"u. Ru&asA%!'*h+9os123
A+( sRu&a !s "&'+ng
Aprendiendo OOo .a$ic 1E5
,Es&a.l%*%(os una 'u&a
sRu&a B "/ho(%/(au/M+ a'*h+9o d% $al*-ods"
,O la (os&'a(os
MsgBox sRu&a
,5a *on9%'&+(os al fo'(a&o DR5
sRu&a B $on9%'&IoD'l2 "/ho(%/(au/M+ a'*h+9o d% $al*-ods" 3
,O 9%(os %l '%sul&ado
MsgBox sRu&a
,R%g'%sa(os al fo'(a&o lo*al
sRu&a B $on9%'&K'o(D'l2 sRu&a 3
,O *o(8'o.a(os Gu% %s *o''%*&o
MsgBox sRu&a
End "u.
Abre &ario$ documento$ e:i$tente$ * e2ecuta la $i,uiente macro de$de cada uno<
"u. Ao*u(%n&o!*&+9oMos&'a'Aa&os23
A+( sRu&aDR5 !s "&'+ng
A+( sRu&a$o(8l%&a !s "&'+ng
A+( sRu&a !s "&'+ng
A+( s=o(.'% !s "&'+ng
Elo.al"*o8%-Bas+*5+.'a'+%s-5oad5+.'a'@2 "Iools" 3
,R%f%'%n*+a al do*u(%n&o a*&+9o
sRu&aDR5 B Ih+s$o(8on%n&-g%&DR523
,$on9%'&+(os la 'u&a DR5 %n fo'(a&o lo*al
sRu&a$o(8l%&a B $on9%'&K'o(D'l2 sRu&aDR5 3
,?.&%n%(os solo %l no(.'% d%l a'*h+9o
s=o(.'% B K+l%=a(%?u&?f0a&h2 sRu&aDR5 3
,?.&%n%(os %l d+'%*&o'+o dond% %s&a %l a'*h+9o
sRu&a B A+'%*&o'@=a(%ou&of0a&h2sRu&a$o(8l%&a7 E%&0a&h"%8a'a&o'233
,Mos&'a(os los '%sul&ados
MsgBox sRu&a$o(8l%&a : $h'2133 : $h'2133 : s=o(.'% : $h'2133 : $h'2133 : sRu&a
End "u.
>l ob2eto 5"isComponent% e$ una palabra cla&e e$pecial 6ue de$i,na al documento
de$de el cual llamamo$ a nue$tra macro% e$ buena practica de pro,ramaci4n% comprobar $iempre
a 6ue tipo de documento e$ta apuntando T-i$+omponent% no e$ lo mi$mo $i e2ecuta$ una macro
de$de la inter1a/ del u$uario% a 6ue lo -a,a$ de$de el 9">% * aun de$de el 9">% depender; $i
-ace$ re1erencia a el de$de un arc-i&o cual6uiera o de$de el arc-i&o e$pecial Mi$ Macro$% a$= 6ue
$iempre &eri1ica 6ue el ob2eto apuntado con T-i$+omponent% $ea el 6ue e$pera$' Ob$er&a 6ue
-acemo$ u$o de al,una$ 1uncione$ incorporada$ de OpenO11ice'or,% e$ta$ $on<
!ileNameOutO1Pat-% 6ue te de&uel&e de la ruta pa$ada $olo el nombre del arc-i&o *
"irector*Nameouto1Pat-% 6ue te re,re$a $olo el directorio de la ruta del arc-i&o pa$ada' >$ta$ *
otra$ ?tile$ 1uncione$ $e encuentran dentro de la biblioteca Tool$ de OpenO11ice'or, 6ue car,amo$
en la primer l=nea de nue$tra macro de e2emplo'
>n nue$tro $i,uiente tema% &eremo$ la importancia de u$ar la$ ruta$ de arc-i&o$ *
directorio$ en 1ormato Url * recuerda 6ue en S'O' #inu:% $e tiene en cuenta la di1erencia entre
ma*?$cula$ * min?$cula$'
1E) 5'E Traba2ando con documento$
!.). (briendo, *uardando y cerrando documentos
Abrir arc-i&o$ e:i$tente$ e$ $umamente $encillo% u$amo$ el mi$mo m3todo u$ado
para crear nue&o$ documento$% pero en el par;metro ruta% le e$peci1icamo$ la ubicaci4n del
arc-i&o a abrir de la $i,uiente manera'
"u. !.'+%ndoAo*u(%n&os123
A+( sRu&a !s "&'+ng
A+( (!'g23
A+( oAo*u(%n&o !s ?.)%*&
,R%%(8la;a %s&a 'u&a 8o' la 'u&a d% &< a'*h+9o
sRu&a B $on9%'&IoD'l2 "/ho(%/(au/M+ a'*h+9o d% $al*-ods" 3
oAo*u(%n&o B "&a'A%s]&o8-load$o(8on%n&K'o(DR52 sRu&a7 "/.lan]"7 07 (!'g23 3
End "u.
Si tu arc-i&o e:i$te% el c4di,o anterior lo abrir;% L$iempreM utili/a +on&ertToUrl cuando
u$e$ ruta$ de arc-i&o$ o directorio$ en 1uncione$ de OpenO11ice'or, 6ue la$ re6uieran
Si abre$ una plantilla% e$ta $e comportara de 1orma normal% e$ decir% te abrir; una
copia de dic-a plantilla'
sRu&a B $on9%'&IoD'l2 "/ho(%/(au/M+ 0lan&+lla-o&s" 3
oAo*u(%n&o B "&a'A%s]&o8-load$o(8on%n&K'o(DR52 sRu&a7 "/.lan]"7 07 (!'g23 3
Pero tambi3n podr=a$ 6uerer abrir la plantilla para editarla% en e$te ca$o% le indicamo$
en la$ opcione$ de apertura e$to% ob$er&a como $e declara la &ariable mOpcione$'
"u. !.'+%ndoAo*u(%n&os323
A+( sRu&a !s "&'+ng
A+( (?8*+on%s203 !s =%^ "*o(-sun-s&a'-.%ans-0'o8%'&@1alu%"
A+( oAo* !s ?.)%*&
(?8*+on%s203-=a(% B "!sI%(8la&%"
(?8*+on%s203-1alu% B Kals%
sRu&a B $on9%'&IoD'l2 "/ho(%/(au/(+0lan&+lla-o&s" 3
oAo* B "&a'A%s]&o8-load$o(8on%n&K'o(DR52 sRu&a7 "/.lan]"7 07 (?8*+on%s23 3
End "u.
#a e$tructura Hcom'$un'$tar'bean$'Propert*5alueH e$ta con1ormada por un par de
&alore$% un nombre * un &alor * e$ mu* 1recuentemente u$ada cuando $e pro,rama en OOo
.a$ic% ob$er&a como la matri/ de la &ariable mOpcione$ la -emo$ iniciali/ado en 0% e$ decir% $olo
contendr; un par de &alore$% pero mu* bien puede tener m;$ opcione$ como &eremo$ m;$
adelante' >n la macro anterior le e$tamo$ indicando la propiedad A$Template (6ue $eria al,o a$=
como >$ Plantilla)% $i el &alor e$ 1al$o (!al$e)% le e$tamo$ indicando 6ue 6ueremo$ abrir la plantilla
para editarla% en ca$o contrario (True) abrir; una copia de la plantilla' #o intere$ante de e$ta
propiedad e$ 6ue per1ectamente la puede$ aplicar a arc-i&o$ e:i$tente$% e$ decir% arc-i&o$ 6ue
LnoM nece$ariamente $ean plantilla$% con e$ta propiedad podemo$ 1or/arlo$ a comportar$e como
plantilla$% por e2emplo% prueba el $i,uiente c4di,o con al,?n arc-i&o e:i$tente 6ue no $ea plantilla'
Aprendiendo OOo .a$ic 1E7
"u. !.'+%ndoAo*u(%n&os423
A+( sRu&a !s "&'+ng
A+( (?8*+on%s203 !s =%^ "*o(-sun-s&a'-.%ans-0'o8%'&@1alu%"
A+( oAo* !s ?.)%*&
(?8*+on%s203-=a(% B "!sI%(8la&%"
(?8*+on%s203-1alu% B I'u%
sRu&a B $on9%'&IoD'l2 "/ho(%/(au/M+ a'*h+9o d% U'+&%'-od&" 3
oAo* B "&a'A%s]&o8-load$o(8on%n&K'o(DR52 sRu&a7 "/.lan]"7 07 (?8*+on%s23 3
End "u.
Ob$er&a como el arc-i&o e$ un documento de te:to normal (O"T)% pero con la
propiedad A$Template% 1or/amo$ $u apertura como una plantilla' Otra$ propiedade$ intere$ante$
$on @eadOnl* (Solo #ectura) para abrir un arc-i&o como $olo lectura * Pa$$7ord (+ontra$eKa)
para abrir arc-i&o$ con contra$eKa'
"u. !.'+%ndoAo*u(%n&os523
A+( sRu&a !s "&'+ng
A+( (?8*+on%s203 !s =%^ "*o(-sun-s&a'-.%ans-0'o8%'&@1alu%"
A+( oAo* !s ?.)%*&
(?8*+on%s203-=a(% B "R%ad?nl@"
(?8*+on%s203-1alu% B I'u%
sRu&a B $on9%'&IoD'l2 "/ho(%/(au/M+ a'*h+9o d% U'+&%'-od&" 3
oAo* B "&a'A%s]&o8-load$o(8on%n&K'o(DR52 sRu&a7 "/.lan]"7 07 (?8*+on%s23 3
End "u.
"u. !.'+%ndoAo*u(%n&os623
A+( sRu&a !s "&'+ng
A+( (?8*+on%s203 !s =%^ "*o(-sun-s&a'-.%ans-0'o8%'&@1alu%"
A+( oAo* !s ?.)%*&
,5a *on&'as%\a (>s s%gu'a
(?8*+on%s203-=a(% B "0ass^o'd"
(?8*+on%s203-1alu% B "l%&(%+n"
sRu&a B $on9%'&IoD'l2 "/ho(%/(au/M+ a'*h+9o d% A'a^-odg" 3
oAo* B "&a'A%s]&o8-load$o(8on%n&K'o(DR52 sRu&a7 "/.lan]"7 07 (?8*+on%s23 3
End "u.
Por $upue$to puede$ combinar cual6uier cantidad de opcione$ $iempre * cuando no
entren en con1licto'
"u. !.'+%ndoAo*u(%n&os723
A+( sRu&a !s "&'+ng
A+( (?8*+on%s213 !s =%^ "*o(-sun-s&a'-.%ans-0'o8%'&@1alu%"
A+( oAo* !s ?.)%*&
(?8*+on%s203-=a(% B "R%ad?nl@"
(?8*+on%s203-1alu% B I'u%
(?8*+on%s213-=a(% B "0ass^o'd"
(?8*+on%s213-1alu% B "a.'%&%"
sRu&a B $on9%'&IoD'l2 "/ho(%/(au/M+ a'*h+9o d% A'a^-odg" 3
oAo* B "&a'A%s]&o8-load$o(8on%n&K'o(DR52 sRu&a7 "/.lan]"7 07 (?8*+on%s23 3
1EF 5'E Traba2ando con documento$
End "u.
Prueba a poner la contra$eKa incorrecta * ob$er&a el men$a2e% por $upue$to%
podemo$ $olicitarle al u$uario la contra$eKa * no e$ta dem;$ &eri1icar 6ue el arc-i&o e:i$ta'
"u. !.'+%ndoAo*u(%n&os823
A+( sRu&a !s "&'+ng
A+( (?8*+on%s203 !s =%^ "*o(-sun-s&a'-.%ans-0'o8%'&@1alu%"
A+( oAo* !s ?.)%*&
A+( s$on&'a !s "&'+ng
s$on&'a B I'+(2 #n8u&Box2 "#n&'odu*% la *on&'as%\a d% a8%'&u'a" 3 3
(?8*+on%s203-=a(% B "0ass^o'd"
(?8*+on%s203-1alu% B s$on&'a
sRu&a B $on9%'&IoD'l2 "/ho(%/(au/M+ a'*h+9o d% A'a^-odg" 3
,1%'+f+*a(os Gu% %x+s&a %l a'*h+9o
#f 5%n2A+'2sRu&a33 Y 0 Ih%n
oAo* B "&a'A%s]&o8-load$o(8on%n&K'o(DR52 sRu&a7 "/.lan]"7 07 (?8*+on%s23 3
Els%
MsgBox "El a'*h+9o no %x+s&%"
End #f
End "u.
Mientra$ un 1ormato de arc-i&o $ea $oportado por OpenO11ice'or,% lo podr;$ abrir
con el m3todo load+omponent!romU@#% en el $i,uiente e2emplo% abrimo$ un arc-i&o tipo "oc% un
dtml * un pl$'
"u. !.'+%ndoAo*u(%n&os923
A+( sRu&a !s "&'+ng
A+( (?8*+on%s203 !s =%^ "*o(-sun-s&a'-.%ans-0'o8%'&@1alu%"
A+( oAo* !s ?.)%*&
sRu&a B $on9%'&IoD'l2 "/ho(%/(au/$a(8a(%n&os-do*" 3
oAo* B "&a'A%s]&o8-load$o(8on%n&K'o(DR52 sRu&a7 "/.lan]"7 07 (?8*+on%s23 3
sRu&a B $on9%'&IoD'l2 "/ho(%/(au/R%na*+(+%n&o-h&(" 3
oAo* B "&a'A%s]&o8-load$o(8on%n&K'o(DR52 sRu&a7 "/.lan]"7 07 (?8*+on%s23 3
sRu&a B $on9%'&IoD'l2 "/ho(%/(au/da&os-xls" 3
oAo* B "&a'A%s]&o8-load$o(8on%n&K'o(DR52 sRu&a7 "/.lan]"7 07 (?8*+on%s23 3
End "u.
+uando abre$ un arc-i&o por c4di,o * e$te contiene macro$% tu puede$ e$tablecer $i
$e abre con la$ macro$ acti&ada$% de 1orma predeterminada lo abre con la$ macro$ de$acti&ada$%
a$= 6ue $olo no$ re$ta $aber como abrirlo con la$ macro$ acti&ada$'
"u. !.'+%ndoAo*u(%n&os1023
A+( sRu&a !s "&'+ng
A+( (?8*+on%s203 !s =%^ "*o(-sun-s&a'-.%ans-0'o8%'&@1alu%"
A+( oAo* !s ?.)%*&
(?8*+on%s203-=a(% B "Ma*'oEx%*u&+onMod%"
(?8*+on%s203-1alu% B 4
sRu&a B $on9%'&IoD'l2 "/ho(%/(au/M+ a'*h+9o d% $al*-ods" 3
oAo* B "&a'A%s]&o8-load$o(8on%n&K'o(DR52 sRu&a7 "/.lan]"7 07 (?8*+on%s23 3
Aprendiendo OOo .a$ic 1EG
End "u.
Otra opci4n intere$ante% e$ la 6ue no$ permite abrir una pre$entaci4n e iniciarla
inmediatamente'
"u. !.'+%ndoAo*u(%n&os1123
A+( sRu&a !s "&'+ng
A+( (?8*+on%s203 !s =%^ "*o(-sun-s&a'-.%ans-0'o8%'&@1alu%"
A+( oAo* !s ?.)%*&
(?8*+on%s203-=a(% B ""&a'&0'%s%n&a&+on"
(?8*+on%s203-1alu% B I'u%
sRu&a B $on9%'&IoD'l2 "/ho(%/(au/M+ a'*h+9o d% #(8'%ss-od8" 3
oAo* B "&a'A%s]&o8-load$o(8on%n&K'o(DR52 sRu&a7 "/.lan]"7 07 (?8*+on%s23 3
End "u.
Puede$ abrir un arc-i&o como &i$ta pre&ia% ?til para e&itar 6ue el u$uario -a,a
cambio$ en el% en e$te e$tado% lo$ cambio$ 6ue intente -acer el u$uario no $e ,uardaran'
"u. !.'+%ndoAo*u(%n&os1223
A+( sRu&a !s "&'+ng
A+( (?8*+on%s203 !s =%^ "*o(-sun-s&a'-.%ans-0'o8%'&@1alu%"
A+( oAo* !s ?.)%*&
(?8*+on%s203-=a(% B "0'%9+%^"
(?8*+on%s203-1alu% B I'u%
sRu&a B $on9%'&IoD'l2 "/ho(%/(au/M+ a'*h+9o d% U'+&%'-od&" 3
oAo* B "&a'A%s]&o8-load$o(8on%n&K'o(DR52 sRu&a7 "/.lan]"7 07 (?8*+on%s23 3
End "u.
Por $upue$to% la idea ,eneral de abrir un arc-i&o e$ para obtener dato$ de el o para
manipularlo% *a $ea un documento nue&o o uno e:i$tente% &eamo$ como ,uardar lo$ cambio$
reali/ado$ * cerrar el arc-i&o'
"u. !.'+%ndoEua'dandoAo*u(%n&os123
A+( sRu&a !s "&'+ng
A+( (?8*+on%s203 !s =%^ "*o(-sun-s&a'-.%ans-0'o8%'&@1alu%"
A+( oAo* !s ?.)%*&
sRu&a B $on9%'&IoD'l2 "/ho(%/(au/M+ a'*h+9o d% $al*-ods" 3
oAo* B "&a'A%s]&o8-load$o(8on%n&K'o(DR52 sRu&a7 "/.lan]"7 07 (?8*+on%s23 3
,!PD# 9a &odo %l *6d+go Gu% Gu+%'as 8a'a (an+8ula' %l a'*h+9o
MsgBox "!'*h+9o a.+%'&o @ (od+f+*ado *o''%*&a(%n&%7 8'%s+on% !*%8&a' 8a'a gua'da' @ *%''a'"
,Eua'da(os los *a(.+os
oAo*-s&o'%23
,$%''a(os %l a'*h+9o
oAo*-*los%2I'u%3
End "u.
150 5'E Traba2ando con documento$
>l c4di,o anterior 1uncionara con un arc-i&o e:i$tente% pero con uno nue&o no% te
dar; un error% por $upue$to no me crea$% compru3balo' #o$ documento$ tienen una propiedad
("as4ocation) 6ue no$ in1orman $i un documento *a e$ta ,uardado o no'
"u. !.'+%ndoEua'dandoAo*u(%n&os223
A+( sRu&a !s "&'+ng
A+( (?8*+on%s203 !s =%^ "*o(-sun-s&a'-.%ans-0'o8%'&@1alu%"
A+( oAo* !s ?.)%*&
sRu&a B "8'+9a&%4fa*&o'@/s*al*"
oAo* B "&a'A%s]&o8-load$o(8on%n&K'o(DR52 sRu&a7 "/.lan]"7 07 (?8*+on%s23 3
,=os +nd+*a s+ %l a'*h+9o %s&a gua'dado fHs+*a(%n&%
MsgBox oAo*-has5o*a&+on23
sRu&a B $on9%'&IoD'l2 "/ho(%/(au/M+ a'*h+9o d% $al*-ods" 3
oAo* B "&a'A%s]&o8-load$o(8on%n&K'o(DR52 sRu&a7 "/.lan]"7 07 (?8*+on%s23 3
MsgBox oAo*-has5o*a&+on23
End "u.
>l primer men$a2e debe mo$trarte !al$o (!al$e) por6ue e$ un documento nue&o * el
$e,undo 5erdadero (True) por $er un arc-i&o abierto del di$co'
Tambi3n tenemo$ una propiedad 6ue no$ a*uda a $aber $i un documento -a $ido
modi1icado o no% e2ecuta la $i,uiente macro% llam;ndola de$de di1erente$ documento$% uno$
;brelo$ * modi1icalo$ ante$ de e2ecutarla% otro$% $olo ;brelo$ * e2ecutala para 6ue note$ la
di1erencia'
"u. Es&aMod+f+*ado23
MsgBox Ih+s$o(8on%n&-+sMod+f+%d23
End "u.
O otra m;$ 6ue no$ in1orma $i el documento e$ de $olo lectura'
"u. !.'+%ndoEua'dandoAo*u(%n&os323
A+( sRu&a !s "&'+ng
A+( (?8*+on%s203 !s =%^ "*o(-sun-s&a'-.%ans-0'o8%'&@1alu%"
A+( oAo* !s ?.)%*&
sRu&a B "8'+9a&%4fa*&o'@/s*al*"
oAo* B "&a'A%s]&o8-load$o(8on%n&K'o(DR52 sRu&a7 "/.lan]"7 07 (?8*+on%s23 3
MsgBox oAo*-+sR%ad?nl@23
(?8*+on%s203-=a(% B "R%ad?nl@"
(?8*+on%s203-1alu% B I'u%
sRu&a B $on9%'&IoD'l2 "/ho(%/(au/M+ a'*h+9o d% $al*-ods" 3
oAo* B "&a'A%s]&o8-load$o(8on%n&K'o(DR52 sRu&a7 "/.lan]"7 07 (?8*+on%s23 3
MsgBox oAo*-+sR%ad?nl@23
End "u.
Aprendiendo OOo .a$ic 151
Oa te ima,inara$ 6ue ?til e$ $aber% ante$ de ,uardar un arc-i&o% $i e$te e$ de $olo
lectura% $i -a $ido modi1icado o $i *a -a $ido ,uardado% ante$ de &er traba2ando 2unta$ toda$ e$ta$
propiedade$% &eamo$ como ,uardar un arc-i&o nue&o con el m3todo $toreA$Url'
"u. !.'+%ndoEua'dandoAo*u(%n&os423
A+( sRu&a !s "&'+ng
A+( (?8*+on%s203 !s =%^ "*o(-sun-s&a'-.%ans-0'o8%'&@1alu%"
A+( oAo* !s ?.)%*&
sRu&a B "8'+9a&%4fa*&o'@/s*al*"
oAo* B "&a'A%s]&o8-load$o(8on%n&K'o(DR52 sRu&a7 "/.lan]"7 07 (?8*+on%s23 3
,Es&a.l%*%(os la 'u&a @ no(.'% dond% s% gua'da'a %l a'*h+9o
sRu&a B $on9%'&IoD'l2 "/ho(%/(au/!'*h+9o d% $al*-ods" 3
,Eua'da(os %l a'*h+9o
oAo*-s&o'%!sDR52 sRu&a7 (?8*+on%s23 3
End "u.
Ob$er&a como re6uiere do$ par;metro$% la ruta del arc-i&o * una matri/ de
propiedade$% al,una$ de la$ cuale$ &eremo$ a continuaci4n' Toma nota de 6ue $i el arc-i&o *a
e:i$te lo reempla/ara $in a&i$arte por lo 6ue e$ buena practica de pro,ramaci4n &eri1icar e$to'
"u. !.'+%ndoEua'dandoAo*u(%n&os523
A+( sRu&a !s "&'+ng
A+( (?8*+on%s203 !s =%^ "*o(-sun-s&a'-.%ans-0'o8%'&@1alu%"
A+( oAo* !s ?.)%*&
sRu&a B "8'+9a&%4fa*&o'@/s*al*"
oAo* B "&a'A%s]&o8-load$o(8on%n&K'o(DR52 sRu&a7 "/.lan]"7 07 (?8*+on%s23 3
sRu&a B $on9%'&IoD'l2 "/ho(%/(au/!'*h+9o d% $al*-ods" 3
#f 5%n2 A+'2 sRu&a 33 B 0 Ih%n
,Eua'da(os %l a'*h+9o
oAo*-s&o'%!sDR52 sRu&a7 (?8*+on%s23 3
Els%
MsgBox "El a'*h+9o @a %x+s&%7 no s% ha gua'dado %l nu%9o a'*h+9o"
End #f
End "u.
Te 6ueda de tarea implementar la pre,unta al u$uario para reempla/ar o no el
arc-i&o' 5eamo$ al,una$ propiedade$ intere$ante$ para ,uardar arc-i&o$% por e2emplo% ,uardar
con contra$eKa'
"u. !.'+%ndoEua'dandoAo*u(%n&os623
A+( sRu&a !s "&'+ng
A+( (?8*+on%s203 !s =%^ "*o(-sun-s&a'-.%ans-0'o8%'&@1alu%"
A+( oAo* !s ?.)%*&
sRu&a B "8'+9a&%4fa*&o'@/s*al*"
oAo* B "&a'A%s]&o8-load$o(8on%n&K'o(DR52 sRu&a7 "/.lan]"7 07 (?8*+on%s23 3
,$o(o 9%; no &%ngo (u*ha +(ag+na*+6n
(?8*+on%s203-=a(% B "0ass^o'd"
(?8*+on%s203-1alu% B "a.'%&%"
sRu&a B $on9%'&IoD'l2 "/ho(%/(au/!'*h+9o d% $al*-ods" 3
oAo*-s&o'%!sDR52 sRu&a7 (?8*+on%s23 3
End "u.
152 5'E Traba2ando con documento$
+omo $abe$% OpenO11ice'or,% $oporta la importaci4n0e:portaci4n de m?ltiple$
1ormato$ de arc-i&o$% &eamo$ como ,uardar% por e2emplo% en 1ormato "O+'
"u. !.'+%ndoEua'dandoAo*u(%n&os723
A+( sRu&a !s "&'+ng
A+( (?8*+on%s203 !s =%^ "*o(-sun-s&a'-.%ans-0'o8%'&@1alu%"
A+( oAo* !s ?.)%*&
sRu&a B "8'+9a&%4fa*&o'@/s^'+&%'"
oAo* B "&a'A%s]&o8-load$o(8on%n&K'o(DR52 sRu&a7 "/.lan]"7 07 (?8*+on%s23 3
,Es&a.l%*%(os %l f+l&'o a do*u(%n&os &+8o A?$
(?8*+on%s203-=a(% B "K+l&%'=a(%"
(?8*+on%s203-1alu% B "M" Uo'd 97"
sRu&a B $on9%'&IoD'l2 "/ho(%/(au/!'*h+9o d% Uo'd-do*" 3
oAo*-s&o'%!sDR52 sRu&a7 (?8*+on%s23 3
End "u.
>l m3todo $toreA$U@# tambi3n lo puede$ u$ar para abrir un arc-i&o e:i$tente *
,uardarlo con otro nombre'
"u. !.'+%ndoEua'dandoAo*u(%n&os823
A+( sRu&a !s "&'+ng
A+( (?8*+on%s203 !s =%^ "*o(-sun-s&a'-.%ans-0'o8%'&@1alu%"
A+( oAo* !s ?.)%*&
sRu&a B $on9%'&IoD'l2 "/ho(%/(au/M+ a'*h+9o d% $al*-ods" 3
oAo* B "&a'A%s]&o8-load$o(8on%n&K'o(DR52 sRu&a7 "/.lan]"7 07 (?8*+on%s23 3
sRu&a B $on9%'&IoD'l2 "/ho(%/(au/=u%9o a'*h+9o $al*-ods" 3
oAo*-s&o'%!sDR52 sRu&a7 (?8*+on%s23 3
End "u.
Para terminar e$ta capitulo% &amo$ a -acer un poco m;$ interacti&o la apertura *
,uardado de arc-i&o$% permitamo$ 6ue el u$uario e$co2a la ruta * el arc-i&o de$de un cuadro de
dialo,o% para ello% u$aremo$ el $er&icio com'$un'$tar'ui'dialo,$'!ilePicser% 6ue no$ permite -acer
e$to% &eamo$ como'
"u. !.'+'!'*h+9o123
A+( oAlg!.'+'!'*h+9o as ?.)%*&
A+( (!'*h+9o23 !s "&'+ng
A+( (?8*+on%s23
A+( sRu&a !s "&'+ng
A+( oAo* !s ?.)%*&
,$'%a(os %l s%'9+*+o n%*%sa'+o
oAlg!.'+'!'*h+9o B $'%a&%Dno"%'9+*% 2"*o(-sun-s&a'-u+-d+alogs-K+l%0+*]%'"3
,Es&a.l%*%(os %l &+&ulo d%l *uad'o d% d+alogo
oAlg!.'+'!'*h+9o-s%&I+&l%2""%l%**+ona %l a'*h+9o a a.'+'"3
,$on %l (S&odo -Ex%*u&%23 (os&'a(os %l *uad'o d% d+alogo
,"+ %l usua'+o 8'%s+ona !.'+' %l (S&odo d%9u%l9% 1 Gu% 8od%(os %9alua' *o(o 1%'dad%'o 2I'u%3
,"+ 8'%s+ona $an*%la' d%9u%l9% 0
#f oAlg!.'+'!'*h+9o-Ex%*u&%23 Ih%n
,A% fo'(a 8'%d%&%'(+nada7 solo s% 8u%d% s%l%**+ona' un a'*h+9o
,8%'o d%9u%l9% una (a&'+; d% &odos (odos *on la 'u&a *o(8l%&a
,d%l a'*h+9o %n fo'(a&o DR5
(!'*h+9o23 B oAlg!.'+'!'*h+9o-g%&K+l%s23
,El 8'+(%' %l%(%n&o d% la (a&'+; %s %l a'*h+9o s%l%**+onado
Aprendiendo OOo .a$ic 15(
sRu&a B (!'*h+9o203
,O lo a.'+(os
oAo* B "&a'A%s]&o8-load$o(8on%n&K'o(DR52 sRu&a7 "/.lan]"7 07 (?8*+on%s23 3
Els%
,"+ %l usua'+o 8'%s+ona $an*%la'
MsgBox "0'o*%so *an*%lado"
End #f
End "u.
Si 6uiere$ abrir m;$ de un arc-i&o a la &e/% u$a'
"u. !.'+'!'*h+9o223
A+( oAlg!.'+'!'*h+9o as ?.)%*&
A+( (!'*h+9os23 !s "&'+ng
A+( (?8*+on%s23
A+( *o1 !s #n&%g%'
oAlg!.'+'!'*h+9o B $'%a&%Dno"%'9+*% 2"*o(-sun-s&a'-u+-d+alogs-K+l%0+*]%'"3
oAlg!.'+'!'*h+9o-s%&I+&l%2""%l%**+ona los a'*h+9os a a.'+'"3
,Es&a.l%*%(os Gu% s% 8u%dan s%l%**+ona' (as d% un a'*h+9o
oAlg!.'+'!'*h+9o-s%&Mul&+"%l%*&+onMod%2I'u%3
#f oAlg!.'+'!'*h+9o-Ex%*u&%23 Ih%n
(!'*h+9os23 B oAlg!.'+'!'*h+9o-g%&"%l%*&%dK+l%s23
,Mos&'a(os los a'*h+9os s%l%**+onados
Ko' *o1 B 5Bound2 (!'*h+9os23 3 Io DBound2 (!'*h+9os23 3
MsgBox $on9%'&K'o(D'l2 (!'*h+9os2*o13 3
=%x&
,I% Gu%da d% &a'%a a.'+' &odos los a'*h+9os
,oAo* B "&a'A%s]&o8-load$o(8on%n&K'o(DR52 sRu&a7 "/.lan]"7 07 (?8*+on%s23 3
Els%
MsgBox "0'o*%so *an*%lado"
End #f
End "u.
A-ora% mo$tramo$ el cuadro de dialo,o uardar +omo% para permitir al u$uario
$eleccionar carpeta * nombre de arc-i&o donde ,uardar $u arc-i&o'
"u. Eua'da'!'*h+9o123
A+( oAlgEua'da'!'*h+9o as ?.)%*&
A+( (Alg?8*+on%s23
A+( (!'*h+9o23 !s "&'+ng
A+( (?8*+on%s23
,Dsa(os %l (+s(o s%'9+*+o 8a'a a.'+' a'*h+9os7 8u%s %s %l (+s(o *uad'o d% d+alogo
oAlgEua'da'!'*h+9o B $'%a&%Dno"%'9+*% 2"*o(-sun-s&a'-u+-d+alogs-K+l%0+*]%'"3
,Es&a.l%*%(os Gu% nos (u%s&'% %l *uad'o d% d+alogo Eua'da' $o(o *on las
,*as+llas d% 9%'+f+*a*+6n !u&o%x&%ns+on @ gua'da' *on *on&'as%\a
,*o(-sun-s&a'-u+-d+alogs-I%(8la&%A%s*'+8&+on-K#5E"!1E/!DI?EFIE="#?=/0!""U?RA B 2
(Alg?8*+on%s23 B !''a@223
U+&h oAlgEua'da'!'*h+9o
,#n+*+a(os %l *uad'o d% d+alogo *on las o8*+on%s s%l%**+onadas
-#n+&+al+;% 2 (Alg?8*+on%s23 3
,!g'%ga(os f+l&'os d% a'*h+9os
-!88%ndK+l&%'2 "!ll f+l%s 2-3"7 "-" 3
-!88%ndK+l&%'2 "Ao*u(%n&o d% I%x&o ?AK 2-od&3"7 "-od&" 3
-!88%ndK+l&%'2 "Ho)a d% *al*ulo ?AK 2-ods3"7 "-ods" 3
End U+&h
,5o (os&'a(os
#f oAlgEua'da'!'*h+9o-Ex%*u&%23 Ih%n
15E 5'E Traba2ando con documento$
(!'*h+9o23 B oAlgEua'da'!'*h+9o-g%&K+l%s23
,"olo &% (u%s&'o la 'u&a @ no(.'% d% a'*h+9o s%l%**+onado
,"olo &% '%s&a gua'da' %l a'*h+9o
MsgBox $on9%'&K'o(D'l2 (!'*h+9o203 3
Els%
MsgBox "0'o*%so *an*%lado"
End #f
End "u.
#o$ cuadro$ de di;lo,o 6ue &ea$% e$tar;n en 1unci4n de la opci4n del men?
derramienta$ r Opcione$''' rama OpenO11ice'or,% $ubrama eneral% $ecci4n Abre0uarda
di;lo,o$% ca$illa de &eri1icaci4n U$a lo$ di;lo,o$ OpenO11ice'or,'
!.).) E'portando a +DF
>:portar a P"! de$de OpenO11ice'or, e$ mu* $encillo% lo e$ tambi3n con OOo .a$ic%
prueba la $i,uiente macro de$de di1erente$ documento$% por a-ora% a$e,urate de 6ue lo$ arc-i&o$
*a e$t3n ,uardado$ ante$ de e:portar% te 6ueda de tarea intentar adaptarla para arc-i&o$ nue&o$'
"u. Ex8o'&a'0AK23
A+( oAo* !s ?.)%*&
A+( sI+8oAo* !s "&'+ng
A+( (?8*+on%s203 !s =%^ "*o(-sun-s&a'-.%ans-0'o8%'&@1alu%"
d+( sRu&a !s s&'+ng
Bas+*5+.'a'+%s-5oad5+.'a'@2 "Iools" 3
,R%f%'%n*+a al do*u(%n&o d%sd% dond% s% lla(a la (a*'o
oAo* B Ih+s$o(8on%n&
,?.&%n%(os %l &+8o d% do*u(%n&o7 %s&a fun*+6n @a la usa(os
sI+8oAo* B I+8oAo*u(%n&o2 oAo* 3
,"olo s% 8u%d%n %x8o'&a' 28o' aho'a3
"%l%*& $as% sI+8oAo*
,los s+gu+%n&% do*u(%n&os
$as% "$al*"7 "U'+&%'"7 "A'a^"7 "#(8'%ss"7 "Ma&h"
,Es&a.l%*%(os %l &+8o d% f+l&'o
(?8*+on%s203-=a(% B "K+l&%'=a(%"
,$ons&'u+(os %l f+l&'o *o''%*&o 0AK 8a'a *ada a8l+*a*+on
(?8*+on%s203-1alu% B 5$as%2sI+8oAo*3 : "/8df/Ex8o'&"
,$ons&'u+(os la 'u&a *o''%*&a7 usa(os %l (+s(o d+'%*&o'+o
,@ no(.'% d%l a'*h+9o7 solo ag'%ga(os la %x&%ns+6n 0AK
sRu&a B E%&K+l%=a(%U+&hou&Ex&%ns+on2 oAo*-g%&D'l 3 : "-8df"
,Eua'da(os %l a'*h+9o
oAo*-s&o'%IoDR52 sRu&a7 (?8*+on%s23 3
$as% Els%
MsgBox "!8l+*a*+6n no so8o'&ada"
End "%l%*&
End "u.
Aprendiendo OOo .a$ic 155
#a 1unci4n et!ileNameNit-out>:ten$ion &iene inte,rada en la$ macro$ de
OpenO11ice'or,% de la ruta pa$ada% te de&uel&e toda la ruta pero $in la e:ten$i4n del arc-i&o%
ob$er&a como $olo le a,re,amo$ la e:ten$i4n P"!% tambi3n ob$er&a 6ue e$ta &e/ LnoM -emo$
u$ado $toreA$Url% $ino $toreToUrl para e:portar el arc-i&o'
Te -abr;$ dado cuenta de 6ue la$ &ariante$ pueden $er inmen$a$% pero creo 6ue
tenemo$ lo$ elemento$ para empe/ar a automati/ar nue$tra$ tarea$ diaria$% en lo$ $i,uiente$
cap=tulo$% a-ondaremo$ en la$ caracter=$tica$ e$peci1ica$ de cada tipo de documento'
!.).! 5areas comunes en documentos
5eamo$ al,una$ tarea$ comune$ a la ma*or=a de lo$ documento$ de OOo% por
e2emplo% para $aber el titulo del documento acti&o% u$amo$'
"u. $on&'ola'!8l+*a*+on123
A+( oAo* !s ?.)%*&
A+( o$on&'olado' !s ?.)%*&
,El do*u(%n&o d%sd% dond% s% lla(a %s&a (a*'o
oAo* B Ih+s$o(8on%n&
,El *on&'olado' d%l do*u(%n&o a*&ual
o$on&'olado' B oAo*-g%&$u''%n&$on&'oll%'
,El &+&ulo
MsgBox o$on&'olado'-g%&I+&l%
End "u.
Para acti&ar el documento 6ue 6uiera$% $e u$a el m3todo set4ocus de la $i,uiente
manera% en donde acti&amo$ durante un $e,undo * medio cada documento de OOo abierto'
"u. $on&'ola'!8l+*a*+on223
A+( oAo*u(%n&os !s ?.)%*&
A+( oAo*u(%n&o !s ?.)%*&
A+( o1%n&ana !s ?.)%*&
A+( oEnu(%'aAo*u(%n&os !s ?.)%*&
,!**%d%(os a &odos los do*u(%n&os a*&ual(%n&% a.+%'&os
oAo*u(%n&os B "&a'A%s]&o8-g%&$o(8on%n&s23
,Enu(%'a(os *ada uno
oEnu(%'aAo*u(%n&os B oAo*u(%n&os-*'%a&%Enu(%'a&+on23
,hasMo'%El%(%n&s d%9u%l9% 9%'dad%'o 2I'u%3 (+%n&'as ha@a %l%(%n&os
Ao Uh+l% oEnu(%'aAo*u(%n&os-hasMo'%El%(%n&s23
,=os d%s8la;a(os al s+gu+%n&% %l%(%n&o @ lo as+gna(os
oAo*u(%n&o B oEnu(%'aAo*u(%n&os-n%x&El%(%n&23
,?.&%n%(os a**%so a la 9%n&ana
o1%n&ana B oAo*u(%n&o-g%&$u''%n&$on&'oll%'-g%&K'a(%-g%&$o(8on%n&U+ndo^23
,5% %n9+a(os %l fo*o 8a'a a*&+9a'la
o1%n&ana-s%&Ko*us23
,Es8%'a(os 1-5 s%gundos 8a'a 8asa' al s+gu+%n&% do*u(%n&o
Ua+& 1500
5oo8
End "u.
15) 5'E Traba2ando con documento$
Una po$ibilidad intere$ante% e$ la de controlar la barra de e$tado de la$ aplicacione$%
mu* ?til para mo$trar men$a2e$ al u$uario o mo$trar una barra de pro,re$o% como en el $i,uiente
e2emplo'
"u. $on&'ola'!8l+*a*+on323
A+( oBa''aEs&ado !s ?.)%*&
A+( *o1 !s #n&%g%'
,R%f%'%n*+a a la .a''a d% %s&ado d%l do*u(%n&o a*&+9o
oBa''aEs&ado B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-"&a&us#nd+*a&o'
,Es&a.l%*%(os %l &%x&o +n+*+al @ %l l+(+&% d% la .a''a d% 8'og'%so
oBa''aEs&ado-s&a'&2 "$on&ando "7 10 3
Ko' *o1 B 1 Io 10
,Es&a.l%*%(os %l 9alo' d% la .a''a d% 8'og'%so
oBa''aEs&ado-s%&1alu%2 *o1 3
,Es8%'a(os un s%gundo
Ua+& 1000
=%x&
,Es +(8o'&an&% f+nal+;a' la .a''a d% %s&ado 8a'a d%9ol9%'l% %l *on&'ol a la a8l+*a*+6n
oBa''aEs&ado-%nd23
End "u.
#a macro anterior% 1uncionar; en toda$ la$ aplicacione$% e:cepto en .a$e% por lo 6ue
tiene$ 6ue &alidar en $u ca$o $i e$ nece$ario% tambi3n puede$ cambiar el te:to durante el pro,re$o
para dar m;$ in1ormaci4n al u$uario% como en'
"u. $on&'ola'!8l+*a*+on423
A+( oBa''aEs&ado !s ?.)%*&
A+( *o1 !s #n&%g%'
,R%f%'%n*+a a la .a''a d% %s&ado d%l do*u(%n&o a*&+9o
oBa''aEs&ado B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-"&a&us#nd+*a&o'
,Es&a.l%*%(os %l &%x&o +n+*+al @ %l l+(+&% d% la .a''a d% 8'og'%so
oBa''aEs&ado-s&a'&2 "0'o*%sando 5Hn%as "7 10 3
Ko' *o1 B 1 Io 10
,Es&a.l%*%(os %l 9alo' d% la .a''a d% 8'og'%so
oBa''aEs&ado-s%&1alu%2 *o1 3
,O %l &%x&o
oBa''aEs&ado-s%&I%x&2 "0'o*%sando la lHn%a4 " : *o1 3
,Es8%'a(os un s%gundo
Ua+& 1000
=%x&
,Es +(8o'&an&% f+nal+;a' la .a''a d% %s&ado 8a'a d%9ol9%'l% %l *on&'ol a la a8l+*a*+6n
oBa''aEs&ado-%nd23
End "u.
+uando -a,a$ u$o de la barra de e$tado para mo$trar el pro,re$o de una tarea% e$
recomendable -acerlo en ciclo$ determinado$% para $aber $iempre donde terminar;% e$to te
permite mo$trar una a&ance LrealM de tu proce$o'
Otra opci4n e$ cambiar el /oom de la &i$ta del documento'
"u. $on&'ola'!8l+*a*+on523
A+( oAo* !s ?.)%*&
A+( oAH !s ?.)%*&
d+( (?8*203 !s =%^ *o(-sun-s&a'-.%ans-0'o8%'&@1alu%
,!**%so al (a'*o d%l do*u(%n&o
Aprendiendo OOo .a$ic 157
oAo* B Ih+s$o(8on%n&-$u''%n&$on&'oll%'-K'a(%
,El d%s8a*hado' d% +ns&'u**+on%s a n+9%l usua'+o
oAH B *'%a&%Dno"%'9+*%2"*o(-sun-s&a'-f'a(%-A+s8a&*hH%l8%'"3
,El (S&odo Gu% d%s%a(os %)%*u&a'
(?8*203-=a(% B "`oo("l+d%'-$u''%n&`oo("
,El 9alo' d%s%ado7 %n %s&% *aso 150e
(?8*203-1alu% B 150
,E)%*u&a(os la o'd%n
oAH-%x%*u&%A+s8a&*h2oAo*7 "-uno4`oo("l+d%'"7 ""7 07 (?8*23 3
End "u.
#a opci4n anterior% $olo 1uncionar; en la$ aplicacione$ 6ue $oporten /oom8 Nriter%
+alc% 9mpre$$ * "ra7% .a$e * Mat- no lo implementan% pero no te dar; nin,?n error $i llama$ a la
macro de$de e$ta$ aplicacione$% $implemente i,norar; la in$trucci4n'
15F ) Traba2ando con -o2a$ de calculo g +alc
= 5rabajando con "ojas de calculo 7 Calc
>n el capitulo anterior aprendi$te a crear% abrir * ,uardar arc-i&o$ de +alc * otro$
tipo$ de documento$% en e$te% aprenderemo$ m;$ detalle$ del mane2o de la -o2a de calculo con
c4di,o OOo .a$ic 6ue $e ba$an en el $er&icio< com'$un'$tar'$-eet'Spread$-eet"ocument% do* por
$entado 6ue ere$ un u$uario medio de -o2a de calculo% pue$ $i no $abe$ 6ue e$ un 1ormato
condicional% por citar $olo un e2emplo% te $er; m;$ complicado e$tablecerlo por c4di,o% como
aprenderemo$ en e$te cap=tulo% a$= 6ue te in&ito a repa$ar tu$ apunte$ de -o2a de calculo'
=.1 5rabajando con "ojas
Para acceder a toda$ la$ -o2a$ de un documento de -o2a de calculo% u$amo$'
"u. Iodas5asHo)as123
A+( oAo* !s ?.)%*&
A+( oHo)as !s ?.)%*&
,!**%so al do*u(%n&o d%sd% dond% s% lla(a a %s&a (a*'o
oAo* B Ih+s$o(8on%n&
,=os as%gu'a(os d% Gu% s%a una ho)a d% *al*ulo
#f oAo*-su88o'&s"%'9+*%2"*o(-sun-s&a'-sh%%&-"8'%adsh%%&Ao*u(%n&"3 Ih%n
,R%f%'%n*+a a I?A!" las ho)as d%l do*u(%n&o
oHo)as B oAo*-g%&"h%%&s23
,Mos&'a(os *uan&as son
MsgBox oHo)as-g%&$oun&23
Els%
MsgBox "=o %s un do*u(%n&o d% ho)a d% *al*ulo"
End #f
End "u.
A$e,urate de llamar a la macro anterior de$de una -o2a de calculo% $i e$ta$ u$ando
el arc-i&o e$pecial Mi$ Macro$% te recomiendo $iempre &eri1icar 6ue T-i$+omponent% apunta
e1ecti&amente a un documento de -o2a de calculo como $e &io m;$ arriba% de a-ora en adelante%
dar3 por -ec-o 6ue lo $abe$ * t? determinara$ $i -ace$ la &alidaci4n o no'
Podemo$ acceder a lo$ nombre$ de toda$ la$ -o2a$'
"u. Iodas5asHo)as223
A+( oAo* !s ?.)%*&
A+( oHo)as !s ?.)%*&
A+( (=o(.'%sHo)as23 !s "&'+ng
A+( sM%nsa)% !s "&'+ng
Elo.al"*o8%-Bas+*5+.'a'+%s-5oad5+.'a'@2 "Iools" 3
oAo* B Ih+s$o(8on%n&
oHo)as B oAo*-g%&"h%%&s23
,?.&%n%(os una (a&'+; *on los no(.'%s d% &odas las ho)as
(=o(.'%sHo)as23 B oHo)as-g%&El%(%n&=a(%s23
Aprendiendo OOo .a$ic 15G
,$ons&'u+(os %l (%nsa)%
sM%nsa)% B "El a'*h+9o " : K+l%=a(%?u&?f0a&h2 oAo*-g%&5o*a&+on23 3 : /
$h'2133 : "&+%n% las s+gu+%n&%s ho)as" : $h'2133 : $h'2133
sM%nsa)% B sM%nsa)% : [o+n2 (=o(.'%sHo)as237 $h'2133 3
,5o (os&'a(os
MsgBox sM%nsa)%
End "u.
#a 1unci4n !ileNameOutO1Pat-% &iene incorporada en OpenO11ice'or, * no$ de&uel&e
$olo el nombre del arc-i&o de la ruta pa$ada'
Tambi3n podemo$ mo$trar lo$ nombre$ de la$ -o2a$ una a una'
"u. Iodas5asHo)as323
A+( oAo* !s ?.)%*&
A+( oHo)as !s ?.)%*&
A+( (=o(.'%sHo)as23 !s "&'+ng
A+( *o1 !s #n&%g%'
oAo* B Ih+s$o(8on%n&
oHo)as B oAo*-g%&"h%%&s23
,?.&%n%(os una (a&'+; *on los no(.'%s d% &odas las ho)as
(=o(.'%sHo)as23 B oHo)as-g%&El%(%n&=a(%s23
Ko' *o1 B 5Bound2 (=o(.'%sHo)as23 3 Io DBound2 (=o(.'%sHo)as23 3
MsgBox (=o(.'%sHo)as2*o13
=%x&
End "u.
Podemo$ de&ol&er $olo la -o2a 6ue no$ intere$a por $u nombre'
"u. DnaHo)a123
A+( oAo* !s ?.)%*&
A+( oHo)a !s ?.)%*&
oAo* B Ih+s$o(8on%n&
,!**%d%(os a una ho)a 8o' su no(.'%
oHo)a B oAo*-g%&"h%%&s-g%&B@=a(%2"Aa&os !gos&o"3
,"olo *o(8'o.a(os Gu% %s la ho)a *o''%*&a
MsgBox oHo)a-g%&=a(%23
End "u.
Pero $i la -o2a no e:i$te% la macro anterior te dar; un error% el m3todo -a$.*Name e$
mu* ?til para $aber $i una -o2a e:i$te% lo cual e$ indi$pen$able para acceder a ella'
"u. DnaHo)a223
A+( oAo* !s ?.)%*&
A+( oHo)as !s ?.)%*&
A+( oHo)a !s ?.)%*&
A+( s=o(.'%Ho)a !s "&'+ng
oAo* B Ih+s$o(8on%n&
oHo)as B oAo*-g%&"h%%&s23
1)0 )'1 Traba2ando con -o2a$
s=o(.'%Ho)a B "Aa&os !gos&o"
,$o(8'o.a(os Gu% la ho)a %x+s&a 8a'a 8od%' a**%d%' a %lla
#f oHo)as-hasB@=a(%2 s=o(.'%Ho)a 3 Ih%n
,!**%d%(os a una ho)a 8o' su no(.'%
oHo)a B oHo)as-g%&B@=a(%2 s=o(.'%Ho)a 3
MsgBox oHo)a-g%&=a(%23 : " T %x+s&% %n %l do*u(%n&o"
Els%
MsgBox "5a ho)a T" : s=o(.'%Ho)a : "T no %x+s&%"
End #f
End "u.
Nota 6ue el m3todo -a$.*Name e$ un m3todo del con2unto de la$ -o2a$ (,etS-eet$)
* te de&ol&er; &erdadero (True) en ca$o de 6ue la -o2a e:i$ta * 1al$o (!al$e) en ca$o de 6ue no'
>$te m3todo no di$tin,ue entre ma*?$cula$ * min?$cula$'
Podemo$ acceder a una -o2a por $u =ndice% recuerda 6ue lo$ =ndice$ en
OpenO11ice'or, empie/an en cero% en la$ -o2a$% la numeraci4n empie/a de i/6uierda a derec-a'
"u. DnaHo)a323
A+( oAo* !s ?.)%*&
A+( oHo)as !s ?.)%*&
A+( oHo)a !s ?.)%*&
oAo* B Ih+s$o(8on%n&
oHo)as B oAo*-g%&"h%%&s23
,!**%d%(os a la ho)a 8o' %l +nd+*%
oHo)a B oHo)as-g%&B@#nd%x2 1 3
MsgBox oHo)a-g%&=a(%23
End "u.
"el mi$mo modo 6ue por el nombre% $i trata$ de acceder a una -o2a por un =ndice
6ue no e:i$ta% te dar; un error% lo podemo$ comprobar a$e,ur;ndono$ 6ue el numero de =ndice a
con$ultar $iempre e$ menor al total de la$ -o2a$'
"u. DnaHo)a423
A+( oAo* !s ?.)%*&
A+( oHo)as !s ?.)%*&
A+( oHo)a !s ?.)%*&
A+( +=u(%'oHo)a !s #n&%g%'
oAo* B Ih+s$o(8on%n&
oHo)as B oAo*-g%&"h%%&s23
+=u(%'oHo)a B 1
,$o(8'o.a(os Gu% la ho)a %x+s&a
#f +=u(%'oHo)a X oHo)as-g%&$oun&23 Ih%n
,!**%d%(os a la ho)a 8o' %l Hnd+*%
oHo)a B oHo)as-g%&B@#nd%x2 +=u(%'oHo)a 3
MsgBox oHo)a-g%&=a(%23
Els%
MsgBox "=u(%'o d% ho)a no %x+s&%"
End #f
End "u.
Aprendiendo OOo .a$ic 1)1
Por lo 6ue podemo$ acceder a cada -o2a de un documento% tambi3n por $u =ndice'
"u. Iodas5asHo)as423
A+( oAo* !s ?.)%*&
A+( oHo)as !s ?.)%*&
A+( oHo)a !s ?.)%*&
A+( *o1 !s #n&%g%'
oAo* B Ih+s$o(8on%n&
oHo)as B oAo*-g%&"h%%&s23
,=o&a Gu% %l l+(+&%7 %s %l &o&al d% ho)as (%nos uno7 8o' Gu% *o(+%n;a %n 0
Ko' *o1 B 0 Io oHo)as-g%&$oun&23T1
oHo)a B oHo)as-g%&B@#nd%x2 *o1 3
MsgBox oHo)a-g%&=a(%23
=%x&
End "u.
Toma en cuenta 6ue $i mue&e$ una -o2a de po$ici4n en relaci4n con la$ dem;$% $u
=ndice cambiara% no a$= $u nombre% pero el nombre e$ $u$ceptible de $er cambiado por el u$uario%
a$= 6ue $iempre comprueba 6ue e:i$ta una -o2a ante$ de intentar acceder a ella'
Otra opci4n e$ de&ol&er la -o2a acti&a'
0u.l+* "u. Ho)a!*&+9a23
A+( oHo)a !s ?.)%*&
,Ha*%(os una '%f%'%n*+a a la ho)a a*&+9a
oHo)a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
Msg.ox oHo)a-g%&=a(%23
End "u.
A-ora% *a puede$ crearte tu$ ?tile$ 1uncione$ para traba2ar con -o2a$% por e2emplo%
una 1unci4n 6ue no$ de&uel&a 1al$o o &erdadero $e,?n e:i$ta o no el nombre de la -o2a pa$ado
como ar,umento% una primera apro:imaci4n podr=a $er'
?8&+on Ex8l+*+&
"u. "a.%'"+Ex+s&%Ho)a23
MsgBox Ex+s&%Ho)a2 "Ho)a3" 3
End "u.
,"a.%' s+ una ho)a %x+s&%
Kun*&+on Ex+s&%Ho)a2B@1al =o(.'%Ho)a !s "&'+ng3 !s Bool%an
A+( oHo)as !s ?.)%*&
oHo)as B Ih+s$o(8on%n&-g%&"h%%&s23
Ex+s&%Ho)a B oHo)as-hasB@=a(%2=o(.'%Ho)a3
End Kun*&+on
Podemo$ -acerla inclu$o m;$ ,en3rica pa$;ndole el documento donde $e de$ea
comprobar la e:i$tencia de la -o2a * comprobando 6ue $ea una -o2a de calculo'
1)2 )'1 Traba2ando con -o2a$
?8&+on Ex8l+*+&
"u. "a.%'"+Ex+s&%Ho)a223
MsgBox Ex+s&%Ho)a22 Ih+s$o(8on%n&7 "Ho)a3" 3
End "u.
,"a.%' s+ una ho)a %x+s&%
Kun*&+on Ex+s&%Ho)a22Ao*u(%n&o !s ?.)%*&7 =o(.'%Ho)a !s "&'+ng3 !s Bool%an
A+( oHo)as !s ?.)%*&
,"+ no %s una ho)a d% *al*ulo d%9u%l9% falso 2Kals%3
#f Ao*u(%n&o-su88o'&s"%'9+*%2"*o(-sun-s&a'-sh%%&-"8'%adsh%%&Ao*u(%n&"3 Ih%n
oHo)as B Ao*u(%n&o-g%&"h%%&s23
Ex+s&%Ho)a2 B oHo)as-hasB@=a(%2=o(.'%Ho)a3
End #f
End Kun*&+on
A-ora de&ol&emo$ la -o2a'
?8&+on Ex8l+*+&
"u. A%9u%l9%R%f%'%n*+a!Ho)a123
d+( oHo)a !s ?.)%*&
oHo)a B A%9u%l9%Ho)a12 "Aa&os En%'o" 3
#f #s=ull2oHo)a3 Ih%n
MsgBox "5a ho)a no %x+s&%"
Els%
MsgBox oHo)a-g%&=a(%23
End #f
End "u.
,"a.%' s+ %x+s&% la ho)a @ '%g'%sa'la7 s+ lla(as a %s&a fun*+6n7
,&+%n%s Gu% 9%'+f+*a' Gu% s% d%9ol9+6 algo *on #s=ull
Kun*&+on A%9u%l9%Ho)a12B@1al =o(.'%Ho)a !s "&'+ng3 !s ?.)%*&
A+( oHo)as !s ?.)%*&
oHo)as B Ih+s$o(8on%n&-g%&"h%%&s23
#f oHo)as-hasB@=a(%2=o(.'%Ho)a3 Ih%n
A%9u%l9%Ho)a1 B oHo)as-g%&B@=a(%2=o(.'%Ho)a3
End #f
End Kun*&+on
"e nue&o% $i lo de$ea$% puede$ pa$arle el documento del cual te intere$a de&ol&er la
-o2a% ob$er&a como comprobamo$ tambi3n 6ue la -o2a e:i$ta% e$to lo puede$ -acer directamente
o u$ando la 1unci4n creada m;$ arriba% 6ueda a tu criterio'
"u. A%9u%l9%R%f%'%n*+a!Ho)a223
d+( oHo)a !s ?.)%*&
oHo)a B A%9u%l9%Ho)a22 Ih+s$o(8on%n&7 "Aa&os En%'o" 3
#f #s=ull2oHo)a3 Ih%n
MsgBox "5a ho)a no %x+s&%"
Els%
MsgBox oHo)a-g%&=a(%23
End #f
Aprendiendo OOo .a$ic 1)(
End "u.
,"a.%' s+ %x+s&% la ho)a @ '%g'%sa'la7 s+ lla(as a %s&a fun*+6n7
,&+%n%s Gu% 9%'+f+*a' Gu% s% d%9ol9+6 algo *on #s=ull
Kun*&+on A%9u%l9%Ho)a22Ao*u(%n&o !s ?.)%*&7 =o(.'%Ho)a !s "&'+ng3 !s ?.)%*&
A+( oHo)as !s ?.)%*&
#f Ao*u(%n&o-su88o'&s"%'9+*%2"*o(-sun-s&a'-sh%%&-"8'%adsh%%&Ao*u(%n&"3 Ih%n
oHo)as B Ao*u(%n&o-g%&"h%%&s23
#f oHo)as-hasB@=a(%2=o(.'%Ho)a3 Ih%n
A%9u%l9%Ho)a2 B oHo)as-g%&B@=a(%2=o(.'%Ho)a3
End #f
End #f
End Kun*&+on
=.1.1 Insertando "ojas
Para in$ertar nue&a$ -o2a$% u$amo$ el m3todo< in$ertNe7.*Name(Nombre%
Po$ici4n)% en donde nece$itamo$ el nombre de la nue&a -o2a a in$ertar * la po$ici4n donde la
6ueremo$% la $i,uiente macro a,re,a una -o2a nue&a al inicio de la$ dem;$'
"u. #ns%'&a'=u%9aHo)a123
A+( oHo)as !s ?.)%*&
oHo)as B Ih+s$o(8on%n&-g%&"h%%&s23
oHo)as-+ns%'&=%^B@=a(%2"Aa&os "%8"7 03
End "u.
>2ecuta la macro anterior do$ &ece$ * notara$ 6ue te dar; un error% pue$ no puede$
tener do$ -o2a$ con el mi$mo nombre% entonce$% tenemo$ 6ue &eri1icar $i la -o2a e:i$te o no'
"u. #ns%'&a'=u%9aHo)a223
A+( oHo)as !s ?.)%*&
A+( oHo)a !s ?.)%*&
A+( s=o(.'% !s "&'+ng
,"ol+*+&a(os un no(.'% 8a'a la nu%9a ho)a
s=o(.'% B I'+(2#n8u&Box2"=o(.'% d% la nu%9a ho)a"33
,1%'+f+*a(os Gu% no %s&% 9a*+o
#f s=o(.'% XY "" Ih%n
,R%f%'%n*+a a &odas las ho)as
oHo)as B Ih+s$o(8on%n&-g%&"h%%&s23
,1%'+f+*a(os s+ @a %x+s&% la ho)a
#f =o& oHo)as-hasB@=a(%2s=o(.'%3 Ih%n
,"+ no %x+s&% la +ns%'&a(os %l +n+*+o
oHo)as-+ns%'&=%^B@=a(%2s=o(.'%7 03
Els%
MsgBox "Es&a ho)a @a %x+s&%"
End #f
,R%f%'%n*+a a la nu%9a ho)a o a la %x+s&%n&%
oHo)a B Ih+s$o(8on%n&-g%&"h%%&s-g%&B@=a(%2s=o(.'%3
,5a a*&+9a(os
1)E )'1 Traba2ando con -o2a$
Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-s%&!*&+9%"h%%&2oHo)a3
End #f
End "u.
Ob$er&a 6ue $i la -o2a *a e:i$te% $olo -acemo$ una re1erencia a ella' #a ultima linea
para acti&ar la -o2a no e$ nece$aria para 6ue la manipule$% $olo en ca$o de 6ue 6uiera$ 6ue el
u$uario -a,a o manipule al,o en ella% $i no% puede$ omitirla' >$ $umamente 1recuente en
pro,ramadore$ no&ele$% 6uerer Lacti&arM toda -o2a 6ue $e 6uiera manipular% e$to no e$
nece$ariamente a$=% de -ec-o% la ma*or parte de la$ &ece$% con la re1erencia e$ $u1iciente'
Tambi3n podemo$ a,re,ar la -o2a al 1inal de toda$ la$ dem;$'
"u. #ns%'&a'=u%9aHo)a323
A+( oHo)as !s ?.)%*&
A+( oHo)a !s ?.)%*&
A+( s=o(.'% !s "&'+ng
s=o(.'% B I'+(2#n8u&Box2"=o(.'% d% la nu%9a ho)a"33
#f s=o(.'% XY "" Ih%n
oHo)as B Ih+s$o(8on%n&-g%&"h%%&s23
#f =o& oHo)as-hasB@=a(%2s=o(.'%3 Ih%n
,"+ no %x+s&% la +ns%'&a(os al f+nal
oHo)as-+ns%'&=%^B@=a(%2 s=o(.'%7 oHo)as-g%&$oun&23 3
End #f
oHo)a B Ih+s$o(8on%n&-g%&"h%%&s-g%&B@=a(%2s=o(.'%3
Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-s%&!*&+9%"h%%&2oHo)a3
End #f
End "u.
Ob$er&a entonce$ 6ue el ar,umento po$ici4n puede tomar &alore$ de$de 0 * -a$ta el
total de -o2a$ de&uelto por ,et+ount() pero inclu$o $i e$ ma*or a e$te &alor% no te dar; error * la
in$ertara al 1inal de la$ dem;$ -o2a$' Si 6uiere$ in$ertar la -o2a ante$ o de$pu3$ de la -o2a acti&a%
primero tiene$ 6ue encontrar el =ndice de la -o2a acti&a'
"u. #nd+*%Ho)a!*&+9a23
A+( *o1 !s #n&%g%'
A+( oHo)a!*&+9a !s ?.)%*&
d+( oHo)a !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
Ko' *o1 B 0 Io Ih+s$o(8on%n&-g%&"h%%&s-g%&$oun&23 T 1
oHo)a B Ih+s$o(8on%n&-g%&"h%%&s-g%&B@#nd%x2*o13
#f oHo)a-g%&=a(%23 B oHo)a!*&+9a-g%&=a(%23 &h%n
MsgBox "El +nd+*% d% la ho)a a*&+9a %s4 " : *o1
Ex+& Ko'
End #f
=%x&
End "u.
eue podemo$ con&ertir a una 1unci4n'
Kun*&+on Bus*a'#nd+*%Ho)a2B@1al =o(.'%Ho)a !s "&'+ng3 !s #n&%g%'
A+( *o1 !s #n&%g%'
d+( oHo)a !s ?.)%*&
Aprendiendo OOo .a$ic 1)5
Ko' *o1 B 0 Io Ih+s$o(8on%n&-g%&"h%%&s-g%&$oun&23 T 1
oHo)a B Ih+s$o(8on%n&-g%&"h%%&s-g%&B@#nd%x2*o13
#f oHo)a-g%&=a(%23 B =o(.'%Ho)a &h%n
Bus*a'#nd+*%Ho)a B *o1
Ex+& Kun*&+on
End #f
=%x&
Bus*a'#nd+*%Ho)a B T1
End Kun*&+on
Ob$er&a 6ue $i no la encuentra el &alor de&uelto e$ -1% lo cual -a* 6ue e&aluar en
ca$o nece$ario' Para in$ertar ante$ de la -o2a acti&a u$amo$'
"u. #ns%'&a'=u%9aHo)a423
A+( oHo)as !s ?.)%*&
A+( oHo)a !s ?.)%*&
A+( oHo)a!*&+9a !s ?.)%*&
A+( s=o(.'% !s "&'+ng
A+( 8os !s #n&%g%'
s=o(.'% B I'+(2#n8u&Box2"=o(.'% d% la nu%9a ho)a"33
#f s=o(.'% XY "" Ih%n
oHo)as B Ih+s$o(8on%n&-g%&"h%%&s23
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
#f =o& oHo)as-hasB@=a(%2s=o(.'%3 Ih%n
,Bus*a(os %l Hnd+*% d% la ho)a a*&+9a
8os B Bus*a'#nd+*%Ho)a2oHo)a!*&+9a-g%&=a(%233
oHo)as-+ns%'&=%^B@=a(%2 s=o(.'%7 8os 3
End #f
oHo)a B Ih+s$o(8on%n&-g%&"h%%&s-g%&B@=a(%2s=o(.'%3
Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-s%&!*&+9%"h%%&2oHo)a3
End #f
End "u.
Para in$ertar de$pu3$ de la -o2a acti&a% $olo $uma$ uno al &alor de&uelto por la
1unci4n .u$car9ndicedo2a'
8os B Bus*a'#nd+*%Ho)a2oHo)a!*&+9a-g%&=a(%233 C 1
Podemo$ a&enturar una primera &er$i4n de una 1unci4n ,en3rica para in$ertar una
nue&a -o2a de calculo donde 6uiera$'
,$o(o fun*+6n '%g'%sa(os la nu%9a ho)a +ns%'&ada o la %x+s&%n&% %n su *aso
,0os+*+6n4 1 B #n+*+o
, 2 B K+nal
, 3 B !n&%s d% la ho)a a*&+9a
, 4 B A%s8uSs d% la ho)a a*&+9a
Kun*&+on g%&=u%9aHo)a2=o(.'%Ho)a !s "&'+ng7 0os+*+on !s #n&%g%'3 !s ?.)%*&
A+( oHo)as !s ?.)%*&
A+( oHo)a!*&+9a !s ?.)%*&
A+( +0os !s #n&%g%'
#f =o(.'%Ho)a XY "" Ih%n
oHo)as B Ih+s$o(8on%n&-g%&"h%%&s23
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
"%l%*& $as% 0os+*+on
$as% 1 4 +0os B 0
$as% 2 4 +0os B oHo)as-g%&$oun&23
1)) )'1 Traba2ando con -o2a$
$as% 3 4 +0os B oHo)a!*&+9a-g%&Rang%!dd'%ss-"h%%&
$as% 4 4 +0os B oHo)a!*&+9a-g%&Rang%!dd'%ss-"h%%& C 1
$as% Els% 4 +0os B 0
End "%l%*&
#f =o& oHo)as-hasB@=a(%2=o(.'%Ho)a3 Ih%n
oHo)as-+ns%'&=%^B@=a(%2=o(.'%Ho)a7 +0os3
End #f
g%&=u%9aHo)a B Ih+s$o(8on%n&-g%&"h%%&s-g%&B@=a(%2=o(.'%Ho)a3
End #f
End Kun*&+on
Nota como e$tamo$ obteniendo el =ndice de la -o2a acti&a
(odo2a',et@an,eAddre$$'S-eet)% con lo cual no$ e&itamo$ tener 6ue -acer un ciclo por la$ -o2a$
del documento' Puede$ me2orar e$ta 1unci4n para in$ertar la -o2a en cual6uier otro documento% a$=
como in,eni;rtela$ para pedirle al u$uario el n?mero de -o2a$ nue&a$ 6ue 6uiera in$ertar e
in$ertarla$ por $upue$to% e$a% e$ tu tarea'
=.1.2 &orrando "ojas
Para borrar -o2a$% u$amo$ el m3todo remo&e.*Name(Nombre)% donde Nombre e$ el
nombre de la -o2a 6ue 6ueremo$ borrar% no e$ta de m;$ recomendarte u$ar con cuidado el
borrado de -o2a$% aun6ue al,o 6ue me ,u$ta muc-o de OpenO11ice'or,% e$ 6ue muc-a$ de la$
accione$ 6ue -acemo$ por c4di,o% $on $u$ceptible$ de de$-acer$e de 1orma normal con la barra
de -erramienta$ o con +T@#Rl% el borrado de -o2a$ e$ una de ella$% compru3balo'
"u. Bo''a'Ho)a123
A+( oHo)as !s ?.)%*&
oHo)as B Ih+s$o(8on%n&-g%&"h%%&s23
,Bo''a(os la ho)a 8o' su no(.'%
oHo)as-'%(o9%B@=a(%2 "Ho)a11" 3
End "u.
Por $upue$to no puede$ borrar una -o2a 6ue no e:i$ta% a$= 6ue &eri1=calo'
"u. Bo''a'Ho)a223
A+( oHo)as !s ?.)%*&
A+( s=o(.'% !s "&'+ng
s=o(.'% B I'+(2 #n8u&Box2 "=o(.'% d% la ho)a a .o''a'" 33
#f s=o(.'% XY "" Ih%n
oHo)as B Ih+s$o(8on%n&-g%&"h%%&s23
#f oHo)as-hasB@=a(%2 s=o(.'% 3 Ih%n
oHo)as-'%(o9%B@=a(%2 s=o(.'% 3
Els%
MsgBox "5a ho)a no %x+s&%"
End #f
End #f
End "u.
Puede$ borrar la -o2a acti&a'
Aprendiendo OOo .a$ic 1)7
"u. Bo''a'Ho)a!*&+9a23
A+( oHo)as !s ?.)%*&
A+( oHo)a!*&+9a !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
oHo)as B Ih+s$o(8on%n&-g%&"h%%&s23
oHo)as-'%(o9%B@=a(%2 oHo)a!*&+9a-g%&=a(%23 3
End "u.
>2ecuta la macro anterior -a$ta 6ue no 6uede ni una% claro% no te de2ara por 6ue un
documento de -o2a de calculo por lo meno$ debe de tener una -o2a% para e&itar el error 6ue te da
al tratar de borrar la ultima -o2a% &alida 6ue $iempre 6uede m;$ de una'
"u. Bo''a'Ho)a323
A+( oHo)as !s ?.)%*&
A+( s=o(.'% !s "&'+ng
s=o(.'% B I'+(2 #n8u&Box2 "=o(.'% d% la ho)a a .o''a'" 33
#f s=o(.'% XY "" Ih%n
oHo)as B Ih+s$o(8on%n&-g%&"h%%&s23
#f oHo)as-hasB@=a(%2 s=o(.'% 3 !nd oHo)as-g%&$oun&23Y1 Ih%n
oHo)as-'%(o9%B@=a(%2 s=o(.'% 3
Els%
MsgBox "5a ho)a no %x+s&% o solo Gu%da una"
End #f
End #f
End "u.
=.1. Mo,iendo "ojas
Para mo&er -o2a$ u$amo$ el m3todo mo&e.*Name(Nombredo2a% Po$icionNue&a)%
donde Nombredo2a tiene 6ue $er el nombre de una -o2a e:i$tente'
"u. Mo9%'Ho)a123
A+( oHo)as !s ?.)%*&
oHo)as B Ih+s$o(8on%n&-g%&"h%%&s23
,Mo9%(os la ho)a %s8%*+f+*ada al +n+*+o
oHo)as-(o9%B@=a(%2 "Ho)a2"7 0 3
End "u.
A-ora% la mo&emo$ al 1inal'
"u. Mo9%'Ho)a223
A+( oHo)as !s ?.)%*&
oHo)as B Ih+s$o(8on%n&-g%&"h%%&s23
,Mo9%(os la ho)a %s8%*+f+*ada al f+nal
oHo)as-(o9%B@=a(%2 "Ho)a2"7 oHo)as-g%&$oun&23 3
End "u.
1)F )'1 Traba2ando con -o2a$
Si u$a$ una &er$i4n anterior a la ('1% ten cuidado con mo&er tu$ -o2a$ Lno m;$ all;
de la ultima -o2aM% pue$ te puede pro&ocar un error en toda la aplicaci4n% e$te error (bu,) $e
report4 en $u momento (-ttp<00777'openo11ice'or,0i$$ue$0$-o7Qbu,'c,iJidfG2E77)% * -a $ido
arre,lado a partir de e$ta &er$i4n (('1)% aun a$=% u$a $iempre ,et+ount() para a$e,urarte'
5amo$ a -acer al,o mu* di&ertido% como *a $abemo$ obtener lo$ nombre$ e =ndice$
de cada -o2a% * a-ora -emo$ aprendido a mo&er -o2a$% -a,amo$ una macro 6ue no$ ordene
al1ab3ticamente nue$tra$ -o2a$% para ello no$ apo*aremo$ en una 1unci4n 6ue ordena la matri/
6ue le pa$emo$'
"u. 0'u%.a?'d%na'123
A+( (Aa&os23
Elo.al"*o8%-Bas+*5+.'a'+%s-5oad5+.'a'@2 "Iools" 3
(Aa&os23 B !''a@2"5"7"l"7"o"7"f"7"%"7"9"7"@"7"d"7"h"7"u"73
,Mos&'a(os los da&os d%so'd%nados
MsgBox [o+n2 (Aa&os237 $h'2133 3
,?'d%na(os los da&os
(Aa&os23 B Bu..l%"o'&5+s&2 (Aa&os23 3
,Mos&'a(os los da&os o'd%nados
MsgBox [o+n2 (Aa&os237 $h'2133 3
End "u.
#a 1unci4n .ubbleSort#i$t% &iene incorporada a la$ macro$ de OpenO11ice'or, * u$a
el m3todo de burbu2a para ordenar la li$ta pa$ada% no e$ el al,oritmo m;$ e1iciente% pero en li$ta$
pe6ueKa$ * dada $u $encille/ de implementaci4n e$ per1ectamente &;lida para nue$tro$ 1ine$% $i
6uiere$ $aber m;$ de e$te al,oritmo &i$ita< -ttp<00e$'7isipedia'or,07isi0.ubble$ort
Tambi3n puede$ crearte tu &er$i4n de e$te al,oritmo% a6u= e$ta la m=a% puede$
ordenar de 1orma a$cendente o de$cendente'
"u. 0'u%.a?'d%na'223
A+( (Aa&os23
(Aa&os23 B !''a@2"5"7"l"7"o"7"f"7"%"7"9"7"@"7"d"7"h"7"u"73
,Mos&'a(os los da&os d%so'd%nados
MsgBox [o+n2 (Aa&os237 $h'2133 3
,?'d%na(os los da&os
$all ?'d%na'Bu'.u)a2 (Aa&os237 1 3
,Mos&'a(os los da&os o'd%nados
MsgBox [o+n2 (Aa&os237 $h'2133 3
End "u.
, Aa&os B (a&'+; d% da&os a o'd%na'
, ?'d%n B 1 as*%nd%n&%
, 2 d%s*%nd%n&%
"u. ?'d%na'Bu'.u)a2B@R%f Aa&os23 !s 1a'+an&7 B@1al ?'d%n !s #n&%g%'3
A+( =u(Aa&os !s 5ong
A+( *o1 !s 5ong7 *o2 !s 5ong
=u(Aa&os B DBound2Aa&os3
Aprendiendo OOo .a$ic 1)G
Ko' *o1 B 1 Io =u(Aa&os
Ko' *o2 B =u(Aa&os Io *o1 "&%8 T1
#f ?'d%n B 1 Ih%n
#f Aa&os2*o23 X Aa&os2*o2 T 13 Ih%n
$all #n&%'*a(.+o Aa&os2*o237 Aa&os2*o2 T 13
End #f
Els%
#f =o& 2Aa&os2*o23 X Aa&os2*o2 T 133 Ih%n
$all #n&%'*a(.+o Aa&os2*o237 Aa&os2*o2 T 13
End #f
End #f
=%x& *o2
=%x& *o1
End "u.
,Ma*'o 8a'a +n&%'*a(.+a' un 8a' d% 9alo'%s
"u. #n&%'*a(.+o2B@R%f Aa&o1 !s 1a'+an&7 B@R%f Aa&o2 !s 1a'+an&3
A+( sI(8 !s 1a'+an&
sI(8 B Aa&o1
Aa&o1 B Aa&o2
Aa&o2 B sI(8
End "u.
A-ora $i% nue$tra macro para ordenar -o2a$ en acci4n% puede$ u$ar la 1unci4n o
macro 6ue pre1iera$ para ordenar la matri/ de nombre$ obtenida% inclu$o% crearte tu propia &er$i4n
$i a$= lo pre1iere$'
?8&+on Ex8l+*+&
,?'d%na(os las ho)as 8o' o'd%n alfa.S&+*o
"u. ?'d%na'Ho)as23
A+( oHo)as !s ?.)%*&
A+( (=o(.'%s23 !s 1a'+an&
A+( aI(8 !s 1a'+an&
A+( *o1 !s #n&%g%'
A+( oHo)a !s ?.)%*&
,R%f%'%n*+a a &odas las ho)as d%l do*u(%n&o
oHo)as B Ih+s$o(8on%n&-g%&"h%%&s23
,Ma&'+; *on los no(.'%s d% &odas las ho)as
(=o(.'%s23 B oHo)as-g%&El%(%n&=a(%s23
,?'d%na(os la (a&'+;
$all ?'d%na'Bu'.u)a2 (=o(.'%s237 1 3
,R%*o''%(os la (a&'+;
Ko' *o1 B 5Bound2 (=o(.'%s23 3 Io DBound2 (=o(.'%s23 3
,El Hnd+*% %n la (a&'+;7 s%'a %l (+s(o d% la 8os+*+6n
oHo)as-(o9%B@=a(%2 (=o(.'%s2*o137 *o1 3
=%x& *o1
End "u.
170 )'1 Traba2ando con -o2a$
=.1.) Copiando "ojas
Para copiar -o2a$ u$amo$ el m3todo cop*.*Name ( Nombredo2a% NombreNue&o%
Po$icion ) de la $i,uiente manera'
"u. $o8+a'Ho)a123
A+( oHo)as !s ?.)%*&
oHo)as B Ih+s$o(8on%n&-g%&"h%%&s23
,$o8+a(os la "ho)a2" *o(o "=u%9a Ho)a2" al +n+*+o
oHo)as-*o8@B@=a(%2 "Ho)a2"7 "=u%9a Ho)a2"7 0 3
End "u.
Por $upue$to el nombre de la -o2a a copiar LdebeM de e:i$tir * el nombre nue&o de la
-o2a Lno debeM e:i$tir% lo me2or% e$ e&aluarlo ante$'
"u. $o8+a'Ho)a223
A+( oHo)as !s ?.)%*&
A+( s=o(.'% !s "&'+ng
A+( s=o(.'%=u%9o !s "&'+ng
s=o(.'% B "Aa&os"
s=o(.'%=u%9o B "Aa&os nu%9os"
oHo)as B Ih+s$o(8on%n&-g%&"h%%&s23
,"olo *o8+a la ho)a7 s+ la ho)a a *o8+a' %x+s&% @ %l no(.'% nu%9o no %x+s&%
#f oHo)as-hasB@=a(%2s=o(.'%3 !nd 2=o& oHo)as-hasB@=a(%2s=o(.'%=u%9o33 Ih%n
oHo)as-*o8@B@=a(%2 s=o(.'%7 s=o(.'%=u%9o7 oHo)as-g%&$oun&23 3
Els%
MsgBox "=o s% *o8+6 la ho)a"
End #f
End "u.
Podemo$ intentar copiar una -o2a * a$e,urarno$ de 6ue el nombre no e:i$ta%
tomando como ba$e el nombre actual de la -o2a% por e2emplo'
"u. $o8+a'Ho)a!*&+9a23
A+( oHo)as !s ?.)%*&
A+( oHo)a !s ?.)%*&
A+( s=o(.'% !s "&'+ng
A+( s=o(.'%2 !s "&'+ng
A+( *o1 !s 5ong
,R%f%'%n*+a a &odas las ho)a
oHo)as B Ih+s$o(8on%n&-g%&"h%%&s23
,=o(.'% d% la ho)a a*&+9a
s=o(.'% B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&-g%&=a(%23
,$on&ado' 8a'a *ons&'u+' %l nu%9o no(.'%
*o1 B 1
,El nu%9o no(.'% %s +gual (as un gu+6n .a)o @ un nu(%'o
s=o(.'%2 B s=o(.'% : "/" : Ko'(a&2*o13
,Ha*% %l *+*lo (+%n&'as %l nu%9o no(.'% %x+s&a
Ao Uh+l% oHo)as-hasB@=a(%2 s=o(.'%2 3
Aprendiendo OOo .a$ic 171
,"+ @a %x+s&% +n*'%(%n&a(os %l *on&ado'
*o1 B *o1 C 1
,@ *ons&'u+(os %l nu%9o no(.'%
s=o(.'%2 B s=o(.'% : "/" : Ko'(a&2*o13
5oo8
,"al% d%l *+*lo *uando %l nu%9o no(.'% no %x+s&a7 %n&on*%s
,8od%(os *o8+a' la ho)a al f+nal 2o dond% Gu+%'as3
oHo)as-*o8@B@=a(%2s=o(.'%7 s=o(.'%27 oHo)as-g%&$oun&233
,R%f%'%n*+a a la nu%9a ho)a
oHo)a B Ih+s$o(8on%n&-g%&"h%%&s-g%&B@=a(%2s=o(.'%23
,O la a*&+9a(os
Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-s%&!*&+9%"h%%&2oHo)a3
End "u.
Solo te re$ta pre,untarle al u$uario cuanta$ nue&a$ -o2a$ 6uiere e in$ertar e$e
n?mero de -o2a$ nue&a$% pero e$a% e$ tu tarea'
=.1.! 8enombrando "ojas
Para renombrar -o2a$ u$amo$ el m3todo $etName% de la $i,uiente manera'
"u. $a(.+a'=o(.'%Ho)a123
A+( oHo)as !s ?.)%*&
oHo)as B Ih+s$o(8on%n&-g%&"h%%&s23
,$a(.+a(os %l no(.'% d% la ho)a WHolaV7 8o' W0'u%.aV
oHo)as-g%&B@=a(%2"Hola"3-s%&=a(%2 "0'u%.a" 3
End "u.
Tambi3n puede$ u$ar el =ndice para re1erirte a la -o2a'
"u. $a(.+a'=o(.'%Ho)a223
A+( oHo)as !s ?.)%*&
oHo)as B Ih+s$o(8on%n&-g%&"h%%&s23
oHo)as-g%&B@#nd%x2 0 3-s%&=a(%2 "Eas&os" 3
End "u.
>$ recomendable &alidar 6ue la -o2a a renombrar e:i$ta * 6ue el nue&o nombre no'
"u. $a(.+a'=o(.'%Ho)a323
A+( oHo)as !s ?.)%*&
A+( s=o(.'%!*&ual !s "&'+ng
A+( s=o(.'%=u%9o !s "&'+ng
s=o(.'%!*&ual B "R%su(%n"
s=o(.'%=u%9o B "I%'(+nado"
172 )'1 Traba2ando con -o2a$
oHo)as B Ih+s$o(8on%n&-g%&"h%%&s23
,1al+da(os Gu% la ho)a %x+s&a @ %l nu%9o no(.'% no
#f oHo)as-hasB@=a(%2s=o(.'%!*&ual3 !nd 2=o& oHo)as-hasB@=a(%2s=o(.'%=u%9o33 Ih%n
oHo)as-g%&B@=a(%2 s=o(.'%!*&ual 3-s%&=a(%2 s=o(.'%=u%9o 3
Els%
MsgBox "=o s% '%no(.'o la ho)a"
End #f
End "u.
Solo para di&ertirno$% cambiamo$ lo$ nombre$ de la$ -o2a$ por n?mero$'
"u. $a(.+a'=o(.'%Ho)a423
A+( oHo)as !s ?.)%*&
A+( *o1 !s #n&%g%'
oHo)as B Ih+s$o(8on%n&-g%&"h%%&s23
Ko' *o1 B 1 Io oHo)as-g%&$oun&23
oHo)as-g%&B@#nd%x2 *o1T1 3-s%&=a(%2 *o1 3
=%x&
End "u.
A-ora por letra$% el c4di,o $i,uiente podr=a 1allarte $i tiene$ m;$ de 25 -o2a$ en tu
documento% tu tarea e$ decirme Ipor6u3J * corre,irlo% en al,uno$ ca$o$% Lel cambio de nombre no
tendr; e1ectoM% tambi3n% te toca a&eri,uar Ipor6u3J
"u. $a(.+a'=o(.'%Ho)a523
A+( oHo)as !s ?.)%*&
A+( *o1 !s #n&%g%'
oHo)as B Ih+s$o(8on%n&-g%&"h%%&s23
Ko' *o1 B 1 Io oHo)as-g%&$oun&23
oHo)as-g%&B@#nd%x2 *o1T1 3-s%&=a(%2 $h'2 *o1C64 3 3
=%x&
End "u.
O lo$ me$e$ del aKo<
"u. $a(.+a'=o(.'%Ho)a623
A+( oHo)as !s ?.)%*&
A+( *o1 !s #n&%g%'
A+( 5+(+&% !s B@&%
A+( sM%s !s "&'+ng
oHo)as B Ih+s$o(8on%n&-g%&"h%%&s23
,0a'a Gu% solo *a(.+% las 8'+(%'as 12
#f oHo)as-g%&$oun&23 Y 12 Ih%n
5+(+&% B 12
Els%
,? las Gu% ha@a s+ son (%nos d% 12
5+(+&% B oHo)as-g%&$oun&23
End #f
Ko' *o1 B 1 Io 5+(+&%
,?.&%n%(os %l no(.'% d%l (%s
Aprendiendo OOo .a$ic 17(
sM%s B Ko'(a&2 Aa&%"%'+al2O%a'2Aa&%37*o1713 7"(((("3
oHo)as-g%&B@#nd%x2 *o1T1 3-s%&=a(%2 sM%s 3
=%x&
End "u.
Te 6ueda de tarea lo,rar completar lo$ me$e$ para 6ue $ean lo$ doce del aKo% e$
decir% tiene$ 6ue in$ertar lo$ me$e$ 6ue te -a,an 1alta $i el documento tiene meno$ de la$ -o2a$
nece$aria$% $i tiene m;$ de doce borra la$ $obrante$'
=.1.= %cultando y mostrando "ojas
Mo$trar * ocultar -o2a$ e$ mu* $encillo% $olo -a* 6ue e$tablecer $u propiedad
i$5i$ible en &erdadero (True) o 1al$o (!al$e) $e,?n $e re6uiera de la $i,uiente manera%
"u. ?*ul&a'Ho)a123
A+( oHo)a!*&+9a !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
oHo)a!*&+9a-+s1+s+.l% B Kals%
End "u.
#a macro anterior te ocultara la -o2a acti&a% $i la e2ecuta$ &aria$ &ece$ te ira
ocultando tu$ -o2a$ -a$ta 6ue $olo 6uede una% $i $olo -a* una no te dar; error% pero la de2ar;
&i$ible por 6ue% como $abe$% tiene 6ue -aber al meno$ una -o2a &i$ible en un documento de +alc'
Tambi3n puede$ ocultar una -o2a por medio de $u =ndice% como en'
"u. ?*ul&a'Ho)a223
A+( oHo)a !s ?.)%*&
oHo)a B Ih+s$o(8on%n&-g%&"h%%&s-g%&B@#nd%x213
oHo)a-+s1+s+.l% B Kals%
End "u.
Toma en cuenta 6ue< el =ndice de la -o2a LdebeM e:i$tir% $ino te dar; un error% a$=
mi$mo% $i oculta$ una -o2a% e$ta no cambia de =ndice por lo 6ue puede$ u$ar el mi$mo para
acceder a ella% aun6ue e$te oculta% la $i,uiente macro alterna entre mo$trar * ocultar la primer -o2a
del documento'
"u. ?*ul&a'Ho)a323
A+( oHo)a !s ?.)%*&
oHo)a B Ih+s$o(8on%n&-g%&"h%%&s-g%&B@#nd%x203
oHo)a-+s1+s+.l% B =o& oHo)a-+s1+s+.l%
End "u.
17E )'1 Traba2ando con -o2a$
+omo *a -abr;$ intuido% para mo$trar una -o2a oculta $implemente -a* 6ue
e$tablecer e$ta propiedad en &erdadero (True)'
"u. ?*ul&a'Ho)a423
A+( oHo)a !s ?.)%*&
oHo)a B Ih+s$o(8on%n&-g%&"h%%&s-g%&B@#nd%x213
oHo)a-+s1+s+.l% B I'u%
End "u.
>l $i,uiente c4di,o te oculta toda$ la$ -o2a$% e:cepto la -o2a acti&a'
"u. ?*ul&a'Ho)a523
A+( oHo)a!*&+9a !s ?.)%*&
A+( oHo)as !s ?.)%*&
A+( *o1 !s 5ong
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
oHo)as B Ih+s$o(8on%n&-g%&"h%%&s23
Ko' *o1 B 0 Io oHo)as-g%&$oun&23 T 1
#f oHo)as-g%&B@#nd%x2*o13-g%&=a(% XY oHo)a!*&+9a-g%&=a(%23 Ih%n
oHo)as-g%&B@#nd%x2*o13-+s1+s+.l% B Kals%
End #f
=%x&
End "u.
Tu tarea e$ -acer la 1unci4n in&er$a% mue$tra toda$ la$ -o2a$ oculta$'
=.1.A +roteccin y desproteccin de "ojas
Para terminar e$te cap=tulo% &eamo$ como prote,er una -o2a% e$ decir% e$tablecer
una contra$eKa para e&itar modi1icacione$ a la mi$ma% adem;$% recuerda 6ue para 6ue la
protecci4n de celda$ indi&iduale$ $ea e1ecti&a% la -o2a debe e$tar prote,ida' Para prote,er una
-o2a% u$amo$ el m3todo Protect% pa$;ndole como ar,umento% la contra$eKa 6ue 6ueremo$
e$tablecer% por $upue$to% puede$ pa$arle una contra$eKa &ac=a% con lo 6ue la -o2a no e$tar; mu*
prote,ida 6ue di,amo$% pero creeme% muc-o$ u$uario$ no $aben de$prote,er una -o2a% aun $in
contra$eKa'
"u. 0'o&%g%'Ho)a123
A+( oHo)a!*&+9a !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'23-g%&!*&+9%"h%%&23
,0a'a Gu% 9%as Gu% s+ (% o*u''%n o&'as *on&'as%\as
oHo)a!*&+9a-0'o&%*&2 "l%&(%+n" 3
End "u.
O para de$prote,er% u$amo$ el m3todo unProtect% $i la -o2a tiene contra$eKa -a* 6ue
pa$;r$ela como ar,umento% $i no e$ correcta% el m3todo no te de&ol&er; nin,?n error como en la
inter1a/ del u$uario 6ue te a&i$a 6ue la contra$eKa e$ incorrecta% para $aber $i tu&o 3:ito o no la
Aprendiendo OOo .a$ic 175
de$protecci4n% -a* 6ue &eri1icar la propiedad isProtected% $i e$ &erdadera (True) la -o2a $i,ue
prote,ida% $i e$ 1al$a (!al$e)% la -o2a e$ta de$prote,ida'
"u. 0'o&%g%'Ho)a223
A+( oHo)a!*&+9a !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'23-g%&!*&+9%"h%%&23
#f oHo)a!*&+9a-+s0'o&%*&%d Ih%n
MsgBox "5a ho)a %s&a 8'o&%g+da"
,#n&%n&a(os d%s8'o&%g%'la
oHo)a!*&+9a-un0'o&%*&2 "l%&(%+n" 3
,1%'+f+*a(os s+ &u9o Sx+&o la d%s8'o&%**+6n
#f oHo)a!*&+9a-+s0'o&%*&%d Ih%n
MsgBox "5a *on&'as%\a no %s *o''%*&a"
Els%
MsgBox "Ho)a d%s8'o&%g+da *o''%*&a(%n&%"
End #f
Els%
MsgBox "5a ho)a =? %s&a 8'o&%g+da"
End #f
End "u.
Te 6ueda de tarea modi1icar la macro para $olicitar al u$uario la contra$eKa% &eri1icar
$i e$ correcta o no * darle $olo tre$ intento$ para in,re$arla' !;cil% I&erdadJ' +omo comentario$
1inale$% $i intenta$ prote,er una -o2a 6ue *a tiene contra$eKa% no obtendr;$ nin,?n error% pero la
-o2a permanecer; con la contra$eKa ori,inal% para cambiarla% primero tiene$ 6ue de$prote,erla *
de$pu3$ cambiarla' +uando prote,e$ una -o2a e intenta$ -acer modi1icacione$ a e$ta% por
e2emplo% e$cribir en una celda% tampoco retornar; nin,?n error% pero no $er; e1ecti&a la
modi1icaci4n% procura u$ar la propiedad para $aber $i una -o2a e$ta o no prote,ida ( isProtected)%
para actuar en con$ecuencia'
=.2 8e3erencia a ran*os
Se,uro 6ue $abe$% $i ere$ u$uario -abitual de una -o2a de calculo% 6ue el traba2o con
ran,o$ e$ e$encial en e$to$ documento$% por lo mi$mo% el traba2o con ran,o$ de$de c4di,o OOo
.a$ic e$ i,ualmente importante% *a &imo$ como a$e,uramo$ 6ue e$tamo$ traba2ando en una -o2a
de calculo% a$= 6ue de2o a tu criterio e$ta &alidaci4n' >n la $i,uiente$ $eccione$ no$ centraremo$
en aprender como -acer re1erencia a di$tinto$ tipo$ de ran,o$ para de$pu3$ poder manipularlo$%
darle$ 1ormato o -acer con ello$ lo 6ue 6ueramo$'
=.2.1 8e3erencia a celdas indi,iduales
Podemo$ acceder a la$ celda$ de una -o2a de calculo de &aria$ manera$%
principalmente por $u nombre o por $u po$ici4n% pero mu* importante% primero tiene$ 6ue acceder
a la -o2a donde e$t;n la$ celda$ 6ue te intere$a manipular% como acceder a -o2a$ e$ un tema 6ue
17) )'2 @e1erencia a ran,o$
*a -emo$ tratado% pero en cada e2emplo podr;$ notar 6ue repa$amo$ e$to$ conocimiento$% la
1orma m;$ $imple de -acer re1erencia a una celda e$ por $u nombre'
"u. !**%so$%ldas123
A+( oHo)a!*&+9a !s ?.)%*&
A+( o$%lda !s ?.)%*&
,R%f%'%n*+a a la ho)a a*&+9a
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
,R%f%'%n*+a a la *%lda E5
o$%lda B oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "E5" 3
,Mos&'a(os %l *on&%n+do d% la *%lda
MsgBox o$%lda-g%&"&'+ng23
,Mos&'a(os la ho)a7 *olu(na @ f+la *o''%s8ond+%n&% a %s&a *%lda
MsgBox "Ho)a4 " : o$%lda-g%&$%ll!dd'%ss-"h%%& : $h'2133 : /
"$olu(na4 " : o$%lda-g%&$%ll!dd'%ss-$olu(n : $h'2133 : /
"K+la4 " : o$%lda-g%&$%ll!dd'%ss-Ro^
End "u.
Ob$er&a como comprobamo$ en la ultima linea% 6ue e1ecti&amente -emo$ -ec-o
re1erencia a la celda 6ue no$ intere$a% e$ decir a la celda >5% 6ue en columna * 1ila e$ la E% por
6ue recordamo$ 6ue lo$ n?mero$ de columna * 1ila empie/an en 0% ob$er&a la e$tructura
,et+ellAddre$$% e$ta% e$ mu* importante pue$ a muc-o$ m3todo$ para manipular celda$% $e le$
tienen 6ue pa$ar e$tructura$ como e$ta% $olo tiene tre$ propiedade$% la -o2a (&alor tipo inte,er%
e$te% tambi3n empie/a en 0) donde e$ta la celda re1erenciada% la columna (lon,) * la 1ila (lon,) de
e$ta celda'
A-ora accedemo$ a una celda por $u po$ici4n% recuerda 6ue lo$ =ndice$ de inicio
de$de c4di,o empie/an en 0% por lo 6ue para -acer re1erencia a la celda >5% tenemo$ 6ue poner la
columna E * 1ila E% el primer &alor e$ para la columna * el $e,undo para la 1ila% no e$ta de m;$
comentarte 6ue ten,a$ cuidado de no e$tablecer una po$ici4n 1uera de la -o2a% pue$ te dar; un
error% por e2emplo% e$tablecer el &alor de la columna en 25) o $uperior $i traba2o$ con la &er$i4n
2': de OpenO11ice'or,% en la &er$i4n (': tenemo$ 102E columna$ para traba2ar% por $upue$to% $i el
&alor de la 1ila * columna $e la $olicita$ al u$uario% Ldeber=a$M de &alidar 6ue lo$ &alore$
proporcionado$ $on correcto$'
"u. !**%so$%ldas223
A+( oHo)a!*&+9a !s ?.)%*&
A+( o$%lda !s ?.)%*&
A+( $ol !s 5ong
A+( K+l !s 5ong
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
,=os as%gu'a(os Gu% s%a un 9alo' *on 1al @ Gu% s%a 8os+&+9o *on !.s
$ol B !.s21al2#n8u&Box2"Aa(% la *olu(na"333
K+l B !.s21al2#n8u&Box2"Aa(% la f+la"333
,=os as%gu'a(os Gu% %s&Sn d%n&'o d% los 'angos *o''%*&os
#f $ol X oHo)a!*&+9a-$olu(ns-$oun& !nd K+l X oHo)a!*&+9a-Ro^s-$oun& Ih%n
,!**%d%(os a la *%lda
o$%lda B oHo)a!*&+9a-g%&$%llB@0os+&+on2 $ol7K+l 3
MsgBox o$%lda-g%&"&'+ng23
Els%
MsgBox "1alo'%s d% *%lda +n*o''%*&os"
End #f
Aprendiendo OOo .a$ic 177
End "u.
>$ 1recuente 6ue el acce$o por nombre a una celda $e u$e para e$tablecer &alore$
pree$tablecido$% como t=tulo$ de campo$ por e2emplo% * el acce$o por po$ici4n e$ mu* ?til para
reali/ar ciclo$% como el e2emplo $i,uiente 6ue in$erta el aKo como titulo en la celda A1 * lo$ me$e$
del aKo de la celda A2 a la A1('
"u. !**%so$%ldas323
A+( oHo)a!*&+9a !s ?.)%*&
A+( o$%lda !s ?.)%*&
A+( *o1 !s #n&%g%'
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
,R%f%'%n*+a a *%lda 8o' no(.'%
o$%lda B oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "!1" 3
o$%lda-s%&"&'+ng2 O%a'2Aa&%3 3
Ko' *o1 B 1 Io 12
,R%f%'%n*+a a *%lda 8o' 8os+*+on
o$%lda B oHo)a!*&+9a-g%&$%llB@0os+&+on2 07*o1 3
o$%lda-s%&"&'+ng2 Ko'(a&2 Aa&%"%'+al2O%a'2Aa&%37*o1713 7"(((("3 3
=%x&
End "u.
Ob$er&a 6ue -emo$ e$tado u$ando el m3todo ,etStrin,() para obtener el contenido
de una celda * $etStrin,(5alor A$ Strin,) para e$tablecerlo% m;$ adelante &eremo$ toda$ la$
po$ibilidade$ 6ue tenemo$ para introducir u obtener dato$ de la$ celda$ de nue$tra -o2a de
calculo% a$= como $u$ di1erencia$'
=.2.2 8e3erencia a un ran*o de celdas
Podemo$ acceder a un ran,o de celda$ por $u nombre% u$ando el mi$mo m3todo
u$ado para acceder a una celda'
"u. !**%soRango123
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
,R%f%'%n*+a al 'ango !14E5
oRango B oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "!14E5" 3
,O lo s%l%**+ona(os
Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-s%l%*&2oRango3
End "u.
Para acceder a un ran,o de celda$ por $u po$ici4n% -a* 6ue u$ar un m3todo
di1erente< ,et+ell@an,e.*Po$ition% 6ue re6uiere de cuatro ar,umento$'
17F )'2 @e1erencia a ran,o$
"u. !**%soRango223
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
,"%l%**+ona(os %l 'ango B14B10
oRango B oHo)a!*&+9a-g%&$%llRang%B@0os+&+on2 1707179 3
,O lo s%l%**+ona(os
Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-s%l%*&2oRango3
End "u.
Ob$er&a 6ue a-ora u$amo$ el m3todo ,et+ell@an,e.*Po$ition% lo$ ar,umento$
pa$ado$ a e$te m3todo $on cuatro% la columna * 1ila donde empie/a nue$tro ran,o * la columna *
1ila donde termina% recuerda 6ue lo$ n?mero$ de 1ila * columna empie/an en 0% al,uno$ pien$an
6ue lo$ do$ ?ltimo$ ar,umento$ $on el anc-o * alto del ran,o a u$ar% no e$ a$=% e$to$ ar,umento$
tambi3n $on n?mero$ de =ndice$ de columna * 1ila re$pecti&amente * tiene$ 6ue tener la
precauci4n de e$tablecer lo$ $e,undo$ i,uale$ o ma$ ,rande$ 6ue lo$ primero$% $ino% te dar; un
error en tiempo de e2ecuci4n * por $upue$to $in $obrepa$ar el m;:imo de 1ila$ * columna$ de la
-o2a de calculo' Ob$er&a tambi3n% como en la ultima l=nea $eleccionamo$ el ran,o re1erenciado'
Otra po$ibilidad% e$ u$ar nombre$ de1inido$ de ran,o$% e$ decir% a6uello$ 6ue
e$tablecemo$ de$de el L+uadro de nombreM en la -o2a de calculo% *a $abe$% e$e cuadro de li$ta
de$ple,able (combobo:) 6ue e$ta al lado de la barra de 1ormula$% 6ue tambi3n puede$ e$tablecer
de$de el men? 9nsertar $ 5ombres $ /e!inir%%% cu*a tecla$ de acce$o r;pido $on +trlR!(' >n el
$i,uiente e2emplo% $eleccionamo$ el ran,o de celda$ llamado "ato$' Toma nota de 6ue $i el ran,o
no e:i$te en la -o2a de$de donde $e intenta re1erenciar% te dar; un error'
"u. !**%soRango323
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
,"%l%**+ona(os %l 'ango 8o' su no(.'% d%f+n+do
oRango B oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "Aa&os" 3
,O lo s%l%**+ona(os
Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-s%l%*&2oRango3
End "u.
Por $upue$to% $i el nombre del ran,o no e:i$te% te dar; un error en tiempo de
e2ecuci4n% e$te m3todo no e$ $en$ible a ma*?$cula$ o min?$cula$' Para -acer re1erencia a la -o2a
correcta donde e:i$ta el ran,o con nombre% ob$er&a como obtenemo$ la -o2a donde $e encuentra'
Si el u$uario e$ el 6ue proporciona el nombre del ran,o% como $iempre% e$ me2or &alidar 6ue el
ran,o e:i$ta'
"u. !**%soRango423
A+( oHo)a !s ?.)%*&
A+( oRango !s ?.)%*&
A+( oRangos0o'=o(.'% !s ?.)%*&
A+( s=o(.'%Rango !s "&'+ng
,R%f%'%n*+a a &odos los 'angos *on no(.'% %n la ho)a d% *al*ulo
oRangos0o'=o(.'% B Ih+s$o(8on%n&-=a(%dRang%s23
Aprendiendo OOo .a$ic 17G
s=o(.'%Rango B I'+(2 #n8u&Box2 "Es*'+.% %l no(.'% d%l 'ango a s%l%**+ona'" 3 3
,$o(8'o.a(os Gu% %l 'ango %x+s&a
#f oRangos0o'=o(.'%-hasB@=a(%2 s=o(.'%Rango 3 Ih%n
oHo)a B
Ih+s$o(8on%n&-g%&"h%%&s-g%&B@#nd%x2oRangos0o'=o(.'%-g%&B@=a(%2s=o(.'%Rango3-g%&R%f%''%d$%lls-g%&Rang%!d
d'%ss-"h%%&3
,"%l%**+ona(os %l 'ango 8o' su no(.'% d%f+n+do
oRango B oHo)a-g%&$%llRang%B@=a(%2 s=o(.'%Rango 3
,O lo s%l%**+ona(os
Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-s%l%*&2oRango3
Els%
MsgBox "El 'ango " : s=o(.'%Rango : " no %x+s&% %n %l do*u(%n&o"
End #f
End "u.
No con1unda$ e$to$ nombre$ de ran,o$% con lo$ 6ue puede$ e$tablecer en el men?
/atos $ /e!inir rango%%%% *a 6ue e$to$ ?ltimo$ $e re1ieren a ran,o$ con$iderado$ como una tabla de
dato$% de -ec-o% puede$ tener un mi$mo nombre para un ran,o de celda$ * para un ran,o de
dato$% pero $on do$ co$a$ di1erente$% lo$ $e,undo$% lo$ &eremo$ m;$ adelante'
"e lo$ ran,o$ de celda$% tambi3n e$ po$ible obtener in1ormaci4n% para ello $e -ace
u$o de la e$tructura +ell@an,eAddre$$ a tra&3$ del m3todo ,et@an,eAddre$$ 6ue te de&uel&e
in1ormaci4n de< la -o2a donde e$ta el ran,o% la columna * 1ila donde comien/a * la columna * 1ila
donde acaba'
"u. !**%soRango523
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango !s ?.)%*&
A+( oA+'$%lda !s ?.)%*&
A+( sI(8 !s "&'+ng
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
oRango B oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "=o(.'%s" 3
,?.&%n%(os la +nfo'(a*+6n d% la d+'%**+6n
oA+'$%lda B oRango-g%&Rang%!dd'%ss23
,$ons&'u+(os %l &%x&o +nfo'(a&+9o
sI(8 B "El 'ango %s&a %n la ho)a4 " : oA+'$%lda-"h%%& : $h'2133 : /
"$olu(na #n+*+o4 " : oA+'$%lda-"&a'&$olu(n : $h'2133 : /
"K+la #n+*+o4 " : oA+'$%lda-"&a'&Ro^ : $h'2133 : /
"$olu(na K+n4 " : oA+'$%lda-End$olu(n : $h'2133 : /
"K+la K+n4 " : oA+'$%lda-EndRo^
MsgBox sI(8
End "u.

>$ta e$tructura (,et@an,eAddre$$) tambi3n e$ u$ada por &ario$ m3todo$ para
manipular ran,o$ 6ue &eremo$ m;$ adelante% por lo 6ue e$ importante 6ue la ten,a$ pre$ente'
=.2. 8e3erencia a ,arios ran*os de celdas
+uando en la inter1a/ del u$uario% -acemo$ la $elecci4n de un ran,o * mantenemo$
pre$ionada la tecla +trl * -acemo$ un $e,unda $elecci4n de un ran,o * a$= $uce$i&amente%
e$tamo$ -ablando de un con2unto de ran,o$ 6ue tiene $u$ caracter=$tica$ particulare$ para $u
1F0 )'2 @e1erencia a ran,o$
control * mane2o' Para $eleccionar &ario$ ran,o$ de$de c4di,o% primero debemo$ crear el
LcontenedorM de e$to$ ran,o$% &eamo$ como'
"u. !**%so/!/Rangos123
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRangos !s ?.)%*&
A+( oRango !s ?.)%*&
A+( oA+'Rango !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
,$'%a(os %l *on&%nd%' 8a'a los 'angos
oRangos B Ih+s$o(8on%n&-*'%a&%#ns&an*%2"*o(-sun-s&a'-sh%%&-"h%%&$%llRang%s"3
,$'%a(os la %s&'u*&u'a $%llRang%!dd'%ss n%*%sa'+a
oA+'Rango B oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "!14B2" 3-g%&Rang%!dd'%ss23
,O lo ag'%ga(os al *on&%n%do' d% 'angos
oRangos-addRang%!dd'%ss2 oA+'Rango 7Kals% 3
,!GuH solo ha*%(os '%f%'%n*+a al 'ango
oRango B oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "E14E2" 3
,O lo ag'%ga(os al *on&%n%do' d% 'angos7 no&a *o(o &%n%(os Gu% usa'
,%l (S&odo g%&Rang%!dd'%ss 8a'a 8asa'l% %l a'gu(%n&o *o''%*&o
oRangos-addRang%!dd'%ss2 oRango-g%&Rang%!dd'%ss23 7Kals% 3
,!GuH ag'%ga(os un 'ango d+'%*&a(%n&% al *on&%n%do'
,&o(a %n *u%n&a Gu% s% 9an a*u(ulando
oRangos-addRang%!dd'%ss2 oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "A44E5" 3-g%&Rang%!dd'%ss23 7Kals% 3
,$o(8'o.a(os Gu% %s&>n *o''%*&os s%l%**+on>ndolos
Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-s%l%*&2oRangos3
End "u.
No te con1unda$% lo$ tre$ l=nea$ donde $e a,re,a el ran,o con el m3todo
add@an,eAddre$$() $on i,uale$% lo 6ue cambia e$ la 1orma en 6ue -acemo$ re1erencia a la
direcci4n del ran,o% $i &a$ empe/ando a pro,ramar% te recomiendo ir de$,lo$ando cada l=nea% con
el tiempo * la e:periencia% podr;$ concentrar c4di,o de 1orma m;$ natural% por a-ora% u$a toda$
la$ l=nea$ 6ue con$idere$ pertinente$ para 6ue tu c4di,o lo entienda$ con $olo &erlo'
Por $upue$to% tambi3n de e$to$ ran,o$ podemo$ obtener in1ormaci4n% por e2emplo%
lo$ nombre$ de lo$ ran,o$ 6ue contiene%
"u. !**%so/!/Rangos223
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRangos !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
,$'%a(os %l *on&%nd%' 8a'a los 'angos
oRangos B Ih+s$o(8on%n&-*'%a&%#ns&an*%2"*o(-sun-s&a'-sh%%&-"h%%&$%llRang%s"3
,!g'%ga(os los 'angos Gu% Gu%'a(os
oRangos-addRang%!dd'%ss2 oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "!14!2" 3-g%&Rang%!dd'%ss23 7Kals% 3
oRangos-addRang%!dd'%ss2 oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "B44B5" 3-g%&Rang%!dd'%ss23 7Kals% 3
oRangos-addRang%!dd'%ss2 oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "$74$8" 3-g%&Rang%!dd'%ss23 7Kals% 3
oRangos-addRang%!dd'%ss2 oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "A104A11" 3-g%&Rang%!dd'%ss23 7Kals% 3
oRangos-addRang%!dd'%ss2 oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "E134E14" 3-g%&Rang%!dd'%ss23 7Kals% 3
,Mos&'a(os las d+'%**+on%s d% los 'angos
MsgBox oRangos-g%&Rang%!dd'%ss%s!s"&'+ng23
End "u.
Aprendiendo OOo .a$ic 1F1
Nota como lo$ ran,o$ e$ una cadena lar,a de la$ direccione$ de lo$ ran,o$
$eparado$ por un L 8 M% $i lo 6uiere$ me2or pre$entable% reempla/a lo$ punto$ * coma$ por un $alto
de l=nea con el $i,uiente c4di,o'
,5o <n+*o Gu% ha*%(os %s '%%(8la;a' los f 8o' sal&os d% l+n%a
sI(8 B [o+n2 "8l+&2oRangos-g%&Rang%!dd'%ss%s!s"&'+ng237"f"37$h'21333
,Mos&'a(os %l '%sul&ado
MsgBox sI(8
#o$ ran,o$ tambi3n $e pueden remo&er de la colecci4n'
"u. !**%so/!/Rangos423
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRangos !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
,$'%a(os %l *on&%nd%' 8a'a los 'angos
oRangos B Ih+s$o(8on%n&-*'%a&%#ns&an*%2"*o(-sun-s&a'-sh%%&-"h%%&$%llRang%s"3
,!g'%ga(os los 'angos Gu% Gu%'a(os
oRangos-addRang%!dd'%ss2 oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "!14!2" 3-g%&Rang%!dd'%ss23 7Kals% 3
oRangos-addRang%!dd'%ss2 oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "B44B5" 3-g%&Rang%!dd'%ss23 7Kals% 3
oRangos-addRang%!dd'%ss2 oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "$74$8" 3-g%&Rang%!dd'%ss23 7Kals% 3
oRangos-addRang%!dd'%ss2 oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "A104A11" 3-g%&Rang%!dd'%ss23 7Kals% 3
,$o(8'o.a(os Gu% %s&Sn los 'angos
MsgBox oRangos-g%&Rang%!dd'%ss%s!s"&'+ng23
,R%(o9%(os %l 'ango d%s%ado
oRangos-'%(o9%Rang%!dd'%ss2 oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "A104A11" 3-g%&Rang%!dd'%ss23 3
,1ol9%(os a 9%'+f+*a' Gu% s% ha@a '%(o9+do
MsgBox oRangos-g%&Rang%!dd'%ss%s!s"&'+ng23
End "u.
+uidado% $i el ran,o 6ue 6uiere$ remo&er no e:i$te en la colecci4n% te dar; un error
en tiempo de e2ecuci4n% lo me2or e$ &alidar ante$ 6ue e:i$te'''
,1al+da(os Gu% %l 'ango a '%(o9%' %x+s&a %n la *ol%**+6n
#f oRangos-hasB@=a(%2"Ho)a1-A104A11"3 Ih%n
,R%(o9%(os %l 'ango d%s%ado
oRangos-'%(o9%Rang%!dd'%ss2oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "A104A11" 3-g%&Rang%!dd'%ss233
End #f
>l c4di,o anterior tiene un problema 6ue tal &e/ te pueda cau$ar un pe6ueKo
incon&eniente% cuando con$ultamo$ con -a$.*Name $i el ran,o e:i$te% ob$er&a 6ue le pa$amo$ el
nombre del ran,o como te:to (Hdo2a1'"10<"11H) * 6ue inclu*e el nombre de la -o2a donde e$ta el
ran,o% pero ob$er&a como al m3todo remo&e@an,eAddre$$% le pa$amo$ un ob2eto (odo2aActi&a)
6ue no nece$ariamente tiene 6ue corre$ponder con el nombre de -o2a (do2a1)% de tarea te 6ueda
,aranti/ar 6ue $e corre$ponde uno con el otro% e$ decir% 6ue el ob2eto 6ue apunta a la -o2a%
e1ecti&amente corre$ponda en nombre con el ran,o pa$ado'
=.2.) 8e3erencia a 3ilas y columnas
1F2 )'2 @e1erencia a ran,o$
#a$ 1ila$ * columna$ de una -o2a de calculo $i,uen $iendo ran,o$ de celda$% lo ?nico
6ue la$ caracteri/a% en 1unci4n de -acer re1erencia a ella$% e$ 6ue abarcan la totalidad de celda$
6ue contienen% como en'
"u. !**%so$olu(na123
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
,R%f%'%n*+a a la *olu(na !
oRango B oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "!14!65536" 3
,O lo s%l%**+ona(os
Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-s%l%*&2oRango3
End "u.
Nota como tomamo$ de la 1ila 1 * -a$ta la )55() 6ue e$ el n?mero total de 1ila$ con
6ue por a-ora cuentan la$ -o2a$ de calculo de +alc% $i bien el n?mero de 1ila$ cambia realmente
poco * -a$ta a-ora% $iempre -acia arriba% no e$ buena idea u$ar e$to$ &alore$% e$ me2or u$ar un
nombre * -acer re1erencia a la columna completa como &eremo$ m;$ adelante' Para acceder al
nombre de una columna pre&iamente e$tablecido% u$amo$'
"u. !**%so$olu(na223
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
,R%f%'%n*+a a la *olu(na ! Gu% s% no(.'6 8'%9+a(%n&%
oRango B oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "$la9%s" 3
,O lo s%l%**+ona(os
Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-s%l%*&2oRango3
End "u.
Podemo$ -acer lo mi$mo con la$ 1ila$'
"u. !**%soK+las123
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
,R%f%'%n*+a a la f+la 10
oRango B oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "!104!M[10" 3
,O lo s%l%**+ona(os
Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-s%l%*&2oRango3
End "u.
"u. !**%soK+las223
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
Aprendiendo OOo .a$ic 1F(
,R%f%'%n*+a a la f+la 15 Gu% s% no(.'6 8'%9+a(%n&%
oRango B oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "R%g+s&'os" 3
,O lo s%l%**+ona(os
Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-s%l%*&2oRango3
End "u.
OOo .a$ic cuenta con m3todo$ e$pec=1ico$ para manipular 1ila$ * columna$% pero
propiamente -ablando% al acceder por medio de e$to$ m3todo$% de2an de $er ran,o$ de celda$ *
pa$an a $er ob2eto$ ScTable@o7$Ob2 * ScTable+olumn$Ob2 re$pecti&amente como lo
demo$tramo$ a continuaci4n'
"u. !**%so$olu(na323
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
,R%f%'%n*+a al 'ango !14E1
oRango B oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "!14E1" 3
,Mos&'a(os %l &+8o d% o.)%&o
MsgBox oRango-g%&#(8l%(%n&a&+on=a(%23
,R%no(.'a(os %l o.)%&o oRango a**%d+%ndo a sus *olu(nas
oRango B oRango-g%&$olu(ns23
,1%'+f+*a(os %l &+8o d% o.)%&o
MsgBox oRango-g%&#(8l%(%n&a&+on=a(%23
End "u.
Trata de $eleccionar el ran,o tal * como 6ueda al 1inal del c4di,o * &era$ 6ue te da
un error% tambi3n% trata de acceder a la in1ormaci4n de depuraci4n como $e &io en cap=tulo$
anteriore$ * nota como implementan m3todo$ * propiedade$ di1erente$' >$ el mi$mo ca$o para la$
1ila$'
"u. !**%soK+las323
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
,R%f%'%n*+a al 'ango !14!10
oRango B oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "!14!10" 3
,Mos&'a(os %l &+8o d% o.)%&o
MsgBox oRango-g%&#(8l%(%n&a&+on=a(%23
,R%no(.'a(os %l o.)%&o oRango a**%d+%ndo a sus f+las
oRango B oRango-g%&Ro^s23
,1%'+f+*a(os %l &+8o d% o.)%&o
MsgBox oRango-g%&#(8l%(%n&a&+on=a(%23
End "u.
Por lo anterior% la recomendaci4n e$ 6ue manten,a$ tu re1erencia ori,inal al ran,o *
u$e$ una $e,unda &ariable $i nece$ita$ acceder a la$ 1ila$ o columna$ completa$ como te mue$tro
en el $i,uiente e2emplo'
"u. !**%soK+las$olu(nas123
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango !s ?.)%*&
1FE )'2 @e1erencia a ran,o$
A+( oK+l !s ?.)%*&
A+( o$ol !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
,R%f%'%n*+a al 'ango $54E10
oRango B oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "$54E10" 3
,Mos&'a(os %l &+8o d% o.)%&o
MsgBox oRango-g%&#(8l%(%n&a&+on=a(%23
,$'%a(os una nu%9a '%f%'%n*+a a las f+las @ *olu(nas
o$ol B oRango-g%&$olu(ns23
oK+l B oRango-g%&Ro^s23
,1%'+f+*a(os %l &+8o d% o.)%&o
MsgBox o$ol-g%&#(8l%(%n&a&+on=a(%23 : " T " : oK+l-g%&#(8l%(%n&a&+on=a(%23
End "u.
#o$ m3todo$ ,et+olumn$ * ,et@o7$% $iempre (aun6ue en el ran,o e:i$ta $olo una
1ila o columna) te de&ol&er; un con2unto de +olumna$ * !ila$% para poder tener acce$o a lo$
m3todo$ * propiedade$ di$ponible$ en lo$ ran,o$% a$= como para poder -acer $eleccione$%
tenemo$ 6ue acceder a cada 1ila o columna de 1orma indi&idual o con$truir un contenedor de
ran,o$ para acceder a &aria$ 1ila$ o columna$% &eamo$ lo$ do$ ca$o$'
Para $eleccionar la primer columna del ran,o'
"u. !**%soK+las$olu(nas223
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango !s ?.)%*&
A+( o$ol !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
,R%f%'%n*+a al 'ango $54E10
oRango B oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "$54E10" 3
,$'%a(os una nu%9a '%f%'%n*+a a la 8'+(%' *olu(na d%l 'ango la $
o$ol B oRango-g%&$olu(ns-g%&B@#nd%x203
,O lo s%l%**+ona(os
Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-s%l%*&2o$ol3
End "u.
Para $eleccionar la primer 1ila del ran,o'
"u. !**%soK+las$olu(nas323
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango !s ?.)%*&
A+( oK+l !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
,R%f%'%n*+a al 'ango $54E10
oRango B oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "$54E10" 3
,$'%a(os una nu%9a '%f%'%n*+a a la s%gunda f+la d%l 'ango la 6
oK+l B oRango-g%&Ro^s-g%&B@#nd%x213
,O lo s%l%**+ona(os
Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-s%l%*&2oK+l3

End "u.
Aprendiendo OOo .a$ic 1F5
Por $upue$to% podemo$ $eleccionar una 1ila * una columna al mi$mo tiempo'
"u. !**%soK+las$olu(nas423
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRangos !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
,$'%a(os %l *on&%nd%' 8a'a los 'angos
oRangos B Ih+s$o(8on%n&-*'%a&%#ns&an*%2"*o(-sun-s&a'-sh%%&-"h%%&$%llRang%s"3
,!g'%ga(os la *olu(na E @ la f+la 10 al *on&%n%do'
oRangos-addRang%!dd'%ss2 oHo)a!*&+9a-g%&$olu(ns23-g%&B@#nd%x243-g%&Rang%!dd'%ss237Kals% 3
oRangos-addRang%!dd'%ss2 oHo)a!*&+9a-g%&Ro^s23-g%&B@#nd%x293-g%&Rang%!dd'%ss237Kals% 3
,$o(8'o.a(os Gu% %s&>n *o''%*&os s%l%**+on>ndolos
Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-s%l%*&2oRangos3
End "u.
+omo *a nota$te% podemo$ acceder directamente a la 1ila o columna 6ue 6ueramo$
de cual6uier -o2a por medio de la colecci4n de e$ta$ (,et+olumn$ * ,et@o7$) * por medio del
=ndice (,et.*9nde:) a la 1ila o columna de$eada'
oHo)a!*&+9a-g%&$olu(ns-g%&B@#nd%x243 ,$olu(na E
oHo)a!*&+9a-g%&Ro^s-g%&B@#nd%x293 ,K+la 10
Para $eleccionar toda$ la$ columna$ o 1ila$ del ran,o indicado% u$amo$'
"u. !**%soK+las$olu(nas523
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango !s ?.)%*&
A+( oRangos !s ?.)%*&
A+( o$ol !s ?.)%*&
A+( *o1 !s 5ong
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
,R%f%'%n*+a al 'ango !24!8
oRango B oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "!24E8" 3
,$on&%n%do' d% 'angos
oRangos B Ih+s$o(8on%n&-*'%a&%#ns&an*%2"*o(-sun-s&a'-sh%%&-"h%%&$%llRang%s"3
Ko' *o1 B 0 Io oRango-g%&$olu(ns-g%&$oun&23 T 1
,$'%a(os una nu%9a '%f%'%n*+a a *ada *olu(na
o$ol B oRango-g%&$olu(ns-g%&B@#nd%x2*o13
,5a ag'%ga(os al *on&%n%do' d% 'angos
oRangos-addRang%!dd'%ss2 o$ol-g%&Rang%!dd'%ss237Kals% 3
=%x&
,O lo s%l%**+ona(os
Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-s%l%*&2 oRangos 3
End "u.
+on un poco de in,enio% puede$ -acerte tu$ propia$ 1uncione$ 6ue te de&uel&an 1ila$
o columna$ entera$% pero e$a e$ tu tarea'
1F) )'2 @e1erencia a ran,o$
Por a-ora -emo$ &i$to como -acer re1erencia a di1erente$ tipo$ de ran,o$% en
cap=tulo$ po$teriore$% &eremo$ como manipular e$to$ ran,o$% mo&er% in$ertar% copiar% etc'% para
terminar e$te tema de -acer re1erencia a ran,o$% &eamo$ uno mu* importante% la $elecci4n actual'
=.2.! 8e3erencia a la seleccin actual
Traba2ar con la $elecci4n actual% e$ decir% con lo 6ue el u$uario ten,a $eleccionado al
momento de llamar a una macro% e$ una acti&idad mu* com?n * tambi3n% mu* propen$a a errore$
(*a $abe$ como $on lo$ u$uario$)% trataremo$ de mantener el control de la $elecci4n% $iempre 6ue
$ea po$ible'
Para acceder a la $elecci4n actual dentro de nue$tra -o2a de calculo u$amo$ el
m3todo ,et+urrentSelection() de la $i,uiente manera'
"u. "%l%**+on!*&ual123
A+( o"%l !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
MsgBox o"%l-g%&#(8l%(%n&a&+on=a(%23
End "u.
Pero cuidado% nue$tra $elecci4n pueden $er muc-a$ co$a$% &uel&e a e2ecutar la
macro anterior teniendo cada &e/ $eleccionado lo$ $i,uiente$ elemento$<
1' Una celda
2' Un ran,o de celda$
(' 5ario$ ran,o$ de celda$
E' Un ob2eto de dibu2o
"ebe$ de obtener% $i lo -ici$te en el mi$mo orden 6ue *o% la $i,uiente li$ta de
men$a2e$<
1' Sc+ellOb2
2' Sc+ell@an,eOb2
(' Sc+ell@an,e$Ob2
E' com'$un'$tar'dra7in,'S&:S-ape+ollection
Ob$er&a la di1erencia entre una $ola celda (1) * un ran,o (2 * ()% * nota tambi3n la
di1erencia en un ran,o (2) * &ario$ (()% e$to e$ mu* importante para actuar en con$ecuencia por
6ue $on ob2eto$ di1erente$ * por lo tanto implementan m3todo$ * propiedade$ di1erente$% por
e2emplo% &amo$ a tratar de &er el contenido de una celda% e2ecuta la macro $i,uiente% teniendo
$eleccionado cada uno de lo$ tre$ primero$ ran,o$ mencionado$'
"u. "%l%**+on!*&ual223
A+( o"%l !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
Aprendiendo OOo .a$ic 1F7
MsgBox o"%l-g%&"&'+ng23
End "u.
Si $elecciona$te una $ola celda * e$ta conten=a al,o% la macro anterior te tiene 6ue
mo$trar e$e contenido% en la$ do$ $i,uiente$ $eleccione$% de un ran,o * &ario$ ran,o$% te tu&o 6ue
-aber dado el error LPropiedad o m3todo no encontradoM% por 6ue e1ecti&amente% el m3todo
,etStrin,() $olo e$ta implementado en celda$ indi&iduale$% por ello e$ mu* importante di$criminar
la $elecci4n 6ue -a*a -ec-o el u$uario% primer intento'
"u. "%l%**+on!*&ual323
A+( o"%l !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
"%l%*& $as% o"%l-g%&#(8l%(%n&a&+on=a(%23
$as% ""*$%ll?.)"
MsgBox "Mu@ .+%n s%l%**+onas&% solo una *%lda"
$as% ""*$%llRang%?.)"
MsgBox "I% 8asas&% un 8o*o"
$as% ""*$%llRang%s?.)"
MsgBox "=o &+%n%s '%(%d+o"
$as% Els%
MsgBox "=o s% n+ Gu% s%l%**+onas&%"
End "%l%*&
End "u.
A-ora *a $abemo$ 6ue e$ lo 6ue el u$uario $elecciono% pero depender; de 6ue
6ueramo$ -acer con la $elecci4n para actuar en con$ecuencia% por e2emplo% $upon,amo$ 6ue
nue$tra macro re6uiere 6ue el u$uario $eleccione una * $olo una celda% podemo$ $olo in1ormarle
como en el $i,uiente e2emplo'
"u. "%l%**+on!*&ual423
A+( o"%l !s ?.)%*&
A+( o$%lda !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
"%l%*& $as% o"%l-g%&#(8l%(%n&a&+on=a(%23
$as% ""*$%ll?.)"
o$%lda B o"%l
MsgBox o$%lda-g%&"&'+ng23
$as% Els%
MsgBox ""% '%Gu+%'% s%l%**+ona' solo D=! *%lda"
End "%l%*&
End "u.
O podemo$ tomar $olo la primer celda del ran,o o de lo$ ran,o$ 6ue -a*a
$eleccionado como en'
"u. "%l%**+on!*&ual523
A+( o"%l !s ?.)%*&
A+( o$%lda !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
"%l%*& $as% o"%l-g%&#(8l%(%n&a&+on=a(%23
1FF )'2 @e1erencia a ran,o$
$as% ""*$%ll?.)"
o$%lda B o"%l
$as% ""*$%llRang%?.)"
,"+ %s un solo 'ango7 a**%d%(os a la 8'+(%' *%lda
o$%lda B o"%l-g%&$%llB@0os+&+on2 070 3
$as% ""*$%llRang%s?.)"
,"+ son 9a'+os 'angos7 8'+(%'o a**%d%(os al 8'+(%' 'ango
,*on g%&B@#nd%x203 @ d%s8u%s a la 8'+(%' *%lda
o$%lda B o"%l-g%&B@#nd%x203-g%&$%llB@0os+&+on2 070 3
$as% Els%
MsgBox ""% '%Gu+%'% s%l%**+ona' una *%lda"
End "%l%*&
#f =o& #s=ull2o$%lda3 Ih%n
MsgBox o$%lda-g%&"&'+ng23
End #f
End "u.
Nota 6ue aun tenemo$ 6ue e&aluar 6ue o+elda% apunte a un ran,o &;lido% recuerda
6ue en la inter1a/ del u$uario% puede -aber m;$ elemento$ $eleccionable$% como recomendaci4n
mal3&ola% nunca con1=e$ en el u$uario% $iempre &;lida $u$ dato$' >$ importante 6ue recuerde$ 6ue
en el ca$o de un ran,o% la primer celda $iempre $er; la $uperior i/6uierda% * en un ,rupo de
ran,o$% el ran,o 0 tambi3n $iempre $er; el 6ue e$te m;$ arriba * a la i/6uierda% no importa $i 1ue
el ultimo ran,o en $er $eleccionado' Tambi3n% recuerda 6ue la po$ici4n 0%0 en relaci4n con la -o2a
$iempre $e re1iere a la celda A1% pero en relaci4n al ran,o $eleccionado% puede $er cual6uier otra'
>n al,uno$ ca$o$% tal &e/ $ea &alido cual6uiera de lo$ tre$ tipo$ de ran,o$% e$ decir%
6ue el m3todo a u$ar e$ta implementado en lo$ tre$% por e2emplo'
"u. "%l%**+on!*&ual623
A+( o"%l !s ?.)%*&
A+( oRango !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
"%l%*& $as% o"%l-g%&#(8l%(%n&a&+on=a(%23
$as% ""*$%ll?.)"7 ""*$%llRang%?.)"7 ""*$%llRang%s?.)"
oRango B o"%l
$as% Els%
MsgBox ""% '%Gu+%'% s%l%**+ona' un 'ango"
End "%l%*&
#f =o& #s=ull2oRango3 Ih%n
,Bo''a(os %l *on&%n+do d% las *%ldas
oRango-*l%a'$on&%n&s2313
End #f
End "u.
>l m3todo clear+ontent$% e$ta implementado en lo$ tre$ tipo$ de ran,o$% por ello
podemo$ llamarlo $in problema$% m;$ adelante &eremo$ a detalle e$te m3todo'
#o 6ue -e 6uerido ilu$trarte% e$ 6ue% dependiendo de tu$ nece$idade$% tiene$ 6ue
di$criminar una u otra co$a% pero $iempre% * di$culpa la necedad% $iempre &;lida lo$ dato$'
Aprendiendo OOo .a$ic 1FG
=.2.= %bteniendo in3ormacin de ran*os
>n di&er$a$ oca$ione$% e$ nece$ario $aber donde e$tamo$ ubicado$% e$ decir% en
6ue -o2a% 1ila * columna% lo$ ran,o$ cuenta$ con m3todo$ * e$tructura$ con e$ta in1ormaci4n%
al,una$ de ella$ *a la$ -emo$ u$ado% tambi3n% muc-o$ m3todo$ de manipulaci4n de ran,o$%
re6uieren $e le$ pa$en la$ e$tructura$ correcta$ de la direcci4n de lo$ ran,o$% por ello e$
importante $aber cuale$ $on * como e$t;n e$tructurada$% &eamo$ cuale$ $on'
"u. #nfoRangos123
A+( o"%l !s ?.)%*&
A+( oA+' !s ?.)%*&
A+( sI(8 !s "&'+ng
A+( *o1 !s #n&%g%'
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
"%l%*& $as% o"%l-g%&#(8l%(%n&a&+on=a(%23
$as% ""*$%ll?.)"
,?.&%n%(os la d+'%**+6n d% la *%lda
oA+' B o"%l-g%&$%ll!dd'%ss23
,Mos&'a(os sus da&os7 o.s%'9a *o(o ha*%(os uso d%l Hnd+*% d% la ho)a
,oA+'-"h%%& 8a'a o.&%n%' %l no(.'% d% la ho)a
MsgBox "Ho)a4 " : Ih+s$o(8on%n&-g%&"h%%&s23-g%&B@#nd%x2oA+'-"h%%&3-g%&=a(%23 : $h'2133
: "$olu(na4 " : oA+'-$olu(n : $h'2133 : "K+la4 " : oA+'-Ro^
$as% ""*$%llRang%?.)"
,"+ %s un solo 'ango7 o.&%n%(os sus da&os
oA+' B o"%l-g%&Rang%!dd'%ss23
,$ons&'u+(os %l &%x&o +nfo'(a&+9o
sI(8 B "El 'ango %s&a %n la ho)a4 " : oA+'-"h%%& : $h'2133 : /
"$olu(na #n+*+o4 " : oA+'-"&a'&$olu(n : $h'2133 : /
"K+la #n+*+o4 " : oA+'-"&a'&Ro^ : $h'2133 : /
"$olu(na K+n4 " : oA+'-End$olu(n : $h'2133 : /
"K+la K+n4 " : oA+'-EndRo^
MsgBox sI(8
$as% ""*$%llRang%s?.)"
,"+ son 9a'+os 'angos7 8od%(os o.&%n%' los da&os d% *ada 'ango
Ko' *o1 B 0 Io o"%l-g%&$oun&23T1
oA+' B o"%l-g%&B@#nd%x2*o13-g%&Rang%!dd'%ss23
sI(8 B "El 'ango " : *o1 : " %s&a %n la ho)a4 " : oA+'-"h%%& : $h'2133 : /
"$olu(na #n+*+o4 " : oA+'-"&a'&$olu(n : $h'2133 : /
"K+la #n+*+o4 " : oA+'-"&a'&Ro^ : $h'2133 : /
"$olu(na K+n4 " : oA+'-End$olu(n : $h'2133 : /
"K+la K+n4 " : oA+'-EndRo^
MsgBox sI(8
=%x&
,? 8od%(os a**%d%' a las d+'%**+on%s d% &odos los 'angos
sI(8 B [o+n2 "8l+&2o"%l-g%&Rang%!dd'%ss%s!s"&'+ng237"f"37$h'21333
,Mos&'a(os %l '%sul&ado
MsgBox sI(8
$as% Els%
MsgBox ""% '%Gu+%'% s%l%**+ona' un 'ango d% *%ldas"
End "%l%*&
End "u.
Ob$er&a 6ue $i e$ una $ola celda $e tiene 6ue u$ar ,et+ellAddre$$ 6ue obtiene< la
-o2a donde e$ta la celda% la columna * 1ila% no $e te ol&ide 6ue todo empie/a en 0% cuando e$ un
ran,o de celda$ $e u$a ,et@an,eAddre$$% 6ue contiene% la -o2a por =ndice donde e$ta el ran,o% la
columna * 1ila donde empie/a * la columna * 1ila donde termina% reitero% todo de$de 0' Ob$er&a
como en el ca$o de &ario$ ran,o$% podemo$ acceder a cada uno% pero e$to$ $i cuentan con una
1G0 )'2 @e1erencia a ran,o$
propiedad de te:to (,et@an,eAddre$$e$A$Strin,) 6ue directamente no$ de&uel&e la$ direccione$
de lo$ ran,o$ en un 1ormato claro para Lca$iM por cual6uier u$uario% por e2emplo L"ato$'A2<>5M' No
-e encontrado% de$cono/co $i e:i$te% una propiedad o m3todo $imilar para lo$ ca$o$ de una celda
* un ran,o% pero podemo$ crearno$ nue$tra propia 1unci4n 6ue lo -a,a por no$otro$'
"u. #nfoRangos223
A+( o"%l !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
,Dsa(os nu%s&'a fun*+6n 8%'sonal+;ada
MsgBox A+'%**+onRango2o"%l3
End "u.
,Pu% l+nda Gu%do %s&a fun*+6n
Kun*&+on A+'%**+onRango2Rango !s ?.)%*&3 !s "&'+ng
A+( o"K! !s ?.)%*&
A+( oA+' !s ?.)%*&
A+( (Aa&os
,=os a8o@a(os %n la fun*+on d% $al* A#RE$$#?= 2!AARE""3
o"K! B *'%a&%Dno"%'9+*%2 "*o(-sun-s&a'-sh%%&-Kun*&+on!**%ss" 3
,1al+da(os %l &+8o d% 'ango 8asado
"%l%*& $as% Rango-g%&#(8l%(%n&a&+on=a(%23
$as% ""*$%ll?.)"
,"+ %s una sola *%lda usa(os g%&$%ll!dd'%ss
oA+' B Rango-g%&$%ll!dd'%ss
,$ons&'u+(os la (a&'+; d% da&os 8a'a la fun*+6n
(Aa&os B !''a@2 oA+'-Ro^C17 oA+'-$olu(nC174717Rango-g%&"8'%adsh%%&-g%&=a(%23 3
A+'%**+onRango B o"K!-*allKun*&+on2"!AARE"""7(Aa&os233
$as% ""*$%llRang%?.)"
,"+ %s un 'ango d% *%ldas usa(os g%&Rang%!dd'%ss
oA+' B Rango-g%&Rang%!dd'%ss23
,?.&%n%(os la *%lda su8%'+o' +;Gu+%'da d%l 'ango
(Aa&os B!''a@2oA+'-"&a'&Ro^C17oA+'-"&a'&$olu(nC174717Rango-g%&"8'%adsh%%&-g%&=a(%233
A+'%**+onRango B o"K!-*allKun*&+on2"!AARE"""7(Aa&os233 : "4"
,!ho'a la *%lda +nf%'+o' d%'%*ha d%l 'ango
(Aa&os B !''a@2 oA+'-EndRo^C17 oA+'-End$olu(nC17 4 3
A+'%**+onRango B A+'%**+onRango : o"K!-*allKun*&+on2"!AARE"""7(Aa&os233
$as% ""*$%llRang%s?.)"
,Es&a @a la 9+(os
A+'%**+onRango B [o+n2 "8l+&2Rango-g%&Rang%!dd'%ss%s!s"&'+ng237"f"37$h'21333
End "%l%*&
End Kun*&+on
#a 1unci4n "9@>++9ON (A//R&SS) de +alc% no$ de&uel&e en 1ormato de te:to% la
re1erencia a la celda% indic;ndole la 1ila% columna% $i 6ueremo$ la re1erencia ab$oluta o relati&a * la
-o2a% $i u$amo$ la$ 1uncione$ de +alc de$de OOo .a$ic% el nombre de e$ta$ tenemo$ 6ue
indicarla$ en in,le$ * pa$arle lo$ ar,umento$ de la 1unci4n en 1orma de matri/ de dato$% e$ mu*
importante pa$arle% m=nimo% lo$ ar,umento$ re6uerido$ * e$to$% deben e$tar en el 1ormato ($trin,%
inte,er% etc') 6ue Le$peraM la 1unci4n% $ino% tal * como $ucede en la -o2a de calculo% la 1unci4n te
retornara un error' M;$ adelante &eremo$ un poco m;$ detallado el u$o de 1uncione$ incorporada$
de la -o2a de calculo% directamente en nue$tra$ macro$'
Una $e,unda &er$i4n de e$ta 1unci4n% puede $er la $i,uiente% nota 6ue no -acemo$
u$o de nin,una 1unci4n de -o2a de calculo% $ino 6ue obtenemo$ lo$ dato$ $olo con propiedade$
del ran,o% puede$ u$ar indi$tintamente cual6uiera de la$ do$'
Aprendiendo OOo .a$ic 1G1
Kun*&+on A+'%**+onRango22Rango !s ?.)%*&3 !s "&'+ng
A+( sI(8 !s "&'+ng
"%l%*& $as% Rango-g%&#(8l%(%n&a&+on=a(%23
$as% ""*$%ll?.)"
sI(8 B Rango-g%&"8'%adsh%%&-g%&=a(%23 : "-" : /
Rango-g%&$olu(ns23-g%&B@#nd%x203-g%&=a(%23 : /
Rango-g%&$%ll!dd'%ss-Ro^ C 1
$as% ""*$%llRang%?.)"
sI(8 B Rango-g%&"8'%adsh%%&-g%&=a(%23 : "-" : /
Rango-g%&$olu(ns23-g%&B@#nd%x203-g%&=a(%23 : /
Rango-g%&Rang%!dd'%ss-"&a'&Ro^ C 1 : "4" : /
Rango-g%&$olu(ns23-g%&B@#nd%x2Rango-g%&$olu(ns23-g%&$oun&23T13-g%&=a(%23 : /
Rango-g%&Rang%!dd'%ss-EndRo^ C 1
$as% ""*$%llRang%s?.)"
sI(8 B [o+n2 "8l+&2Rango-g%&Rang%!dd'%ss%s!s"&'+ng237"f"37$h'2133 3
End "%l%*&
A+'%**+onRango2 B sI(8
End Kun*&+on
Por ultimo% podemo$ $aber el n?mero de 1ila$ * columna$ 6ue tiene un ran,o u$ando
lo$ m3todo$ ,et@o7$ * ,et+olumn$ re$pecti&amente% e$to$ m3todo$ $olo e$t;n di$ponible$
cuando el ran,o e$ una $ola celda * un ran,o% cuando $on &ario$ ran,o$ tiene$ 6ue in,eniartele$
6ue no e$ complicado'
"u. #nfoRangos323
A+( o"%l !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
"%l%*& $as% o"%l-g%&#(8l%(%n&a&+on=a(%23
$as% ""*$%ll?.)"7""*$%llRang%?.)"
MsgBox "K+las B " : o"%l-g%&Ro^s23-g%&$oun&23 : $h'2133 : /
"$olu(nas B " : o"%l-g%&$olu(ns23-g%&$oun&23
End "%l%*&
End "u.
#o$ ran,o$% tambi3n% cuentan con una propiedad 6ue no$ de&uel&e la direcci4n del
ran,o $eleccionado% $e llama Ab$oluteName * el re$ultado como $u nombre lo indica e$ con la$
re1erencia$ ab$oluta$'
"u. #nfoRangos423
A+( o"%l !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
MsgBox o"%l-!.solu&%=a(%
End "u.
=.2.A 5rabajando con Cursores
1G2 )'2 @e1erencia a ran,o$
Un cur$or% e$ un ob2eto 6ue no$ permite mo&erno$ por la -o2a entera o dentro de un
ran,o e$peci1icado $in a1ectar o modi1icar al ran,o a partir del cual $e crea' #o m;$ u$ual e$
crearlo a partir de un ran,o para de$pla/ar$e dentro de el% pero adem;$ tiene m3todo$ mu* ?tile$
para e:pandir por e2emplo a la re,i4n actual% 6ue como $abe$% e$ el ran,o de celda$ Lcon dato$M
delimitado por 1ila$ * columna$ en blanco% la re,i4n actual e$ un concepto $umamente% ?til *
podero$o cuando $e pro,rama% por ello le daremo$ un poco de 3n1a$i$% $upon,amo$ la $i,uiente
tabla de dato$'
Ob$er&a 6ue el cur$or e$ta en la celda "F * 6ue la re,i4n actual de e$te ran,o de
dato$ e$ .2<!11% a-ora% e2ecuta la $i,uiente macro donde obli,amo$ al u$uario a $eleccionar $olo
una celda% lo cual $abe$% no nece$ariamente e$ a$= * $olo e$ para 1ine$ did;ctico$% nota 6ue
u$aremo$ una 1unci4n creada en tema anterior 6ue $e llama "ireccion@an,o% pero mu*
importante% cuando le pa$emo$ como ar,umento una celda% e$ta traba2ara bien% pero cuando
intentemo$ pa$arle un cur$or% al $er un ob2eto di1erente% te de&ol&er; una cadena &ac=a% para
$olucionar e$to% tenemo$ 6ue a,re,ar el tipo de ob2eto HSc+ell+ur$orOb2H% bu$ca * corri,e la
$i,uiente l=nea en dic-a 1unci4n per$onali/ada'
$as% ""*$%llRang%?.)"7 ""*$%ll$u'so'?.)"
Ob$er&a 6ue a-ora e&aluara $i e$ un ran,o de celda$ o un cur$or% a-ora $i% e2ecuta
la $i,uiente macro'
"u. $u'so'%s123
A+( o"%l !s ?.)%*&
A+( o$u'so' !s ?.)%*&
,0a'&+(os d% la s%l%**+6n
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
,"olo s+ %s una sola *%lda
#f o"%l-g%&#(8l%(%n&a&+on=a(%23 B ""*$%ll?.)" Ih%n
,Mos&'a(os la d+'%**+on d% la *%lda s%l%**+onada
MsgBox A+'%**+onRango2 o"%l 3
,$'%a(os un *u'so' a 8a'&+' d% %s&a *%lda
o$u'so' B o"%l-g%&"8'%ad"h%%&23-*'%a&%$u'so'B@Rang%2 o"%l 3
,1%'+f+*a(os Gu% a8un&%n a la (+s(a *%lda
MsgBox A+'%**+onRango2 o$u'so' 3
,=os (o9%(os al +n+*+o d% la '%g+on a*&ual
o$u'so'-go&o"&a'&23
MsgBox A+'%**+onRango2 o$u'so' 3
,=os (o9%(os al f+nal
o$u'so'-go&oEnd23
MsgBox A+'%**+onRango2 o$u'so' 3
Aprendiendo OOo .a$ic 1G(
,Ex8and+(os %l *u'so' a &oda la '%g+6n a*&ual
o$u'so'-*olla8s%Io$u''%n&R%g+on23
MsgBox A+'%**+onRango2 o$u'so' 3
,Mos&'a(os d% nu%9o la d+'%**+6n d% la *%lda s%l%**+onada
,o.s%'9a Gu% %s&a no s% a (o9+do
MsgBox A+'%**+onRango2 o"%l 3
Els%
MsgBox ""%l%**+ona solo una *%lda"
End #f
End "u.
#o$ cur$ore$% al compartir la ma*or=a de lo$ $er&icio$ de la$ celda$ * lo$ ran,o$%
-eredan la ma*or=a de $u$ m3todo$ * propiedade$% pero $u$ m3todo$ particulare$ $on lo 6ue lo$
-acen e$peciale$ e intere$ante$' Una pre,unta recurrente en la$ li$ta$ de correo% e$ Icomo
encuentro la $i,uiente 1ila libreJ% con un cur$or% e$to e$ mu* $encillo'
"u. $u'so'%s223
A+( o"%l !s ?.)%*&
A+( o$u'so' !s ?.)%*&
,0a'&+(os d% la s%l%**+6n
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
,"olo s+ %s una sola *%lda
#f o"%l-g%&#(8l%(%n&a&+on=a(%23 B ""*$%ll?.)" Ih%n
,$'%a(os un *u'so' a 8a'&+' d% %s&a *%lda
o$u'so' B o"%l-g%&"8'%ad"h%%&23-*'%a&%$u'so'B@Rang%2 o"%l 3
,=os (o9%(os al f+nal
o$u'so'-go&oEnd23
,5a s+gu+%n&% f+la l+.'%7 s%'a %s&a f+la (as 1
MsgBox o$u'so'-g%&Rang%!dd'%ss23-EndRo^ C 1
Els%
MsgBox ""%l%**+ona solo una *%lda"
End #f
End "u.
Por $upue$to% al,o mu* practico e$ tener una 1unci4n per$onali/ada 6ue no$
encuentre la $i,uiente 1ila libre% al,o como'
Kun*&+on K+la5+.'%2 Rango !s ?.)%*&3 !s 5ong
A+( o$u'so' !s ?.)%*&
o$u'so' B Rango-g%&"8'%ad"h%%&-*'%a&%$u'so'B@Rang%2 Rango 3
o$u'so'-go&oEnd23
K+la5+.'% B o$u'so'-g%&Rang%!dd'%ss-EndRo^ C 1
End Kun*&+on
O 6ue u$amo$ de una 1orma mu* $encilla'
"u. $u'so'%s323
A+( o"%l !s ?.)%*&
A+( o$u'so' !s ?.)%*&
,0a'&+(os d% la s%l%**+6n
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
,"olo fun*+ona *on *%ldas +nd+9+dual%s o 'angos d% *%ldas
1GE )'2 @e1erencia a ran,o$
"%l%*& $as% o"%l-g%&#(8l%(%n&a&+on=a(%23
$as% ""*$%ll?.)"7 ""*$%llRang%?.)"
MsgBox "5a s+gu+%n&% f+la l+.'% %s la4 " : K+la5+.'%2 o"%l 3
End "%l%*&
End "u.
Otro$ m3todo$ con 6ue cuentan lo$ cur$ore$ $on'
"u. $u'so'%s423
A+( o"%l !s ?.)%*&
A+( o$u'so' !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
#f o"%l-g%&#(8l%(%n&a&+on=a(%23 B ""*$%ll?.)" Ih%n
o$u'so' B o"%l-g%&"8'%ad"h%%&23-*'%a&%$u'so'B@Rang%2 o"%l 3
,=os (o9%(os a la s+gu+%n&% *%lda
o$u'so'-go&o=%x&23
MsgBox A+'%**+onRango2 o$u'so' 3
,=os (o9%(os a la *%lda an&%'+o'
o$u'so'-go&o0'%9+ous23
MsgBox A+'%**+onRango2 o$u'so' 3
,=os (o9%(os dos *olu(nas a la d%'%*ha @ &'%s f+las a.a)o
o$u'so'-go&o?ffs%&22733
MsgBox A+'%**+onRango2 o$u'so' 3
Els%
MsgBox ""%l%**+ona solo una *%lda"
End #f
End "u.
>$to$ m3todo$ -a* 6ue u$arlo$ con cuidado% pue$ puede$ L$alirteM del ran,o donde
e$ta$ traba2ando * *a no podr;$ mo&erte con otro$ m3todo$ como ,otoStart o ,oto>nd% por
e2emplo% $i te mue&e$ al 1inal de un ran,o (,oto>nd) * de$pu3$ te de$pla/a$ con ,otoO11$et((%()% o
$ea tre$ columna$ a la derec-a * tre$ 1ila$ aba2o% te $aldr;$ del ran,o * *a no podr;$ re,re$ar al
inicio (,otoStart) como lo demo$tramo$ en el $i,uiente e2emplo% u$a e$to$ m3todo$ con
precauci4n'
"u. $u'so'%s523
A+( o"%l !s ?.)%*&
A+( o$u'so' !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
#f o"%l-g%&#(8l%(%n&a&+on=a(%23 B ""*$%ll?.)" Ih%n
o$u'so' B o"%l-g%&"8'%ad"h%%&23-*'%a&%$u'so'B@Rang%2 o"%l 3
o$u'so'-go&o"&a'&23
,Io(a no&a d% %s&a d+'%**+6n
MsgBox A+'%**+onRango2 o$u'so' 3
o$u'so'-go&oEnd23
MsgBox A+'%**+onRango2 o$u'so' 3
,=os (o9%(os &'%s *olu(nas a la d%'%*ha @ &'%s f+las a.a)o
o$u'so'-go&o?ffs%&23733
MsgBox A+'%**+onRango2 o$u'so' 3
Aprendiendo OOo .a$ic 1G5
,#n&%n&a(os '%g'%sa' al +n+*+o7 no&a *o(o =? %s la
,(+s(a d% la 8'+(%' l+n%a
o$u'so'-go&o"&a'&23
MsgBox A+'%**+onRango2 o$u'so' 3
Els%
MsgBox ""%l%**+ona solo una *%lda"
End #f
End "u.
Ob$er&a atentamente la $i,uiente ima,en% nota en la barra de 1ormula$ 6ue la
1ormula mo$trada e$ta encerrada en una$ lla&e$% como $abe$% e$ta$ lla&e$ no$ indican 6ue dic-a
1ormula 1orma parte de una 1ormula matricial% como no e$ el tema de e$te libro la$ 1ormula$
matriciale$ no entraremo$ en detalle al,uno% pero como $abe$% e$ta$ $e introducen con la
combinaci4n de tecla$ +T@#RSd9!TR>NT>@ * 6ue *a creada% no puede$ modi1icar $olo una
celda de dic-a$ matrice$% $ino tiene$ 6ue -acerlo con toda la matri/'
+on un cur$or% podemo$ $aber cual e$ el ran,o de una 1ormula matricial% como lo
demo$tramo$ en el $i,uiente e2emplo% probado en lo$ dato$ mo$trado$ en la ima,en anterior'
"u. $u'so'%s623
A+( o"%l !s ?.)%*&
A+( o$u'so' !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
#f o"%l-g%&#(8l%(%n&a&+on=a(%23 B ""*$%ll?.)" Ih%n
o$u'so' B o"%l-g%&"8'%ad"h%%&-*'%a&%$u'so'B@Rang%2 o"%l 3
,Ex8and+(os %l *u'so' a la (a&'+; a*&ual
o$u'so'-*olla8s%Io$u''%n&!''a@23
MsgBox A+'%**+onRango2 o$u'so' 3
Els%
MsgBox ""%l%**+ona solo una *%lda"
End #f
End "u.
>n la $i,uiente ima,en% ob$er&a la$ celda$ combinada$% cuando e$tablecemo$ el
cur$or en celda$ combinada$ * tratamo$ de obtener dic-a direcci4n% $olo te de&ol&er; la celda
$uperior i/6uierda de dic-o ran,o% pero con un cur$or podemo$ $aber el ran,o completo de e$ta$
celda$ combinada$'
1G) )'2 @e1erencia a ran,o$
"u. $u'so'%s723
A+( o"%l !s ?.)%*&
A+( o$u'so' !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
#f o"%l-g%&#(8l%(%n&a&+on=a(%23 B ""*$%ll?.)" Ih%n
o$u'so' B o"%l-g%&"8'%ad"h%%&23-*'%a&%$u'so'B@Rang%2 o"%l 3
,$o(8'o.a(os Gu% solo d%9u%l9% una *%lda
MsgBox A+'%**+onRango2 o"%l 3
,Ex8and+(os %l *u'so' a &odas las *%ldas *o(.+nadas
o$u'so'-*olla8s%IoM%'g%d!'%a23
MsgBox A+'%**+onRango2 o$u'so' 3
Els%
MsgBox ""%l%**+ona solo una *%lda"
End #f
End "u.
Podemo$ e:pandir el cur$or para 6ue abar6ue toda$ la$ columna$ de la re,i4n
actual'
"u. $u'so'%s823
A+( o"%l !s ?.)%*&
A+( o$u'so' !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
#f o"%l-g%&#(8l%(%n&a&+on=a(%23 B ""*$%ll?.)" Ih%n
o$u'so' B o"%l-g%&"8'%ad"h%%&-*'%a&%$u'so'B@Rang%2 o"%l 3
,Ex8and+(os %l *u'so' a la '%g+6n a*&ual
o$u'so'-*olla8s%Io$u''%n&R%g+on23
MsgBox A+'%**+onRango2 o$u'so' 3
,O lu%go a &odas las *olu(nas
o$u'so'-%x8andIoEn&+'%$olu(ns23
MsgBox A+'%**+onRango2 o$u'so' 3
Els%
MsgBox ""%l%**+ona solo una *%lda"
End #f
End "u.
9ntuir;$ 6ue tambi3n e$ po$ible -acerlo en la$ 1ila$'
,Ex8and+(os %l *u'so' a la '%g+6n a*&ual
o$u'so'-*olla8s%Io$u''%n&R%g+on23
MsgBox A+'%**+onRango2 o$u'so' 3
Aprendiendo OOo .a$ic 1G7
,O lu%go a &odas las *olu(nas
o$u'so'-%x8andIoEn&+'%Ro^s23
MsgBox A+'%**+onRango2 o$u'so' 3
Ten cuidado cuando u$e$ lo$ do$ m3todo$ anteriore$% $i lo$ e2ecuta$ uno detr;$ de
otro% tendr;$ un cur$or con tu -o2a completa% 6ue no de$carte$ u$ar un d=a% lo importante e$ 6ue
$iempre ten,a$ control * $epa$ lo 6ue e$ta$ -aciendo'
"u. $u'so'%s1023
A+( o"%l !s ?.)%*&
A+( o$u'so' !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
#f o"%l-g%&#(8l%(%n&a&+on=a(%23 B ""*$%ll?.)" Ih%n
o$u'so' B o"%l-g%&"8'%ad"h%%&23-*'%a&%$u'so'B@Rang%2 o"%l 3
,Ex8and+(os %l *u'so' a la '%g+on a*&ual
o$u'so'-*olla8s%Io$u''%n&R%g+on23
MsgBox A+'%**+onRango2 o$u'so' 3
,O lu%go a &odas las f+las
o$u'so'-%x8andIoEn&+'%Ro^s23
MsgBox A+'%**+onRango2 o$u'so' 3
,=o&a *o(o d%9u%l9% la ho)a %n&%'a
o$u'so'-%x8andIoEn&+'%$olu(ns23
MsgBox A+'%**+onRango2 o$u'so' 3
Els%
MsgBox ""%l%**+ona solo una *%lda"
End #f
End "u.
Tambi3n puede$ ampliar tu cur$or el n?mero de columna$ * 1ila$ 6ue nece$ite$% toma
en cuenta 6ue la celda $uperior i/6uierda no cambia'
"u. $u'so'%s1123
A+( o"%l !s ?.)%*&
A+( o$u'so' !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
#f o"%l-g%&#(8l%(%n&a&+on=a(%23 B ""*$%ll?.)" Ih%n
o$u'so' B o"%l-g%&"8'%ad"h%%&23-*'%a&%$u'so'B@Rang%2 o"%l 3
,Ex8and+(os %l *u'so' a la '%g+6n a*&ual
o$u'so'-*olla8s%Io$u''%n&R%g+on23
MsgBox A+'%**+onRango2 o$u'so' 3
,O lu%go *a(.+a(os %l *u'so' a 2 *olu(nas @ 5 f+las
o$u'so'-*olla8s%Io"+;%2 275 3
MsgBox A+'%**+onRango2 o$u'so' 3
Els%
MsgBox ""%l%**+ona solo una *%lda"
End #f
End "u.
1GF )'2 @e1erencia a ran,o$
Nota 6ue e$tamo$ LcambiandoM el tamaKo del cur$or% $i lo 6ue 6uiere$ realmente e$
e:pandirlo% tiene$ 6ue $umarle el anc-o * alto de la re,i4n actual% como en el $i,uiente e2emplo'
"u. $u'so'%s1223
A+( o"%l !s ?.)%*&
A+( o$u'so' !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
#f o"%l-g%&#(8l%(%n&a&+on=a(%23 B ""*$%ll?.)" Ih%n
o$u'so' B o"%l-g%&"8'%ad"h%%&-*'%a&%$u'so'B@Rang%2 o"%l 3
,Ex8and+(os %l *u'so' a la '%g+6n a*&ual
o$u'so'-*olla8s%Io$u''%n&R%g+on23
MsgBox A+'%**+onRango2 o$u'so' 3
,O lu%go a(8l+a(os %l *u'so' 1 *olu(na @ 5 f+las
o$u'so'-*olla8s%Io"+;%2 o$u'so'-g%&$olu(ns-g%&$oun&23C17 o$u'so'-g%&Ro^s-g%&$oun&23C5 3
MsgBox A+'%**+onRango2 o$u'so' 3
Els%
MsgBox ""%l%**+ona solo una *%lda"
End #f
End "u.
Nota como -emo$ u$ado al,uno$ m3todo$ &i$to$ en el tema anterior
( ,et+olumn$',et+ount )% como *a lo mencionamo$% e$to e$ po$ible por 6ue lo$ cur$ore$
comparten la ma*or=a de lo$ $er&icio$ con lo$ ran,o$' +a$i para 1inali/ar% &eamo$ do$ m3todo$
m;$ de lo$ cur$ore$'
"u. $u'so'%s1323
A+( o"%l !s ?.)%*&
A+( o$u'so' !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
#f o"%l-g%&#(8l%(%n&a&+on=a(%23 B ""*$%ll?.)" Ih%n
o$u'so' B o"%l-g%&"8'%ad"h%%&23-*'%a&%$u'so'B@Rang%2 o"%l 3
,1a(os al +n+*+o d%l >'%a usada7 %l a'gu(%n&o Kals%7 %9+&a Gu% s%
,%x8anda la s%l%**+6n d%l 'ango
o$u'so'-go&o"&a'&?fDs%d!'%a2 Kals% 3
MsgBox A+'%**+onRango2 o$u'so' 3
,!ho'a 9a(os al f+nal
o$u'so'-go&oEnd?fDs%d!'%a2 Kals% 3
MsgBox A+'%**+onRango2 o$u'so' 3
Els%
MsgBox ""%l%**+ona solo una *%lda"
End #f
End "u.
>n una -o2a de calculo% el L;rea de u$uarioM% e$ a6uel ran,o Le1ecti&amenteM u$ado%
e$ mu* din;mico pue$ &aria de acuerdo a $u u$o * eliminaci4n% en una -o2a nue&a el inicio * el
1inal de e$ta ;rea $iempre $er; el mi$mo% la celda A1% $i tiene$ LunaM $ola celda u$ada% e$ta% $er;
el inicio * el 1in de tu ;rea de u$uario% la co$a cambia en cuanto tiene$ do$ o m;$ celda$ u$ada$%
la re,la e$< el inicio de tu ;rea de u$uario $er; la celda (Lcon dato$M) 6ue e$te m;$ cercana al
e:tremo $uperior i/6uierdo de la -o2a * el 1inal $er; la celda (Lcon dato$M) 6ue e$te m;$ cercana al
Aprendiendo OOo .a$ic 1GG
e:tremo in1erior derec-o de dic-a -o2a% * di,o 6ue e$ din;mica% por 6ue $i elimina$ dato$ o celda$%
e$ta ;rea $e ira a2u$tando con1orme a e$to$ cambio$'
A-ora $i% para terminar% un cur$or tambi3n lo puede$ u$ar para e$tablecer una
$elecci4n% como en el e2emplo $i,uiente donde $eleccionamo$ la re,i4n actual del ran,o'
"u. $u'so'%s1423
A+( o"%l !s ?.)%*&
A+( o$u'so' !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
#f o"%l-g%&#(8l%(%n&a&+on=a(%23 B ""*$%ll?.)" Ih%n
o$u'so' B o"%l-g%&"8'%ad"h%%&23-*'%a&%$u'so'B@Rang%2 o"%l 3
o$u'so'-*olla8s%Io$u''%n&R%g+on23
Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-s%l%*&2 o$u'so' 3
Els%
MsgBox ""%l%**+ona solo una *%lda"
End #f
End "u.
+on lo cual ob$er&amo$ 6ue e$to$ cur$ore$ con ba$tante &er$;tile$'
=.2.B Selecciones especiales
#o$ ran,o$ cuentan con uno$ m3todo$ ba$tante intere$ante$ (* ?tile$) para -acer
al,una$ $eleccione$ e$peciale$% por e2emplo% podemo$ $eleccionar la$ celda$ &ac=a$ de un ran,o
como en'
"u. "%l%**+on%sEs8%*+al%s123
A+( o"%l !s ?.)%*&
A+( o"%lEs8 !s ?.)%*&
,!**%d%(os a la s%l%**+6n a*&ual
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
,R%*u8%'a(os las *%ldas 9a*Has
o"%lEs8 B o"%l-Gu%'@E(8&@$%lls23
,O las s%l%**+ona(os
Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-s%l%*&2 o"%lEs8 3
End "u.
+omo -emo$ &i$to a lo lar,o de e$ta$ nota$% no es siempre necesario que
selecciones, puedes manipular el ran*o obtenido sin que esto sea necesario% $i una celda
tiene aun6ue $ea $olo un e$pacio o al,?n car;cter e$pecial no &i$ible (tabuladore$% $alto$ de
p;,ina)% e$ta% *a no $er; &ac=a * no la obtendr;$ por e$te m3todo' Un punto importante% e$ 6ue
e$te m3todo $iempre retorna un con2unto de ran,o$ (ScCellRangesObj)% lo$ cuale$ tiene$ 6ue
manipular como *a lo -emo$ aprendido'
Tambi3n podemo$ $eleccionar celda$ de acuerdo a $u contenido% en el $i,uiente
e2emplo $eleccionamo$ la$ celda$ con te:to'
200 )'2 @e1erencia a ran,o$
"u. "%l%**+on%sEs8%*+al%s223
A+( o"%l !s ?.)%*&
A+( o"%lEs8 !s ?.)%*&
,!**%d%(os a la s%l%**+on a*&ual
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
,R%*u8%'a(os las *%ldas *on &%x&o
o"%lEs8 B o"%l-Gu%'@$on&%n&$%lls2 4 3
,O las s%l%**+ona(os
Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-s%l%*&2 o"%lEs8 3
End "u.
A-ora% la$ celda$ con 1ormula$'
"u. "%l%**+on%sEs8%*+al%s323
A+( o"%l !s ?.)%*&
A+( o"%lEs8 !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
,R%*u8%'a(os las *%ldas *on fo'(ulas
o"%lEs8 B o"%l-Gu%'@$on&%n&$%lls2 *o(-sun-s&a'-sh%%&-$%llKlags-K?RMD5! 3
Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-s%l%*&2 o"%lEs8 3
End "u.
#o$ &alore$ po$ible$ para el ar,umento de e$te m3todo $on lo$ $i,uiente$% &alore$
6ue tambi3n $e u$an para borrar dato$ como $e &e en el tema )'E'('.orrando dato$
Constante 1alor
com'$un'$tar'$-eet'+ell!la,$'5A#U> 1
com'$un'$tar'$-eet'+ell!la,$'"AT>T9M> 2
com'$un'$tar'$-eet'+ell!la,$'ST@9N E
com'$un'$tar'$-eet'+ell!la,$'ANNOTAT9ON F
com'$un'$tar'$-eet'+ell!la,$'!O@MU#A 1)
com'$un'$tar'$-eet'+ell!la,$'dA@"ATT@ (2
com'$un'$tar'$-eet'+ell!la,$'STO#>S )E
com'$un'$tar'$-eet'+ell!la,$'O.j>+T 12F
com'$un'$tar'$-eet'+ell!la,$'>"9TATT@ 25)
com'$un'$tar'$-eet'+ell!la,$'!O@MATT>" 512
Puede$ u$ar de 1orma indi$tinta el &alor num3rico o $u con$tante como $e &e en lo$
do$ e2emplo$ anteriore$ * tambi3n $umar lo$ &alore$ para tener m?ltiple$ combinacione$% como en
el e2emplo $i,uiente donde $eleccionamo$ la$ celda$ con te:to * &alore$'
"u. "%l%**+on%sEs8%*+al%s423
A+( o"%l !s ?.)%*&
A+( o"%lEs8 !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
,R%*u8%'a(os las *%ldas *on &%x&o @ 9alo'%s
o"%lEs8 B o"%l-Gu%'@$on&%n&$%lls2 5 3
Aprendiendo OOo .a$ic 201
Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-s%l%*&2 o"%lEs8 3
End "u.
+omo *a $e mencion4% e$to$ m3todo$ $iempre de&uel&en un con2unto de ran,o$
(ScCellRangesObj)% por lo 6ue e$ mu* $encillo $aber $i -a* o no re$ultado$% en el $i,uiente
e2emplo% *a no $eleccionamo$% pero in1ormamo$ $i -ubo o no celda$ con el criterio e$peci1icado%
para e$te e2emplo% la$ celda$ 6ue ten,an nota$% ob$er&a 6ue u$amo$ una 1unci4n per$onali/ada
(/ireccionRango9)% 6ue *a -emo$ u$ado anteriormente'
"u. "%l%**+on%sEs8%*+al%s523
A+( o"%l !s ?.)%*&
A+( o"%lEs8 !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
,R%*u8%'a(os las *%ldas *on no&as
o"%lEs8 B o"%l-Gu%'@$on&%n&$%lls2 8 3
#f o"%lEs8-g%&$oun& B 0 Ih%n
MsgBox "=o ha@ *%ldas *on no&as"
Els%
,Mos&'a(os la d+'%**+6n d% los 'angos %n*on&'ados
MsgBox A+'%**+onRango22 o"%lEs8 3
End #f
End "u.
Oa &imo$ como $eleccionar 1ormula$% pero tambi3n podemo$ $eleccionar 1ormula$ de
acuerdo a $u re$ultado% por e2emplo% $eleccionemo$ la$ celda$ 6ue conten,an error'
"u. "%l%**+on%sEs8%*+al%s623
A+( o"%l !s ?.)%*&
A+( o"%lEs8 !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
,R%*u8%'a(os las *%ldas *on fo'(ulas *u@o '%sul&ado s%a %''o'
o"%lEs8 B o"%l-Gu%'@Ko'(ula$%lls2 4 3
#f o"%lEs8-g%&$oun& B 0 Ih%n
MsgBox "=o ha@ *%ldas *on %''o'%s"
Els%
MsgBox A+'%**+onRango22 o"%lEs8 3
End #f
End "u.
>l ar,umento de e$te m3todo% $olo acepta lo$ tre$ &alore$ $i,uiente'
Constante 1alor
com'$un'$tar'$-eet'!ormula@e$ult'5A#U> 1
com'$un'$tar'$-eet'!ormula@e$ult'ST@9N 2
com'$un'$tar'$-eet'!ormula@e$ult'>@@O@ E
#o$ cuale$% podemo$ combinar'
"u. "%l%**+on%sEs8%*+al%s723
A+( o"%l !s ?.)%*&
A+( o"%lEs8 !s ?.)%*&
202 )'2 @e1erencia a ran,o$
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
,R%*u8%'a(os las *%ldas *on fo'(ulas *u@o '%sul&ado s%a &%x&o o 9alo'
o"%lEs8 B o"%l-Gu%'@Ko'(ula$%lls2 3 3
#f o"%lEs8-g%&$oun& B 0 Ih%n
MsgBox "=o ha@ *%ldas *on &%x&o o 9alo'"
Els%
MsgBox A+'%**+onRango22 o"%lEs8 3
End #f
End "u.
#o$ $i,uiente m3todo$ re6uieren una atenci4n e$pecial% $upon,amo$ la $i,uiente
li$ta de dato$'
( & C D E
1 ( ( 5 ( E
2 5 2 1 2 E
( 1 2 5 5
) 1 1 ( E 5
! 1 5 5 5 E
= E 1 E 1 (
A 1 ( 1 1 5
B 5 1 1 5 (
F 5 ( ( 2 (
1H ( 2 E 5 1
Selecciona el ran,o A1<A10 * e2ecuta la $i,uiente macro<
"u. "%l%**+on%sEs8%*+al%s823
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango !s ?.)%*&
A+( o"%lEs8 !s ?.)%*&
A+( o$%lda !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'23-g%&!*&+9%"h%%&23
,El 'ango a %9alua'
oRango B oHo)a!*&+9a-g%&$%llRang%B@=a(%2"!14!10"3
,5a *%lda d% *o(8a'a*+6n
o$%lda B oHo)a!*&+9a-g%&$%llRang%B@=a(%2"!1"3
,Bus*a(os las *%ldas d+f%'%n&%s 8o' *olu(na
o"%lEs8 B oRango-Gu%'@$olu(nA+ff%'%n*%s2 o$%lda-g%&$%ll!dd'%ss 3
#f o"%lEs8-g%&$oun& B 0 Ih%n
MsgBox "=o s% %n*on&'a'on *%ldas"
Els%
,5as s%l%**+ona(os
Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-s%l%*&2 o"%lEs8 3
End #f
End "u.
eue te tiene 6ue $eleccionar'
Aprendiendo OOo .a$ic 20(
Ob$er&a como $eleccion4 la$ celda$ con un &alor di1erente al de la celda de
comparaci4n% e$ mu* importante entender 6ue% de la celda de comparaci4n% /Snicamente toma la
3ila2 de la direcci4n para la comparaci4n% intenta pa$arle a e$ta mi$ma macro la celda +1% ob$er&a
el re$ultado% de$pu3$ pa$ale la celda +2 * ob$er&a el re$ultado' +on el $i,uiente e2emplo% creo%
6ueda ba$tante claro como traba2a e$te m3todo% ob$er&a el ran,o pa$ado * la celda de
comparaci4n% el &alor comparado e$ el &alor de la 1ila re$pecti&a para cada columna'
"u. "%l%**+on%sEs8%*+al%s923
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango !s ?.)%*&
A+( o"%lEs8 !s ?.)%*&
A+( o$%lda !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'23-g%&!*&+9%"h%%&23
oRango B oHo)a!*&+9a-g%&$%llRang%B@=a(%2"!14$10"3
o$%lda B oHo)a!*&+9a-g%&$%llRang%B@=a(%2"B10"3
o"%lEs8 B oRango-Gu%'@$olu(nA+ff%'%n*%s2 o$%lda-g%&$%ll!dd'%ss 3
#f o"%lEs8-g%&$oun& B 0 Ih%n
MsgBox "=o s% %n*on&'a'on *%ldas"
Els%
Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-s%l%*&2 o"%lEs8 3
End #f
End "u.
eue no$ de&uel&e'
Por ultimo% e2ecuta la macro% llamando al ran,o completo de prueba$% con la celda de
comparaci4n 6ue 6uiera$% como en'
"u. "%l%**+on%sEs8%*+al%s1023
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango !s ?.)%*&
A+( o"%lEs8 !s ?.)%*&
A+( o$%lda !s ?.)%*&
20E )'2 @e1erencia a ran,o$
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'23-g%&!*&+9%"h%%&23
oRango B oHo)a!*&+9a-g%&$%llRang%B@=a(%2"!14E10"3
o$%lda B oHo)a!*&+9a-g%&$%llRang%B@=a(%2"!3"3
o"%lEs8 B oRango-Gu%'@$olu(nA+ff%'%n*%s2 o$%lda-g%&$%ll!dd'%ss 3
#f o"%lEs8-g%&$oun& B 0 Ih%n
MsgBox "=o s% %n*on&'a'on *%ldas"
Els%
Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-s%l%*&2 o"%lEs8 3
End #f
End "u.
O comprueba 6ue e$ correcto el re$ultado' >l mi$mo tipo de comparaci4n lo podemo$
-acer pero por 1ila$% como en el $i,uiente e2emplo% u$ando la mi$ma tabla de dato$'
"u. "%l%**+on%sEs8%*+al%s1123
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango !s ?.)%*&
A+( o"%lEs8 !s ?.)%*&
A+( o$%lda !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'23-g%&!*&+9%"h%%&23
oRango B oHo)a!*&+9a-g%&$%llRang%B@=a(%2"!104E10"3
o$%lda B oHo)a!*&+9a-g%&$%llRang%B@=a(%2"$10"3
,Bus*a(os las *%ldas d+f%'%n&%s 8o' f+las
o"%lEs8 B oRango-Gu%'@Ro^A+ff%'%n*%s2 o$%lda-g%&$%ll!dd'%ss 3
#f o"%lEs8-g%&$oun& B 0 Ih%n
MsgBox "=o s% %n*on&'a'on *%ldas"
Els%
Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-s%l%*&2 o"%lEs8 3
End #f
End "u.
O el re$ultado'
#a l4,ica e$ e:actamente la mi$ma de -acerlo por columna$% $olo 6ue a-ora% /solo
toma la columna2 de la celda de comparaci4n% a$= 6ue $olo -a,amo$ un e2emplo m;$ con el
ran,o completo de dato$'
"u. "%l%**+on%sEs8%*+al%s1223
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango !s ?.)%*&
A+( o"%lEs8 !s ?.)%*&
A+( o$%lda !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'23-g%&!*&+9%"h%%&23
oRango B oHo)a!*&+9a-g%&$%llRang%B@=a(%2"!14E10"3
o$%lda B oHo)a!*&+9a-g%&$%llRang%B@=a(%2"A1"3
Aprendiendo OOo .a$ic 205
,Bus*a(os las *%ldas d+f%'%n&%s 8o' f+las
o"%lEs8 B oRango-Gu%'@Ro^A+ff%'%n*%s2 o$%lda-g%&$%ll!dd'%ss 3
#f o"%lEs8-g%&$oun& B 0 Ih%n
MsgBox "=o s% %n*on&'a'on *%ldas"
Els%
Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-s%l%*&2 o"%lEs8 3
End #f
End "u.
eue no$ $elecciona'
#o intere$ante de e$to$ m3todo$% e$ 6ue lo$ &alore$ de la$ celda$% no tienen 6ue $er
nece$ariamente te:to% puede $er cual6uier tipo de dato% inclu*endo 1ormula$% en cu*o ca$o% $e
tomar; el tipo de re$ultado de e$ta'
>l $i,uiente m3todo no$ $ir&e para $aber el ran,o de celda$ comune$ a do$ ran,o$%
ob$er&a la $i,uiente ima,en% la macro de e2emplo% no$ tiene 6ue $eleccionar el ran,o en &erde'
"u. "%l%**+on%sEs8%*+al%s1323
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango1 !s ?.)%*&
A+( oRango2 !s ?.)%*&
A+( o"%lEs8 !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'23-g%&!*&+9%"h%%&23
oRango1 B oHo)a!*&+9a-g%&$%llRang%B@=a(%2"B24#11"3
oRango2 B oHo)a!*&+9a-g%&$%llRang%B@=a(%2"E84=17"3
,Bus*a(os las *%ldas *o(un%s
o"%lEs8 B oRango1-Gu%'@#n&%'s%*&+on2 oRango2-g%&Rang%!dd'%ss 3
#f o"%lEs8-g%&$oun& B 0 Ih%n
MsgBox "=o ha@ nada %n *o(<n"
20) )'2 @e1erencia a ran,o$
Els%
Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-s%l%*&2 o"%lEs8 3
End #f
End "u.
Para terminar e$te tema% &eamo$ un m3todo mu* intere$ante% no$ permite
$eleccionar% del ran,o in&ocado% $olo la$ celda$ &i$ible$' Ob$er&a la $i,uiente ima,en'
Nota en lo$ encabe/ado$ de 1ila 6ue tenemo$ muc-a$ 1ila$ oculta$% con la $i,uiente
macro% mo$tramo$ la direcci4n de lo$ ran,o$ &i$ible$'
"u. "%l%**+on%sEs8%*+al%s1423
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango !s ?.)%*&
A+( o1+s+.l%s !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'23-g%&!*&+9%"h%%&23
oRango B oHo)a!*&+9a-g%&$%llRang%B@=a(%2"!14E243"3
,Bus*a(os las *%ldas 9+s+.l%s
o1+s+.l%s B oRango-Gu%'@1+s+.l%$%lls23
#f o1+s+.l%s-g%&$oun& B 0 Ih%n
MsgBox "=o ha@ *%ldas o*ul&as"
Els%
,Mos&'a(os la d+'%**+6n d% los 'angos 9+s+.l%s
MsgBox A+'%**+onRango22 o1+s+.l%s 3
End #f
End "u.
+uando -ace$ un 1iltro autom;tico o e$pecial * cuando calcula$ $ubtotale$ e intenta$
-acer operacione$ de copiado% la copia re$ultante% $olo contendr; la$ celda$ &i$ible$% cuando
a,rupa$ u oculta$ 1ila$ o columna$ manualmente% la copia incluir; aun la$ celda$ oculta$% pero con
Aprendiendo OOo .a$ic 207
e$te m3todo $iempre obtendr;$ la$ celda$ &i$ible$% 6ue% en con2unto con lo$ conocimiento$ del
$i,uiente capitulo% puede$ -acer tu propia &er$i4n de copiar $olo la$ 1ila$ &i$ible$'
=. Manipulando ran*os
>n el capitulo anterior aprendimo$ a re1erenciar cual6uier ran,o 6ue no$ intere$e%
a-ora% aprenderemo$ a manipular e$to$ ran,o$% a mo&erlo$% in$ertarlo$% eliminarlo$ * copiarlo$'
=..1 Mo,iendo ran*os
Para mo&er un ran,o% u$amo$ el m3todo mo&e@an,e de la$ -o2a$ de calculo% e$te
m3todo re6uiere de do$ ar,umento$% la celda $uperior i/6uierda (+ellAddre$$) de$tino donde $e
mo&er; el ran,o ori,en (+ell@an,eAddre$$)
Ho)a-(o9%Rang%2 A%s&+no !s $%ll!dd'%ss7 ?'+g%n !s $%llRang%!dd'%ss 3
>l $i,uiente e2emplo mue&e el ran,o A1<.5 de la -o2a acti&a% a la celda "10 de la
mi$ma -o2a'
"u. Mo9%'Rangos123
A+( oHo)a!*&+9a !s ?.)%*&
A+( o?'+g%n !s ?.)%*&
A+( oA%s&+no !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'23-g%&!*&+9%"h%%&23
,Rango a (o9%'
o?'+g%n B oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "!14B5" 3
,$%lda d%s&+no
oA%s&+no B oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "A10" 3
,Mo9%(os %l 'ango
oHo)a!*&+9a-(o9%Rang%2 oA%s&+no-g%&$%ll!dd'%ss237 o?'+g%n-g%&Rang%!dd'%ss23 3
End "u.
Toma en cuenta 6ue el ran,o ori,en LtieneM 6ue $er un ran,o de celda$% 6ue la celda
de$tino LtieneM 6ue $er una celda indi&idual% 6ue lo$ dato$ del ran,o ori,en $e borran * lo$ dato$
del ran,o de$tino $on Lreempla9ados sin pre*untarteM por lo$ dato$ ori,en * mu* importante% $i
el ran,o contiene 1ormula$% e$ta$% Lno se actuali9an a la nue,a posicinM aun * cuando la$
re1erencia$ $ean relati&a$% tambi3n% el ran,o ori,en cambia para adaptar$e al ran,o de$tino% e$
decir% la re1erencia a dic-o ran,o $e actuali/ara autom;ticamente como lo puede$ comprobar $i
mue$tra$ la direcci4n del ran,o ori,en% ante$ * de$pu3$ de mo&er$e'
MsgBox A+'%**+onRango2 o?'+g%n 3
,Mo9%(os %l 'ango
oHo)a!*&+9a-(o9%Rang%2 oA%s&+no-g%&$%ll!dd'%ss237 o?'+g%n-g%&Rang%!dd'%ss23 3
20F )'( Manipulando ran,o$
MsgBox A+'%**+onRango2 o?'+g%n 3
@ecuerda 6ue la 1unci4n "ireccion@an,o% e$ per$onali/ada * la -emo$ u$ado en lo$
?ltimo$ tema$ &i$to$' +uando u$a$ ,et+ell@an,e.*Name% aun * cuando $olo -a,a$ re1erencia a
una celda% puede$ tener acce$o a $u propiedad ,e+ellAddre$$% por lo 6ue no tiene$ problema$ en
mo&er $olo una celda como $e &e en el $i,uiente e2emplo'
"u. Mo9%'Rangos223
A+( oHo)a!*&+9a !s ?.)%*&
A+( o?'+g%n !s ?.)%*&
A+( oA%s&+no !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'23-g%&!*&+9%"h%%&23
,=o&a *o(o ha*%(os la '%f%'%n*+a 8a'a Gu% s%a un 'ango
o?'+g%n B oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "B2" 3
,Es&a &+%n% Gu% s%gu+' s+%ndo una sola *%lda
oA%s&+no B oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "E5" 3
,Mo9%(os %l 'ango
oHo)a!*&+9a-(o9%Rang%2 oA%s&+no-g%&$%ll!dd'%ss237 o?'+g%n-g%&Rang%!dd'%ss23 3
End "u.
Por $upue$to podemo$ &alidar 6ue por lo meno$ el ori,en * el de$tino $ean
e1ecti&amente lo$ ar,umento$ 6ue nece$ita e$te m3todo'
"u. Mo9%'Rangos323
A+( oHo)a!*&+9a !s ?.)%*&
A+( o?'+g%n !s ?.)%*&
A+( oA%s&+no !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
o?'+g%n B oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "$5" 3
oA%s&+no B oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "K15" 3
,1al+da(os Gu% los 'angos s%an *o''%*&os
#f o?'+g%n-g%&#(8l%(%n&a&+on=a(%23 B ""*$%llRang%?.)" !nd oA%s&+no-g%&#(8l%(%n&a&+on=a(%23 B
""*$%ll?.)" Ih%n
oHo)a!*&+9a-(o9%Rang%2 oA%s&+no-g%&$%ll!dd'%ss237 o?'+g%n-g%&Rang%!dd'%ss23 3
Els%
MsgBox "5os 'angos no son *o''%*&os"
End #f
End "u.
>$ta &alidaci4n e$ m;$ ?til cuando tomamo$ el ran,o a mo&er a partir de la $elecci4n
actual del u$uario% para 6ue 1uncione el $i,uiente c4di,o% tiene$ 6ue $eleccionar m;$ de una celda
e$ decir% un ran,o de celda$% por $upue$to% te 6ueda de tarea -acer 6ue 1uncione% aun * con $olo
$eleccionar una celda'
"u. Mo9%'Rangos423
A+( oHo)a!*&+9a !s ?.)%*&
A+( o?'+g%n !s ?.)%*&
A+( oA%s&+no !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
o?'+g%n B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
Aprendiendo OOo .a$ic 20G
,1al+da(os Gu% los 'angos s%an *o''%*&os
#f o?'+g%n-g%&#(8l%(%n&a&+on=a(%23 B ""*$%llRang%?.)" Ih%n
,A%)a(os una *olu(na @ una f+la %n .lan*o
oA%s&+no B oHo)a!*&+9a-g%&$%llB@0os+&+on2 o?'+g%n-g%&Rang%!dd'%ss-End$olu(n C 27
o?'+g%n-g%&Rang%!dd'%ss-EndRo^ C 2 3
oHo)a!*&+9a-(o9%Rang%2 oA%s&+no-g%&$%ll!dd'%ss7 o?'+g%n-g%&Rang%!dd'%ss23 3
Els%
MsgBox "El 'ango ?'+g%n no %s *o''%*&o"
End #f
End "u.
Nota como $olo &alidamo$ el ori,en% por 6ue el de$tino lo con$truimo$ a partir del
e$te% ob$er&a 6ue cuando mue&e$ un ran,o% la $elecci4n actual no cambia% $e 6ueda en el ran,o
ori,en% $i $eleccionamo$ el ran,o cuando $e -a mo&ido% podremo$ ir mo&iendo el ran,o% tanta$
&ece$ como llame$ a la macro% modi1ica la macro anterior para 6ue 6uede a$='
"u. Mo9%'Rangos523
A+( oHo)a!*&+9a !s ?.)%*&
A+( o?'+g%n !s ?.)%*&
A+( oA%s&+no !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'23-g%&!*&+9%"h%%&23
o?'+g%n B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
#f o?'+g%n-g%&#(8l%(%n&a&+on=a(%23 B ""*$%llRang%?.)" Ih%n
oA%s&+no B oHo)a!*&+9a-g%&$%llB@0os+&+on2 o?'+g%n-g%&Rang%!dd'%ss23-End$olu(n C 27
o?'+g%n-g%&Rang%!dd'%ss23-EndRo^ C 2 3
oHo)a!*&+9a-(o9%Rang%2 oA%s&+no-g%&$%ll!dd'%ss237 o?'+g%n-g%&Rang%!dd'%ss23 3
,"%l%**+ona(os %l nu%9o o'+g%n
Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-s%l%*&2 o?'+g%n 3
Els%
MsgBox "El 'ango ?'+g%n no %s *o''%*&o"
End #f
End "u.
O llamala (e2ecutala) &aria$ &ece$% notara$ como $e &a mo&iendo el ran,o% pero
cuidado% puede pa$ar 6ue en al,?n momento te un error% IcuandoJ% mu* bien% cuando el ran,o
de$tino 6uede 1uera de la -o2a de calculo% por lo 6ue tenemo$ 6ue e&aluar tambi3n 6ue e$to no
$uceda'
"u. Mo9%'Rangos623
A+( oHo)a!*&+9a !s ?.)%*&
A+( o?'+g%n !s ?.)%*&
A+( oA%s&+no !s ?.)%*&
A+( l5+(+&%$ol !s 5ong
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
o?'+g%n B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
#f o?'+g%n-g%&#(8l%(%n&a&+on=a(%23 B ""*$%llRang%?.)" Ih%n
,Ea'an&+;a(os Gu% no so.'% 8as% %l (>x+(o d% *olu(nas %n la ho)a d% *al*ulo
l5+(+&%$ol B o?'+g%n-g%&Rang%!dd'%ss-End$olu(n C 2 C o?'+g%n-g%&$olu(ns-g%&$oun&23
#f l5+(+&%$ol XB oHo)a!*&+9a-g%&$olu(ns-g%&$oun&23 Ih%n
oA%s&+no B oHo)a!*&+9a-g%&$%llB@0os+&+on2 o?'+g%n-g%&Rang%!dd'%ss-End$olu(n C 27
o?'+g%n-g%&Rang%!dd'%ss-EndRo^ C 2 3
oHo)a!*&+9a-(o9%Rang%2 oA%s&+no-g%&$%ll!dd'%ss7 o?'+g%n-g%&Rang%!dd'%ss23 3
Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-s%l%*&2 o?'+g%n 3
Els%
MsgBox ""% ll%g6 al l+(+&% d% la ho)a"
End #f
Els%
210 )'( Manipulando ran,o$
MsgBox "5os 'angos no son *o''%*&os"
End #f
End "u.
Nota 6ue con odo2aActi&a',et+olumn$()',et+ount()% obtenemo$ el total de columna$
de la -o2a acti&a% no importa $i e$ta tiene 25) como en Openo11ice'or, 2': o 102E como en
Openo11ice'or, (': o la$ 6ue lle,uen a tener m;$ delante% con lo 6ue e$te c4di,o 1uncionara en la$
do$ &er$ione$% de -ec-o% en cual6uier &er$i4n 6ue implemente e$ta$ propiedade$% * $i% claro 6ue
tiene$ 6ue e&aluar tambi3n 6ue no pa$e$ el limite de 1ila$% pero e$a% e$ tu tarea'
da$ta a-ora -emo$ mo&ido ran,o$ dentro de la mi$ma -o2a% pero de 1orma mu*
$encilla podemo$ mo&er ran,o$ entre -o2a$% $olo -a* 6ue e$tablecer el de$tino correctamente * el
m3todo $e encar,ar; del re$to'
"u. Mo9%'Rangos723
A+( oHo)a!*&+9a !s ?.)%*&
A+( o?'+g%n !s ?.)%*&
A+( oA%s&+no !s ?.)%*&
A+( l5+(+&%$ol !s 5ong
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
o?'+g%n B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
#f o?'+g%n-g%&#(8l%(%n&a&+on=a(%23 B ""*$%llRang%?.)" Ih%n
oA%s&+no B Ih+s$o(8on%n&-g%&"h%%&s-g%&B@#nd%x203-g%&$%llB@0os+&+on2 07 0 3
oHo)a!*&+9a-(o9%Rang%2 oA%s&+no-g%&$%ll!dd'%ss237 o?'+g%n-g%&Rang%!dd'%ss23 3
Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-s%l%*&2 o?'+g%n 3
Els%
MsgBox "El 'ango ?'+g%n no %s *o''%*&o"
End #f
End "u.
Ob$er&a como el ori,en lo e$tablecemo$ en la -o2a acti&a% pero el de$tino lo
re1erenciamo$ a la primer -o2a del documento% claro 6ue puede$ -acerlo a cual6uier otra% por
=ndice o por nombre como *a lo -emo$ aprendido' Nota 6ue el m3todo mo&e@an,e% lo llamamo$
de$de la -o2a acti&a% pero tambi3n lo puede$ llamar de$de cual6uier -o2a% lo importante e$ 6ue lo$
ar,umento$% e$ decir% el ori,en * de$tino e$t3n correcto$% ob$er&a en el $i,uiente e2emplo% como
llamamo$ al m3todo mo&e@an,e de$de la -o2a del ran,o de$tino'
"u. Mo9%'Rangos823
A+( oHo)a!*&+9a !s ?.)%*&
A+( o?'+g%n !s ?.)%*&
A+( oA%s&+no !s ?.)%*&
A+( l5+(+&%$ol !s 5ong
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
o?'+g%n B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
#f o?'+g%n-g%&#(8l%(%n&a&+on=a(%23 B ""*$%llRang%?.)" Ih%n
oA%s&+no B Ih+s$o(8on%n&-g%&"h%%&s-g%&B@#nd%x203-g%&$%llB@0os+&+on2 07 0 3
oA%s&+no-g%&"8'%ad"h%%&-(o9%Rang%2 oA%s&+no-g%&$%ll!dd'%ss237 o?'+g%n-g%&Rang%!dd'%ss23 3
Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-s%l%*&2 o?'+g%n 3
Els%
MsgBox "El 'ango ?'+g%n no %s *o''%*&o"
End #f
End "u.
Aprendiendo OOo .a$ic 211
Tambi3n podemo$ mo&er una columna completa% recuerda 6ue una columna no e$
m;$ 6ue un ran,o de celda$'
"u. Mo9%'Rangos923
A+( oHo)a!*&+9a !s ?.)%*&
A+( o?'+g%n !s ?.)%*&
A+( oA%s&+no !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
,R%f%'%n*+a(os *o(o o'+g%n la *olu(na E
o?'+g%n B oHo)a!*&+9a-g%&$olu(ns-g%&B@#nd%x243
,$o(o d%s&+no una *olu(na a la d%'%*ha
oA%s&+no B oHo)a!*&+9a-g%&$%llB@0os+&+on2 o?'+g%n-g%&Rang%!dd'%ss23-End$olu(n C 17 0 3
oHo)a!*&+9a-(o9%Rang%2 oA%s&+no-g%&$%ll!dd'%ss237 o?'+g%n-g%&Rang%!dd'%ss23 3
Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-s%l%*&2 o?'+g%n 3
End "u.
O *a encarrerado$% mo&emo$ 1ila$ tambi3n'
"u. Mo9%'Rangos1023
A+( oHo)a!*&+9a !s ?.)%*&
A+( o?'+g%n !s ?.)%*&
A+( oA%s&+no !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
,R%f%'%n*+a(os *o(o o'+g%n la f+la 5
o?'+g%n B oHo)a!*&+9a-g%&Ro^s-g%&B@#nd%x243
,$o(o d%s&+no la f+la 10
oA%s&+no B oHo)a!*&+9a-g%&$%llB@0os+&+on2 07 9 3
oHo)a!*&+9a-(o9%Rang%2 oA%s&+no-g%&$%ll!dd'%ss237 o?'+g%n-g%&Rang%!dd'%ss23 3
Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-s%l%*&2 o?'+g%n 3
End "u.
+uando mue&a$ columna$ * 1ila$ completa$% ten en cuenta la$ mi$ma$
con$ideracione$ &i$ta$ en lo$ dem;$ e2emplo$% de la$ cuale$ la$ principale$ $on 6ue lo$ dato$ $e
mue&en del ori,en al de$tino $in pre,untar% e$ decir% no -a* nin,una con1irmaci4n de
$obree$critura en ca$o de 6ue el de$tino no e$te &ac=o% por lo 6ue t? tiene$ 6ue implementar e$ta
&alidaci4n * tener cuidado de no $alir$e de lo$ limite$ de la -o2a de calculo'
=..2 Insertando ran*os
>n la inter1a/ del u$uario% cuando in$ertamo$ un ran,o% recordara$ 6ue +alc% no$
mue$tra un cuadro de dialo,o pre,unt;ndono$ como de$pla/ar la$ celda$ ad*acente$% e$ta mi$ma
con$ideraci4n -a* 6ue tener cuando lo -acemo$ por c4di,o% &eamo$ como'
212 )'( Manipulando ran,o$
Ho)a-+ns%'&$%lls2 $%ldas !s $%llRang%!dd'%ss7 Modo !s $%ll#ns%'&Mod%3
"u. #ns%'&a'Rangos123
A+( oHo)a!*&+9a !s ?.)%*&
A+( o"%l !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
,#ns%'&a(os un 'ango d% *%ldas +gual a la s%l%**+6n a*&ual
,@ (o9%(os las *%ldas ha*+a a.a)o
oHo)a!*&+9a-+ns%'&$%lls2o"%l-g%&Rang%!dd'%ss237 *o(-sun-s&a'-sh%%&-$%ll#ns%'&Mod%-A?U=3
End "u.
>l ran,o a in$ertar no tiene por 6ue $er a partir de la $elecci4n actual% puede$ crear
una e$tructura +ell@an,eAddre$$ &ac=a del tamaKo 6ue 6uiera$ como en el $i,uiente e2emplo'
"u. #ns%'&a'Rangos223
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
,$'%a(os una %s&'u*&u'a 9a*Ha d% d+'%**+6n d% un 'ango
oRango B $'%a&%Dno"&'u*&2 "*o(-sun-s&a'-&a.l%-$%llRang%!dd'%ss" 3
,Es&a.l%*%(os los 9alo'%s d%l 'ango7 &'%s f+las 8o' &'%s *olu(nas
U+&h oRango
-"h%%& B oHo)a!*&+9a-g%&Rang%!dd'%ss23-"h%%&
-"&a'&$olu(n B 1
-"&a'&Ro^ B 1
-End$olu(n B 3
-EndRo^ B 3
End U+&h
,#ns%'&a(os @ d%s8la;a(os ha*+a la d%'%*ha
oHo)a!*&+9a-+ns%'&$%lls2oRango7 *o(-sun-s&a'-sh%%&-$%ll#ns%'&Mod%-R#EHI3
End "u.
>$ mu* importante 6ue e$table/ca$ la propiedad S-eet (-o2a) de e$ta e$tructura% $i
no lo -ace$% el &alor predeterminado e$ 0% con lo 6ue el ran,o in$ertado L$iempreM lo -ar; en la
primer -o2a del documento' >n e$te $e,undo e2emplo -emo$ de$pla/ado la$ celda$ a la derec-a%
la$ dem;$ opcione$ de e$te m3todo $on in$ertar 1ila$ completa$ o columna$ completa$% en la
$i,uiente tabla re$umimo$ lo$ cuatro &alore$ po$ible$ para e$te m3todo'
Aprendiendo OOo .a$ic 21(
Constante 1alor
com'$un'$tar'$-eet'+ell9n$ertMode'"ONN 1
com'$un'$tar'$-eet'+ell9n$ertMode'@9dT 2
com'$un'$tar'$-eet'+ell9n$ertMode'@ONS (
com'$un'$tar'$-eet'+ell9n$ertMode'+O#UMNS E
Puede$ u$ar indi$tintamente la con$tante o el &alor de e$ta como en el $i,uiente
e2emplo donde in$ertamo$ 1ila$ completa$'
"u. #ns%'&a'Rangos323
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
oRango B $'%a&%Dno"&'u*&2 "*o(-sun-s&a'-&a.l%-$%llRang%!dd'%ss" 3
U+&h oRango
-"h%%& B oHo)a!*&+9a-g%&Rang%!dd'%ss23-"h%%&
-"&a'&$olu(n B 1
-"&a'&Ro^ B 1
-End$olu(n B 3
-EndRo^ B 3
End U+&h
,#ns%'&a(os f+las *o(8l%&as
oHo)a!*&+9a-+ns%'&$%lls2 oRango7 3 3
End "u.
+uando 6uiera$ in$ertar 1ila$ o columna$ completa$% puede$ u$ar lo$ m3todo$ &i$to$
-a$ta a-ora o% puede$ u$ar lo$ m3todo$ e$pec=1ico$ del con2unto de 1ila$ * columna$ como en el
$i,uiente e2emplo donde in$ertamo$ 2 columna$ a partir de la columna >'
"u. #ns%'&a'Rangos423
A+( oHo)a!*&+9a !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
,#ns%'&a(os 2 *olu(nas a 8a'&+' d% la *olu(na E
oHo)a!*&+9a-g%&$olu(ns-+ns%'&B@#nd%x2 47 2 3
End "u.
Nota 6ue a-ora u$amo$ el m3todo insert&yInde'% 6ue e$ e$peci1ico del con2unto de
columna$% por ello primero llamado$ a *etColumns()% el primer ar,umento de e$te m3todo e$ el
=ndice de la columna donde comen/ara la in$erci4n * el $e,undo e$ el n?mero de columna$ 6ue
de$eamo$ in$ertar' >l m3todo para in$ertar 1ila$ e$ e:actamente i,ual% e:cepto por 6ue lo
llamamo$ de$de el con2unto de 1ila$ (*et8oTs) como en'
"u. #ns%'&a'Rangos523
A+( oHo)a!*&+9a !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
,#ns%'&a(os 5 f+las a 8a'&+' d% la f+la 3
oHo)a!*&+9a-g%&Ro^s-+ns%'&B@#nd%x2 27 5 3
21E )'( Manipulando ran,o$
End "u.
Para terminar e$te tema% recuerda 6ue no puede$ de$pla/ar celda$ 1uera del ran,o
de la -o2a de calculo% por lo 6ue tiene$ 6ue e&aluar 6ue ten,a$ $u1iciente e$pacio para la
in$erci4n% de lo contrario% te dar; un error en tiempo de e2ecuci4n'
=.. Eliminando ran*os
>liminar ran,o$% e$ la operaci4n in&er$a a in$ertarlo$% en e$te ca$o% tenemo$ 6ue
decidir 6ue -acer con la$ celda$ ad*acente$ al ran,o% e$ decir% como $e de$pla/ar;n% en nue$tro
primer e2emplo% mo&emo$ la$ celda$ -acia arriba'
Ho)a-'%(o9%Rang%2 $%ldas !s $%llRang%!dd'%ss7 Modo !s $%llA%l%&%Mod%3
"u. Bo''a'Rangos123
A+( oHo)a!*&+9a !s ?.)%*&
A+( o"%l !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
,Bo''a(os la s%l%**+6n a*&ual @ (o9%(os las *%ldas ha*+a a''+.a
oHo)a!*&+9a-'%(o9%Rang%2 o"%l-g%&Rang%!dd'%ss237 *o(-sun-s&a'-sh%%&-$%llA%l%&%Mod%-D0 3
End "u.
+uando $e -ace cual6uier operaci4n de borrado o eliminaci4n% e$ una buena practica
de pro,ramaci4n 6ue con1irme$ e$ta acci4n con el u$uario% $obre todo% con a6uella$ accione$ 6ue
no e$ po$ible de$-acer% e$ ca$i una re,la 6ue lo -a,a$' >n el $i,uiente e2emplo% de$pla/amo$
-acia la i/6uierda% de$pu3$ de con1irmar la eliminaci4n'
"u. Bo''a'Rangos223
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango !s ?.)%*&
A+( +R%s !s #n&%g%'
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'23-g%&!*&+9%"h%%&23
oRango B $'%a&%Dno"&'u*&2 "*o(-sun-s&a'-&a.l%-$%llRang%!dd'%ss" 3
,Es&a.l%*%(os %l 'ango E84K21
oRango B oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "E84K21" 3
Aprendiendo OOo .a$ic 215
,$onf+'(a(os la %l+(+na*+on
+R%s B MsgBox2 "Es&as s%gu'o d% .o''a' %l 'ango"7 4 C 327 "Bo''a' 'ango" 3
,"olo .o''a(os s+ %l usua'+o '%s8ond+6 "#
#f +R%s B 6 Ih%n
,Bo''a(os %l 'ango @ (o9%(os las *%ldas ha*+a la +;Gu+%'da
oHo)a!*&+9a-'%(o9%Rang%2 oRango-g%&Rang%!dd'%ss7 *o(-sun-s&a'-sh%%&-$%llA%l%&%Mod%-5EKI 3
End #f
End "u.
>n la $i,uiente tabla puede$ &er la$ po$ibilidade$ de e$te m3todo% a$= como $u$
&alore$ 6ue puede$ u$ar en &e/ de ella$'
Constante 1alor
com'$un'$tar'$-eet'+ell"eleteMode'UP 1
com'$un'$tar'$-eet'+ell"eleteMode'#>!T 2
com'$un'$tar'$-eet'+ell"eleteMode'@ONS (
com'$un'$tar'$-eet'+ell"eleteMode'+O#UMNS E
Podemo$ borrar columna$ completa$% en el $i,uiente e2emplo u$amo$ el &alor de la
con$tante en &e/ de e$ta% *a no pedimo$ con1irmaci4n% pero te recomiendo $iempre -acerla'
"u. Bo''a'Rangos323
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango !s ?.)%*&
A+( +R%s !s #n&%g%'
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'23-g%&!*&+9%"h%%&23
oRango B $'%a&%Dno"&'u*&2 "*o(-sun-s&a'-&a.l%-$%llRang%!dd'%ss" 3
,Es&a.l%*%(os %l 'ango B24A2
oRango B oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "B24A2" 3
,Bo''a(os las *olu(nas *o(8l%&as
oHo)a!*&+9a-'%(o9%Rang%2 oRango-g%&Rang%!dd'%ss7 4 3
End "u.
Al i,ual 6ue con la in$erci4n% para la eliminaci4n de 1ila$ * columna$ completa$% $e
cuenta con m3todo$ alternati&o$ acce$ible$ de$de el con2unto de 1ila$ (,et@o7$) * columna$
(,et+olumn$)% &eamo$ como'
"u. Bo''a'Rangos423
A+( oHo)a!*&+9a !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'23-g%&!*&+9%"h%%&23
,Bo''a(os 3 f+las a 8a'&+' d% la f+la 10
oHo)a!*&+9a-g%&Ro^s-'%(o9%B@#nd%x2 97 3 3
,Bo''a(os 2 *olu(nas a 8a'&+' d% la !
oHo)a!*&+9a-g%&$olu(ns-'%(o9%B@#nd%x2 07 2 3
End "u.
21) )'( Manipulando ran,o$
No $e te ol&ide $iempre con1irmar la$ eliminacione$'
=..) Copiando ran*os
+opiar ran,o$ e$ mu* $imilar a mo&erlo$% $e u$an lo$ mi$mo$ ar,umento$% un ran,o
ori,en * una celda de$tino% claro% cambia el m3todo u$ado% al i,ual 6ue cuando mo&emo$% el
de$tino $er; reempla/ado con el ori,en $in nin,?n tipo de con1irmaci4n% pero como *a $abe$
implementarla% no tiene$ problema$ con ello% I&erdadJ
Ho)a-*o8@Rang%2 A%s&+no !s $%ll!dd'%ss7 ?'+g%n !s $%llRang%!dd'%ss3
"u. $o8+a'Rangos123
A+( oHo)a!*&+9a !s ?.)%*&
A+( o?'+g%n !s ?.)%*&
A+( oA%s&+no !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'23-g%&!*&+9%"h%%&23
,Rango a *o8+a'
o?'+g%n B oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "!14B3" 3
,$%lda d%s&+no
oA%s&+no B oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "A10" 3
,$o8+a(os %l 'ango
oHo)a!*&+9a-*o8@Rang%2 oA%s&+no-g%&$%ll!dd'%ss237 o?'+g%n-g%&Rang%!dd'%ss23 3
End "u.
A di1erencia de cuando mo&emo$% el ori,en permanece tal cual * a6u= $i% $i el ran,o
contiene 1ormula$% la$ re1erencia$ relati&a$ $e a2u$tar;n autom;ticamente a la nue&a po$ici4n%
adem;$ de 6ue el ran,o ori,en permanece con la re1erencia ori,inal'
"u. $o8+a'Rangos223
A+( oHo)a!*&+9a !s ?.)%*&
A+( o?'+g%n !s ?.)%*&
A+( oA%s&+no !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
o?'+g%n B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
oA%s&+no B oHo)a!*&+9a-g%&$%llB@0os+&+on2 o?'+g%n-g%&Rang%!dd'%ss-End$olu(n C 17
o?'+g%n-g%&Rang%!dd'%ss-EndRo^ C 1 3
oHo)a!*&+9a-*o8@Rang%2 oA%s&+no-g%&$%ll!dd'%ss7 o?'+g%n-g%&Rang%!dd'%ss23 3
Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-s%l%*&2 o?'+g%n 3
End "u.
Para copiar en una -o2a di1erente% $olo tiene$ 6ue e$tablecer el de$tino
correctamente en dic-a -o2a% el $i,uiente e2emplo% copiamo$ el ran,o .2<"5 de la ultima -o2a del
documento a la celda A1 de la primera'
"u. $o8+a'Rangos323
Aprendiendo OOo .a$ic 217
A+( oHo)a?'+g%n !s ?.)%*&
A+( oHo)aA%s&+no !s ?.)%*&
A+( o?'+g%n !s ?.)%*&
A+( oA%s&+no !s ?.)%*&
oHo)a?'+g%n B Ih+s$o(8on%n&-g%&"h%%&s-g%&B@#nd%x2 Ih+s$o(8on%n&-g%&"h%%&s-g%&$oun&23 T 1 3
oHo)aA%s&+no B Ih+s$o(8on%n&-g%&"h%%&s-g%&B@#nd%x2 0 3
,Rango a *o8+a'
o?'+g%n B oHo)a?'+g%n-g%&$%llRang%B@=a(%2 "B24A5" 3
,$%lda d%s&+no
oA%s&+no B oHo)aA%s&+no-g%&$%llRang%B@=a(%2 "!1" 3
,$o8+a(os %l 'ango
oHo)aA%s&+no-*o8@Rang%2 oA%s&+no-g%&$%ll!dd'%ss237 o?'+g%n-g%&Rang%!dd'%ss23 3
Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-s%l%*&2 oA%s&+no 3
End "u.
Puede$ copiar columna$ o 1ila$ completa$'
"u. $o8+a'Rangos423
A+( oHo)a?'+g%n !s ?.)%*&
A+( oHo)aA%s&+no !s ?.)%*&
A+( o?'+g%n !s ?.)%*&
A+( oA%s&+no !s ?.)%*&
,0'+(%' ho)a
oHo)a?'+g%n B Ih+s$o(8on%n&-g%&"h%%&s-g%&B@#nd%x2 0 3
,Rango a *o8+a' *olu(na B
o?'+g%n B oHo)a?'+g%n-g%&$olu(ns-g%&B@#nd%x2 1 3
,"%gunda Ho)a
oHo)aA%s&+no B Ih+s$o(8on%n&-g%&"h%%&s-g%&B@#nd%x2 1 3
oA%s&+no B oHo)aA%s&+no-g%&$%llRang%B@=a(%2 "E1" 3
oHo)aA%s&+no-*o8@Rang%2 oA%s&+no-g%&$%ll!dd'%ss237 o?'+g%n-g%&Rang%!dd'%ss23 3
Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-s%l%*&2 oA%s&+no 3
End "u.
da,amo$ al,o mu* intere$ante% como $abemo$% cuando copiamo$ un ran,o de
celda$ * e$te ran,o tiene 1ila$ o columna$ oculta$ manualmente o por e$tar a,rupada$% la copia
re$ultante% contendr; aun% la$ 1ila$ * columna$ oculta$% con el m3todo para $eleccionar $olo la$
celda$ &i$ible$ (.uer,1isibleCells) aprendido en el capitulo anterior * el m3todo para copiar
ran,o$% podemo$ intentar -acer nue$tra &er$i4n de una -erramienta 6ue llamaremo$ L+opiar $olo
&i$ible$M% Ite pareceJ' Ante$ de 6ue $i,a$ le*endo% te in&ito a 6ue intente$ re$ol&erlo por ti mi$mo
primero% de$pu3$ c-eca mi &er$i4n * comp;rala$% claro% $olo con 1ine$ did;ctico$ pue$to 6ue
e$tamo$ aprendiendo'
"u. $o8+a'"olo1+s+.l%s123
A+( o"%l !s ?.)%*&
A+( o$u'so' !s ?.)%*&
A+( o1+s+.l%s !s ?.)%*&
A+( oHo)a?'+g%n !s ?.)%*&
A+( oHo)aA%s&+no !s ?.)%*&
A+( oRango?'+g%n !s ?.)%*&
A+( o$%ldaA%s&+no !s =%^ *o(-sun-s&a'-&a.l%-$%ll!dd'%ss
A+( *o1 !s 5ong
A+( (A+'
21F )'( Manipulando ran,o$
oHo)a?'+g%n B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
,R%f%'%n*+a a la s%l%**+6n a*&ual
o"%l B Ih+s$o(8on%n&-g%&*u''%n&"%l%*&+on23
,"+ %s una sola *%lda '%g'%sa(os la '%g+6n a*&ual
#f o"%l-g%&#(8l%(%n&a&+on=a(%23 B ""*$%ll?.)" Ih%n
o$u'so' B o"%l-g%&"8'%ad"h%%&-*'%a&%$u'so'B@Rang%2 o"%l 3
o$u'so'-*olla8s%Io$u''%n&R%g+on23
,O las *%ldas 9+s+.l%s
o1+s+.l%s B o$u'so'-Gu%'@1+s+.l%$%lls23
Els%#f o"%l-g%&#(8l%(%n&a&+on=a(%23 B ""*$%llRang%s?.)" Ih%n
o1+s+.l%s B o"%l
End #f
,s+ no ha@ *%ldas 9+s+.l%s
#f #s=ull2 o1+s+.l%s 3 Ih%n
MsgBox "=o ha@ *%ldas o*ul&as"
Els%
,!g'%ga(os una nu%9a ho)a
oHo)aA%s&+no B g%&=u%9aHo)a2 Ih+s$o(8on%n&7 oHo)a?'+g%n 3
,?.&%n%(os una (a&'+; *on las d+'%**+on%s d% &odos los 'angos
(A+' B o1+s+.l%s-g%&Rang%!dd'%ss%s23
,#&%'a(os %n *ada d+'%**+6n
Ko' *o1 B 5Bound2(A+'3 Io DBound2(A+'3
oRango?'+g%n B (A+'2 *o1 3
,5a *%lda d%s&+no &%nd'> la (+s(a d+'%**+6n d%l 'ango 8%'o %n la ho)a d%s&+no
o$%ldaA%s&+no-"h%%& B oHo)aA%s&+no-g%&Rang%!dd'%ss-"h%%&
o$%ldaA%s&+no-$olu(n B oRango?'+g%n-"&a'&$olu(n
o$%ldaA%s&+no-Ro^ B oRango?'+g%n-"&a'&Ro^
,$o8+a(os %l 'ango
oHo)aA%s&+no-*o8@Rang%2 o$%ldaA%s&+no7 oRango?'+g%n 3
=%x& *o1
,"%l%**+ona(os la nu%9a ho)a *on los da&os *o8+ados
Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-s%&!*&+9%"h%%&2 oHo)aA%s&+no 3
MsgBox "Rangos *o8+ados"
End #f
End "u.
,A%9u%l9% una nu%9a ho)a %n Ao*u(%n&o7 a la d%'%*ha d%l a'gu(%n&o Ho)a
Kun*&+on g%&=u%9aHo)a2 Ao*u(%n&o !s ?.)%*&7 Ho)a !s ?.)%*& 3 !s ?.)%*&
A+( oHo)as !s ?.)%*&
A+( *o1 !s #n&%g%'
A+( s=o(.'% !s "&'+ng
oHo)as B Ao*u(%n&o-g%&"h%%&s23
s=o(.'% B "Rangos $o8+ados"
Ao Uh+l% oHo)as-hasB@=a(%2 s=o(.'% 3
*o1 B *o1 C 1
s=o(.'% B s=o(.'% : " " : Ko'(a&2*o13
5oo8
oHo)as-+ns%'&=%^B@=a(%2 s=o(.'%7 Ho)a-g%&Rang%!dd'%ss-"h%%&C1 3
g%&=u%9aHo)a B Ao*u(%n&o-g%&"h%%&s-g%&B@=a(%2 s=o(.'% 3
End Kun*&+on
Se,uro 6ue *a &i$te 6ue no traba2a mu* bien 6ue di,amo$% claro% no e$ nada practico
6ue u$e la mi$ma direcci4n del ori,en en el de$tino pue$ lo$ dato$ 6uedan todo$ di$per$o$'
5amo$ a me2orarla% de nue&o% intenta corre,irla tu * de$pu3$ continua$'
"u. $o8+a'"olo1+s+.l%s223
A+( o"%l !s ?.)%*&
A+( o$u'so' !s ?.)%*&
A+( o1+s+.l%s !s ?.)%*&
Aprendiendo OOo .a$ic 21G
A+( oHo)a?'+g%n !s ?.)%*&
A+( oHo)aA%s&+no !s ?.)%*&
A+( oRango?'+g%n !s ?.)%*&
A+( oRango!n&%'+o' !s ?.)%*&
A+( o$%ldaA%s&+no !s =%^ *o(-sun-s&a'-&a.l%-$%ll!dd'%ss
A+( *o1 !s 5ong7 K+l !s 5ong7 $ol !s 5ong
A+( (A+'
oHo)a?'+g%n B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
o"%l B Ih+s$o(8on%n&-g%&*u''%n&"%l%*&+on23
"%l%*& $as% o"%l-g%&#(8l%(%n&a&+on=a(%
$as% ""*$%ll?.)"
o$u'so' B o"%l-g%&"8'%ad"h%%&-*'%a&%$u'so'B@Rang%2 o"%l 3
o$u'so'-*olla8s%Io$u''%n&R%g+on23
o1+s+.l%s B o$u'so'-Gu%'@1+s+.l%$%lls23
$as% ""*$%llRang%?.)"7 ""*$%llRang%s?.)"
o1+s+.l%s B o"%l-Gu%'@1+s+.l%$%lls23
End "%l%*&
#f #s=ull2 o1+s+.l%s 3 Ih%n
MsgBox "=o ha@ *%ldas o*ul&as o no %s un 'ango d% *%ldas"
Els%
K+l B 0
$ol B 0
oHo)aA%s&+no B g%&=u%9aHo)a2 Ih+s$o(8on%n&7 oHo)a?'+g%n 3
(A+' B o1+s+.l%s-g%&Rang%!dd'%ss%s23
,$o8+a(os %l 8'+(%' 'ango
oRango?'+g%n B (A+'2 0 3
o$%ldaA%s&+no-"h%%& B oHo)aA%s&+no-g%&Rang%!dd'%ss-"h%%&
,En la *%lda !1
o$%ldaA%s&+no-$olu(n B 0
o$%ldaA%s&+no-Ro^ B 0
oHo)aA%s&+no-*o8@Rang%2 o$%ldaA%s&+no7 oRango?'+g%n 3
,"+ &%n%(os (>s 'angos
#f o1+s+.l%s-g%&$oun&23 Y 1 &h%n
Ko' *o1 B 1 Io DBound2(A+'3
oRango?'+g%n B (A+'2 *o1 3
oRango!n&%'+o' B (A+'2 *o1T1 3
,1a(os su(ando *ada an*ho @ al&o d% *ada 'ango7 solo *uando *a(.+%n
#f oRango!n&%'+o'-"&a'&$olu(n B oRango?'+g%n-"&a'&$olu(n Ih%n
o$%ldaA%s&+no-Ro^ B o$%ldaA%s&+no-Ro^ C oRango!n&%'+o'-EndRo^ T
oRango!n&%'+o'-"&a'&Ro^ C 1
Els%
o$%ldaA%s&+no-$olu(n B $ol C oRango!n&%'+o'-End$olu(n T
oRango!n&%'+o'-"&a'&$olu(n C 1
o$%ldaA%s&+no-Ro^ B K+l
$ol B o$%ldaA%s&+no-$olu(n
End #f
oHo)aA%s&+no-*o8@Rang%2 o$%ldaA%s&+no7 oRango?'+g%n 3
=%x& *o1
End #f
Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-s%&!*&+9%"h%%&2 oHo)aA%s&+no 3
End #f
End "u.
A-ora $i% traba2a muc-o me2or% pero% toda&=a tiene un Lpe6ueKoM detalle% -a* un ca$o
particular donde el ran,o no conten,a celda$ oculta$ * nue$tra macro no lo in1orme% * di,o 6ue e$
un detalle por 6ue no te dar; nin,?n error * $e,uir; 1uncionando% puede$ con$iderar e&aluarlo o
de2arla a$=% pero e$o $i% tu tarea e$ encontrar e$te ca$o particular' Tambi3n% podr=a$ me2orar e$ta
macro para 6ue copie $olo dato$ o re$ultado$ de 1ormula$% e$to lo podr;$ -acer cuando ad6uiera$
lo$ conocimiento$ del pr4:imo capitulo'
220 )'( Manipulando ran,o$
=.) Manipulando datos
Oa &amo$ lle,ando a tema$ m;$ intere$ante$ * di&ertido$% donde &eremo$ como
empe/ar a interactuar con la$ celda$ de nue$tra -o2a de calculo' Para el me2or apro&ec-amiento
de e$te capitulo% tiene$ 6ue tener pre$ente lo$ di1erente$ tipo$ de dato$ 6ue $oporta +alc'
=.).1 %bteniendo datos
#a 1orma m;$ $imple * directa de obtener el contenido de una celda% e$ u$ando el
m3todo *etStrin*% 6ue te de&uel&e el contenido de la celda% tal * como $e &e en la inter1a/ del
u$uario% e$ decir% $i el contenido de la celda e$ te:to% te lo mue$tra tal cual% $i contiene una
1ormula% te mo$trara el re$ultado de dic-a 1ormula * $i e$ 1ec-a * tiene 1ormato% te la de&ol&er;
como $e &e en pantalla'
"u. Aa&os123
A+( o"%l !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
#f o"%l-g%&#(8l%(%n&a&+on=a(%23 B ""*$%ll?.)" Ih%n
,Mos&'a(os %l *on&%n+do d% la *%lda
MsgBox o"%l-g%&"&'+ng23
Els%
MsgBox ""%l%**+ona solo una *%lda"
End #f
End "u.
Si lo 6ue de$ea$ e$ de&ol&er el &alor de la celda% $e u$a el m3todo *et-alue% $i la
celda contiene te:to% e$te m3todo te de&ol&er; 0% $i tiene un &alor% dic-o &alor% $i la celda contiene
una 1ormula% depender; del tipo de re$ultado de e$ta 1ormula% $i e$ te:to de nue&o te de&ol&er; 0%
$i e$ un &alor% e$te &alor% $i tiene un error de nue&o $er; 0% $i la celda contiene una 1ec-a% te
de&ol&er; el n?mero de $erie de e$ta 1ec-a'
"u. Aa&os223
A+( o"%l !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
#f o"%l-g%&#(8l%(%n&a&+on=a(%23 B ""*$%ll?.)" Ih%n
,Mos&'a(os %l 9alo' d% la *%lda
MsgBox o"%l-g%&1alu%23
Els%
MsgBox ""%l%**+ona solo una *%lda"
End #f
End "u.
Aprendiendo OOo .a$ic 221
Tambi3n puede$ obtener la 1ormula 6ue ten,a la celda con el m3todo *etFormula% $i
la celda contiene te:to% te de&ol&er; e$te te:to% $i e$ un &alor% e$e &alor% de una 1ec-a te de&uel&e
el n?mero de $erie * $i e$ 1ormula% te de&uel&e dic-a 1ormula% inclu*endo el $i,no de i,ual (f) con
6ue empie/a toda 1ormula aun * cuando la 1ormula ten,a como re$ultado un error% tambi3n% toma
en cuenta 6ue $i la 1ormula de&uelta contiene al,una 1unci4n incorporada de +alc% como SUMA%
.US+A@5% etc% e$te m3todo te de&ol&er; el nombre de e$ta 1unci4n en in,le$ por e2emplo< SUM%
5#OOtUP% etc'
"u. Aa&os323
A+( o"%l !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
#f o"%l-g%&#(8l%(%n&a&+on=a(%23 B ""*$%ll?.)" Ih%n
,Mos&'a(os la fo'(ula d% la *%lda
MsgBox o"%l-g%&Ko'(ula23
Els%
MsgBox ""%l%**+ona solo una *%lda"
End #f
End "u.
Si de$ea$ obtener la 1ormula tal * como $e &e en la barra de 1ormula$% entonce$ u$a
la propiedad !ormula#ocal% 6ue $e comporta de 1orma mu* $imilar a ,etStrin,% e:cepto en la$
1ormula$% donde te la$ de&uel&e como aparecen en la barra de 1ormula$% como en'
"u. Aa&os423
A+( o"%l !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
#f o"%l-g%&#(8l%(%n&a&+on=a(%23 B ""*$%ll?.)" Ih%n
,Mos&'a(os la fo'(ula lo*al d% la *%lda
MsgBox o"%l-Ko'(ula5o*al
Els%
MsgBox ""%l%**+ona solo una *%lda"
End #f
End "u.
Si 6uiere$ &er la$ di1erencia$% captura &alore$ en &aria$ celda$% te:to% n?mero$%
1ec-a$ * 1ormula$% * prueba la $i,uiente macro% toma en cuenta 6ue e$to$ m3todo$ $olo lo$
puede$ u$ar en celda$ indi&iduale$% por ello -acemo$ la &alidaci4n% en una de la$ 1ormula$ u$a la
1unci4n fA#>ATO@9O()% &era$ claramente la$ di1erencia$ entre$ e$to$ m3todo$'
"u. Aa&os5()
A+( o"%l !s ?.)%*&
A+( sI(8 !s "&'+ng
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
#f o"%l-g%&#(8l%(%n&a&+on=a(%23 B ""*$%ll?.)" Ih%n
,Mos&'a(os las d+f%'%n*+as %n&'% los (S&odos
sI(8 B "g%&"&'+ng 4 " : o"%l-g%&"&'+ng : $h'2133
sI(8 B sI(8 : "g%&1alu% 4 " : o"%l-g%&1alu% : $h'2133
sI(8 B sI(8 : "g%&Ko'(ula 4 " : o"%l-g%&Ko'(ula : $h'2133
sI(8 B sI(8 : "Ko'(ula5o*al 4 " : o"%l-Ko'(ula5o*al
,Mos&'a(os %l '%sul&ado
222 )'E Manipulando dato$
MsgBox sI(8
Els%
MsgBox ""%l%**+ona solo una *%lda"
End #f
End "u.
Tambi3n puede$ obtener el tipo de contenido de la celda con *et5ype% 6ue te
de&ol&er; un entero dependiendo del contenido de la celda% &ac=a (0)% &alor (1)% te:to (2) o 1ormula
(()% de nue&o% e$te m3todo $olo e$ta di$ponible e$ una $ola celda'
"u. Aa&os6()
A+( o"%l !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
MsgBox o"%l-g%&I@8%23
End "u.
Si la celda contiene una 1ormula * e$ta de&uel&e un error% puede$ $aber 6ue error e$
con el m3todo *etError% $i la celda no contiene una 1ormula% e$te m3todo $iempre te de&ol&er; 0'
"u. Aa&os723
A+( o"%l !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
MsgBox o"%l-g%&E''o'23
End "u.
>l error di&i$i4n entre cero% de&uel&e el error 5(2% e$tablece e$te error en una 1ormula
cual6uiera para 6ue lo compruebe$% tambi3n puede$ probar con el error de cuando a una 1ormula
le 1altan ar,umento$% normalmente da el error 511'
Podr=amo$ a&enturar una primera 1orma de u$ar el m3todo correcto% de acuerdo al
contenido de la celda'
"u. Aa&os823
A+( o"%l !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
"%l%*& $as% o"%l-g%&I@8%23
$as% 0
MsgBox "5a *%lda %s&a 9a*+a"
$as% 1
MsgBox o"%l-g%&1alu%23
$as% 2
MsgBox o"%l-g%&"&'+ng23
$as% 3
#f o"%l-g%&E''o'23 B 0 Ih%n
MsgBox o"%l-Ko'(ula5o*al
Els%
MsgBox o"%l-g%&E''o'23
End #f
End "%l%*&
End "u.
Aprendiendo OOo .a$ic 22(
O $i $e con&ierte en 1unci4n'
Kun*&+on $on&%n+do$%lda2$%lda !s ?.)%*&3
A+( &(8
"%l%*& $as% $%lda-g%&I@8%23
$as% 0 4 &(8 B "5a *%lda %s&a 9a*Ha"
$as% 1 4 &(8 B $%lda-g%&1alu%23
$as% 2 4 &(8 B $%lda-g%&"&'+ng23
$as% 3
#f $%lda-g%&E''o'23 B 0 Ih%n
&(8 B $%lda-Ko'(ula5o*al
Els%
&(8 B $%lda-g%&E''o'23
End #f
End "%l%*&
$on&%n+do$%lda B &(8
End Kun*&+on
Toma en cuenta 6ue una celda te puede de&ol&er 5(2 * e$tar correcto% e$ decir 6ue
$ea por e2emplo el n?mero de al,una calle o $er el &alor de al,una acci4n * $e,uir $iendo correcto
o $er el error 5(2 * como in1ormaci4n% $e,uir $iendo correcto% a$= 6ue no tome$ la 1unci4n anterior
como de1initi&a% $ino tan $olo como una ,u=a para lo 6ue realmente nece$ite$'
A-ora $olo no$ re$ta poder llamarla de$de la celda'
"u. Aa&os923
A+( o"%l !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
MsgBox $on&%n+do$%lda 2 o"%l 3
End "u.
O con un poco de in,enio de$de cual6uier ran,o de celda$'
"u. Aa&os1023
A+( o"%l !s ?.)%*&
A+( f+l !s 5ong7 *ol !s 5ong
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
"%l%*& $as% o"%l-g%&#(8l%(%n&a&+on=a(%23
$as% ""*$%ll?.)"
MsgBox $on&%n+do$%lda 2 o"%l 3
$as% ""*$%llRang%?.)"
Ko' f+l B 0 Io o"%l-g%&Ro^s23-g%&$oun&23 T 1
Ko' *ol B 0 Io o"%l-g%&$olu(ns23-g%&$oun&23 T 1
MsgBox $on&%n+do$%lda 2 o"%l-g%&$%llB@0os+&+on2*ol7f+l3 3
=%x& *ol
=%x& f+l
End "%l%*&
End "u.
Toma en cuenta 6ue ,et+ell.*Po$ition% obtiene una re1erencia a una $ola celda% *
e$ta% e$ en /re3erencia2 a la $elecci4n ori,inal% te 6ueda de tarea% obtener lo mi$mo pero con
22E )'E Manipulando dato$
relaci4n a la -o2a completa% te do* do$ pi$ta$% u$a el mi$mo m3todo (,et+ell.*Po$ition)% pero toma
como ba$e de in1ormaci4n para lo$ ciclo$ la 6ue te de&uel&e el m3todo ,et@an,eAddre$$'
>n todo$ lo$ ca$o$ anteriore$% lo$ m3todo$ u$ado$ $olo 1uncionan cuando -acemo$
re1erencia a una $ola celda% $i 6uiere$ obtener el contenido de un ran,o de celda$% u$aremo$ el
m3todo ,et"ata% 6ue te de&uel&e una matri/ de matrice$ con el contenido de la$ celda$% pero
cuidado% ,et"ata $olo te de&uel&e la$ celda$ con &alore$% adem;$% en la$ celda$ &ac=a$ de&uel&e
un &alor un tanto Le:traKoM% puede$ &eri1icarlo con el $i,uiente e2emplo% procura $eleccionar un
ran,o pe6ueKo por6ue te mo$trar; el &alor de cada celda'
"u. Aa&os1123
A+( o"%l !s ?.)%*&
A+( (Aa&os
A+( (I(8
A+( *o1 !s 5ong7 *o2 !s 5ong
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
#f o"%l-g%&#(8l%(%n&a&+on=a(%23 B ""*$%llRang%?.)" Ih%n
,?.&%n%(os "?5? 1!5?RE"
(Aa&os B o"%l-g%&Aa&a23
Ko' *o1 B 5Bound2(Aa&os3 &o DBound2(Aa&os3
,!s+gna(os la (a&'+; +n&%'na a una &%(8o'al
(I(8 B (Aa&os2*o13
Ko' *o2 B 5Bound2(I(83 &o DBound2(I(83
MsgBox (I(82*o23
=%x&
=%x&
End #f
End "u.
>n &e/ de u$ar una matri/ de apo*o% e$ m;$ tran$parente obtener el n?mero de 1ila$
* columna$ del ran,o% un ran,o de celda$ $iempre e$ rectan,ular por lo 6ue podemo$ ,aranti/ar
6ue lo$ =ndice$ de la$ matrice$ $iempre $er;n correcto$'
"u. Aa&os1223
A+( o"%l !s ?.)%*&
A+( (Aa&os
A+( *o1 !s 5ong7 *o2 !s 5ong
A+( K+l !s 5ong7 $ol !s 5ong
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
#f o"%l-g%&#(8l%(%n&a&+on=a(%23 B ""*$%llRang%?.)" Ih%n
,?.&%n%(os "?5? 1!5?RE"
(Aa&os B o"%l-g%&Aa&a23
,?.&%n%(os %l n<(%'o d% f+las @ *olu(nas
K+l B o"%l-g%&Ro^s-g%&$oun&23 T 1
$ol B o"%l-g%&$olu(ns-g%&$oun&23 T 1
Ko' *o1 B 0 Io K+l
Ko' *o2 B 0 &o $ol
,Es (>s *la'o %l a**%so a la (a&'+;
MsgBox (Aa&os 2*o13 2*o23
=%x&
=%x&
End #f
End "u.
Aprendiendo OOo .a$ic 225
Si 6uiere$ obtener el contenido $ea cual $ea% u$a la mi$ma e$tructura% pero en &e/
de u$ar ,et"ata% u$a ,et"ataArra* como en'
"u. Aa&os1323
A+( o"%l !s ?.)%*&
A+( (Aa&os
A+( *o1 !s 5ong7 *o2 !s 5ong
A+( K+l !s 5ong7 $ol !s 5ong
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
#f o"%l-g%&#(8l%(%n&a&+on=a(%23 B ""*$%llRang%?.)" Ih%n
,?.&%n%(os &odos los da&os
(Aa&os B o"%l-g%&Aa&a!''a@23
,?.&%n%(os %l n<(%'o d% f+las @ *olu(nas
K+l B o"%l-g%&Ro^s-g%&$oun&23 T 1
$ol B o"%l-g%&$olu(ns-g%&$oun&23 T 1
Ko' *o1 B 0 Io K+l
Ko' *o2 B 0 &o $ol
,Es (>s *la'o %l a**%so a la (a&'+;
MsgBox (Aa&os 2*o13 2*o23
=%x&
=%x&
End #f
End "u.
O $i lo 6ue 6uiere$ e$ el contenido de la$ celda$% como $i -ubie$e$ u$ado en cada
una el m3todo ,et!ormula% u$a$ ,et!ormulaArra*'
"u. Aa&os1423
A+( o"%l !s ?.)%*&
A+( (Aa&os
A+( *o1 !s 5ong7 *o2 !s 5ong
A+( K+l !s 5ong7 $ol !s 5ong
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
#f o"%l-g%&#(8l%(%n&a&+on=a(%23 B ""*$%llRang%?.)" Ih%n
,?.&%n%(os &odos los da&os
(Aa&os B o"%l-g%&Ko'(ula!''a@23
,?.&%n%(os %l n<(%'o d% f+las @ *olu(nas
K+l B o"%l-g%&Ro^s-g%&$oun&23 T 1
$ol B o"%l-g%&$olu(ns-g%&$oun&23 T 1
Ko' *o1 B 0 Io K+l
Ko' *o2 B 0 &o $ol
,Es (>s *la'o %l a**%so a la (a&'+;
MsgBox (Aa&os 2*o13 2*o23
=%x&
=%x&
End #f
End "u.
"e la combinaci4n de lo$ m3todo$ &i$to$ en e$te tema% puede$ acceder a cual6uier
in1ormaci4n de una celda o un ran,o de celda$% &eamo$ a-ora como introducir in1ormaci4n'
22) )'E Manipulando dato$
=.).2 Introduciendo datos
#o$ m3todo$ para introducir dato$ en celda$% $on m;$ o meno$ lo$ mi$mo$ 6ue para
obtenerlo$% pero en &e/ de obtenerlo$ (,et) lo$ e$tablecemo$ ($et)'
Para el ca$o de cadena$ de te:to% u$amo$ $etStrin,% toma en cuenta 6ue e$te
m3todo reempla/ar; el contenido de la celda $in pre,untarte nada'
"u. #n&'odu*+'123
A+( o"%l !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
#f o"%l-g%&#(8l%(%n&a&+on=a(%23 B ""*$%ll?.)" Ih%n
,#ns%'&a(os una *ad%na %n la *%lda
o"%l-s%&"&'+ng2 "=ad+% %s&a (>s 8%'d+do Gu% Gu+%n no sa.% a dond% 9a" 3
Els%
MsgBox ""%l%**+ona solo una *%lda"
End #f
End "u.
Para &alore$ u$amo$ $et5alue% del mi$mo modo 6ue $etStrin,% $implemente
reempla/ar; el contenido de la celda $in con$ultarte'
"u. #n&'odu*+'223
A+( o"%l !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
#f o"%l-g%&#(8l%(%n&a&+on=a(%23 B ""*$%ll?.)" Ih%n
,#ns%'&a(os un 9alo' %n la *%lda
o"%l-s%&1alu%2 34 3
Els%
MsgBox ""%l%**+ona solo una *%lda"
End #f
End "u.
Oa lo -abr;$ intuido% para la$ 1ormula$ podemo$ u$ar $et!ormula% la 1ormula debe
e$tar como una cadena de te:to * debe $er una 1ormula &;lida'
"u. #n&'odu*+'323
A+( o"%l !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
#f o"%l-g%&#(8l%(%n&a&+on=a(%23 B ""*$%ll?.)" Ih%n
,#ns%'&a(os una fo'(ula
o"%l-s%&Ko'(ula2 "B!1C!5" 3
Els%
MsgBox ""%l%**+ona solo una *%lda"
End #f
End "u.
Si introduce$ una 1ormula no &;lida% e$te m3todo no te dar; nin,?n error% pero $i lo
obtendr;$ en la inter1a/ del u$uario% como en el $i,uiente e2emplo'
Aprendiendo OOo .a$ic 227
"u. #n&'odu*+'423
A+( o"%l !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
#f o"%l-g%&#(8l%(%n&a&+on=a(%23 B ""*$%ll?.)" Ih%n
,#ns%'&a(os una fo'(ula no 9al+da
o"%l-s%&Ko'(ula2 "B$2T$3C" 3
End #f
End "u.
Si -ace u$o de 1uncione$ incorporada$ de OpenO11ice'or,% tiene$ 6ue u$ar el nombre
en in,le$ de la 1unci4n a u$ar% tambi3n% lo$ ar,umento$ deben e$tar correctamente e$tablecido$%
a$= como lo$ tipo$ de e$to$ para 6ue no te de&uel&a nin,?n error'
"u. #n&'odu*+'523
A+( o"%l !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
#f o"%l-g%&#(8l%(%n&a&+on=a(%23 B ""*$%ll?.)" Ih%n
,#ns%'&a(os una fo'(ula *on fun*+6n
o"%l-s%&Ko'(ula2 "B"DM2!14!103" 3
End #f
End "u.
Si pre1iere$ u$ar lo$ nombre$ de la$ 1uncione$ en e$paKol% en &e/ de e$te m3todo%
u$a la propiedad !ormula#ocal% el $i,uiente e2emplo -ace lo mi$mo 6ue el anterior'
"u. #n&'odu*+'623
A+( o"%l !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
#f o"%l-g%&#(8l%(%n&a&+on=a(%23 B ""*$%ll?.)" Ih%n
,#ns%'&a(os una fo'(ula *on fun*+6n
o"%l-Ko'(ula5o*al B "B"DM!2!14!103"
End #f
End "u.
>n el Ap3ndice te mue$tro una li$ta de e6ui&alencia$ de la$ 1ormula$ 6ue incorpora
+alc en e$paKol e in,le$% a$= puede$ u$ar el m3todo 6ue 6uiera$'
+uando 6ueramo$ introducir &alore$ en ran,o$ de celda$% -a* 6ue tener la
precauci4n de e$tablecer el ran,o de$tino% Le:actamenteM del mi$mo anc-o * alto de la matri/
ori,en% de lo contrario te dar; un error en tiempo de e2ecuci4n'
"u. #n&'odu*+'723
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango !s ?.)%*&
A+( (Aa&os243
(Aa&os203 B !''a@2172733
(Aa&os213 B !''a@2475763
22F )'E Manipulando dato$
(Aa&os223 B !''a@2778793
(Aa&os233 B !''a@2107117123
(Aa&os243 B !''a@2137147153
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'23-g%&!*&+9%"h%%&23
,El 'ango dond% s% +ns%'&a'an los 9alo'%s7 "d%.%"
,s%' d%l (+s(o &a(a\o %n an*ho @ al&o d% la (a&'+;
oRango B oHo)a!*&+9a-g%&$%llRang%B@=a(%2"!14$5"3
,#ns%'&a(os la (a&'+; *o(8l%&a
oRango-s%&Aa&a2 (Aa&os 3
End "u.
Tambi3n% toma nota de 6ue con el m3todo $et"ata% $olo puede$ introducir &alore$% $i
la matri/ lle&a al,una cadena de te:to% e$te m3todo la reempla/ara por 0% para &alore$ * cadena$%
debe$ u$ar $et"ataArra*'
"u. #n&'odu*+'823
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango !s ?.)%*&
A+( (Aa&os243
(Aa&os203 B !''a@2"=o"7"=o(.'%"7"I%l"3
(Aa&os213 B !''a@217"Elo'+a"7123456783
(Aa&os223 B !''a@217"0aola"7234567893
(Aa&os233 B !''a@237"5+d+a"7345678913
(Aa&os243 B !''a@247"5+;%&&%"7876543213
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'23-g%&!*&+9%"h%%&23
,El 'ango dond% s% +ns%'&a'an los 9alo'%s7 "d%.%"
,s%' d%l (+s(o &a(a\o %n an*ho @ al&o d% la (a&'+;
oRango B oHo)a!*&+9a-g%&$%llRang%B@=a(%2"!14$5"3
,#ns%'&a(os la (a&'+; *o(8l%&a
oRango-s%&Aa&a!''a@2 (Aa&os 3
End "u.
Si tu$ dato$ a introducir inclu*en 1ormula$% e$ me2or 6ue u$e$ $et!ormulaArra*'
"u. #n&'odu*+'923
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango !s ?.)%*&
A+( (Aa&os243
(Aa&os203 B !''a@2"=o"7"=o(.'%"7"I%l"3
(Aa&os213 B !''a@217"Elo'+a"7"BR!=A23"3
(Aa&os223 B !''a@217"0aola"7"B!3"3
(Aa&os233 B !''a@237"5+d+a"7"B"DM2!24!43"3
(Aa&os243 B !''a@247"5+;%&&%"7"BR!=A23"3
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'23-g%&!*&+9%"h%%&23
oRango B oHo)a!*&+9a-g%&$%llRang%B@=a(%2"!14$5"3
,#ns%'&a(os la (a&'+; *o(8l%&a
oRango-s%&Ko'(ula!''a@2 (Aa&os 3
End "u.
Aprendiendo OOo .a$ic 22G
=.). &orrando datos
Para borrar dato$ de celda$ u$amo$ el m3todo clear+ontent$% e$te m3todo re6uiere
un entero indic;ndole el tipo de contenido 6ue de$eamo$ borrar% por e2emplo &alore$ (1)% te:to$ (E)
o 1ormula$ (1))% e$te m3todo e$ta pre$ente en lo$ tre$ tipo$ de ran,o$ &i$to$% por lo 6ue $olo
tiene$ 6ue a$e,urarte 6ue e1ecti&amente $ea un ran,o de celda$'
>n el $i,uiente e2emplo% $e borran $olo la$ celda$ con &alore$% te:to$ * 1ormula$% de
tre$ ran,o$ di1erente$'
"u. Bo''ando123
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'23-g%&!*&+9%"h%%&23
oRango B oHo)a!*&+9a-g%&$%llRang%B@=a(%2"!14$5"3
,Bo''a(os solo los 9alo'%s
oRango-*l%a'$on&%n&s2 1 3
oRango B oHo)a!*&+9a-g%&$%llRang%B@=a(%2"A24E10"3
,Bo''a(os solo los &%x&o
oRango-*l%a'$on&%n&s2 4 3
oRango B oHo)a!*&+9a-g%&$%llRang%B@=a(%2"E14J100"3
,Bo''a(os solo las fo'(ulas
oRango-*l%a'$on&%n&s2 16 3
End "u.
Puede$ $umar lo$ &alore$ de lo$ tipo$ a borrar% en el $i,uiente e2emplo% $e borra lo$
te:to$ * la$ 1ormula$ del ran,o $eleccionado'
"u. Bo''ando223
A+( o"%l !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
,Bo''a(os los &%x&os 243 C fo'(ulas 2163
o"%l-*l%a'$on&%n&s2 20 3
End "u.
#o$ &alore$ permitido$ para e$te m3todo% e$t;n condicionado$ por la$ con$tante$ del
,rupo com'$un'$tar'$-eet'+ell!la,$% cu*o$ &alore$ $e li$tan en la $i,uiente tabla'
Constante 1alor
com'$un'$tar'$-eet'+ell!la,$'5A#U> 1
com'$un'$tar'$-eet'+ell!la,$'"AT>T9M> 2
com'$un'$tar'$-eet'+ell!la,$'ST@9N E
com'$un'$tar'$-eet'+ell!la,$'ANNOTAT9ON F
com'$un'$tar'$-eet'+ell!la,$'!O@MU#A 1)
com'$un'$tar'$-eet'+ell!la,$'dA@"ATT@ (2
com'$un'$tar'$-eet'+ell!la,$'STO#>S )E
2(0 )'E Manipulando dato$
Constante 1alor
com'$un'$tar'$-eet'+ell!la,$'O.j>+T 12F
com'$un'$tar'$-eet'+ell!la,$'>"9TATT@ 25)
com'$un'$tar'$-eet'+ell!la,$'!O@MATT>" 512
Puede$ u$ar de 1orma indi$tinta la$ con$tante$ o lo$ &alore$ de e$ta$% a$= como
cual6uier combinaci4n de ella$' >l $i,uiente e2emplo borra LtodoM te de2a la $elecci4n como nue&a'
"u. Bo''ando323
A+( o"%l !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
,Bo''a(os &odo
o"%l-*l%a'$on&%n&s2 1023 3
End "u.
=.).) 4lenando series de datos
#lenar $erie$ e$ un m3todo mu* di&ertido de introducir dato$ en nue$tra -o2a de
calculo% e:i$ten do$ 1orma$ de -acerlo% en ,eneral la 1orma autom;tica 1uncionara $i $e e$tablecen
correctamente lo$ &alore$ iniciale$% ob$er&a la $i,uiente ima,en% en la celda A1 tenemo$ $olo un
&alor * en la columna + como 6ueremo$ 6ue 6uede nue$tra $erie'
>l c4di,o para lo,rar e$to e$ el $i,uiente% ob$er&a 6ue $encillo'
"u. 5l%nando"%'+%s123
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
oRango B oHo)a!*&+9a-g%&$%llRang%B@=a(%2"!14!15"3
,5l%na(os ha*+a a.a)o
oRango-f+ll!u&o2 07 1 3
Aprendiendo OOo .a$ic 2(1
End "u.
>l m3todo 1illAuto% $olo re6uiere do$ ar,umento$% el primero e$ para indicarle la
direcci4n del llenado en nue$tro e2emplo% aba2o (TOQ.OTTOM f 0) * un entero 6ue le indica%
cuanta$ celda$ del ran,o tomara como L,u=a$M para determinar el al,oritmo de llenado' >n la
$i,uiente tabla e$t;n la$ cuatro po$ibilidade$ del ar,umento Ldirecci4nM de e$te m3todo'
Constante 1alor
com'$un'$tar'$-eet'!ill"irection'TOQ.OTTOM 0
com'$un'$tar'$-eet'!ill"irection'TOQ@9dT 1
com'$un'$tar'$-eet'!ill"irection'TOQTOP 2
com'$un'$tar'$-eet'!ill"irection'TOQ#>!T (
Si 6ui$i3ramo$ llenar el ran,o con n?mero$ pare$% lo -ar=amo$ a$='
"u. 5l%nando"%'+%s223
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'23-g%&!*&+9%"h%%&23
oRango B oHo)a!*&+9a-g%&$%llRang%B@=a(%2"!14!15"3
,Es&a.l%*%(os los 9alo'%s gu+as
oHo)a!*&+9a-g%&$%llRang%B@=a(%2"!1"3-s%&1alu%2 2 3
oHo)a!*&+9a-g%&$%llRang%B@=a(%2"!2"3-s%&1alu%2 4 3
,5l%na(os ha*+a a.a)o7 no&a Gu% aho'a &o(a(os dos *%ldas *o(o guHas
oRango-f+ll!u&o2 07 2 3
End "u.
Por $upue$to no $olo con n?mero$ e$ po$ible% el $i,uiente c4di,o e$tablece el ran,o
A1<#1 con lo$ me$e$ del aKo'
"u. 5l%nando"%'+%s323
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
oRango B oHo)a!*&+9a-g%&$%llRang%B@=a(%2"!1451"3
,Es&a.l%*%(os %l 9alo' guHa
oHo)a!*&+9a-g%&$%llRang%B@=a(%2"!1"3-s%&"&'+ng2 "%n%'o" 3
,5l%na(os a la d%'%*ha
oRango-f+ll!u&o2 17 1 3
End "u.
>$to e$ po$ible por 6ue e$ta li$ta &iene de 1orma predeterminada en OpenO11ice'or,%
e$ta * otra$ li$ta$% la$ puede$ per$onali/ar en el men? #erramientas $ Opciones%%%% dentro de la
rama OpenO11ice'or, +alc% $ubrama Ordenar li$ta$'
"onde m;$ me ,u$ta el llenado de $erie$% e$ en la 1orma tran$parente de copiar o
llenar un ran,o con una 1ormula de$eada% por e2emplo% ob$er&a la $i,uiente ima,en
2(2 )'E Manipulando dato$
>l 1in e$ e$tablecer la 1ormula para calcular la edad de cada per$ona% para 1ine$
did;ctico$ daremo$ por buena la edad% $olo re$tando el aKo actual de la de nacimiento% ob$er&a
6ue lo$ dato$ terminan en la 1ila 1001 pero e$o no importa% pueden terminar en la 1000 o la 6ue
$ea pue$ e$to lo determinaremo$ por c4di,o% de la $i,uiente 1orma'
"u. 5l%nando"%'+%s423
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango !s ?.)%*&
A+( o$u'so' !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
oRango B oHo)a!*&+9a-g%&$%llRang%B@=a(%2"!1"3
,Es&a.l%*%(os la 8'+(%' fo'(ula
oHo)a!*&+9a-g%&$%llRang%B@=a(%2"A2"3-s%&Ko'(ula2 "BOE!R2=?U233T$2" 3
,$'%a(os un *u'so' a 8a'&+' d% la 8'+(%' *%lda
o$u'so' B oHo)a!*&+9a-*'%a&%$u'so'B@Rang%2 oRango 3
,Ex8and+(os a la '%g+6n a*&ual
o$u'so'-*olla8s%Io$u''%n&R%g+on23
,$ons&'u+(os %l 'ango a ll%na'
oRango B oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "A24A" : $"&'2o$u'so'-g%&Ro^s23-g%&$oun&233 3
,5l%na(os ha*+a a.a)o
oRango-f+ll!u&o2 07 1 3
End "u.
Para e$tablecer la 1ormula% como *a lo &imo$% puede$ u$ar tambi3n la$ propiedade$
!ormula#ocal% nue$tra 1ormula de e2emplo 6uedar=a a$='
oHo)a!*&+9a-g%&$%llRang%B@=a(%2"A2"3-Ko'(ula5o*al B "B!_?2!H?R!233T$2"
Ob$er&a como obtenemo$ la ultima 1ila del ran,o u$ado con la a*uda del cur$or * el
m3todo o+ur$or',et@o7$()',et+ount()% * con una $ola l=nea m;$% llenamo$ todo el ran,o'
Aprendiendo OOo .a$ic 2((
=.).! &uscar y reempla9ar
#a b?$6ueda * reempla/o en OpenO11ice'or, e$ una -erramienta mu* podero$a% $i
bien tiene tanta$ &ariante$ como la$ 6ue puede$ &er en< &ditar $ Buscar , reemplazar%%%% no$
limitaremo$ a la$ opcione$ m;$ comune$ * ,enerale$% 6ued;ndote de tarea la in&e$ti,aci4n del
re$to' U$aremo$ para nue$tra$ prueba$ la $i,uiente tabla de dato$% 6ue% no e$ re$tricti&a% puede$
u$ar la 6ue ,u$te$% pero e$ta pe6ueKa no$ permite comprobar r;pidamente lo$ re$ultado$ para
&eri1icar 6ue 1unciona correctamente% de$pu3$% puede$ u$ar li$tado$ del tamaKo 6ue 6uiera$ * lo$
recur$o$ de tu e6uipo te lo permitan'
0U 0ombre (<o Edad
1 ed,ar 1G75 ((
2 ,loria 1G7) (2
( antonio 1G)5 E(
E lidia 1G)) E2
5 paola 1G7E (E
) &ane$$a 1G7) (2
7 li/ette 1G75 ((
F ed,ar 1G)G (G
G ,loria 1G71 (7
10 antonio 1G)G (G
11 lidia 1G7( (5
12 paola 1G75 ((
1( &ane$$a 1G75 ((
1E li/ette 1G)7 E1
15 ed,ar 1G75 ((
1) ,loria 1G)5 E(
17 antonio 1G)7 E1
1F lidia 1GF0 2F
>n la$ b?$6ueda$% $e u$a un Lde$criptor de b?$6uedaM 6ue no e$ otra co$a 6ue una
e$tructura donde le indicamo$ la$ caracter=$tica$ de la b?$6ueda * lo 6ue e$tamo$ bu$cando * un
lu,ar para bu$car% 6ue e$ el ran,o donde 6ueremo$ -acer la b?$6ueda% por $upue$to puede$
bu$car en toda la -o2a% inclu$o en toda$ la$ -o2a$% la 1orma m;$ $encilla de una b?$6ueda e$ la
$i,uiente'
"u. Bus*a'123
A+( oHo)a!*&+9a !s ?.)%*&
A+( oBus*a'En !s ?.)%*&
A+( oEn*on&'ado !s ?.)%*&
A+( o"A !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
,Es&a.l%*%(os %l 'ango dond% .us*a'%(os
oBus*a'En B oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "!14A19" 3
2(E )'E Manipulando dato$
,$'%a(os %l d%s*'+8&o' d% .usGu%da
o"A B oHo)a!*&+9a-*'%a&%"%a'*hA%s*'+8&o'
,Es&a.l%*%(os lo Gu% %s&a(os .us*ando
o"A-s%&"%a'*h"&'+ng2 "33" 3
,R%al+;a(os la .usGu%da d% I?A!" las *o+n*+d%n*+as
oEn*on&'ado B oBus*a'En-f+nd!ll2 o"A 3
,"+ no ha@ *o+n*+d%n*+as oEn*on&'ado B =ull
#f =o& #s=ull2 oEn*on&'ado 3 Ih%n
,"+ %n*u%n&'a algo lo s%l%**+ona(os
Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-s%l%*&2 oEn*on&'ado 3
Els%
MsgBox "=o s% %n*on&'a'on *o+n*+d%n*+as"
End #f
End "u.
O nue$tra primera b?$6ueda no$ de&uel&e el men$a2e LNo $e encontraron
coincidencia$M% Ipor 6u3 $i aparentemente $i tenemo$ &alore$ (( en nue$tro$ dato$J% la re$pue$ta
e$ 6ue la b?$6ueda predeterminada $e -ace bu$cando dentro de la$ 1ormula$% * todo$ lo$ (( 6ue
&e$ en la li$ta $on el Lre$ultadoM de una 1ormula% dic-a 1ormula e$< fAuO(AdO@A())-+2% a-ora%
e$tablece el &alor bu$cado en LaM * reali/a la b?$6uedaQ oS"'$etSearc-Strin,( HaH )'
A-ora no$ pa$a al re&3$% de&ol&emo$ dema$iado$ re$ultado$% I&erdadJ% la ra/4n e$
la mi$ma% la b?$6ueda predeterminada $e -ace por 1ormula$% ob$er&a 6ue $elecciono toda$ la$
celda$ de la columna . 6ue tienen la letra LaM * toda$ la$ celda$ de la columna + * "% la 1ormula
de la columna " *a la &imo$ * contiene la letra bu$cada% la 1ormula de la columna + e$<
fA#>ATO@9O'>NT@>(1G)581GF0)% como &e/% tambi3n tienen la letra LaM entre $u te:to% por ello% la
b?$6ueda te de&uel&e todo% lo cual e$ correcto% la b?$6ueda e$ta bien% lo 6ue tenemo$ 6ue -acer
e$ di$criminar un poco m;$ con lo$ criterio$ de b?$6ueda% no nece$ariamente tiene 6ue $er m;$
re$tricti&a% $ino acorde a lo 6ue Le$ta$ bu$candoM% * claro% lo 6ue e$pera$ de&ol&er% re,re$emo$ a
nue$tro primer e2emplo * a,re,uemo$ una propiedad a la b?$6ueda% a-ora% le diremo$ 6ue bu$6ue
por &alore$% para 6ue bu$6ue en el Lre$ultadoM de la$ 1ormula$% no LdentroM de la$ 1ormula$% e$to lo
lo,ramo$ con la propiedad< $earc-T*pe'
"u. Bus*a'323
A+( oHo)a!*&+9a !s ?.)%*&
A+( oBus*a'En !s ?.)%*&
A+( oEn*on&'ado !s ?.)%*&
Aprendiendo OOo .a$ic 2(5
A+( o"A !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'23-g%&!*&+9%"h%%&23
oBus*a'En B oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "!14A19" 3
,$'%a(os %l d%s*'+8&o' d% .usGu%da
o"A B oHo)a!*&+9a-*'%a&%"%a'*hA%s*'+8&o'
,Bus*a(os 8o' 9alo'%s
o"A-s%a'*hI@8% B 1
,Es&a.l%*%(os lo Gu% %s&a(os .us*ando
o"A-s%&"%a'*h"&'+ng2 "33" 3
,R%al+;a(os la .usGu%da d% I?A!" las *o+n*+d%n*+as
oEn*on&'ado B oBus*a'En-f+nd!ll2 o"A 3
,"+ no ha@ *o+n*+d%n*+as oEn*on&'ado B =ull
#f =o& #s=ull2 oEn*on&'ado 3 Ih%n
,"+ %n*u%n&'a algo lo s%l%**+ona(os
Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-s%l%*&2 oEn*on&'ado 3
Els%
MsgBox "=o s% %n*on&'a'on *o+n*+d%n*+as"
End #f
End "u.
Muc-o me2or I&erdadJ% a-ora $i% $olo la$ celda$ con el &alor (( $on $eleccionada$%
prueba a e$tablecer la b?$6ueda con la letra LaM o cual6uiera 6ue tu 6uiera$ * ob$er&a lo$
re$ultado$% e$ mu* importante 6ue $epa$ 6ue el re$ultado e$ una colecci4n de ran,o$% aun%
cuando * $olo te de&uel&a un $olo ran,o% e$te% 1ormar; parte de dic-a colecci4n% en el tema
@e1erencia a &ario$ ran,o$% tratamo$ como mane2ar e$te tipo de ran,o$'
+omo $i,uiente prueba% e$tablece la b?$6ueda en oS"'$etSearc-Strin,( HliH ) *
ob$er&a el re$ultado'
Nota 6ue la$ b?$6ueda$ la$ puede -acer en parte$ del te:to% pero podemo$
re$trin,irla a palabra$ completa$ con la propiedad $earc-Nord$% como en'
"u. Bus*a'423
A+( oHo)a!*&+9a !s ?.)%*&
A+( oBus*a'En !s ?.)%*&
A+( oEn*on&'ado !s ?.)%*&
A+( o"A !s ?.)%*&
2() )'E Manipulando dato$
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
oBus*a'En B oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "!14A19" 3
o"A B oHo)a!*&+9a-*'%a&%"%a'*hA%s*'+8&o'
o"A-s%a'*hI@8% B 1
,Bus*a(os 8o' 8ala.'as *o(8l%&as
o"A-s%a'*hUo'ds B I'u%
o"A-s%&"%a'*h"&'+ng2 "l+" 3
oEn*on&'ado B oBus*a'En-f+nd!ll2 o"A 3
#f =o& #s=ull2 oEn*on&'ado 3 Ih%n
Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-s%l%*&2 oEn*on&'ado 3
Els%
MsgBox "=o s% %n*on&'a'on *o+n*+d%n*+as"
End #f
End "u.
#a b?$6ueda anterior te tiene 6ue de&ol&er HNo $e encontraron coincidencia$H% por
6ue no -a* palabra$ completa$ 6ue $ean LliM% prueba a reempla/ar la cadena bu$cada por el
nombre 6ue m;$ de ,u$te de lo$ e:i$tente$ en nue$tra li$ta% por e2emplo Lli/etteM * obtendremo$'
Por 6ue e$tamo$ -aciendo la b?$6ueda por palabra$ completa$' Podemo$ -acerla
aun m;$ re$tricti&a% $i e$tablecemo$ 6ue di$tin,a entre ma*?$cula$ * min?$cula$ con la propiedad
Searc-+a$eSen$iti&e de la $i,uiente manera'
"u. Bus*a'523
A+( oHo)a!*&+9a !s ?.)%*&
A+( oBus*a'En !s ?.)%*&
A+( oEn*on&'ado !s ?.)%*&
A+( o"A !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'23-g%&!*&+9%"h%%&23
oBus*a'En B oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "!14A19" 3
o"A B oHo)a!*&+9a-*'%a&%"%a'*hA%s*'+8&o'
o"A-s%a'*hI@8% B 1
o"A-s%a'*hUo'ds B Kals%
,A+s&+ngu+(os (a@us*ulas d% (+nus*ulas
o"A-"%a'*h$as%"%ns+&+9% B I'u%
o"A-s%&"%a'*h"&'+ng2 "!" 3
oEn*on&'ado B oBus*a'En-f+nd!ll2 o"A 3
#f =o& #s=ull2 oEn*on&'ado 3 Ih%n
Aprendiendo OOo .a$ic 2(7
Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-s%l%*&2 oEn*on&'ado 3
Els%
MsgBox "=o s% %n*on&'a'on *o+n*+d%n*+as"
End #f
End "u.
Ob$er&a 6ue -emo$ &uelto a e$tablecer $earc-Nord$ en !al$e para 6ue encuentre
parte$ de la$ palabra$' >n la b?$6ueda anterior% ?nicamente te tiene 6ue re,re$ar la celda +1 6ue
contiene la palabra LAKoM' 9nclu$o% puede$ reali/ar b?$6ueda$ dentro de la$ nota$ de la$ celda$ $i
e$tablece$ la propiedad $earc-T*pe f 2'
>l reempla/o e$ la continuaci4n de la b?$6ueda% e$ decir% para reempla/ar al,o%
primero $e tiene 6ue bu$car% &eamo$ un e2emplo $encillo * de$pu3$ la e:plicaci4n% continuamo$
-aciendo u$o de nue$tra tabla u$ada en la b?$6ueda'
"u. R%%(8la;a'123
A+( oHo)a!*&+9a !s ?.)%*&
A+( oBus*a'En !s ?.)%*&
A+( lR%%(8la;ados !s 5ong
A+( oRA !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'23-g%&!*&+9%"h%%&23
oBus*a'En B oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "!14A19" 3
,$'%a(os %l d%s*'+8&o' d% '%%(8la;o
oRA B oHo)a!*&+9a-*'%a&%R%8la*%A%s*'+8&o'
,I%x&o a .us*a'
oRA-s%&"%a'*h"&'+ng2 "Ba\o" 3
,R%%(8la;ado 8o'
oRA-s%&R%8la*%"&'+ng2 "B(%s" 3
,El (S&odo d%9u%l9% %l nu(%'o d% '%%(8la;os Gu% &u9+%'on Sx+&o
lR%%(8la;ados B oBus*a'En-'%8la*%!ll2 oRA 3
#f lR%%(8la;ados B 0 Ih%n
MsgBox "=o s% %n*on&'a'on *o+n*+d%n*+as"
Els%
MsgBox ""% '%al+;a'on " : lR%%(8la;ados : " '%%(8la;os"
End #f
End "u.
Ob$er&a 6ue a-ora% en &e$ de un de$criptor de b?$6ueda (createSearc-"e$criptor)%
creamo$ un de$criptor de reempla/o (create@eplace"e$criptor)% e$tablecemo$ el &alor bu$cado
($etSearc-Strin,) * el &alor por el 6ue $e reempla/ara ($et@eplaceStrin,)% e$te m3todo
(replaceAll) de&uel&e un entero lar,o (lon,) con el n?mero total de reempla/o$ 6ue tu&ieron 3:ito%
$i e$ cero no encontr4 coincidencia$' >n la columna " de nue$tro$ dato$ de e2emplo% ten=amo$ la
1ormula fAuO(AdO@A())-+2% de$pu3$ de e2ecutar la macro anterior% deber=amo$ tener en e$ta
columna la 1ormula fM>S(AdO@A())-+2% como lo podemo$ comprobar en la $i,uiente ima,en'
2(F )'E Manipulando dato$
A-ora% reempla/aremo$ palabra$ completa$% con el $i,uiente c4di,o% mi ami,o >d,ar
no me reclamar; nada $i lo cambio por Nisole% de -ec-o me 1elicitar;'
"u. R%%(8la;a'223
A+( oHo)a!*&+9a !s ?.)%*&
A+( oBus*a'En !s ?.)%*&
A+( lR%%(8la;ados !s 5ong
A+( oRA !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'23-g%&!*&+9%"h%%&23
oBus*a'En B oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "!14A19" 3
oRA B oHo)a!*&+9a-*'%a&%R%8la*%A%s*'+8&o'
oRA-s%&"%a'*h"&'+ng2 "%dga'" 3
oRA-s%&R%8la*%"&'+ng2 "n+]ol%" 3
,5% +nd+*a(os Gu% .usGu% 8ala.'as *o(8l%&as
oRA-s%a'*hUo'ds B I'u%
lR%%(8la;ados B oBus*a'En-'%8la*%!ll2 oRA 3
#f lR%%(8la;ados B 0 Ih%n
MsgBox "=o s% %n*on&'a'on *o+n*+d%n*+as"
Els%
MsgBox ""% '%al+;a'on " : lR%%(8la;ados : " '%%(8la;os"
End #f
End "u.
A &ece$% e$ con&eniente -acer primero una b?$6ueda * comprobar 6ue e$ta correcta
para de$pu3$ -acer el reempla/o% $i tu$ b?$6ueda$ e$t;n bien e$tablecida$% Lca$iM puede$ e$tar
$e,uro de 6ue el reempla/o lo e$tar;'
=.).= 5rabajando con notas
#a$ nota$% en la$ celda$ de una -o2a de calculo% $on mu* 1;cile$ de mane2ar% en el
$i,uiente e2emplo% in$ertamo$ una nue&a nota en la celda >7'
"u. =o&as123
A+( oHo)a!*&+9a !s ?.)%*&
A+( o=o&as !s ?.)%*&
A+( oA+'$%lda !s =%^ *o(-sun-s&a'-&a.l%-$%ll!dd'%ss
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
,?.&%n%(os la *ol%**+6n d% no&as d% la ho)a a*&+9a
o=o&as B oHo)a!*&+9a-g%&!nno&a&+ons23
,5a *%lda dond% +ns%'&a'%(os la no&a
oA+'$%lda-$olu(n B 4
oA+'$%lda-Ro^ B 6
,#ns%'&a(os la no&a
o=o&as-+ns%'&=%^2 oA+'$%lda7 "0'%su8u%s&o a8'o.ado" 3
End "u.
Para $aber cuanta$ nota$ -a* en la -o2a acti&a'
Aprendiendo OOo .a$ic 2(G
"u. =o&as223
A+( oHo)a!*&+9a !s ?.)%*&
A+( o=o&as !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
,?.&%n%(os la *ol%**+6n d% no&as d% la ho)a a*&+9a
o=o&as B oHo)a!*&+9a-g%&!nno&a&+ons23
,Mos&'a(os %l &o&al d% no&as %n la ho)a
MsgBox o=o&as-g%&$oun&23
End "u.
Para mo$trar la direcci4n de cada una de la$ celda$ con nota$ * $u contenido'
"u. =o&as323
A+( oHo)a!*&+9a !s ?.)%*&
A+( o=o&as !s ?.)%*&
A+( o=o&a !s ?.)%*&
A+( *o1 !s 5ong
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
o=o&as B oHo)a!*&+9a-g%&!nno&a&+ons23
#f o=o&as-g%&$oun&23 Y 0 Ih%n
Ko' *o1 B 0 Io o=o&as-g%&$oun& T 1
,?.&%n%(os una no&a
o=o&a B o=o&as-g%&B@#nd%x2 *o1 3
,Mos&'a(os su 8os+*+6n @ su *on&%n+do
MsgBox A+'%**+on$%lda2 o=o&a-g%&0os+&+on 3 : "4 " : o=o&a-g%&"&'+ng23
=%x& *o1
Els%
MsgBox "=o ha@ no&as %n %s&a ho)a"
End #f
End "u.
Kun*&+on A+'%**+on$%lda2 A+'$%lda !s ?.)%*& 3 !s "&'+ng
A+( o"K! !s ?.)%*&
A+( (Aa&os
,=os a8o@a(os %n la fun*+6n d% $al* A#RE$$#?= 2!AARE""3
o"K! B *'%a&%Dno"%'9+*%2 "*o(-sun-s&a'-sh%%&-Kun*&+on!**%ss" 3
,$ons&'u+(os la (a&'+; d% da&os 8a'a la fun*+6n
(Aa&os B !''a@2 A+'$%lda-Ro^C17 A+'$%lda-$olu(nC17 4 3
A+'%**+on$%lda B o"K!-*allKun*&+on2"!AARE"""7(Aa&os233
End Kun*&+on
Puede$ acceder a una celda primero * de$pu3$ a $u nota para modi1icarla'
"u. =o&as423
A+( oHo)a!*&+9a !s ?.)%*&
A+( o$%lda !s ?.)%*&
A+( o=o&a !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
o$%lda B oHo)a!*&+9a-g%&$%llRang%B@=a(%2"!1"3
,!**%d%(os a la no&a d% la *%lda
o=o&a B o$%lda-g%&!nno&a&+on
,5% *a(.+a(os su *on&%n+do
o=o&a-s%&"&'+ng2 "$a(.+o d% &%x&o %n no&a" 3
End "u.
2E0 )'E Manipulando dato$
Si la celda re1erenciada no tiene una nota% el cambio no $e &er; re1le2ado en la
inter1a/ del u$uario% por lo 6ue tiene$ 6ue a$e,urarte 6ue la celda contiene una nota% puede$ u$ar
la lon,itud del contenido de la nota para $aberlo' Si no tiene nota% tiene$ 6ue in$ertarla primero'
"u. =o&as523
A+( oHo)a!*&+9a !s ?.)%*&
A+( o$%lda !s ?.)%*&
A+( o=o&a !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
o$%lda B oHo)a!*&+9a-g%&$%llRang%B@=a(%2"!1"3
,!**%d%(os a la no&a d% la *%lda
o=o&a B o$%lda-g%&!nno&a&+on
#f 5%n2 o=o&a-g%&"&'+ng23 3 B 0 Ih%n
MsgBox "5a *%lda =? &+%n% no&a"
Els%
MsgBox "5a *%lda &+%n% no&a"
End #f
End "u.
Tambi3n puede recorrer el con2unto de nota$ * comparar la direcci4n'
"u. =o&as623
A+( oHo)a!*&+9a !s ?.)%*&
A+( o$%lda !s ?.)%*&
A+( o=o&as !s ?.)%*&
A+( o=o&a !s ?.)%*&
A+( *o1 !s 5ong
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
o$%lda B oHo)a!*&+9a-g%&$%llRang%B@=a(%2"E7"3
o=o&as B oHo)a!*&+9a-g%&!nno&a&+ons23
#f o=o&as-g%&$oun&23 Y 0 Ih%n
Ko' *o1 B 0 Io o=o&as-g%&$oun& T 1
o=o&a B o=o&as-g%&B@#nd%x2 *o1 3
,$o(8a'a(os las d+'%**+on%s
#f o=o&a-g%&0os+&+on-$olu(n B o$%lda-g%&$%ll!dd'%ss-$olu(n !nd o=o&a-g%&0os+&+on-Ro^ B
o$%lda-g%&$%ll!dd'%ss-Ro^ Ih%n
MsgBox "5a *%lda &+%n% no&a"
Ex+& "u.
End #f
=%x& *o1
MsgBox "5a *%lda =? &+%n% no&a"
Els%
MsgBox "=o ha@ no&as %n %s&a ho)a"
End #f
End "u.
Podemo$ -acer &i$ible una nota'
"u. =o&as723
A+( oHo)a!*&+9a !s ?.)%*&
A+( o$%lda !s ?.)%*&
A+( o=o&a !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
o$%lda B oHo)a!*&+9a-g%&$%llRang%B@=a(%2"E7"3
o=o&a B o$%lda-g%&!nno&a&+on
Aprendiendo OOo .a$ic 2E1
,5a ha*%(os 9+s+.l%
o=o&a-s%&#s1+s+.l%2 I'u% 3
End "u.
"e nue&o% $i la celda no tiene nota% el c4di,o anterior no -ar; nada% tampoco te dar;
nin,?n error% el $i,uiente e2emplo te intercambia la &i$ibilidad de la$ nota$ de la -o2a% e$ decir% $i
e$ta oculta la mue$tra * $i e$ta &i$ible la oculta'
"u. =o&as823
A+( oHo)a!*&+9a !s ?.)%*&
A+( o=o&as !s ?.)%*&
A+( o=o&a !s ?.)%*&
A+( *o1 !s 5ong
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
o=o&as B oHo)a!*&+9a-g%&!nno&a&+ons23
#f o=o&as-g%&$oun&23 Y 0 Ih%n
Ko' *o1 B 0 Io o=o&as-g%&$oun& T 1
o=o&a B o=o&as-g%&B@#nd%x2 *o1 3
,#n&%'*a(.+a(os su 9+s+.+l+dad
o=o&a-s%&#s1+s+.l%2 =o& o=o&a-g%&#s1+s+.l% 3
=%x& *o1
Els%
MsgBox "=o ha@ no&as %n %s&a ho)a"
End #f
End "u.
Nota como -acemo$ el intercambio% podemo$ $aber $i la nota de la celda e$ &i$ible
(get-s1isible)% e$ta propiedad no$ de&uel&e 1al$o (4alse) o &erdadero (0rue) $e,?n e$te o no
&i$ible la nota% con el operador de ne,aci4n (Not) in&ertimo$ e$te &alor * por con$i,uiente la
&i$ibilidad'
Para borrar una nota% e$ preci$o $aber el =ndice de e$ta% por lo 6ue -a* 6ue iterar
entre el con2unto de nota$'
"u. =o&as923
A+( oHo)a!*&+9a !s ?.)%*&
A+( o$%lda !s ?.)%*&
A+( o=o&as !s ?.)%*&
A+( o=o&a !s ?.)%*&
A+( *o1 !s 5ong
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
o$%lda B oHo)a!*&+9a-g%&$%llRang%B@=a(%2"!1"3
o=o&as B oHo)a!*&+9a-g%&!nno&a&+ons23
#f o=o&as-g%&$oun&23 Y 0 Ih%n
Ko' *o1 B 0 Io o=o&as-g%&$oun& T 1
o=o&a B o=o&as-g%&B@#nd%x2 *o1 3
,$o(8a'a(os las d+'%**+on%s
#f o=o&a-g%&0os+&+on-$olu(n B o$%lda-g%&$%ll!dd'%ss-$olu(n !nd o=o&a-g%&0os+&+on-Ro^ B
o$%lda-g%&$%ll!dd'%ss-Ro^ Ih%n
,Bo''a(os la no&a 8o' su Hnd+*%
o=o&as-'%(o9%B@#nd%x2 *o1 3
Ex+& "u.
End #f
=%x& *o1
MsgBox "5a *%lda =? &+%n% no&a"
Els%
MsgBox "=o ha@ no&as %n %s&a ho)a"
2E2 )'E Manipulando dato$
End #f
End "u.
Tambi3n e$ po$ible acceder a la auto1orma (S(ape) de la nota para manipularla'
"u. =o&as1023
A+( oHo)a!*&+9a !s ?.)%*&
A+( o$%lda !s ?.)%*&
A+( o=o&a !s ?.)%*&
A+( oKo'(a !s ?.)%*&
A+( oIa( !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
o$%lda B oHo)a!*&+9a-g%&$%llRang%B@=a(%2"E7"3
,!**%d%(os a la no&a
o=o&a B o$%lda-g%&!nno&a&+on
,5a ha*%(os 9+s+.l%
o=o&a-s%&#s1+s+.l%2 I'u% 3
,!**%d%(os a la fo'(a
oKo'(a B o=o&a-g%&!nno&a&+on"ha8%
,?.&%n%(os %l &a(a\o a*&ual
oIa( B oKo'(a-g%&"+;%
,5o du8l+*a(os
oIa(-U+d&h B oIa(-U+d&h 2
oIa(-H%+gh& B oIa(-H%+gh& 2
,Es&a.l%*%(os %l nu%9o &a(a\o
oKo'(a-s%&"+;%2 oIa( 3
,$a(.+a(os %l *olo' d% fondo d% fo'(a al%a&o'+a
oKo'(a-K+ll$olo' B REB2Rnd232557Rnd232557Rnd232553
End "u.
>$ta auto1orma% tiene decena$ de propiedade$ para manipular$e% por lo 6ue
&ol&eremo$ a ella$ en el cap=tulo corre$pondiente a auto1orma$' Por a-ora% tiene$ todo$ lo$
elemento$ para manipular la$ nota$ de celda$ a tu anto2o' "e tarea% crea una macro 6ue no$ -a,a
un in1orme% en una -o2a nue&a% de toda$ la$ nota$ e:i$tente$ en la -o2a acti&a% no$ tiene 6ue
de&ol&er la direcci4n completa * $u contenido% I&aleJ'
=.! Dando 3ormato
No $e $i e$tar;$ de acuerdo conmi,o% pero a &ece$% dando 1ormato a lo$ dato$ $e
con$ume una ,ran cantidad de tiempo * *a $abe$% uno 6ue e$ ba$tante 1lo2o e$ta encantado 6ue
$e -a,a de 1orma autom;tica% &eamo$ la$ opcione$ m;$ comune$ de 1ormato por c4di,o' >n la
ma*or=a de lo$ e2emplo$ trataremo$ de traba2ar $obre la $elecci4n% pero no $e te ol&ide 6ue
$iempre e$ bueno comprobar 6ue e$ta$ traba2ando en una -o2a de calculo% a$= como en un ran,o
de celda$ cuando $ea nece$ario% e$ decir% ca$i $iempre'
Aprendiendo OOo .a$ic 2E(
=.!.1 Formato de celdas
Primero la$ caracter=$tica$ de 1ormato m;$ u$uale$% tipo de 1uente% tamaKo% ne,rita$%
cur$i&a * $ubra*ado'
"u. Ko'(a&o$%ldas123
A+( o"%l !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
U+&h o"%l
,I+8o d% l%&'a
-$ha'Kon&=a(% B "5+.%'a&+on "ans"
,Ia(a\o d% l%&'a
-$ha'H%+gh& B 20
,=%g'+&as
-$ha'U%+gh& B 150
,$u's+9a o +&al+*a
-$ha'0os&u'% B 2
,"u.'a@ado
-$ha'Dnd%'l+n% B 1
End U+&h
End "u.
Para $aber la li$ta completa de 1uente$ (+-ar!ontName) 6ue tiene$ di$ponible$ en
OpenO11ice'or,% u$a la$ macro$ di$ponible$ en< #i$tar 1uente$ en un arc-i&o de +alc
>l tamaKo de la 1uente (+-ardei,-t) $e e$tablece en punto$% recordando 6ue un
punto e$ i,ual a 1072 de pul,ada% apro:imadamente 0'(52F mm'
>l e$tilo ne,rita$ $e e$tablece por cual6uiera de la$ $i,uiente con$tante$% de la$
cuale$% e:cepto lo$ e:tremo$% no -a* muc-a$ &ariante$ entre ella$'
Constante 1alor
com'$un'$tar'a7t'!ontNei,-t'"ONTtNON 0
com'$un'$tar'a7t'!ontNei,-t'Td9N 50
com'$un'$tar'a7t'!ontNei,-t'U#T@A#9dT )0
com'$un'$tar'a7t'!ontNei,-t'#9dT 75
com'$un'$tar'a7t'!ontNei,-t'S>M9#9dT G0
com'$un'$tar'a7t'!ontNei,-t'NO@MA# 100
com'$un'$tar'a7t'!ontNei,-t'S>M9.O#" 110
com'$un'$tar'a7t'!ontNei,-t'.O#" 150
com'$un'$tar'a7t'!ontNei,-t'U#T@A.O#" 175
com'$un'$tar'a7t'!ontNei,-t'.#A+t 200
Al e$tilo cur$i&a o it;lica le corre$ponden la$ $i,uiente con$tante$'
Constante 1alor
com'$un'$tar'a7t'!ontSlant'NON> 0
2EE )'5 "ando 1ormato
Constante 1alor
com'$un'$tar'a7t'!ontSlant'O.#9eU> 1
com'$un'$tar'a7t'!ontSlant'9TA#9+ 2
com'$un'$tar'a7t'!ontSlant'"ONTtNON (
com'$un'$tar'a7t'!ontSlant'@>5>@S>QO.#9eU> E
com'$un'$tar'a7t'!ontSlant'@>5>@S>Q9TA#9+ 5
>l tipo de $ubra*ado e$ta determinado por la$ con$tante$'
Constante 1alor
com'$un'$tar'a7t'!ontUnderline'NON> 0
com'$un'$tar'a7t'!ontUnderline'S9N#> 1
com'$un'$tar'a7t'!ontUnderline'"OU.#> 2
com'$un'$tar'a7t'!ontUnderline'"OTT>" (
com'$un'$tar'a7t'!ontUnderline'"ONTtNON E
com'$un'$tar'a7t'!ontUnderline'"ASd 5
com'$un'$tar'a7t'!ontUnderline'#ON"ASd )
com'$un'$tar'a7t'!ontUnderline'"ASd"OT 7
com'$un'$tar'a7t'!ontUnderline'"ASd"OT"OT F
com'$un'$tar'a7t'!ontUnderline'SMA##NA5> G
com'$un'$tar'a7t'!ontUnderline'NA5> 10
com'$un'$tar'a7t'!ontUnderline'"OU.#>NA5> 11
com'$un'$tar'a7t'!ontUnderline'.O#" 12
com'$un'$tar'a7t'!ontUnderline'.O#""OTT>" 1(
com'$un'$tar'a7t'!ontUnderline'.O#""ASd 1E
com'$un'$tar'a7t'!ontUnderline'.O#"#ON"ASd 15
com'$un'$tar'a7t'!ontUnderline'.O#""ASd"OT 1)
com'$un'$tar'a7t'!ontUnderline'.O#""ASd"OT"OT 17
com'$un'$tar'a7t'!ontUnderline'.O#"NA5> 1F
@ecuerda 6ue puede$ u$ar tanto la$ con$tante$ como el &alor de e$ta$% $e,?n tu
,u$to * criterio' Al,uno$ de lo$ &alore$ de e$ta$ con$tante$% lo$ puede$ e$tablecer pero no &era$
nin,?n e1ecto aparente'
Al,una$ otra$ opcione$ de 1ormato de 1uente $on'
"u. Ko'(a&o$%ldas223
A+( o"%l !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
U+&h o"%l
Aprendiendo OOo .a$ic 2E5
,Es8a*+os s+n su.'a@a'
-$ha'Uo'dMod% B I'u%
,Ia*hado d% fu%n&%
-$ha'$'oss%d?u& B I'u%
,$on&o'no d% fu%n&%
-$ha'$on&ou'%d B I'u%
End U+&h
End "u.
+uando $e $ubra*a la 1uente * la propiedad +-arNordMode $e e$tablece en
&erdadera (True)% te de2a lo$ e$pacio$ entre palabra$ $in $ubra*ar' #a$ otra$ do$ propiedade$ creo
6ue $on ba$tante autoe:plicati&a$'
A-ora% &eamo$ al,o mu* di&ertido% el color% e$table/camo$ el color de la 1uente * del
$ubra*ado de e$ta'
"u. Ko'(a&o$%ldas323
A+( o"%l !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
U+&h o"%l
,$olo' d% la fu%n&% a;ul
-$ha'$olo' B REB2 0707255 3
,Es&+lo d% su.'a@ado
-$ha'Dnd%'l+n% B 1
,$olo' d% su.'a@ado 'o)o
-$ha'Dnd%'l+n%$olo' B REB2255707073
,"+ s% (u%s&'a %l *olo'
-$ha'Dnd%'l+n%Has$olo' B I'u%
End U+&h
End "u.
+on la propiedad +-ar+olor * la a*uda de la 1unci4n @.% e$tablecemo$ el color de
la 1uente% para el $ubra*ado% primero e$tablecemo$ el e$tilo (+-arUnderline)% de$pu3$ el color de
e$te (+-arUnderline+olor) * por ultimo e$tablecemo$ $i 6ueremo$ 6ue $e mue$tre el color
(+-arUnderlineda$+olor)% $i e$ta propiedad $e e$tablece en 1al$o (1al$e)% el color del $ubra*ado
$er; del mi$mo color 6ue el de la 1uente'
+on la $i,uiente macro% a cada celda del ran,o $eleccionado $e le e$tablecer; un
color de 1uente * de $ubra*ado aleatorio'
"u. Ko'(a&o$%ldas423
A+( o"%l !s ?.)%*&
A+( *ol !s 5ong
A+( f+l !s 5ong
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
#f o"%l-g%&#(8l%(%n&a&+on=a(% B ""*$%llRang%?.)" Ih%n
U+&h o"%l
Ko' *ol B 0 Io o"%l-g%&$olu(ns-g%&$oun& T 1
Ko' f+l B 0 Io o"%l-g%&Ro^s-g%&$oun& T 1
U+&h -g%&$%llB@0os+&+on2 *ol7 f+l 3
-$ha'$olo' B REB2 Rnd232557Rnd232557Rnd23255 3
-$ha'Dnd%'l+n% B 1
-$ha'Dnd%'l+n%$olo' B REB2 Rnd232557Rnd232557Rnd232553
-$ha'Dnd%'l+n%Has$olo' B I'u%
2E) )'5 "ando 1ormato
End U+&h
=%x&
=%x&
End U+&h
End #f
End "u.
#a alineaci4n del contenido de la celda% $e e$tablece con la$ propiedade$ 5ertju$ti1*
para el $entido &ertical * doriju$ti1* para el $entido -ori/ontal de la $i,uiente 1orma'
"u. Ko'(a&o$%ldas523
A+( o"%l !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
,!l+n%a(os %n (%d+o 9%'&+*al(%n&%
o"%l-1%'&[us&+f@ B 2
,!l+n%a(os *%n&'ado ho'+;on&al(%n&%
o"%l-Ho'+[us&+f@ B 2
End "u.
#o$ &alore$ po$ible$ para cada propiedad $on<
Propiedad 1ert:usti!, 1alor
com'$un'$tar'table'+ell5ertju$ti1*'STAN"A@" 0
com'$un'$tar'table'+ell5ertju$ti1*'TOP 1
com'$un'$tar'table'+ell5ertju$ti1*'+>NT>@ 2
com'$un'$tar'table'+ell5ertju$ti1*'.OTTOM (
Propiedad #ori:usti!, 1alor
com'$un'$tar'table'+elldoriju$ti1*'STAN"A@" 0
com'$un'$tar'table'+elldoriju$ti1*'#>!T 1
com'$un'$tar'table'+elldoriju$ti1*'+>NT>@ 2
com'$un'$tar'table'+elldoriju$ti1*'@9dT (
com'$un'$tar'table'+elldoriju$ti1*'.#O+t E
com'$un'$tar'table'+elldoriju$ti1*'@>P>AT 5
+on la combinaci4n de e$to$ &alore$% tenemo$ muc-a$ po$ibilidade$ de alineaci4n
de una celda' #a con$tante com'$un'$tar'table'+elldoriju$ti1*'@>P>AT% e$ mu* intere$ante por
6ue te repite el &alor de la celda -a$ta llenar el anc-o de ella% prueba a e$tablecer e$ta propiedad
en una celda cu*o contenido $ea un punto para 6ue note$ $u comportamiento'
Si 6ueremo$ a2u$tar el te:to autom;ticamente en la celda% u$amo$'
"u. Ko'(a&o$%ldas623
Aprendiendo OOo .a$ic 2E7
A+( o"%l !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
,!)us&% d% &%x&o
o"%l-#sI%x&U'a88%d B I'u%
End "u.
Si 6ueremo$ reducir el te:to -a$ta 6ue 6uepa en la celda% u$amo$'
"u. Ko'(a&o$%ldas723
A+( o"%l !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
,R%du**+6n d% &%x&o
o"%l-"h'+n]IoK+& BI'u%
End "u.
Si 6ueremo$ cambiar la orientaci4n del te:to'
"u. Ko'(a&o$%ldas823
A+( o"%l !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
,?'+%n&a*+on 9%'&+*al d%l &%x&o
o"%l-?'+%n&a&+on B 3
End "u.
#o$ &alore$ para e$ta propiedad $on<
Propiedad Orientation 1alor
com'$un'$tar'table'+ellOrientation'STAN"A@" 0
com'$un'$tar'table'+ellOrientation'TOP.OTTOM 1
com'$un'$tar'table'+ellOrientation'.OTTOMTOP 2
com'$un'$tar'table'+ellOrientation'STA+t>" (
O podemo$ e$tablecer el ;n,ulo de rotaci4n'
"u. Ko'(a&o$%ldas923
A+( o"%l !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
o"%l-Ro&a&%!ngl% B 9000
End "u.
>l &alor del ;n,ulo e$ta dado en cent3$ima$ de ;n,ulo% e$ decir% en el e2emplo
anterior e$tablecemo$ el ;n,ulo en G0v (G000) para 1F0v podemo$ 1F000 * a$= $uce$i&amente'
2EF )'5 "ando 1ormato
Toma en cuenta 6ue al,una$ de la$ propiedade$ &i$ta$ -a$ta a-ora% $e autoe:clu*en
mutuamente% por lo 6ue tiene$ 6ue a$e,urarte 6ue no $e contraponen% de lo$ do$ e2emplo$
$i,uiente% $olo el $e,undo e$ correcto'
"u. Ko'(a&o$%ldas1023
A+( o"%l !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
o"%l-Ho'+[us&+f@ B 2
o"%l-#sI%x&U'a88%d B I'u%
,Ia(a\o d% sang'Ha
o"%l-0a'a#nd%n& B 1000
End "u.
"u. Ko'(a&o$%ldas1123
A+( o"%l !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
o"%l-Ho'+[us&+f@ B 1
o"%l-#sI%x&U'a88%d B I'u%
,Ia(a\o d% sang'Ha
o"%l-0a'a#nd%n& B 1000
End "u.
Tambi3n podemo$ e$tablecer el color de 1ondo de la$ celda$'
"u. Ko'(a&o$%ldas1223
A+( o"%l !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
,$olo' d%l fondo d% la *%lda 2g'+s3
o"%l-$%llBa*]$olo' B REB2200720072003
End "u.
#a $i,uiente macro te colorea cada celda de la $elecci4n% tanto la 1uente como el
1ondo de la celda de un color aleatorio<
"u. Ko'(a&o$%ldas1323
A+( o"%l !s ?.)%*&
A+( *ol !s 5ong
A+( f+l !s 5ong
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
#f o"%l-g%&#(8l%(%n&a&+on=a(% B ""*$%llRang%?.)" Ih%n
U+&h o"%l
Ko' *ol B 0 Io o"%l-g%&$olu(ns-g%&$oun& T 1
Ko' f+l B 0 Io o"%l-g%&Ro^s-g%&$oun& T 1
U+&h -g%&$%llB@0os+&+on2 *ol7 f+l 3
-$ha'$olo' B REB2 Rnd232557Rnd232557Rnd23255 3
-$%llBa*]$olo' B REB2 Rnd232557Rnd232557Rnd23255 3
End U+&h
=%x&
=%x&
End U+&h
End #f
Aprendiendo OOo .a$ic 2EG
End "u.
#o$ borde$ de la$ celda$ tienen muc-a$ po$ibilidade$% &eamo$ al,una$'
"u. Ko'(a&o$%ldas1423
A+( o"%l !s ?.)%*&
A+( oBo'd%5+n%a !s =%^ *o(-sun-s&a'-&a.l%-Bo'd%'5+n%
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
,Es&a.l%*%(os las *a'a*&%'Hs&+*as d% la l+n%a
U+&h oBo'd%5+n%a
,El *olo' 2'o)o3
-$olo' B REB225570703
,El an*ho d% la l+n%a %x&%'+o'
-#nn%'5+n%U+d&h B 50
,El an*ho d% la l+n%a +n&%'+o'
-?u&%'5+n%U+d&h B 50
,5a d+s&an*+a %n&'% las l+n%as
-5+n%A+s&an*% B 20
End U+&h
,Es&a.l%*%(os los .o'd%s
U+&h o"%l
-Io8Bo'd%' B oBo'd%5+n%a ,"u8%'+o'
-Bo&&o(Bo'd%' B oBo'd%5+n%a ,#nf%'+o'
-5%f&Bo'd%' B oBo'd%5+n%a ,#;Gu+%'do
-R+gh&Bo'd%' B oBo'd%5+n%a ,A%'%*ho
End U+&h
End "u.
>l anc-o de la$ linea$ * la di$tancia entre ella$ e$ta dada en cent3$ima$ de
mil=metro$% $i e$tablecemo$ $olo una de la$ do$ l=nea$% &era$ una linea $imple' Si de$ea$
e$tablecer tambi3n la$ l=nea$ dia,onale$% u$a la propiedad "ia,onalT#.@ para la l=nea 6ue &a
de$de la e$6uina $uperior i/6uierda a la in1erior derec-a * "ia,onal.#T@ para la 6ue &a de la
e$6uina in1erior i/6uierda a la $uperior derec-a% tiene$ 6ue e$tablecerle$ la mi$ma e$tructura de
l=nea (com'$un'$tar'table'.order#ine) &i$ta en lo$ e2emplo$'
>l c4di,o anterior te e$tablecer; el borde de cada celda del ran,o $eleccionado% $i
6uiere$ e$tablecer el borde de $olo lo$ e:tremo$ del ran,o% tiene 6ue u$ar la e$tructura
Table.order'
"u. Ko'(a&o$%ldas1523
A+( o"%l !s ?.)%*&
A+( oBo'd%5+n%a !s =%^ *o(-sun-s&a'-&a.l%-Bo'd%'5+n%
A+( oBo'd%Ia.la !s =%^ *o(-sun-s&a'-&a.l%-Ia.l%Bo'd%'
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
,Es&a.l%*%(os las *a'a*&%'Hs&+*as d% la l+n%a
U+&h oBo'd%5+n%a
,El *olo' 2a;ul3
-$olo' B REB207072553
,El an*ho d% la l+n%a +n&%'+o'
-?u&%'5+n%U+d&h B 75
End U+&h
,Es&a.l%*%(os las *a'a*&%'Hs&+*as d% la &a.la
U+&h oBo'd%Ia.la
250 )'5 "ando 1ormato
-Io85+n% B oBo'd%5+n%a ,"u8%'+o'
-#sIo85+n%1al+d B I'u%
-Bo&&o(5+n% B oBo'd%5+n%a ,#nf%'+o'
-#sBo&&o(5+n%1al+d B I'u%
-5%f&5+n% B oBo'd%5+n%a ,#;Gu+%'do
-#s5%f&5+n%1al+d B I'u%
-R+gh&5+n% B oBo'd%5+n%a ,A%'%*ho
-#sR+gh&5+n%1al+d B I'u%
End U+&h
,Es&a.l%*%(os los .o'd%s
o"%l-Ia.l%Bo'd%' B oBo'd%Ia.la
End "u.
#a$ propiedade$ 9$Top#ine5alid% 9$.ottom#ine5alid% 9$#e1t#ine5alid *
9$@i,-t#ine5alid% tiene$ 6ue e$tablecerla$ en &erdadero (true) $i 6uiere$ 6ue $e &ea la l=nea'
Para e$tablecer lo$ mar,ene$ de la celda% u$amo$'
"u. Ko'(a&o$%ldas1623
A+( o"%l !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
,0a'a %s&a.l%*%' los (a'g%n%s d% la *%lda
U+&h o"%l
-0a'aIo8Ma'g+n B 500 ,!''+.a
-0a'aBo&&o(Ma'g+n B 500 ,!.a)o
-0a'a5%f&Ma'g+n B 800 ,#;Gu+%'da
-0a'aR+gh&Ma'g+n B 800 ,A%'%*ha
End U+&h
End "u.
Para dar un 1ormato predeterminado a la celda% u$amo$ la propiedad Numer!ormat%
la cual e$ nece$ario e$tablecer como un entero lar,o (lon,) corre$pondiente a la cla&e del 1ormato
6ue no$ intere$e% por e2emplo'
"u. Ko'(a&o$%ldas1723
A+( o"%l !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
,Es&a.l%*%(os la s%l%**+6n %n %l fo'(a&o Es&>nda'
o"%l-=u(.%'Ko'(a& B 0
End "u.
>l numero de cla&e no e$ $ecuencial% por lo 6ue tenemo$ 6ue $aber de antemano la
cla&e del 1ormato 6ue no$ intere$a% para ello% u$a la macro 6ue te mue$tro en< #i$tar 1ormato$ en
un arc-i&o de +alc'
A-ora &eamo$ como combinar * $eparar celda$' Para ello% u$amo$ el m3todo mer+e%
con el ar,umento &erdadero (true)% como en el $i,uiente e2emplo'
"u. Ko'(a&o$%ldas1823
A+( o"%l !s ?.)%*&
Aprendiendo OOo .a$ic 251
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
,$o(.+na(os las *%ldas s%l%**+onadas
o"%l-(%'g%2 I'u% 3
End "u.
>$te m3todo $olo e$ta pre$ente en un ran,o de celda$% no en una colecci4n de
ran,o$ a$= 6ue &alidalo cuando lo u$e$' Si e$tablece$ el ar,umento en 1al$o (1al$e)% $eparara la$
celda$ de la $elecci4n' >$te m3todo e$ $encillo pero debe$ de tomar en cuenta al,una$
con$ideracione$' Si $elecciona$ un ran,o *a combinado% 2unto con un ;rea 6ue no% e$te m3todo
no -ar; nada% claro% por c4di,o e$to* -ablando% pero -a$ la prueba en la inter1a/ del u$uario% e$
decir% manualmente * ob$er&a 6ue pa$a% a-ora% tratemo$ de emularlo con c4di,o'
"u. Ko'(a&o$%ldas1923
A+( o"%l !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
,"%8a'a(os las *%ldas s%l%**+onadas
o"%l-(%'g%2 Kals% 3
,5as *o(.+na(os
o"%l-(%'g%2 I'u% 3
End "u.
Si $e puede% I&erdadJ% primero la$ $eparamo$ * de$pu3$ la$ combinamo$' #a
$i,uiente con$ideraci4n 6ue debe$ tomar en cuenta% e$ $aber 6ue pa$a cuando la$ celda$ $e
combinan% para ello% -aremo$ una$ prueba$ *a no con la $elecci4n $ino con ran,o$ con nombre% la
macro $i,uiente te alternara entre combinar * $eparar la el ran,o $eleccionado% nota como
con$ultamo$ la propiedad ,et9$Mer,ed para $aber $i el ran,o e$ta combinado'
"u. Ko'(a&o$%ldas2023
A+( oRango !s ?.)%*&
A+( oHo)a!*&+9a !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
oRango B oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "B24A10" 3
,#n9%'&+(os la *o(.+na*+6n
oRango-(%'g%2 =o& oRango-g%&#sM%'g%d 3
End "u.
A-ora% en la $i,uiente macro% tiene$ 6ue poner muc-a atenci4n% nota el ran,o 6ue
e$tamo$ combinando% la$ celda$ en la$ cuale$ &eri1icamo$ $i e$t;n combinada$% el &alor 6ue no$
de&uel&e el con$ultar $u propiedad ,et9$Mer,ed * ob$er&a -a$ta cuando no$ 1unciona el m3todo
para $eparar la$ celda$'
"u. Ko'(a&o$%ldas2123
A+( oRango !s ?.)%*&
A+( oHo)a!*&+9a !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
oRango B oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "E154H20" 3
oRango-(%'g%2 I'u% 3
,=o&a Gu% la *%lda E19 fo'(a 8a'&% d%l 'ango *o(.+nado
252 )'5 "ando 1ormato
,*onsul&a(os la 8'o8+%dad @ &'a&a(os d% s%8a'a'
Msg.ox oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "E19" 3-g%&#sM%'g%d23
oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "E19" 3-(%'g%2 Kals% 3
Msg.ox oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "K17" 3-g%&#sM%'g%d23
,I'a&a(os d% s%8a'a' las *%ldas
oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "E19" 3-(%'g%2 Kals% 3
Msg.ox oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "E16" 3-g%&#sM%'g%d23
oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "E19" 3-(%'g%2 Kals% 3
,!ho'a s+7 nos d+*% Gu% %s&a *o(.+nada @
,f+nal(%n&% log'a(os s%8a'a'las
Msg.ox oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "E15" 3-g%&#sM%'g%d23
oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "E15" 3-(%'g%2 Kals% 3
End "u.
I#o nota$teJ% cuando $e combinan celda$% toda$% e:cepto la de la e$6uina $uperior
i/6uierda del ran,o% $e marcan como LnoM combinada$% entonce$% e$o no$ obli,a a bu$car *
encontrar e$ta celda a partir de otra cuando intentemo$ $eparar celda$% para -acer e$to% no$
au:iliaremo$ de un cur$or cu*o u$o *a lo -emo$ &i$to'
"u. Ko'(a&o$%ldas2223
A+( oRango !s ?.)%*&
A+( oHo)a!*&+9a !s ?.)%*&
A+( o$u'so' !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
oRango B oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "E154H20" 3
oRango-(%'g%2 I'u% 3
,1%'+f+*a(os Gu% %s&% *o(.+nada
MsgBox oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "E15" 3-g%&#sM%'g%d23
,$'%a(os un *u'so' a 8a'&+' d% una *%lda Gu% no s%a la d%
,la %sGu+na su8%'+o' +;Gu+%'da
o$u'so' B oHo)a!*&+9a-*'%a&%$u'so'B@Rang%2 oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "E19" 3 3
,Ex8and+(os %l *u'so' al >'%a *o(.+nada
o$u'so'-*olla8s%IoM%'g%d!'%a23
,"%8a'a(os las *%ldas
o$u'so'-(%'g%2 Kals% 3
End "u.
>$ta &e/% a partir de otra celda% e:pandimo$ el cur$or a la re,i4n combinada *
pudimo$ $eparar 1;cilmente' Toma en cuenta 6ue pa$a con la$ celda$ 6ue tienen contenido
cuando $e combinan% &eri1icalo en la inter1a/ del u$uario * trata de anticipar e$te ca$o'
+omo ultimo tema de e$te capitulo% &eamo$ como prote,er * de$prote,er celda$%
recuerda 6ue e$ta protecci4n $olo e$ e1ecti&a $i la -o2a de calculo e$ta prote,ida'
"u. 0'o&%g%'$%ldas123
A+( oRango !s ?.)%*&
A+( oHo)a!*&+9a !s ?.)%*&
A+( o0$ !s =%^ "*o(-sun-s&a'-u&+l-$%ll0'o&%*&+on"
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
oRango B oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "[274530" 3
U+&h o0$
Aprendiendo OOo .a$ic 25(
,A%&%'(+na s+ la *%lda %s&a .loGu%ada 8a'a (od+f+*a's%
-#s5o*]%d B I'u%
,A%&%'(+na s+ s% o*ul&an las fo'(ulas7 solo 9%'as %l '%sul&ado
-#sKo'(ulaH+dd%n B I'u%
,A%&%'(+na s+ s% o*ul&a %l *on&%n+do d% las *%ldas
-#sH+dd%n B I'u%
,0a'a o*ul&a' solo 8a'a la +(8'%s+6n
-#s0'+n&H+dd%n B I'u%
End U+&h
oRango-$%ll0'o&%*&+on B o0$
oHo)a!*&+9a-0'o&%*&2""3
End "u.
Para de$prote,er la$ celda$% e$ $u1iciente con de$prote,er la -o2a% de todo$ modo$
puede$ de$-abilitar la$ opcione$ de protecci4n con $olo e$tablecer la$ opcione$ de protecci4n en
1al$o (!al$e)% por $upue$to% no $iempre tienen 6ue e$tar toda$ $eleccionada$% tu determinara$ el
ni&el de acce$o en cada uno de tu$ pro*ecto% por e2emplo'
"u. 0'o&%g%'$%ldas223
A+( oRango !s ?.)%*&
A+( oHo)a!*&+9a !s ?.)%*&
A+( o0$ !s =%^ "*o(-sun-s&a'-u&+l-$%ll0'o&%*&+on"
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
oRango B oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "[274530" 3
,A%s8'o&%g%(os la ho)a
oHo)a!*&+9a-un0'o&%*&2""3
U+&h o0$
,A%&%'(+na s+ la *%lda %s&a .loGu%ada 8a'a (od+f+*a's%
-#s5o*]%d B I'u%
,A%&%'(+na s+ s% o*ul&an las fo'(ulas7 solo 9%'as %l '%sul&ado
-#sKo'(ulaH+dd%n B I'u%
,A%&%'(+na s+ s% o*ul&a %l *on&%n+do d% las *%ldas
-#sH+dd%n B I'u%
,0a'a o*ul&a' solo 8a'a la +(8'%s+6n
-#s0'+n&H+dd%n B I'u%
End U+&h
oRango-$%ll0'o&%*&+on B o0$
End "u.
=.!.2 Formato de 3ilas y columnas
Para e$tablecer la altura de la$ 1ila$% u$amo$ la propiedad dei,-t% el &alor $e
e$tablece en cent3$ima$ de mil=metro$% por lo 6ue para tener una 1ila de 0'50 cm le a$i,namo$ un
&alor de 500 como en el $i,uiente e2emplo'
"u. Ko'(a&oK+las123
A+( o"%l !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
,Es&a.l%*%(os %l al&o d% las f+las s%l%**+onadas
o"%l-g%&Ro^s-H%+gh& B 500
End "u.
25E )'5 "ando 1ormato
+uando trata$ de e$tablecer la altura de la$ 1ila$ en cero (0)% $i bien no te dar;
nin,?n error% tampoco &era$ nin,?n cambio% aun% e$tableciendo el &alor en la unidad &era$ 6ue la
1ila $i,ue $iendo notable' Si lo 6ue de$ea$ e$ ocultarla% e$ me2or u$ar la propiedad
corre$pondiente% para e$te ca$o% 9$5i$ible% como en'
"u. Ko'(a&oK+las223
A+( o"%l !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
,?*ul&a(os las f+las s%l%**+onadas
o"%l-g%&Ro^s-#s1+s+.l% B Kals%
End "u.
>$ta propiedad $e e$tablece en 1al$o (1al$e) para ocultar la 1ila * en &erdadero (true)
para mo$trarla% el $i,uiente e2emplo te alternara en ocultar * mo$trar con1orme la e2ecute$'
"u. Ko'(a&oK+las323
A+( o"%l !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
,!l&%'na(os %n&'% 9+s+.l% @ o*ul&a
o"%l-g%&Ro^s-#s1+s+.l% B =o& o"%l-g%&Ro^s-#s1+s+.l%
End "u.
#a$ 1ila$% ad6uieren una propiedad particular cuando $e le$ aplica un 1iltro% e$ta
propiedad $e llama 9$!iltered% * te de&ol&er; &erdadero (true)% cuando la 1ila con$ultada e$te oculta
como con$ecuencia de un 1iltro% toma nota de 6ue L$oloM cuando e$te oculta por un 1iltro% $i tu la
oculta$ con 9$5i$ible% e$ta propiedad (9$!iltered) $e,uir; $iendo 1al$a (1al$e)% prueba a -acer un
1iltro en tu -o2a acti&a * procura 6ue la 1ila con$ultada (,et.*9nde:(9ndice)) e$te 1iltrada'
"u. Ko'(a&oK+las423
A+( oHo)a!*&+9a !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
,$onsul&a(os s+ la f+la 3 %s&a f+l&'ada
MsgBox oHo)a!*&+9a-g%&Ro^s-g%&B@+nd%x223-#sK+l&%'%d
End "u.
Tambi3n podemo$ e$tablecer el alto 4ptimo de la$ 1ila$ con la propiedad
Optimaldei,-t% debe e$tar en &erdadero (true) para 6ue ten,a e1ecto'
"u. Ko'(a&oK+las523
A+( o"%l !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
,Es&a.l%*%(os %l al&o o8&+(o d% las f+las s%l%**+onadas
o"%l-g%&Ro^s-?8&+(alH%+gh& B I'u%
End "u.
A la$ 1ila$ tambi3n e$ po$ible cambiarle$ el color de 1ondo% e$to no$ permite
e$tablecer el color de toda la 1ila'
Aprendiendo OOo .a$ic 255
"u. Ko'(a&oK+las623
A+( o"%l !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
,Es&a.l%*%(os %l *olo' d% fondo d% las *%ldas d% la f+la *o(8l%&a
o"%l-g%&Ro^s-$%llBa*]$olo' B REB2200720072003
End "u.
#a $i,uiente macro te cambiara el color de la$ 1ila$ impare$ de la $elecci4n'
"u. Ko'(a&oK+las723
A+( o"%l !s ?.)%*&
A+( *o1 !s 5ong
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
Ko' *o1 B 0 Io o"%l-g%&Ro^s-g%&$oun&23 T 1 "&%8 2
,Es&a.l%*%(os un *olo' al%a&o'+o 8a'a las f+las +(8a'%s d% la s%l%**+6n
o"%l-g%&Ro^s-g%&B@#nd%x2 *o1 3-$%llBa*]$olo' B REB2 Rnd232557Rnd232557Rnd23255 3
=%x&
End "u.
A la$ columna$ tambi3n le$ podemo$ e$tablecer el anc-o'
"u. Ko'(a&o$olu(nas123
A+( o"%l !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
,Es&a.l%*%(os %l an*ho d% las *olu(nas s%l%**+onadas
o"%l-g%&$olu(ns-U+d&h B 1000
End "u.
O ocultarla$'
"u. Ko'(a&o$olu(nas223
A+( o"%l !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
,?*ul&a(os las *olu(nas s%l%**+onadas
o"%l-g%&$olu(ns-#s1+s+.l% B Kals%
End "u.
A2u$tar al contenido'
"u. Ko'(a&o$olu(nas323
A+( o"%l !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
,!)us&a(os al *on&%n+do
o"%l-g%&$olu(ns-?8&+(alU+d&h B I'u%
25) )'5 "ando 1ormato
End "u.
#a$ columna$ no tienen una propiedad 9$!iltered% por 6ue como $abe$% no -a* 1iltro$
-ori/ontale$% pero con un poco de in,enio * u$ando la propiedad 9$5i$ible% puede$ crearte tu
&er$i4n de 1iltro$ -ori/ontale$' Tampoco puede$ u$ar la propiedad +ell.acs+olor para e$tablecer
el color de 1ondo% pero tambi3n podemo$ implementar nue$tra &er$i4n% a6u= una primera
apro:imaci4n'
"u. Ko'(a&o$olu(nas423
A+( o"%l !s ?.)%*&
A+( o$u'so' !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
,=os a8o@a(os %n un *u'so'
o$u'so' B o"%l-g%&"8'%ad"h%%&-*'%a&%$u'so'B@Rang%2 o"%l 3
o$u'so'-%x8andIoEn&+'%$olu(ns23
o$u'so'-$%llBa*]$olo' B REB2210721072103
End "u.
#a $i,uiente macro% e$tablecer; el anc-o de la$ columna$ en 1 cm% de$pu3$ el alto
de la$ 1ila$ tambi3n en 1 * colorear; alternadamente 1ila$ * columna$ para -acer un lindo mo$aico'
"u. Ko'(a&oK+las$olu(nas123
A+( o"%l !s ?.)%*&
A+( o$u'so' !s ?.)%*&
A+( *o1 !s 5ong
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
o"%l-g%&Ro^s-H%+gh& B 1000
o"%l-g%&$olu(ns-U+d&h B 1000
Ko' *o1 B 0 Io o"%l-g%&Ro^s-g%&$oun&23 T 1 "&%8 2
o"%l-g%&Ro^s-g%&B@#nd%x2 *o1 3-$%llBa*]$olo' B REB2 23072307230 3
=%x&
Ko' *o1 B 0 Io o"%l-g%&$olu(ns-g%&$oun&23 T 1 "&%8 2
o$u'so' B o"%l-g%&"8'%ad"h%%&-*'%a&%$u'so'B@Rang%2 o"%l-g%&$%llB@0os+&+on2*o1703 3
o$u'so'-%x8andIoEn&+'%$olu(ns23
o$u'so'-$%llBa*]$olo' B REB2230723072303
=%x&
End "u.
#a$ 1ila$ * columna$ cuentan con al,una$ propiedade$ in&olucrada$ en la impre$i4n
de lo$ documento$% por lo 6ue $e &er;n en el capitulo corre$pondiente a impre$i4n'
=.!. Estilos y auto3ormato
+omo buen u$uario de OpenO11ice'or, 6ue $omo$% $abemo$ 6ue una de $u$
caracter=$tica$ m;$ rica$ e$ta en $u$ Le$tilo$M% e$ decir% en la po$ibilidad de a,rupar ba2o un
nombre% una $erie de caracter=$tica$ de 1ormato * 6ue podemo$ aplicar con un $olo clic' "entro de
la$ -o2a$ de c;lculo% tenemo$ do$ e$tilo$ per1ectamente de1inido$% lo$ e$tilo$ de celda 6ue
Aprendiendo OOo .a$ic 257
&eremo$ en e$te capitulo * lo$ e$tilo$ de p;,ina 6ue $e &er;n en el $i,uiente' Para &er lo$ e$tilo$
de celda actuale$ u$amo$ la $i,uiente macro'
"u. Es&+los123
A+( oAo* !s ?.)%*&
A+( oEs&+los !s ?.)%*&
A+( oEs&+los$%lda !s ?.)%*&
A+( o"%l !s ?.)%*&
,!**%d%(os al do*u(%n&o a*&ual
oAo* B Ih+s$o(8on%n&
,!**%d%(os a &odos los %s&+los
oEs&+los B oAo*-g%&"&@l%Ka(+l+%s23
,!**%d%(os a los %s&+los d% *%lda
oEs&+los$%lda B oEs&+los-g%&B@=a(%2"$%ll"&@l%s"3
,Mos&'a(os sus no(.'%s
MsgBox [o+n2 oEs&+los$%lda-g%&El%(%n&=a(%s237 $h'2133 3
End "u.
Si no tiene$ nin,?n e$tilo de celda per$onali/ado% crea uno con el 1ormato 6ue
6uiera$ (tecla !11)% &uel&e a correr la macro * tiene$ 6ue &er li$tado el nue&o e$tilo'
>n nue$tro e2emplo% -emo$ a,re,ado un nue&o e$tilo de celda 6ue $e llama
L"omin,o$M% lo$ e$tilo$ de celda lo$ podemo$ e$tablecer a una celda% un ran,o de celda$% un
,rupo de ran,o$ de una 1orma $umamente $encilla% &eamo$ como'
"u. Es&+los223
A+( o"%l !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
,!8l+*a(os %l %s&+lo d% *%lda Ao(+ngos a la s%l%**+6n a*&ual
o"%l-$%ll"&@l% B "Ao(+ngos"
End "u.
5eamo$ la di1erencia entre aplicar 1ormato directo a la$ celda$ * u$ar un e$tilo% en la
$i,uiente macro% 1ormateamo$ la $elecci4n con la$ caracter=$tica$ indicada en cada l=nea'
"u. Es&+los323
A+( o"%l !s ?.)%*&
25F )'5 "ando 1ormato
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
U+&h o"%l
,I+8o d% l%&'a
-$ha'Kon&=a(% B "=+(.us "ans 5"
,Ia(a\o d% l%&'a
-$ha'H%+gh& B 15
,=%g'+&as
-$ha'U%+gh& B 150
,$u's+9a o +&al+*a
-$ha'0os&u'% B 2
,!l+n%a(os %n (%d+o 9%'&+*al(%n&%
-1%'&[us&+f@ B 2
,!l+n%a(os *%n&'ado ho'+;on&al(%n&%
-Ho'+[us&+f@ B 2
,$olo' d% fondo d% la *%lda
-$%llBa*]$olo' B REB2204720472043
,$olo' d% la fu%n&%
-$ha'$olo' B REB207072553
End U+&h
End "u.
A-ora% crea un e$tilo con e$ta$ mi$ma$ caracter=$tica$% para nue$tro e2emplo le
llamaremo$ L@e$altado1M * procedamo$ a aplicar a la $elecci4n'
"u. Es&+los423
A+( o"%l !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
o"%l-$%ll"&@l% B "R%sal&ado1"
End "u.
No puede $er m;$ 1;cil% pero ($iempre -a* un pero)% $i el e$tilo de celda no e:i$te% el
c4di,o no te dar; nin,?n error% $implemente no -ar; nada% el nombre del e$tilo% debe e$tar e$crito
tal cual $e dio de alta inclu*endo ma*?$cula$ * min?$cula$% tambi3n% como $ucede en la inter1a/
del u$uario% cuando $e borra un e$tilo de celda per$onali/ado% 6ue $on lo$ ?nico$ 6ue puede$
eliminar% la$ celda$ 6ue ten,an e$te e$tilo% pa$ar;n a tener el e$tilo de celda predeterminado% por
ello% e$ recomendable% &eri1icar 6ue el e$tilo e:i$ta * en ca$o de 6ue no e:i$ta% crearlo% al crearlo%
e$ recomendable &eri1icar 6ue no e:i$ta *a el nombre propue$to% pue$ $i intenta$ a,re,ar un
nombre *a e:i$tente% te dar; un error en tiempo de e2ecuci4n' 5eamo$ un e2emplo'
"u. Es&+los523
A+( oAo* !s ?.)%*&
A+( o"%l !s ?.)%*&
A+( oEs&+los !s ?.)%*&
A+( oEs&+los$%lda !s ?.)%*&
A+( oEs&+lo=u%9o !s ?.)%*&
,!**%d%(os al do*u(%n&o a*&ual
oAo* B Ih+s$o(8on%n&
,!**%d%(os a la s%l%**+6n
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
,!**%d%(os a &odos los %s&+los
oEs&+los B oAo*-g%&"&@l%Ka(+l+%s23
,!**%d%(os a los %s&+los d% *%lda
oEs&+los$%lda B oEs&+los-g%&B@=a(%2"$%ll"&@l%s"3
,1%'+f+*a(os Gu% %l %s&+lo %x+s&a
Aprendiendo OOo .a$ic 25G
#f oEs&+los$%lda-hasB@=a(%2 "R%sal&ado1" 3 Ih%n
o"%l-$%ll"&@l% B "R%sal&ado1"
Els%
,"+ no %x+s&% lo *'%a(os
oEs&+lo=u%9o B oAo*-*'%a&%#ns&an*%2 "*o(-sun-s&a'-s&@l%-$%ll"&@l%" 3
,5o ag'%ga(os a la *ol%**+6n d% %s&+los
oEs&+los$%lda-+ns%'&B@=a(%2 "R%sal&ado1"7 oEs&+lo=u%9o 3
,Es&a.l%*%(os su fo'(a&o
U+&h oEs&+lo=u%9o
-$ha'Kon&=a(% B "=+(.us "ans 5"
-$ha'H%+gh& B 15
-$ha'U%+gh& B 150
-$ha'0os&u'% B 2
-1%'&[us&+f@ B 2
-Ho'+[us&+f@ B 2
-$%llBa*]$olo' B REB2204720472043
-$ha'$olo' B REB207072553
End U+&h
,O lo a8l+*a(os
o"%l-$%ll"&@l% B "R%sal&ado1"
End #f
End "u.
Para borrar un e$tilo% u$amo$ el m3todo remo&e.*Name de la $i,uiente manera%
recordando 6ue al borrar el e$tilo% Ltoda$M% la$ celda$ 6ue ten,an dic-o e$tilo% re,re$aran al e$tilo
predeterminado% perdi3ndo$e todo el 1ormato'
"u. Es&+los623
A+( oAo* !s ?.)%*&
A+( oEs&+los !s ?.)%*&
A+( oEs&+los$%lda !s ?.)%*&
A+( oEs&+lo=u%9o !s ?.)%*&
,!**%d%(os al do*u(%n&o a*&ual
oAo* B Ih+s$o(8on%n&
,!**%d%(os a &odos los %s&+los
oEs&+los B oAo*-g%&"&@l%Ka(+l+%s23
,!**%d%(os a los %s&+los d% *%lda
oEs&+los$%lda B oEs&+los-g%&B@=a(%2"$%ll"&@l%s"3
,1%'+f+*a(os Gu% %l %s&+lo %x+s&a
#f oEs&+los$%lda-hasB@=a(%2 "Ao(+ngos" 3 Ih%n
#f MsgBox2"MEs&as s%gu'o d% .o''a' %l %s&+loN"7367"Bo''a %s&+lo"3 B 6 &h%n
,Pu+&a(os %l %s&+lo
oEs&+los$%lda-'%(o9%B@=a(%2 "Ao(+ngos" 3
MsgBox "Es&+lo d% *%lda .o''ado"
Els%
MsgBox "=? s% .o''o n+ng<n %s&+lo"
End #f
Els%
MsgBox "El %s&+lo no %x+s&%"
End #f
End "u.
>l mane2o de auto1ormato% e$ mu* $imilar al de e$tilo$% la di1erencia% e$ 6ue el
auto1ormato $iempre $e aplica a un ran,o de celda$% m=nimo% de tre$ columna$ por tre$ 1ila$% e$te
$er&icio e$ta di$ponible tanto en -o2a$ de calculo como en tabla$ de Nriter% para &er lo$
auto1ormato$ di$ponible$ u$amo$'
"u. !u&ofo'(a&o123
2)0 )'5 "ando 1ormato
A+( o!u&oKo'(a&os !s ?.)%*&
o!u&oKo'(a&os B *'%a&%Dno"%'9+*%2"*o(-sun-s&a'-sh%%&-Ia.l%!u&oKo'(a&s"3
,Mos&'a(os sus no(.'%s
MsgBox [o+n2 o!u&oKo'(a&os-g%&El%(%n&=a(%s237 $h'2133 3
End "u.
Para aplicar un auto1ormato $e u$a el m3todo auto!ormat de la $i,uiente manera'
"u. !u&ofo'(a&o223
A+( o"%l !s ?.)%*&
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
o"%l-au&oKo'(a&2"1%'d%"3
End "u.
Toma en cuenta 6ue el ran,o $eleccionado% LdebeM $er un ob2eto Sc+ell@an,eOb2% e$
decir% un ran,o de celda$% $i bien% por c4di,o% podr;$ aplicarlo a una $ola celda pero te 1ormatear;
un m=nimo de tre$ 1ila por tre$ columna$% $i $elecciona$ &ario$ ran,o$ de celda$% te dar; un error
pue$ e$e ob2eto no implementa el m3todo auto!ormat% lo me2or% como $iempre% e$ &alidar 6ue la
$elecci4n e$ correcta% $i u$a$ e$ta t3cnica' >l nombre del auto1ormato% como en lo$ e$tilo$% debe
$er e:actamente como $e llam4 al crearlo% pero a di1erencia de lo$ e$tilo$% $i e$cribe$ mal el
nombre% te dar; un error en tiempo de e2ecuci4n% por ello% e$ me2or &alidar 6ue e:i$ta% ante$ de
u$arlo% como en el $i,uiente e2emplo'
"u. !u&ofo'(a&o323
A+( o!u&oKo'(a&os !s ?.)%*&
A+( o"%l !s ?.)%*&
A+( s=o(.'%!K !s "&'+ng
s=o(.'%!K B "1%'d%Ro)o"
o!u&oKo'(a&os B *'%a&%Dno"%'9+*%2"*o(-sun-s&a'-sh%%&-Ia.l%!u&oKo'(a&s"3
,1%'+f+*a(os Gu% %x+s&a %l au&ofo'(a&o
#f o!u&oKo'(a&os-hasB@=a(%2 s=o(.'%!K 3 Ih%n
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
,=os as%gu'a(os Gu% la s%l%**+6n s%a un 'ango d% *%ldas
#f o"%l-g%&#(8l%(%n&a&+on=a(% B ""*$%llRang%?.)" Ih%n
,d% (Hn+(o &'%s f+las 8o' &'%s *olu(nas
#f o"%l-g%&$olu(ns-g%&$oun& Y 2 !nd o"%l-g%&Ro^s-g%&$oun& Y 2 Ih%n
o"%l-au&oKo'(a&2 s=o(.'%!K 3
Els%
MsgBox "El 'ango d%.% s%' d% (+n+(o7 3 *olu(nas 8o' 3 f+las"
End #f
Els%
MsgBox "=o %s un 'ango d% *%ldas"
End #f
Els%
MsgBox "El au&ofo'(a&o no %x+s&%"
End #f
End "u.
Para eliminar un auto1ormato% u$amo$ el m3todo remo&e.*Name como en'
"u. !u&ofo'(a&o423
A+( o!u&oKo'(a&os !s ?.)%*&
Aprendiendo OOo .a$ic 2)1
o!u&oKo'(a&os B *'%a&%Dno"%'9+*%2"*o(-sun-s&a'-sh%%&-Ia.l%!u&oKo'(a&s"3
,1%'+f+*a(os Gu% %x+s&a
#f o!u&oKo'(a&os-hasB@=a(%2 "1%'d%Ro)o" 3 Ih%n
#f MsgBox2"MEs&as s%gu'o d% .o''a' %l au&ofo'(a&oN"7367"Bo''a au&ofo'(a&o"3 B 6 Ih%n
,Pu+&a(os %l au&ofo'(a&o
o!u&oKo'(a&os-'%(o9%B@=a(%2 "1%'d%Ro)o" 3
MsgBox "!u&ofo'(a&o .o''ado"
Els%
MsgBox "=? s% .o''o nada"
End #f
Els%
MsgBox "El au&ofo'(a&o no %x+s&%"
End #f
End "u.
A di1erencia de lo$ e$tilo$ de celda% cuando borra$ un auto1ormato% la$ celda$
e$tablecida$ con e$te permanecen con dic-o 1ormato% pero el auto1ormato borrado *a no e$tar;
di$ponible para u$ar$e% por lo 6ue tenemo$ 6ue crearlo de nue&o' Para crear un auto1ormato%
primero -a* 6ue $aber (* entender) como e$ta e$tructurado% ob$er&a la $i,uiente tabla'
1
a
+olumna
1
a
+olumna
de dato$
2
a
+olumna
de dato$
Ultima +olumna
>ncabe/ado
1a !ila
0 1 2 (
1a !ila
de dato$
E 5 ) 7
2a !ila
de dato$
F G 10 11
Pie de Tabla
Ultima !ila
12 1( 1E 15
Un auto1ormato% no e$ m;$ 6ue una colecci4n de 1ormato$ de celda$ indi&iduale$%
cada cruce de columna * 1ila repre$enta un e$tilo de celda% 6ue% como podr;$ notar% tenemo$ 1)
e$tilo$ di1erente$ 6ue podemo$ e$tablecer' +omo *a lo mencionamo$% el ;rea m=nima para u$ar
un auto1ormato% e$ de ( : ( celda$% $i tu ran,o tiene m;$ ;rea% el 1ormato de la$ columna$ de
dato$ $e ira duplicando * alternando% lo mi$mo pa$ar; con la$ 1ila$ en el $entido &ertical' Ob$er&a
la $i,uiente ima,en% en la parte $uperior% e$t;n nue$tro$ dato$ $in 1ormato (Lpelone$M dicen en mi
pueblo)% * en la parte in1erior% como e$ 6ue 6ueremo$ 6ue 6uede% como podr;$ notar% $o* una
nulidad para el di$eKo% a$= 6ue no te pon,a$ mu* e$tricto'
2)2 )'5 "ando 1ormato
Para crear el auto1ormato anterior% u$amo$ la $i,uiente macro% te recuerdo 6ue el
1ormato de cada celda (campo) del auto1ormato% tiene la$ mi$ma$ caracter=$tica$ de 1ormato de la$
celda$ &i$ta$ anteriormente (aun6ue no e$ po$ible aplicar todo$ lo$ 1ormato$ pre$ente$
normalmente en celda$)% por lo 6ue no comentar3 e$a parte% &amo$ a 1ormatear 1) celda$% a$= 6ue
$er; una macro un poco m;$ lar,a de la$ 6ue -emo$ &enido probando% pero mu* $encilla por 6ue
$e repite ba$tante el c4di,o% &eamo$'
"u. $'%a'!u&oKo'(a&o23
A+( o!u&oKo'(a&os !s ?.)%*&
A+( o=u%9o!K !s ?.)%*&
A+( s=o(.'%!K !s "&'+ng
A+( oAo* !s ?.)%*&
A+( o"%l !s ?.)%*&
A+( oBo'd%5+n%a !s =%^ *o(-sun-s&a'-&a.l%-Bo'd%'5+n%
A+( oBo'd%Ia.la !s =%^ *o(-sun-s&a'-&a.l%-Ia.l%Bo'd%'
oAo* B Ih+s$o(8on%n&
o"%l B oAo*-g%&$u''%n&"%l%*&+on23
o=u%9o!K B oAo*-*'%a&%#ns&an*%2"*o(-sun-s&a'-sh%%&-Ia.l%!u&oKo'(a&"3
o!u&oKo'(a&os B *'%a&%Dno"%'9+*%2"*o(-sun-s&a'-sh%%&-Ia.l%!u&oKo'(a&s"3
s=o(.'%!K B "M+Ko'(a&o=u%9o"
,1%'+f+*a(os Gu% no %x+s&a
#f =o& o!u&oKo'(a&os-hasB@=a(%2 s=o(.'%!K 3 Ih%n
,5o ag'%ga(os a la *ol%**+6n d% !u&oKo'(a&os
o!u&oKo'(a&os-+ns%'&B@=a(%2 s=o(.'%!K7 o=u%9o!K 3
,5% da(os fo'(a&o a *ada *%lda
U+&h oBo'd%5+n%a
-$olo' B 255
-?u&%'5+n%U+d&h B 60
End U+&h
U+&h oBo'd%Ia.la
-Io85+n% B oBo'd%5+n%a
-#sIo85+n%1al+d B I'u%
-Bo&&o(5+n% B oBo'd%5+n%a
-#sBo&&o(5+n%1al+d B I'u%
-5%f&5+n% B oBo'd%5+n%a
-#s5%f&5+n%1al+d B I'u%
-R+gh&5+n% B oBo'd%5+n%a
-#sR+gh&5+n%1al+d B I'u%
End U+&h
,$%lda 0
$all Ko'(a&%a'$a(8o!K2 o=u%9o!K-g%&B@#nd%x2037 167116807 167772157 "5+.%'a&+on "ans"7 137
oBo'd%Ia.la7 1507 27 2 3
,$%lda 1
$all Ko'(a&%a'$a(8o!K2 o=u%9o!K-g%&B@#nd%x2137 167116807 167772157 "5+.%'a&+on "ans"7 137
oBo'd%Ia.la7 1507 27 2 3
,$%lda 2
$all Ko'(a&%a'$a(8o!K2 o=u%9o!K-g%&B@#nd%x2237 167116807 167772157 "5+.%'a&+on "ans"7 137
oBo'd%Ia.la7 1507 27 2 3
,$%lda 3
$all Ko'(a&%a'$a(8o!K2 o=u%9o!K-g%&B@#nd%x2337 167116807 167772157 "5+.%'a&+on "ans"7 137
oBo'd%Ia.la7 1507 27 2 3
,$%lda 4
$all Ko'(a&%a'$a(8o!K2 o=u%9o!K-g%&B@#nd%x2437 134217727 26215937 "5+.%'a&+on "ans"7 127
oBo'd%Ia.la7 1507 37 2 3
,$%lda 5
$all Ko'(a&%a'$a(8o!K2 o=u%9o!K-g%&B@#nd%x2537 134217727 07 "5+.%'a&+on "ans"7 107
oBo'd%Ia.la7 1007 07 2 3
,$%lda 6
$all Ko'(a&%a'$a(8o!K2 o=u%9o!K-g%&B@#nd%x2637 134217727 07 "5+.%'a&+on "ans"7 107
oBo'd%Ia.la7 1007 07 2 3
,$%lda 7
Aprendiendo OOo .a$ic 2)(
$all Ko'(a&%a'$a(8o!K2 o=u%9o!K-g%&B@#nd%x2737 26215937 167772157 "5+.%'a&+on "ans"7 127
oBo'd%Ia.la7 1507 07 2 3
,$%lda 8
$all Ko'(a&%a'$a(8o!K2 o=u%9o!K-g%&B@#nd%x2837 134217727 26215937 "5+.%'a&+on "ans"7 127
oBo'd%Ia.la7 1507 37 2 3
,$%lda 9
$all Ko'(a&%a'$a(8o!K2 o=u%9o!K-g%&B@#nd%x2937 167640577 07 "5+.%'a&+on "ans"7 107
oBo'd%Ia.la7 1507 07 2 3
,$%lda 10
$all Ko'(a&%a'$a(8o!K2 o=u%9o!K-g%&B@#nd%x21037 167640577 07 "5+.%'a&+on "ans"7 107
oBo'd%Ia.la7 1507 07 2 3
,$%lda 11
$all Ko'(a&%a'$a(8o!K2 o=u%9o!K-g%&B@#nd%x21137 26215937 167772157 "5+.%'a&+on "ans"7 127
oBo'd%Ia.la7 1507 07 2 3
,$%lda 12
$all Ko'(a&%a'$a(8o!K2 o=u%9o!K-g%&B@#nd%x21237 26215937 167772157 "5+.%'a&+on "ans"7 127
oBo'd%Ia.la7 1507 37 2 3
,$%lda 13
$all Ko'(a&%a'$a(8o!K2 o=u%9o!K-g%&B@#nd%x21337 26215937 167772157 "5+.%'a&+on "ans"7 127
oBo'd%Ia.la7 1507 07 2 3
,$%lda 14
$all Ko'(a&%a'$a(8o!K2 o=u%9o!K-g%&B@#nd%x21437 26215937 167772157 "5+.%'a&+on "ans"7 127
oBo'd%Ia.la7 1507 07 2 3
,$%lda 15
$all Ko'(a&%a'$a(8o!K2 o=u%9o!K-g%&B@#nd%x21537 134217727 07 "5+.%'a&+on "ans"7 107
oBo'd%Ia.la7 1507 07 2 3
,A% fo'(a 8'%d%&%'(+nada +n*lu+(os &odos las o8*+on%s
U+&h o=u%9o!K
-#n*lud%=u(.%'Ko'(a& B I'u%
-#n*lud%Ba*]g'ound B I'u%
-#n*lud%Bo'd%' B I'u%
-#n*lud%Kon& B I'u%
-#n*lud%[us&+f@ B I'u%
-#n*lud%=u(.%'Ko'(a& B I'u%
-#n*lud%U+d&h!ndH%+gh& B I'u%
End U+&h
,"olo lo a8l+*a(os s+ la s%l%**+6n %s un 'ango d% *%ldas
#f o"%l-g%&#(8l%(%n&a&+on=a(% B ""*$%llRang%?.)" Ih%n
o"%l-au&oKo'(a&2 s=o(.'%!K 3
End #f
Els%
,"+ %x+s&% %l fo'(a&o lo a8l+*anos
#f o"%l-g%&#(8l%(%n&a&+on=a(% B ""*$%llRang%?.)" Ih%n
o"%l-au&oKo'(a&2 s=o(.'%!K 3
End #f
End #f
End "u.
,0u%d%s ag'%ga' &odas las 8'o8+%dad%s Gu% *ons+d%'%s
"u. Ko'(a&%a'$a(8o!K2$a(8o !s ?.)%*&7 $olo'Kondo !s 5ong7 $olo'Ku%n&% !s 5ong7 Ku%n&% !s "&'+ng7
Ia(Ku%n&% !s #n&%g%'7 Bo'd%s !s ?.)%*&7 =%g'+&as !s #n&%g%'7 H[ !s B@&%7 1[ !s B@&%3
U+&h $a(8o
-$%llBa*]$olo' B $olo'Kondo
-$ha'$olo' B $olo'Ku%n&%
-$ha'Kon&=a(% B Ku%n&%
-$ha'H%+gh& B Ia(Ku%n&%
-Ia.l%Bo'd%' B Bo'd%s
-$ha'U%+gh& B =%g'+&as
-Ho'+[us&+f@ B H[
-1%'&[us&+f@ B 1[
End U+&h
End "u.
2)E )'5 "ando 1ormato
#a macro anterior tiene una$ pe6ueKa$ di1erencia$ con la ima,en mo$trada al inicio
de ella% tu tarea e$ notar la$ di1erencia$% a$= mi$mo% tiene una pe6ueKa de1iciencia 6ue tambi3n
tiene$ 6ue encontrar% no e$ta di1=cil% $olo tiene$ 6ue $er un poco ob$er&ador' Ob$er&a 6ue
-acemo$ u$o de una $ubrutina (macro) de apo*o para darle 1ormato a cada campo del
auto1ormato% $olo e$to* con$iderando la$ propiedade$ m;$ repre$entati&a$% por $upue$to% puede$
complementarla con toda$ la$ 6ue nece$ite$ pue$ e$to$ campo$ tienen m;$ de cuarenta
propiedade$'
=.!.) Formato de pG*ina
>l 1ormato de p;,ina $iempre tiene 6ue e$tablecer$e por medio de un e$tilo de
p;,ina% e$te% en con2unto con otra $erie de propiedade$ de la -o2a donde e$t3$ traba2ando% te dar;
control completo $obre el 1ormato de p;,ina' #a $i,uiente macro te mue$tra en un cuadro de
men$a2e% la li$ta de 1ormato$ de p;,ina e:i$tente$ en el documento de$de el cual $e e2ecuta'
"u. Ko'(a&o0ag+na123
A+( oAo* !s ?.)%*&
A+( oEs&+los !s ?.)%*&
A+( oEs&+los0ag+na !s ?.)%*&
,!**%d%(os al do*u(%n&o a*&ual
oAo* B Ih+s$o(8on%n&
,!**%d%(os a &odos los %s&+los
oEs&+los B oAo*-g%&"&@l%Ka(+l+%s23
,!**%d%(os a los %s&+los d% 8>g+na
oEs&+los0ag+na B oEs&+los-g%&B@=a(%2"0ag%"&@l%s"3
,Mos&'a(os sus no(.'%s
MsgBox [o+n2 oEs&+los0ag+na-g%&El%(%n&=a(%s237 $h'2133 3
End "u.
5eri1ica 6ue e1ecti&amente $ean lo$ e$tilo$ 6ue tiene$% &e a tu -o2a * pre$iona la tecla
!11 para abrir el cuadro de dialo,o L&stilo , 4ormatoM% $elecciona lo$ e$tilo$ de p;,ina% la li$ta
deber=a $er i,ual a la 6ue te de&uel&e la macro anterior'
Para $aber 6ue e$tilo de p;,ina tenemo$ en nue$tra -o2a acti&a% u$amo$<
"u. Ko'(a&o0ag+na223
A+( oAo* !s ?.)%*&
Aprendiendo OOo .a$ic 2)5
A+( oHo)a!*&+9a !s ?.)%*&
A+( oEs&+los !s ?.)%*&
A+( oEs&+los0ag+na !s ?.)%*&
oAo* B Ih+s$o(8on%n&
oHo)a!*&+9a B oAo*-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
,1%'+f+*a(os %l no(.'% d%l %s&+lo a*&ual
MsgBox oHo)a!*&+9a-0ag%"&@l%
End "u.
Para aplicar el e$tilo de p;,ina 6ue 6uiera$% u$amo$ la $i,uiente macro<
"u. Ko'(a&o0ag+na323
A+( oAo* !s ?.)%*&
A+( oHo)a!*&+9a !s ?.)%*&
A+( oEs&+los !s ?.)%*&
A+( oEs&+los0ag+na !s ?.)%*&
A+( sEs&+lo !s "&'+ng
sEs&+lo B "R%8o'&"
oAo* B Ih+s$o(8on%n&
oHo)a!*&+9a B oAo*-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
oEs&+los B oAo*-g%&"&@l%Ka(+l+%s23
oEs&+los0ag+na B oEs&+los-g%&B@=a(%2"0ag%"&@l%s"3
,1%'+f+*a(os Gu% %l no(.'% d%l %s&+lo %x+s&a
#f oEs&+los0ag+na-hasB@=a(%2 sEs&+lo 3 Ih%n
,"+ %x+s&% lo a8l+*a(os
oHo)a!*&+9a-0ag%"&@l% B sEs&+lo
Els%
MsgBox "=o s% a8l+*6 n+ng<n %s&+lo d% 8>g+na"
End #f
End "u.
+on el $i,uiente e2emplo% mo$tramo$ al,una$ propiedade$ del e$tilo de p;,ina
predeterminado'
"u. Ko'(a&o0ag+na423
A+( oAo* !s ?.)%*&
A+( oHo)a!*&+9a !s ?.)%*&
A+( oEs&+los !s ?.)%*&
A+( oEs&+los0ag+na !s ?.)%*&
A+( sEs&+lo !s "&'+ng
A+( oE0 !s ?.)%*&
sEs&+lo B "A%faul&"
oAo* B Ih+s$o(8on%n&
oHo)a!*&+9a B oAo*-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
oEs&+los B oAo*-g%&"&@l%Ka(+l+%s23
oEs&+los0ag+na B oEs&+los-g%&B@=a(%2"0ag%"&@l%s"3
#f oEs&+los0ag+na-hasB@=a(%2 sEs&+lo 3 Ih%n
oE0 B oEs&+los0ag+na-g%&B@=a(%2 sEs&+lo 3
,!n*ho @ al&o d% la 8>g+na
MsgBox oE0-U+d&h : " T " : oE0-H%+gh&
,Ma'g%n su8%'+o' % +nf%'+o'
MsgBox oE0-Io8Ma'g+n : " T " : oE0-Bo&&o(Ma'g+n
,Ma'g%n +;Gu+%'do @ d%'%*ho
MsgBox oE0-5%f&Ma'g+n : " T " : oE0-R+gh&Ma'g+n
End #f
End "u.
2)) )'5 "ando 1ormato
Para borrar un e$tilo% u$amo$ el m3todo removeB,5ame de la $i,uiente manera'
"u. Ko'(a&o0ag+na523
A+( oAo* !s ?.)%*&
A+( oHo)a!*&+9a !s ?.)%*&
A+( oEs&+los !s ?.)%*&
A+( oEs&+los0ag+na !s ?.)%*&
A+( sEs&+lo !s "&'+ng
sEs&+lo B "1+d%o&%*a"
oAo* B Ih+s$o(8on%n&
oHo)a!*&+9a B oAo*-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
oEs&+los B oAo*-g%&"&@l%Ka(+l+%s23
oEs&+los0ag+na B oEs&+los-g%&B@=a(%2"0ag%"&@l%s"3
#f oEs&+los0ag+na-hasB@=a(%2 sEs&+lo 3 Ih%n
#f MsgBox2"MEs&as s%gu'o d% .o''a' %l %s&+lo d% 8>g+naN"7 363 B 6 Ih%n
,Bo''a(os %l %s&+lo
oEs&+los0ag+na-'%(o9%B@=a(%2 sEs&+lo 3
MsgBox "Es&+lo .o''ado"
Els%
MsgBox "El %s&+lo no s% .o''o"
End #f
Els%
MsgBox "=o %x+s&% %l %s&+lo d% 8>g+na"
End #f
End "u.
Ten cuidado con la macro anterior% dentro de la inter1a/ del u$uario% lo$ e$tilo$
@eporte (@eport) * Predeterminado ("e1ault) no $e pueden borrar% pero por c4di,o $i 6ue $e
puede% $i lle,a$ a borrar Ltodo$M lo$ e$tilo$% *a no podr;$ -ace u$o del men? 4ormato $ P"gina% $i
no me cree$ * te ,u$ta e:perimentar como a mi% borra todo$ lo$ e$tilo$ para &eri1icarlo% pero%
aun6ue lo$ borre$% la$ -o2a$ nue&a$% al e$tar ba$ada$ en la plantilla predeterminada% tendr;n de
nue&o lo$ e$tilo$ predeterminado$% claro% $i lo$ borra$ de la plantilla% $i 6ue te 6uedar;$ $in e$tilo$%
no ob$tante% puede$ &ol&er a crearlo$% como en el $i,uiente e2emplo'
"u. Ko'(a&o0ag+na623
A+( oAo* !s ?.)%*&
A+( oHo)a!*&+9a !s ?.)%*&
A+( oEs&+los !s ?.)%*&
A+( oEs&+los0ag+na !s ?.)%*&
A+( sEs&+lo !s "&'+ng
A+( oE0 !s ?.)%*&
sEs&+lo B "1+d%o&%*a"
oAo* B Ih+s$o(8on%n&
oHo)a!*&+9a B oAo*-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
oEs&+los B oAo*-g%&"&@l%Ka(+l+%s23
oEs&+los0ag+na B oEs&+los-g%&B@=a(%2"0ag%"&@l%s"3
#f oEs&+los0ag+na-hasB@=a(%2 sEs&+lo 3 Ih%n
oHo)a!*&+9a-0ag%"&@l%2 sEs&+lo 3
Els%
,$'%a(os un nu%9o %s&+lo
oE0 B oAo*-*'%a&%#ns&an*%2 "*o(-sun-s&a'-s&@l%-0ag%"&@l%" 3
,5o ag'%ga(os a la *ol%**+6n d% %s&+los
oEs&+los0ag+na-+ns%'&B@=a(%2 sEs&+lo7 oE0 3
,5% da(os fo'(a&o
U+&h oE8
-U+d&h B 27940 ,!n*ho
-H%+gh& B 21590 ,!l&o
-Io8Ma'g+n B 2000 ,Ma'g%n su8%'+o'
Aprendiendo OOo .a$ic 2)7
-Bo&&o(Ma'g+n B 2000 ,Ma'g%n +nf%'+o'
-5%f&Ma'g+n B 1000 ,Ma'g%n +;Gu+%'do
-R+gh&Ma'g+n B 1000 ,Ma'g%n d%'%*ho
-#s5ands*a8% B I'u% ,?'+%n&a*+6n d% la 8>g+na 2ho'+;on&al3
-$%n&%'Ho'+;on&all@ B I'u% ,$%n&'ado ho'+;on&al d%l *on&%n+do
-"*al%Io0ag%sF B 1 ,Dna 8>g+na d% an*ho
-"*al%Io0ag%sO B 0 ,5as Gu% salgan d% al&o
End U+&h
End #f
End "u.
Ob$er&a la$ caracter=$tica$ indicada$ dentro de la mi$ma macro% como dicen en mi
pueblo -ni e$t;n toda$ la$ 6ue $on% ni $on toda$ la$ 6ue e$t;n-' #a$ caracter=$tica$ e$tablecida$
$on la$ mi$ma$ del men? 4ormato $ P"gina%%%% 6ue% como podr;$ notar% $on ba$tante$% &eamo$ la$
m;$ comune$'
>l anc-o (Nidt-) * alto (dei,-t) de la p;,ina% $e re1iere al tamaKo del papel% -a* 6ue
e$tablecerlo$ en cent3$ima$ de mil=metro% e$ decir% cada 100 unidade$ e$ i,ual a 1 mil=metro%
e$ta$ propiedade$% tiene$ 6ue u$arla$ correctamente en combinaci4n con la propiedad Orientaci4n
(9$#and$cape)% e$ decir% $i e$tablece$ e$ta propiedad en &erdadero (True) e$ decir -ori/ontal%
entonce$ el anc-o debe $er ma*or 6ue el alto% $i la e$tablece$ en 1al$o (!al$e) e$ decir &ertical% el
alto debe $er ma*or para 6ue lo &ea$ correctamente' >n el $i,uiente e2emplo% la primer 1orma e$
correcta% la $e,unda no'
U+&h oE0
-U+d&h B 27940 ,!n*ho
-H%+gh& B 21590 ,!l&o
-#s5ands*a8% B I'u% ,?'+%n&a*+6n d% la 8>g+na 2ho'+;on&al3
End U+&h
U+&h oE0
-U+d&h B 27940 ,!n*ho
-H%+gh& B 21590 ,!l&o
-#s5ands*a8% B Kals% ,?'+%n&a*+6n d% la 8>g+na 29%'&+*al3
End U+&h
2)F )'5 "ando 1ormato
#o$ mar,ene$ tambi3n e$t;n en cent3$ima$ de mil=metro$ * $e &en a1ectado$ por el
di$eKo de p;,ina (Pa,eSt*le#a*out)% e$ decir% $i e$tablece$ la$ p;,ina$ derec-a e i/6uierda i,ual
o $i la$ re1le2a$% e$te &alor e$ta determinado por la enumeraci4n Pa,eSt*le#a*out% cu*o$ po$ible$
&alore$ $on lo$ $i,uiente$'
Propiedad PageSt,le;a,out 1alor 1alor en -nter!az
com'$un'$tar'$t*le'Pa,eSt*le#a*out'A## 0 "erec-a e i/6uierda
com'$un'$tar'$t*le'Pa,eSt*le#a*out'#>!T 1 Solo i/6uierda
com'$un'$tar'$t*le'Pa,eSt*le#a*out'@9dT 2 Solo derec-a
com'$un'$tar'$t*le'Pa,eSt*le#a*out'M9@@O@>" ( @e1le2ado
Puede$ e$tablecer el &alor o la con$tante como en el $i,uiente e2emplo'
oE0-0ag%"&@l%5a@ou& B 0
oE0-0ag%"&@l%5a@ou& B *o(-sun-s&a'-s&@l%-0ag%"&@l%5a@ou&-M#RR?REA
>l !ormato% $e re1iere al e$tilo de numeraci4n 6ue $e u$ar; cuando $e e$tablece la
numeraci4n de p;,ina$ en el encabe/ado o en el pie de p;,ina% $u$ &alore$ &an del 0 al 5 * $e
corre$ponden al orden mo$trado en la inter1a/ del u$uario<
oE0-=u(.%'+ngI@8% B 4
>n LAlineaci4n de la tablaM% lo correcta $eria% Lcentrado del contenidoM% pue$ e$o e$ lo
6ue realmente -acen e$ta$ propiedade$% para el $entido -ori/ontal (+enterdori/ontall*) * &ertical
(+enter5erticall*)% $on &alore$ booleano$'
oE0-$%n&%'Ho'+;on&all@ B I'u%
oE0-$%n&%'1%'&+*all@ B Kals%
>n la 1ic-a .orde% tenemo$<
Aprendiendo OOo .a$ic 2)G
Para e$tablecer el borde de la p;,ina% u$amo$ la e$tructura Border;ine% *a &i$ta en
otro$ cap=tulo$% en el $i,uiente e2emplo% e$tablecemo$ el borde de cada lado de un color di1erente'
A+( oBo'd%5+n%a !s =%^ *o(-sun-s&a'-&a.l%-Bo'd%'5+n%
U+&h oBo'd%5+n%a
-$olo' B REB220070703
-#nn%'5+n%U+d&h B 100 ,5Hn%a +n&%'+o'
-?u&%'5+n%U+d&h B 50 ,5Hn%a %x&%'+o'
-5+n%A+s&an*% B 100 ,A+s&an*+a %n&'% lHn%as
End U+&h
oE0-Io8Bo'd%' B oBo'd%5+n%a
oBo'd%5+n%a-$olo' B REB207200703
oE0-Bo&&o(Bo'd%' B oBo'd%5+n%a
oBo'd%5+n%a-$olo' B REB207072003
oE0-5%f&Bo'd%' B oBo'd%5+n%a
oBo'd%5+n%a-$olo' B REB2200720072003
oE0-R+gh&Bo'd%' B oBo'd%5+n%a
Si 6uiere$ &er $olo una l=nea% e$tablece $olo una de la$ l=nea$% *a $ea la interior
(9nner#ineNidt-) o la e:terior (Outer#ineNidt-) * no e$table/ca$ la di$tancia entre ella$
(#ine"i$tance)% de nue&o% la$ unidade$ $on cent3$ima$ de mil=metro$' #a opci4n /istancia al te+to%
$e re1iere a la di$tancia entre lo$ borde$ * el contenido% $i 6uiere$ la mi$ta di$tancia para lo$ cuatro
borde$% como $i e$tu&iera acti&ada la ca$illa de &eri1icaci4n Sincronizar% u$a la propiedad
Border/istance% $i 6uiere$ un di$tancia di1erente para cada lado% u$a la$ $i,uiente$ propiedade$'
,0a'a s+n*'on+;a' &odos los .o'd%s a -5 ((
oE0-Bo'd%'A+s&an*% B 500
,0a'a %s&a.l%*%' *ada .o'd% d+f%'%n&%
oE0-Io8Bo'd%'A+s&an*% B 500
oE0-Bo&&o(Bo'd%'A+s&an*% B 1000
oE0-5%f&Bo'd%'A+s&an*% B 1500
oE0-R+gh&Bo'd%'A+s&an*% B 2000
#a $ombra $e e$tablece con la propiedad S-ado7!ormat% 6ue e$ una e$tructura
com'$un'$tar'table'S-ado7!ormat% con la$ $i,uiente propiedade$'
270 )'5 "ando 1ormato
U+&h o"o(.'a
-5o*a&+on B 4 ,Aond% %s&a la so(.'a
-"hado^U+d&h B 1000 ,!n*ho d% la so(.'a
-#sI'ans8a'%n& B Kals% ,"+ %s &'ans8a'%n&%
-$olo' B REB2180718071803 ,$olo'
End U+&h
oE0-"hado^Ko'(a& B o"o(.'a
#a propiedad #ocation% e$ta determinada por la $i,uiente enumeraci4n'
Propiedad S(ado<;ocation 1alor 1alor en -nter!az
com'$un'$tar'table'S-ado7#ocation'NON> 0 Nin,una
com'$un'$tar'table'S-ado7#ocation'TOPQ#>!T 1 Arriba a la i/6uierda
com'$un'$tar'table'S-ado7#ocation'TOPQ@9dT 2 Arriba a la derec-a
com'$un'$tar'table'S-ado7#ocation'.OTTOMQ#>!T ( Aba2o a la i/6uierda
com'$un'$tar'table'S-ado7#ocation'.OTTOMQ@9dT E Aba2o a la derec-a
Si e$tablece$ la propiedad de tran$parencia (9$Tran$parent) en &erdadero (True)% la
$ombra no $e &era'
#a $i,uiente 1ic-a $e llama !ondo% &eamo$ $u propiedad 6ue e$ mu* $encilla'
oE0-Ba*]$olo' B REB2200722072403
Tambi3n podemo$ e$tablecer una ima,en de 1ondo% a6u= puede$ &er a mi no&ia
Marion +otillard'
Aprendiendo OOo .a$ic 271
#a ruta de la ima,en la e$tablecemo$ con Bac=rap(ic7R;% e$ importante 6ue le
pa$e$ la ruta en 1ormato U@#% * por $upue$to 6ue la ima,en e:i$ta% $i no% no te dar; un error pero
no te mo$trar; nada% cuida muc-o el tamaKo de la$ im;,ene$ in$ertada$ en documento$% $i $e
u$ara $olo en pantalla% 6ue e$ lo u$ual% no re6uiere$ ni un ,ran tamaKo ni una ,ran re$oluci4n'
,Es&a.l%*%(os la 'u&a d% la +(ag%n
oE0-Ba*]E'a8h+*DR5 B $on9%'&IoDR52 "/ho(%/(au/(a'+on-)8g" 3
,O la 8os+*+6n dond% la Gu%'%(os
oE0-Ba*]E'a8h+*5o*a&+on B 5
#a po$ici4n (.acsrap-ic#ocation) puede tomar &alore$ de 1 a 11% de acuerdo a la
$i,uiente ima,en% en la opci4n crea% te cubrir; la -o2a completa con la ima,en'
No$ $altamo$ el encabe/ado * pie de p;,ina 6ue por $u comple2idad &eremo$ al
1inal% * &eamo$ la ultima 1ic-a8 do2a% 6ue tiene la$ $i,uiente$ propiedade$'
272 )'5 "ando 1ormato
>l orden de impre$i4n (Orden de p;,ina) lo e$tablecemo$ con la propiedad8
Print/o<n4irst% &alor booleano 6ue e6ui&ale a'
5erdadero (True) f "e arriba -acia aba2o% de$pu3$ -acia la derec-a
!al$o (!al$e) f "e i/6uierda a derec-a * -acia aba2o
oE0-0'+n&Ao^nK+'s& B I'u%
>l &alor de Primer n>m) de p"gina% e$ta repre$entado por la propiedad
4irstPage5umber% &alor tipo entero (inte,er) 6ue e$tablece un inicio de numeraci4n de p;,ina
di1erente de uno' Ten cuidado $i lo u$a$ en con2unto con el total de -o2a$% pue$ te puede dar
re$ultado$ al,o e:traKo$% como mo$trarte do2a 5 de ('
oE0-K+'s&0ag%=u(.%' B 8
#a$ $i,uiente$ propiedade$ $olo determinan 6ue opcione$ $e imprimir;n * cuale$ no%
en cada l=nea te mue$tro $u e6ui&alencia en la inter1a/ del u$uario'
U+&h oE0
-0'+n&!nno&a&+ons B Kals% ,#(8'+(+' las no&as d% *%ldas
-0'+n&$ha'&s B I'u% ,#(8'+(+' los E'>f+*os
-0'+n&A'a^+ng B I'u% ,#(8'+(+' los ?.)%&os d% d+.u)o
-0'+n&Ko'(ulas B Kals% ,#(8'+(+' las fo'(ulas7 %n 9%; d%l '%sul&ado
-0'+n&E'+d B Kals% ,#(8'+(+' la *uad'H*ula d% las *%ldas
-0'+n&H%ad%'s B Kals% ,#(8'+(+' %n*a.%;ados d% f+las @ *olu(nas
-0'+n&?.)%*&s B I'u% ,#(8'+(+' ?.)%&os % +(>g%n%s
-0'+n&`%'o1alu%s B I'u% ,#(8'+(+' los 9alo'%s *%'o
End U+&h
#a e$cala de impre$i4n no$ puede re$ol&er mu* 1;cilmente problema$ de impre$i4n%
la primera opci4n e$ aumentar o di$minuirla $e,?n nue$tra$ nece$idade$ con la propiedad
PageScale% un &alor tipo entero (inte,er) entre 10 * E00% $i lo e$tablece$ 1uera de e$to$ limite$% $e
a2u$tar; al &alor m=nimo o m;:imo m;$ cercano% toma en cuenta 6ue e$te porcenta2e de cambio%
Aprendiendo OOo .a$ic 27(
$olo e$ &i$ible en la &i$ta preliminar * a la -ora de imprimir% en tu inter1a/ de u$uario no &era$
nin,?n cambio de tamaKo'
oE0-0ag%"*al% B 80 ,!)us&a(os al 80e d% %s*ala
#a $e,unda opci4n e$ a2u$tar a un determinado n?mero de p;,ina$% tiene$ 6ue
con$iderar un a2u$te 4ptimo entre cantidad de dato$ * e$te &alor% pue$ $i tiene$ muc-o$ dato$ *
e$tablece$ un &alor de p;,ina$ mu* pe6ueKo% el 1actor de e$cala $e reducir; tanto 6ue lo$ dato$
no $er;n le,ible$'
,!)us&a(os a &'%s 8>g+nas d% +(8'%s+6n
oE0-"*al%Io0ag%s B 3
Por ultimo la 6ue m;$ me ,u$ta% puede$ e$tablecer un determinado n?mero de
p;,ina$ de anc-o por otro de alto% por e2emplo<
,Es&a.l%*%(os la +(8'%s+6n %n &'%s d% an*ho 8o' dos d% al&o
oE0-"*al%Io0ag%sF B 3
oE0-"*al%Io0ag%sO B 2
>$ta$ propiedade$ $on mu* ?tile$ en e$o ,rande$ li$tado$ de dato$% mu* comune$
donde tiene$ muc-a$ 1ila$ * un determinado n?mero de columna$ 6ue caben en el anc-o de una
-o2a% *a $ea &ertical u -ori/ontal% $i e$tablece$ el anc-o en 1 * el alto en 0% e$tamo$ 1or/ando a
u$ar e:actamente una de anc-o por la$ Lnece$aria$M de alto'
,Es&a.l%*%(os la +(8'%s+6n %n una d% an*ho 8o' las Gu% salgan d% al&o
oE8-"*al%Io0ag%sF B 1
oE8-"*al%Io0ag%sO B 0
A-ora $i% *a ca$i para terminar% &eamo$ como modi1icar el encabe/ado * el pie de
p;,ina de nue$tro e$tilo de p;,ina' #o primero 6ue -a* 6ue -acer% e$ acti&arlo$ o de$acti&arlo$
$e,?n nue$tra$ nece$idade$<
+omo $on mu* $imilare$ la$ opcione$ de encabe/ado * pie de p;,ina% te ir3
mo$trando $u$ propiedade$% una 2unto a otra' Para acti&arlo$ o de$acti&arlo$ u$amo$<
27E )'5 "ando 1ormato
,!*&+9a(os %l %n*a.%;ado
oE8-H%ad%'?n B I'u%
,@ d%sa*&+9a(os %l 8+% d% 8>g+na
oE8-Koo&%'?n B Kals%
#a opci4n Contenido a la iz.uierda?derec(a igual% no$ permite% $i e$ta de$acti&ada%
e$tablecer la$ opcione$ de encabe/ado o pie de p;,ina% de 1orma di1erente para la$ p;,ina$ pare$
e impare$ de nue$tra impre$i4n% e$ta opci4n% 2unto con la de /ise@o de p"gina &i$ta anteriormente%
no$ permiten con1i,urar nue$tra impre$i4n como $i de un libro $e tratar;' Para acti&arla o
de$acti&arla u$amo$'
,5o d%sa*&+9a(os %n %l %n*a.%;ado
oE0-H%ad%'#s"ha'%d B Kals%
,5o a*&+9a(os %n %l 8+% d% 8>g+na
oE0-Koo&%'#s"ha'%d B I'u%
"e$pu3$ tenemo$ la$ opcione$ para e$tablecer lo$ mar,ene$ en cent3$ima$ de
mil=metro$% e$te mar,en e$ di$tinto e independiente del mar,en de la p;,ina'
,Es&a.l%*%(os los (a'g%n%s d%l %n*a.%;ado %n 3 *(
oE0-H%ad%'R+gh&Ma'g+n B 3000
oE0-H%ad%'5%f&Ma'g+n B 3000
,Es&a.l%*%(os los (a'g%n%s d%l 8+% d% 8>g+na %n 2 *(
oE0-Koo&%'R+gh&Ma'g+n B 2000
oE0-Koo&%'5%f&Ma'g+n B 2000
#a propiedad &spacio% $e re1iere a la di$tancia entre en el encabe/ado o pie de
p;,ina * el contenido del documento'
,!)us&a(os la d+s&an*+a d%l %n*a.%;ado al *u%'8o d%l do*u(%n&o
oE0-H%ad%'Bod@A+s&an*% B 500
,!)us&a(os la d+s&an*+a d%l 8+% d% 8>g+na al *u%'8o d%l do*u(%n&o
oE0-Koo&%'Bod@A+s&an*% B 1000
#a propiedad Altura% e$ la altura del encabe/ado o pie de p;,ina% e$ decir% el e$pacio
di$ponible para introducir in1ormaci4n% pero toma en cuenta 6ue dentro de e$te &alor% e$ta
con$iderada la di$tancia entre el encabe/ado o pie de p;,ina * el cuerpo del documento% por lo
6ue $i 6uiere$ una di$tancia ab$oluta% debe$ de $umarle dic-o &alor% como en'
,!)us&a(os la al&u'a d%l %n*a.%;ado su(ando %l %s8a*+o al *u%'8o
oE0-H%ad%'H%+gh& B 2000 C oE0-H%ad%'Bod@A+s&an*%
,O d%l 8+% d% 8>g+na
oE0-Koo&%'H%+gh& B 1000 C oE0-Koo&%'Bod@A+s&an*%
#a propiedad Ajuste din"mico de la altura% no$ permite adaptar la altura al contenido
del encabe/ado o pie de p;,ina% $i e$ta acti&ada% la medida introducida en la propiedad anterior
no $er; tomada en cuenta% e$ta propiedad e$ mu* ?til $i e$tablecemo$ por c4di,o el contenido de
lo$ encabe/ado$ o pie$ de p;,ina' Para acti&arla o de$acti&arla% u$amo$'
,Es&a.l%*%(os la al&u'a d+n>(+*a 8a'a %l %n*a.%;ado
oE0-H%ad%'A@na(+* B I'u%
,5a d%sa*&+9a(os 8a'a %l 8+% d% 8>g+na
Aprendiendo OOo .a$ic 275
oE0-Koo&%'A@na(+* B Kals%
9,ual 6ue en el e$tilo de la p;,ina% en el encabe/ado como en el pie de p;,ina%
tenemo$ la$ opcione$ de e$tablecer% un borde% una $ombra% un color de 1ondo o una ima,en% la
1orma e$ la mi$ma% lo 6ue cambia% e$ la$ propiedade$ a la$ 6ue $e e$tablecen e$ta$'
,$onf+gu'a(os %l &+8o d% .o'd%
U+&h oBo'd%5+n%a
-$olo' B REB207150703
-#nn%'5+n%U+d&h B 0 ,5Hn%a +n&%'+o'
-?u&%'5+n%U+d&h B 80 ,5Hn%a %x&%'+o'
End U+&h
,Es&a.l%*%(os %l (+s(o 8a'a &odos
oE0-H%ad%'Io8Bo'd%' B oBo'd%5+n%a
oE0-H%ad%'Bo&&o(Bo'd%' B oBo'd%5+n%a
oE0-H%ad%'5%f&Bo'd%' B oBo'd%5+n%a
oE0-H%ad%'R+gh&Bo'd%' B oBo'd%5+n%a
,$a(.+a(os %l *olo' 8a'a %l .o'd% d%l 8+% d% 8>g+na
U+&h oBo'd%5+n%a
-$olo' B REB21507150703
End U+&h
,Es&a.l%*%(os %l (+s(o 8a'a &odos
oE0-Koo&%'Io8Bo'd%' B oBo'd%5+n%a
oE0-Koo&%'Bo&&o(Bo'd%' B oBo'd%5+n%a
oE0-Koo&%'5%f&Bo'd%' B oBo'd%5+n%a
oE0-Koo&%'R+gh&Bo'd%' B oBo'd%5+n%a
Para la $ombra aplica i,ual 6ue en e$tilo de p;,ina'
,$onf+gu'a(os la so(.'a
U+&h o"o(.'a
-5o*a&+on B 4 ,Aond% %s&a la so(.'a
-"hado^U+d&h B 500 ,!n*ho d% la so(.'a
-$olo' B REB2150716071703 ,$olo'
End U+&h
,0a'a %l %n*a.%;ado
oE0-H%ad%'"hado^Ko'(a& B o"o(.'a
,0a'a %l 8+% d% 8>g+na
oE0-Koo&%'"hado^Ko'(a& B o"o(.'a
O el color de 1ondo'
,Es&a.l%*%(os %l *olo' d% fondo d%l %n*a.%;ado d% fo'(a al%a&o'+a
oE0-H%ad%'Ba*]$olo' B REB 2 Rnd232557Rnd232557Rnd23255 3
,#gual 8a'a %l 8+% d% 8>g+na
oE0-Koo&%'Ba*]$olo' B REB 2 Rnd232557Rnd232557Rnd23255 3
Para a,re,ar una ima,en% u$amo$'
,Es&a.l%*%(os la 'u&a d% la +(ag%n
oE0-H%ad%'Ba*]E'a8h+*DR5 B $on9%'&IoDR52 "/ho(%/(au/a''+.a-)8g" 3
,O la 8os+*+6n dond% la Gu%'%(os
oE0-H%ad%'Ba*]E'a8h+*5o*a&+on B 10
,!ho'a %n %l 8+% d% 8>g+na
27) )'5 "ando 1ormato
oE0-Koo&%'Ba*]E'a8h+*DR5 B $on9%'&IoDR52 "/ho(%/(au/a.a)o-)8g" 3
,O la 8os+*+6n dond% la Gu%'%(os
oE0-Koo&%'Ba*]E'a8h+*5o*a&+on B 10
Para 6uitar una ima,en a,re,ada% tiene$ 6ue e$tablecer e$ta propiedad en &ac=a'
oE0-H%ad%'Ba*]E'a8h+*DR5 B ""
>l contenido 6ue puede lle&ar el encabe/ado o el pie de p;,ina% e$ mu* rico% puede$
e$tablecer de 1orma independiente% el tipo de letra * $u e$tilo de la$ tre$ ;rea$ di$ponible$% como
$e ilu$tra en la ima,en $i,uiente'
5eamo$ como controlar el contenido de e$ta$ $eccione$' #o primero 6ue tenemo$
6ue tener pre$ente% e$ la opci4n &i$ta anteriormente8 Contenido a la iz.uierda?derec(a igual) $i
e$ta propiedad e$ta $eleccionada% entonce$ $olo tenemo$ 6ue modi1icar el contenido de un lado%
pero $i e$ta de$acti&ada% entonce$ tenemo$ 6ue e$tablecer% tanto el encabe/ado o pie de p;,ina%
tanto de la$ p;,ina$ pare$ como de la$ impare$% e$ta$ propiedade$ $on'
@i,-tPa,edeader+ontent Para el encabe/ado de la$ p;,ina$ derec-a$
#e1tPa,edeader+ontent Para el encabe/ado de la$ p;,ina$ i/6uierda$
@i,-tPa,e!ooter+ontent Para el pie de p;,ina de la$ p;,ina$ derec-a$
#e1tPa,e!ooter+ontent Para el pie de p;,ina de la$ p;,ina$ i/6uierda$
Para nue$tro e2emplo% dado 6ue $on la$ mi$ma$ opcione$ para uno * otro% daremo$
por -ec-o 6ue la$ propiedade$ (deader9$S-ared * !ooter9$S-ared) e$t;n $eleccionada$% de e$te
modo% $olo modi1icamo$ la$ propiedade$ de la$ p;,ina$ derec-a$% 6ue $er;n i,uale$ a la$ de la
i/6uierda% pero no te con1unda$% aun manipulando $olo la$ de la$ p;,ina$ derec-a$% tenemo$
acce$o a la$ tre$ $eccione$ mo$trada$ en la ima,en anterior% &eamo$ como'
,Mos&'a(os %l *on&%n+do d% la +;Gu+%'da d%l %n*a.%;ado
MsgBox oE0-R+gh&0ag%H%ad%'$on&%n&-5%f&I%x&-"&'+ng
,A%l *%n&'o
MsgBox oE0-R+gh&0ag%H%ad%'$on&%n&-$%n&%'I%x&-"&'+ng
,O d% la d%'%*ha
MsgBox oE0-R+gh&0ag%H%ad%'$on&%n&-R+gh&I%x&-"&'+ng
Aprendiendo OOo .a$ic 277
5amo$ a cambiar el te:to de mo$trado en el e2emplo anterior de la$ $ei$ $eccione$
accedible$% tre$ para el encabe/ado * tre$ para el pie de p;,ina% de la $i,uiente manera'
"u. Ko'(a&o0ag+na823
A+( oAo* !s ?.)%*&
A+( oEs&+los !s ?.)%*&
A+( oEs&+los0ag+na !s ?.)%*&
A+( sEs&+lo !s "&'+ng
A+( oE0 !s ?.)%*&
A+( o$on&%n+do !s ?.)%*&
A+( oI%x&o !s ?.)%*&
sEs&+lo B "1+d%o&%*a"
oAo* B Ih+s$o(8on%n&
oEs&+los B oAo*-g%&"&@l%Ka(+l+%s23
oEs&+los0ag+na B oEs&+los-g%&B@=a(%2"0ag%"&@l%s"3
#f oEs&+los0ag+na-hasB@=a(%2 sEs&+lo 3 Ih%n
oE0 B oEs&+los0ag+na-g%&B@=a(%2 sEs&+lo 3
oE0-H%ad%'?n B I'u%
oE0-Koo&%'?n B I'u%
,!**%d%(os al *on&%n+do d%l %n*a.%;ado
o$on&%n+do B oE0-R+gh&0ag%H%ad%'$on&%n&23
,!**%d%(os a la 8a'&% +;Gu+%'da
oI%x&o B o$on&%n+do-5%f&I%x&23
,$a(.+a(os %l &%x&o
oI%x&o-"&'+ng B "Es&a %s la +;Gu+%'da" : $h'2133 : "%n %l %n*a.%;ado"
,O %l *olo'
oI%x&o-I%x&-$ha'$olo' B REB225570703
,R%as+gna(os %l *on&%n+do 8a'a 9%' los *a(.+os
oE0-R+gh&0ag%H%ad%'$on&%n& B o$on&%n+do
,5o (+s(o 8a'a %l *%n&'o d%l %n*a.%;ado
oI%x&o B o$on&%n+do-$%n&%'I%x&23
oI%x&o-"&'+ng B "Es&% %s %l *%n&'o" : $h'2133 : "%n %l %n*a.%;ado"
oI%x&o-I%x&-$ha'$olo' B REB207255703
oE0-R+gh&0ag%H%ad%'$on&%n& B o$on&%n+do
,O la d%'%*ha
oI%x&o B o$on&%n+do-R+gh&I%x&23
oI%x&o-"&'+ng B "Es&a %s la d%'%*ha" : $h'2133 : "%n %l %n*a.%;ado"
oI%x&o-I%x&-$ha'$olo' B REB207072553
oE0-R+gh&0ag%H%ad%'$on&%n& B o$on&%n+do
,!ho'a (od+f+*a(os %l 8+% d% 8>g+na
o$on&%n+do B oE0-R+gh&0ag%Koo&%'$on&%n&23
oI%x&o B o$on&%n+do-5%f&I%x&23
oI%x&o-"&'+ng B "Es&a %s la +;Gu+%'da" : $h'2133 : "%n %l 8+% d% 8>g+na"
oI%x&o-I%x&-$ha'$olo' B REB207072553
oE0-R+gh&0ag%Koo&%'$on&%n& B o$on&%n+do
oI%x&o B o$on&%n+do-$%n&%'I%x&23
oI%x&o-"&'+ng B "Es&% %s %l *%n&'o" : $h'2133 : "%n %l 8+% d% 8>g+na"
oI%x&o-I%x&-$ha'$olo' B REB207255703
oE0-R+gh&0ag%Koo&%'$on&%n& B o$on&%n+do
oI%x&o B o$on&%n+do-R+gh&I%x&23
oI%x&o-"&'+ng B "Es&a %s la d%'%*ha" : $h'2133 : "%n %l 8+% d% 8>g+na"
oI%x&o-I%x&-$ha'$olo' B REB225570703
oE0-R+gh&0ag%Koo&%'$on&%n& B o$on&%n+do
End #f
End "u.
27F )'5 "ando 1ormato
+omo $abe$% -a* una $erie de campo$ predeterminado$ 6ue podemo$ incluir en
cual6uier ;rea de un encabe/ado o de un pie de p;,ina% campo$ como% la 1ec-a% la -ora% el
n?mero de p;,ina * el total de p;,ina$% &eamo$ como in$ertarlo$'
"u. Ko'(a&o0ag+na923
A+( oAo* !s ?.)%*&
A+( oEs&+los !s ?.)%*&
A+( oEs&+los0ag+na !s ?.)%*&
A+( sEs&+lo !s "&'+ng
A+( oE0 !s ?.)%*&
A+( o$on&%n+do !s ?.)%*&
A+( oI%x&o !s ?.)%*&
A+( o$u'so' !s ?.)%*&
A+( o$a(8o !s ?.)%*&
sEs&+lo B "1+d%o&%*a"
oAo* B Ih+s$o(8on%n&
oEs&+los B oAo*-g%&"&@l%Ka(+l+%s23
oEs&+los0ag+na B oEs&+los-g%&B@=a(%2"0ag%"&@l%s"3
#f oEs&+los0ag+na-hasB@=a(%2 sEs&+lo 3 Ih%n
oE0 B oEs&+los0ag+na-g%&B@=a(%2 sEs&+lo 3
oE0-H%ad%'?n B I'u%
oE0-Koo&%'?n B I'u%
,!**%d%(os al *on&%n+do d%l 8+% d% 8>g+na
o$on&%n+do B oE0-R+gh&0ag%Koo&%'$on&%n&23
,$'%a(os una +ns&an*+a d%l *a(8o =o(.'% d%l a'*h+9o
o$a(8o B oAo*-*'%a&%#ns&an*% 2"*o(-sun-s&a'-&%x&-I%x&K+%ld-K+l%=a(%"3
,5+(8+a(os las &'%s s%**+on%s
o$on&%n+do-5%f&I%x&-"&'+ng B ""
o$on&%n+do-$%n&%'I%x&-"&'+ng B ""
o$on&%n+do-R+gh&I%x&-"&'+ng B ""
,$'%a(os un *u'so' %n %sa s%**+6n
o$u'so' B o$on&%n+do-5%f&I%x&-*'%a&%I%x&$u'so'23
,=os (o9%(os al f+nal
o$u'so'-go&oEnd2 Kals% 3
,#ns%'&a(os %l *a(8o
o$on&%n+do-5%f&I%x&-+ns%'&I%x&$on&%n& 2o$u'so'7 o$a(8o7 I'u%3
,$'%a(os %l *a(8o =<(%'o d% 8>g+na
o$a(8o B oAo*-*'%a&%#ns&an*% 2"*o(-sun-s&a'-&%x&-I%x&K+%ld-0ag%=u(.%'"3
,$'%a(os un *u'so' %n la s%**+6n *%n&'al
o$u'so' B o$on&%n+do-$%n&%'I%x&-*'%a&%I%x&$u'so'23
o$u'so'-go&oEnd2 Kals% 3 ,=os (o9%(os
o$u'so'-"&'+ng B "0>g+na " ,#ns%'&a(os un &%x&o
o$u'so'-go&oEnd2 Kals% 3 ,=os (o9%(os
,#ns%'&a(os %l *a(8o
o$on&%n+do-$%n&%'I%x&-+ns%'&I%x&$on&%n& 2o$u'so'7 o$a(8o7 I'u%3
o$u'so'-go&oEnd2 Kals% 3 ,=os (o9%(os
o$u'so'-"&'+ng B " d% " ,#ns%'&a(os (>s &%x&o
o$u'so'-go&oEnd2 Kals% 3 ,=os (o9%(os
,$'%a(os %l *a(8o7 Io&al d% 8>g+nas
o$a(8o B oAo*-*'%a&%#ns&an*% 2"*o(-sun-s&a'-&%x&-I%x&K+%ld-0ag%$oun&"3
,5o +ns%'&a(os
o$on&%n+do-$%n&%'I%x&-+ns%'&I%x&$on&%n& 2o$u'so'7 o$a(8o7 I'u%3
,$'%a(os %l *a(8o d% K%*ha
o$a(8o B oAo*-*'%a&%#ns&an*% 2"*o(-sun-s&a'-&%x&-I%x&K+%ld-Aa&%I+(%"3
o$a(8o-#sAa&% B I'u% ,Es una f%*ha
,$'%a(os un *u'so' %n la s%**+6n d%'%*ha
o$u'so' B o$on&%n+do-R+gh&I%x&-*'%a&%I%x&$u'so'23
o$u'so'-go&oEnd2 Kals% 3 ,=os (o9%(os
,#ns%'&a(os %l *a(8o
o$on&%n+do-R+gh&I%x&-+ns%'&I%x&$on&%n& 2o$u'so'7 o$a(8o7 I'u%3
,!*&ual+;a(os %l *on&%n+do d%l 8+% d% 8>g+na
Aprendiendo OOo .a$ic 27G
oE0-R+gh&0ag%Koo&%'$on&%n& B o$on&%n+do
End #f
End "u.
=.!.! Formato condicional
>l 1ormato condicional no$ permite% de acuerdo al re$ultado de una e:pre$i4n o
1ormula% 1ormatear una celda con di1erente$ e$tilo$% e$to e$ importante% $olo puede$ aplicar e$tilo$
de celda$ e:i$tente$% por lo 6ue a$e,urate de tener al,uno$ de prueba' Puede$ e$tablecer de una
a tre$ condicione$% 6ue $e e&aluar;n una a una% &eamo$ una primer condici4n $encilla'
"u. Ko'(a&o$ond+*+onal123
A+( oAo* !s ?.)%*&
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango !s ?.)%*&
A+( oK$ !s ?.)%*&
A+( ($ond+*+on%s233 !s =%^ *o(-sun-s&a'-.%ans-0'o8%'&@1alu%
oAo* B Ih+s$o(8on%n&
oHo)a!*&+9a B oAo*-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
oRango B oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "!1" 3
,!**%d%(os al fo'(a&o *ond+*+onal
oK$ B oRango-g%&0'o8%'&@1alu%2"$ond+&+onalKo'(a&"3
,5+(8+a(os *ualGu+%' fo'(a&o %x+s&%n&%7 s+ no lo ha*%s7 las *ond+*+on%s
,s% ag'%ga'>n *o(o s%gunda o &%'*%' *ond+*+6n s%g<n *o''%s8onda
oK$-*l%a'23
,Es&a.l%*%(os las *ond+*+on%s d%l fo'(a&o
($ond+*+on%s203-=a(% B "?8%'a&o'"
,El o8%'ado' B
($ond+*+on%s203-1alu% B *o(-sun-s&a'-sh%%&-$ond+&+on?8%'a&o'-EPD!5
($ond+*+on%s213-=a(% B "Ko'(ula1"
,El 9alo' d% la fo'(ula 17 %s d%*+'7 s+ la *%lda B 100
($ond+*+on%s213-1alu% B "100"
($ond+*+on%s223-=a(% B ""&@l%=a(%"
,En *aso d% Gu% s% *u(8la la *ond+*+on%s7 a8l+*a(os %l %s&+lo R%sal&ado17
,'%*u%'da Gu% d%.%s d% *'%a'lo 8'%9+a(%n&%
($ond+*+on%s223-1alu% B "R%sal&ado1"
,!g'%ga(os las *ond+*+on%s al fo'(a&o
oK$-add=%^ 2 ($ond+*+on%s23 3
,R%%s&a.l%*%(os la 8'o8+%dad 8a'a Gu% su'&an %f%*&o los *a(.+os
oRango-s%&0'o8%'&@1alu%2 "$ond+&+onalKo'(a&"7 oK$ 3
End "u.
Acabamo$ de a,re,ar% a la celda A1% la condici4n de 6ue% $i el &alor de la celda e$
i,ual a 100% le e$table/ca el e$tilo de celda @e$altado1% $i el e$tilo no e:i$te% no te dar; nin,?n
error% $implemente no aplicar; nin,?n 1ormato% &eri1i6uemo$ 6ue la a,re,o correctamente'
2F0 )'5 "ando 1ormato
A-ora intentemo$% a,re,ar do$ condicione$ en &e/ de una% por e2emplo% a la celda
+1% $i e$ i,ual a 50 un e$tilo * $i e$ ma*or a 50 otro e$tilo% 6ue 6uedar=a a$='
"u. Ko'(a&o$ond+*+onal223
A+( oAo* !s ?.)%*&
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango !s ?.)%*&
A+( oK$ !s ?.)%*&
A+( ($ond+*+on%s233 !s =%^ *o(-sun-s&a'-.%ans-0'o8%'&@1alu%
oAo* B Ih+s$o(8on%n&
oHo)a!*&+9a B oAo*-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
oRango B oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "$1" 3
,!**%d%(os al fo'(a&o *ond+*+onal
oK$ B oRango-g%&0'o8%'&@1alu%2"$ond+&+onalKo'(a&"3
oK$-*l%a'23
($ond+*+on%s203-=a(% B "?8%'a&o'"
($ond+*+on%s203-1alu% B *o(-sun-s&a'-sh%%&-$ond+&+on?8%'a&o'-EPD!5
($ond+*+on%s213-=a(% B "Ko'(ula1"
($ond+*+on%s213-1alu% B "50"
($ond+*+on%s223-=a(% B ""&@l%=a(%"
($ond+*+on%s223-1alu% B "Ro)a"
oK$-add=%^ 2 ($ond+*+on%s23 3
($ond+*+on%s203-=a(% B "?8%'a&o'"
($ond+*+on%s203-1alu% B *o(-sun-s&a'-sh%%&-$ond+&+on?8%'a&o'-ERE!IER
($ond+*+on%s213-=a(% B "Ko'(ula1"
($ond+*+on%s213-1alu% B "50"
($ond+*+on%s223-=a(% B ""&@l%=a(%"
($ond+*+on%s223-1alu% B "!;ul"
oK$-add=%^ 2 ($ond+*+on%s23 3
,R%%s&a.l%*%(os la 8'o8+%dad 8a'a Gu% su'&an %f%*&o los *a(.+os
oRango-s%&0'o8%'&@1alu%2 "$ond+&+onalKo'(a&"7 oK$ 3
End "u.
Ob$er&a la matri/ de propiedade$ m+ondicione$% e$ta 1orma de e$tablecer pare$ de
propiedade$ con un nombre (Name) * un &alor (5alue)% *a la -emo$ u$ado anteriormente por lo
6ue no te debe $er de$conocida% la propiedad operador (Operator)% e$ una enumeraci4n 6ue
puede tener lo$ $i,uiente &alore$'
com%sun%star%s(eet%ConditionOperator 1alor 1alor en -nter!az
com'$un'$tar'$-eet'+onditionOperator'NON> 0 Nin,una
Aprendiendo OOo .a$ic 2F1
com%sun%star%s(eet%ConditionOperator 1alor 1alor en -nter!az
com'$un'$tar'$-eet'+onditionOperator'>eUA# 1 9,ual
com'$un'$tar'$-eet'+onditionOperator'NOTQ>eUA# 2 "i$tinta de
com'$un'$tar'$-eet'+onditionOperator'@>AT>@ ( Ma*or 6ue
com'$un'$tar'$-eet'+onditionOperator'@>AT>@Q>eUA# E Ma*or o i,ual
com'$un'$tar'$-eet'+onditionOperator'#>SS 5 Menor 6ue
com'$un'$tar'$-eet'+onditionOperator'#>SSQ>eUA# ) Menor o i,ual
com'$un'$tar'$-eet'+onditionOperator'.>TN>>N 7 >ntre
com'$un'$tar'$-eet'+onditionOperator'NOTQ.>TN>>N F No entre
com'$un'$tar'$-eet'+onditionOperator'!O@MU#A G !ormula
5eamo$ como e$tablecer la$ condicione$ para e&aluar entre un par de &alore$'
"u. Ko'(a&o$ond+*+onal323
A+( oAo* !s ?.)%*&
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango !s ?.)%*&
A+( oK$ !s ?.)%*&
A+( ($ond+*+on%s233 !s =%^ *o(-sun-s&a'-.%ans-0'o8%'&@1alu%
oAo* B Ih+s$o(8on%n&
oHo)a!*&+9a B oAo*-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
oRango B oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "B14B10" 3
,!**%d%(os al fo'(a&o *ond+*+onal
oK$ B oRango-g%&0'o8%'&@1alu%2"$ond+&+onalKo'(a&"3
oK$-*l%a'23
($ond+*+on%s203-=a(% B "?8%'a&o'"
($ond+*+on%s203-1alu% B *o(-sun-s&a'-sh%%&-$ond+&+on?8%'a&o'-BEIUEE=
($ond+*+on%s213-=a(% B "Ko'(ula1"
($ond+*+on%s213-1alu% B "0"
($ond+*+on%s223-=a(% B "Ko'(ula2"
($ond+*+on%s223-1alu% B "5"
($ond+*+on%s233-=a(% B ""&@l%=a(%"
($ond+*+on%s233-1alu% B "R%8'o.ado"
oK$-add=%^ 2 ($ond+*+on%s23 3
($ond+*+on%s203-=a(% B "?8%'a&o'"
($ond+*+on%s203-1alu% B *o(-sun-s&a'-sh%%&-$ond+&+on?8%'a&o'-BEIUEE=
($ond+*+on%s213-=a(% B "Ko'(ula1"
($ond+*+on%s213-1alu% B "6"
($ond+*+on%s223-=a(% B "Ko'(ula2"
($ond+*+on%s223-1alu% B "8"
($ond+*+on%s233-=a(% B ""&@l%=a(%"
($ond+*+on%s233-1alu% B ""uf+*+%n&%"
oK$-add=%^ 2 ($ond+*+on%s23 3
($ond+*+on%s203-=a(% B "?8%'a&o'"
($ond+*+on%s203-1alu% B *o(-sun-s&a'-sh%%&-$ond+&+on?8%'a&o'-BEIUEE=
($ond+*+on%s213-=a(% B "Ko'(ula1"
($ond+*+on%s213-1alu% B "9"
($ond+*+on%s223-=a(% B "Ko'(ula2"
($ond+*+on%s223-1alu% B "10"
($ond+*+on%s233-=a(% B ""&@l%=a(%"
($ond+*+on%s233-1alu% B "Ex*%l%n&%"
oK$-add=%^ 2 ($ond+*+on%s23 3
,R%s&a.l%*%(os la 8'o8+%dad 8a'a Gu% su'&an %f%*&o
2F2 )'5 "ando 1ormato
oRango-s%&0'o8%'&@1alu%2 "$ond+&+onalKo'(a&"7 oK$ 3
End "u.
Ob$er&a 6ue a-ora -emo$ u$ado la propiedad !ormula1 * !ormula2 para dar el
inter&alo de &alore$ 6ue no$ intere$a e&aluar% entre 0 * 5% entre ) * F * por ultimo entre G * 10%
tambi3n ob$er&a 6ue a-ora% en &e/ de aplicar el 1ormato condicional a una $ola celda% lo -emo$
-ec-o a un ran,o de celda$% en e$te ca$o% L.1<.10M'
"onde realmente me parece% $e &e la noble/a del 1ormato condicional% e$ con el u$o
de 1ormula$% pue$ no$ da un mar,en ampl=$imo para e$tablecer la$ condicione$% por e2emplo%
$upon,amo$ 6ue tenemo$ un ran,o de celda$ con 1ec-a$ * 6ueremo$ 6ue lo$ $;bado$ *
domin,o$ $e di$tin,an de lo$ dem;$ d=a$% crea do$ e$tilo$ de celda nue&o$% uno para lo$ $;bado$
* otro para lo$ domin,o$% creamo$ $u 1ormato condicional con el $i,uiente e2emplo'
"u. Ko'(a&o$ond+*+onal423
A+( oAo* !s ?.)%*&
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango !s ?.)%*&
A+( oK$ !s ?.)%*&
A+( ($ond+*+on%s233 !s =%^ *o(-sun-s&a'-.%ans-0'o8%'&@1alu%
oAo* B Ih+s$o(8on%n&
oHo)a!*&+9a B oAo*-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
oRango B oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "#24[32" 3
,!**%d%(os al fo'(a&o *ond+*+onal
oK$ B oRango-g%&0'o8%'&@1alu%2"$ond+&+onalKo'(a&"3
oK$-*l%a'23
($ond+*+on%s203-=a(% B "?8%'a&o'"
($ond+*+on%s203-1alu% B *o(-sun-s&a'-sh%%&-$ond+&+on?8%'a&o'-K?RMD5!
($ond+*+on%s213-=a(% B "Ko'(ula1"
($ond+*+on%s213-1alu% B "UEEJA!O2!13B7"
($ond+*+on%s223-=a(% B ""&@l%=a(%"
($ond+*+on%s223-1alu% B ""a.ados"
oK$-add=%^ 2 ($ond+*+on%s23 3
($ond+*+on%s203-=a(% B "?8%'a&o'"
($ond+*+on%s203-1alu% B *o(-sun-s&a'-sh%%&-$ond+&+on?8%'a&o'-K?RMD5!
($ond+*+on%s213-=a(% B "Ko'(ula1"
($ond+*+on%s213-1alu% B "UEEJA!O2!13B1"
($ond+*+on%s223-=a(% B ""&@l%=a(%"
($ond+*+on%s223-1alu% B "Ao(+ngos"
oK$-add=%^ 2 ($ond+*+on%s23 3
,R%%s&a.l%*%(os la 8'o8+%dad 8a'a Gu% su'&an %f%*&o
oRango-s%&0'o8%'&@1alu%2 "$ond+&+onalKo'(a&"7 oK$ 3
End "u.
Ob$er&a como -emo$ e$tablecido el &alor (5alue) de la propiedad !ormula1%
e$tamo$ -aciendo u$o de una 1unci4n incorporada "9AS>M (N>>t"AO) de +alc% 6ue no$
de&uel&e el d=a de la $emana 6ue corre$ponda a la 1ec-a pa$ada como ar,umento8 "omin,of1%
#une$f2% etc% nota como% al $er una 1unci4n de +alc% $i e$ta lle&a ar,umento$% 1or/o$amente -a*
6ue proporcion;r$elo$% ob$er&a 6ue nue$tro ran,o empie/a en 92 * a la 1unci4n le e$tamo$
pa$ando la celda A1% no te con1unda$% le decimo$ 6ue e$ la celda A1 por 6ue la re1erencia e$
Lrelati&aM% el &alor 6ue 6ueremo$ e&aluar% e$ el de la mi$ma celda 92% 9(% etc% el 1ormato condicional%
a2u$tar; correctamente la$ re1erencia$ a cada celda% por $upue$to% compruebalo'
Aprendiendo OOo .a$ic 2F(
5amo$ a crear un 1ormato condicional un poco m;$ elaborado% pero m;$ di&ertido'
Ob$er&a el par de li$ta$ en la ima,en $i,uiente'
#a tarea% e$ -acer un 1ormato condicional 6ue no$ re$alte lo$ me$e$ 6ue 1altan en
una * otra li$ta' Por $upue$to% ante$ de &er la $oluci4n% trata de re$ol&erlo por ti mi$mo% primero te
mue$tro la ima,en con el re$ultado% para 6ue &ea$ 6ue e$ po$ible% de$pu3$ &iene la macro con la
$oluci4n 6ue no tiene$ 6ue &er -a$ta 6ue intente$ re$ol&erlo% con1=o en ti' Ob$er&a como -emo$
$ati$1ec-o la condici4n% e$t;n re$altado$ con 1ondo ,ri$% 1uente a/ul * ne,rita$% lo$ me$e$ 6ue LnoM
e$t;n en cada li$ta% por $upue$to% e$to 1unciona con cual6uier par de li$ta$'
A-ora la $oluci4n'
"u. Ko'(a&o$ond+*+onal523
A+( oAo* !s ?.)%*&
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango !s ?.)%*&
A+( oK$ !s ?.)%*&
A+( ($ond+*+on%s233 !s =%^ *o(-sun-s&a'-.%ans-0'o8%'&@1alu%
oAo* B Ih+s$o(8on%n&
oHo)a!*&+9a B oAo*-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
oRango B oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "B24B9" 3
oK$ B oRango-g%&0'o8%'&@1alu%2"$ond+&+onalKo'(a&"3
oK$-*l%a'23
,$ond+*+on%s 8a'a la 8'+(%' l+s&a
($ond+*+on%s203-=a(% B "?8%'a&o'"
($ond+*+on%s203-1alu% B *o(-sun-s&a'-sh%%&-$ond+&+on?8%'a&o'-K?RMD5!
($ond+*+on%s213-=a(% B "Ko'(ula1"
,?.s%'9a *o(o aho'a usa(os '%f%'%n*+a a.solu&as
($ond+*+on%s213-1alu% B "$?D=I#K2dAd24dAd9f!13B0"
($ond+*+on%s223-=a(% B ""&@l%=a(%"
($ond+*+on%s223-1alu% B "Kal&an&%"
oK$-add=%^ 2 ($ond+*+on%s23 3
,R%%s&a.l%*%(os la 8'o8+%dad 8a'a Gu% su'&an %f%*&o
oRango-s%&0'o8%'&@1alu%2 "$ond+&+onalKo'(a&"7 oK$ 3
2FE )'5 "ando 1ormato
,0a'a la s%gunda l+s&a
oRango B oHo)a!*&+9a-g%&$%llRang%B@=a(%2 "A24A9" 3
oK$ B oRango-g%&0'o8%'&@1alu%2"$ond+&+onalKo'(a&"3
oK$-*l%a'23
($ond+*+on%s203-=a(% B "?8%'a&o'"
($ond+*+on%s203-1alu% B *o(-sun-s&a'-sh%%&-$ond+&+on?8%'a&o'-K?RMD5!
($ond+*+on%s213-=a(% B "Ko'(ula1"
,?.s%'9a *o(o aho'a usa(os '%f%'%n*+a a.solu&as
($ond+*+on%s213-1alu% B "$?D=I#K2dBd24dBd9f!13B0"
($ond+*+on%s223-=a(% B ""&@l%=a(%"
($ond+*+on%s223-1alu% B "Kal&an&%"
oK$-add=%^ 2 ($ond+*+on%s23 3
,R%%s&a.l%*%(os la 8'o8+%dad 8a'a Gu% su'&an %f%*&o
oRango-s%&0'o8%'&@1alu%2 "$ond+&+onalKo'(a&"7 oK$ 3
End "u.
O con e$to terminamo$ el tema de lo$ 1ormato$% 6ue% te -abr;$ dado cuenta% muc-a$
&ece$ con$ume muc-o m;$ c4di,o 6ue otra$ nece$idade$'
WW!eli/ pro,ramaci4nVV
=.= Imprimiendo
#a impre$i4n en OpenO11ice'or, e$ $umamente $encilla% pero debe$ de tomar en
cuenta lo$ elemento$ 6ue e$t;n implicado$ en ella% por e2emplo< el ;rea de impre$i4n% la impre$ora
di$ponible% el e$tilo de p;,ina e$tablecido% entre otro$ elemento$ 6ue &eremo$ en e$te cap=tulo'
>l m3todo u$ado para imprimir e$ print * $e u$a de la $i,uiente manera'
"u. #(8'+(+%ndo123
A+( (?8*23
Ih+s$o(8on%n&-0'+n&2 (?8*23 3
End "u.
Ob$er&a 6ue $imple% pero VcuidadoW% la l=nea anterior podr=a en&iarte a imprimir una
,ran cantidad de -o2a$% dependiendo de la con1i,uraci4n actual 6ue ten,a$% u$ala con cuidado
pero me2or aun% controla toda$ la$ opcione$ de impre$i4n 6ue aprenderemo$ a6u='
Para mo$trar el nombre de la impre$ora acti&a% u$amo$'
"u. #(8'+(+%ndo223
A+( (A#23
,Mos&'a(os %l no(.'% d% la +(8'%so'a a*&+9a
(A# B Ih+s$o(8on%n&-g%&0'+n&%'23
MsgBox (A#203-1alu%
Aprendiendo OOo .a$ic 2F5
End "u.
>l nombre mo$trado depender; del nombre re,i$trado de tu impre$ora en tu S'O'%
para cambiar la impre$ora a u$ar% u$amo$'
"u. #(8'+(+%ndo323
,Ma&'+; 8a'a %l d%s*'+8&o' d% +(8'%s+6n
A+( (A#223 !s =%^ *o(-sun-s&a'-.%ans-0'o8%'&@1alu%
A+( (?8*23
,$a(.+a(os la +(8'%so'a 8a'a +(8'+(+'
(A#203-=a(% B "=a(%"
(A#203-1alu% B "H0/0"$/2200"
,$a(.+a(os la o'+%n&a*+6n 0 B 1%'&+*al7 1 B Ho'+;on&al
(A#213-=a(% B "0a8%'?'+%n&a&+on"
(A#213-1alu% B 1
,Es&a.l%*%(os las o8*+on%s d% la +(8'%so'a
Ih+s$o(8on%n&-s%&0'+n&%'2 (A# 3
,En9+a(os a +(8'+(+'
Ih+s$o(8on%n&-0'+n&2 (?8*23 3
End "u.
Si la impre$ora no e$ta re,i$trada con dic-o nombre% el len,ua2e no te dar; ni
mo$trar; un error% a$= 6ue a$e,urate de u$ar el nombre correcto' Si bien podemo$ cambiar la
orientaci4n del papel para imprimir de$de e$te de$criptor% mi recomendaci4n e$ 6ue $olo u$e$ el
de$criptor de impre$i4n para cambiar de impre$ora% * toda$ la$ dem;$ opcione$ la$ e$table/ca$
en un e$tilo de p;,ina donde tenemo$ m;$ ri6ue/a de opcione$ * par;metro$'
>n la$ opcione$ de impre$i4n tiene$ al,una$ caracter=$tica$ para controlar la
cantidad de copia$% el orden * la$ p;,ina$ 6ue de$eamo$ imprimir'
"u. #(8'+(+%ndo423
,Ma&'+; 8a'a las o8*+on%s d% +(8'%s+6n
A+( (?8*223 !s =%^ *o(-sun-s&a'-.%ans-0'o8%'&@1alu%
A+( (A#223 !s =%^ *o(-sun-s&a'-.%ans-0'o8%'&@1alu%
(A#203-=a(% B "=a(%"
(A#203-1alu% B "H0/5as%'[%&"
(A#213-=a(% B "0a8%'?'+%n&a&+on"
(A#213-1alu% B *o(-sun-s&a'-9+%^-0a8%'?'+%n&a&+on-0?RIR!#I
(A#223-=a(% B "0a8%'Ko'(a&"
(A#223-1alu% B *o(-sun-s&a'-9+%^-0a8%'Ko'(a&-5EIIER
Ih+s$o(8on%n&-s%&0'+n&%'2 (A# 3
,El n<(%'o d% *o8+as
(?8*203-=a(% B "$o8@$oun&"
(?8*203-1alu% B 1
,"+ s% +(8'+(%n %n )u%gos
(?8*213-=a(% B "$olla&%"
(?8*213-1alu% B I'u%
,5as 8>g+nas a +(8'+(+'
(?8*223-=a(% B "0ag%s"
(?8*223-1alu% B "1"
,En9+a(os a +(8'+(+'
Ih+s$o(8on%n&-0'+n&2 (?8*23 3
End "u.
2F) )') 9mprimiendo
"e e$ta$ opcione$% la propiedad Pa+es% tiene la$ $i,uiente$ &ariante$ para
e$tablecer la$ -o2a$ 6ue de$eamo$ imprimir del documento<
Una $ola p;,ina 1
5aria$ p;,ina$ (%F%12
Un ran,o de p;,ina$ 5-10
+ombinaci4n de la$ anteriore$ E%7%10-15
A$e,urate de pa$arle el &alor a e$ta propiedad como una cadena de te:to% e$ decir%
entre comilla$ * el &alor de la propiedad +op*+ount% como un &alor entero% $i no% te dar; un error
al 6uerer e$tablecer la$ opcione$ de impre$i4n'
Ob$er&a 6ue en de$criptor de impre$i4n% -emo$ e$tablecido el 1ormato del papel%
para nue$tro e2emplo en tamaKo carta (#>TT>@)% de nue&o% $i no tiene$ problema$ con tu
impre$i4n% el tamaKo del papel e$ me2or e$tablecerlo en el e$tilo de p;,ina% en mi e:periencia%
al,una$ impre$ora$ Lrebelde$M% $e nie,an a tomar el 1ormato de papel e$tablecido en el 1ormato de
p;,ina% por ello% $e tiene 6ue e$tablecer en el de$criptor de impre$i4n% te $u,iero -acer tu$
prueba$ re$pecti&a$ * $i no e$ nece$ario% $olo e$tablece el tamaKo en el e$tilo de p;,ina' #o$
&alore$ 6ue puede tomar e$ta propiedad $on'
com%sun%star%vie<%Paper4ormat 1alor 1alor en -nter!az
com'$un'$tar'&ie7'Paper!ormat'A( 0 A(
com'$un'$tar'&ie7'Paper!ormat'AE 1 AE
com'$un'$tar'&ie7'Paper!ormat'A5 2 A5
com'$un'$tar'&ie7'Paper!ormat'.5 ( .5
com'$un'$tar'&ie7'Paper!ormat'#>TT>@ E +arta
com'$un'$tar'&ie7'Paper!ormat'#>A# 5 O1icio
com'$un'$tar'&ie7'Paper!ormat'TA.#O9" ) "oble carta
com'$un'$tar'&ie7'Paper!ormat'US>@ 7 U$uario
Nota 6ue -a$ta a-ora% -emo$ u$ado el ob2eto T-i$+omponent% e$ decir% el ob2eto
de$de donde $e llama a la macro% el m3todo Print e$ta pre$ente de$de cual6uier arc-i&o de +alc%
por lo 6ue puede$ in&ocarlo de$de cual6uiera' >n la$ -o2a$ de calculo% tenemo$ la po$ibilidad de
de1inir ;rea$ de impre$i4n% 6ue no $on m;$ 6ue ran,o$ de celda$ con un nombre% pero con
al,una$ caracter=$tica$ 6ue lo$ -acen e$peciale$% por e2emplo% la po$ibilidad de repetir una o
&aria$ 1ila$ o columna$ en cada -o2a de la impre$i4n' #a$ opcione$ de la$ ;rea$ de impre$i4n 6ue
aprenderemo$ a u$ar * manipular% $on la$ mi$ma$ pre$ente$ en el men? 4ormato $ -mprimir
Rangos AB' Para obtener la$ ;rea$ de impre$i4n actuale$ u$amo$'
"u. #(8'+(+%ndo523
A+( (!#23
A+( sM%nsa)% !s "&'+ng
(!# B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&-g%&0'+n&!'%as23
sM%nsa)% B "5a ho)a a*&+9a &+%n% " : Ko'(a&2 DBound2 (!#23 3 C 1 3 : " >'%as d% +(8'%s+6n"
MsgBox sM%nsa)%
End "u.
Aprendiendo OOo .a$ic 2F7
Ob$er&a 6ue e$tamo$ obteniendo (,etPrintArea$) la$ ;rea$ de impre$i4n de$de la
-o2a acti&a pue$ e$te m3todo e$ta implementado en la$ -o2a$ del arc-i&o% e$te m3todo te
de&ol&er; una matri/ con todo$ la$ ;rea$ de impre$i4n e$tablecida$ en la -o2a de$de donde $e
in&o6ue% cada elemento de e$ta matri/% tendr; la e$tructura de la direcci4n de un ran,o de celda$%
&i$to m?ltiple$ &ece$ a lo lar,o de e$te libro% de1inido por com'$un'$tar'table'+ell@an,eAddre$$'
>n el $i,uiente e2emplo mo$tramo$ la direcci4n de cada ;rea de impre$i4n $i la$ -a*'
"u. #(8'+(+%ndo623
A+( (!#23
A+( sM%nsa)% !s "&'+ng
A+( *o1 !s #n&%g%'
(!# B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&-g%&0'+n&!'%as23
#f DBound2 (!#23 3 Y T1 Ih%n
Ko' *o1 B 5Bound2(!#3 Io DBound2(!#3
sM%nsa)% B A+'%**+onRango2 (!#2*o13 3
MsgBox sM%nsa)%
=%x&
Els%
MsgBox "=o ha@ >'%a d% +(8'%s+6n d%f+n+das %n la ho)a a*&+9a"
End #f
End "u.
Kun*&+on A+'%**+onRango2 A+'Rango !s ?.)%*&3 !s "&'+ng
A+( sI(8 !s "&'+ng
A+( oRango !s ?.)%*&
oRango B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&-g%&$%llRang%B@0os+&+on2 /
A+'Rango-"&a'&$olu(n7 A+'Rango-"&a'&Ro^7 A+'Rango-End$olu(n7 A+'Rango-EndRo^3
sI(8 B oRango-g%&"8'%adsh%%&-g%&=a(%23 : "-" : /
oRango-g%&$olu(ns23-g%&B@#nd%x203-g%&=a(%23 : /
oRango-g%&Rang%!dd'%ss-"&a'&Ro^ C 1 : "4" : /
oRango-g%&$olu(ns23-g%&B@#nd%x2oRango-g%&$olu(ns23-g%&$oun&23T13-g%&=a(%23 : /
oRango-g%&Rang%!dd'%ss-EndRo^ C 1
A+'%**+onRango B sI(8
End Kun*&+on
Si no tiene$ nin,?n ;rea de impre$i4n de1inida% +alc tomar; toda$ la$ -o2a$ con
dato$ como di$ponible$ para impre$i4n% mi recomendaci4n e$ 6ue $iempre e$table/ca$ tu$ ;rea$
de impre$i4n% e$to te permite tener $iempre el control de lo 6ue $e imprimir;% adem;$ de poder
combinar ;rea$ de di1erente$ -o2a$ 6ue al $er impre$a$ 6uedan como $i de un $olo e$tilo $e
tratara' Para borrar la$ ;rea$ de impre$i4n de una -o2a% u$amo$'
"u. #(8'+(+%ndo723
A+( (!#23
,Bo''a(os &odas las >'%as d% +(8'%s+6n d% la ho)a a*&+9a
Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&-s%&0'+n&!'%as2 (!#23 3
End "u.
Ob$er&a como $implemente pa$;ndole una matri/ &ac=a% toda$ la$ ;rea$ de
impre$i4n $er;n borrado$% nota 6ue a-ora e$tamo$ u$ando el m3todo setPrintAreas% $i la -o2a no
tiene nin,?n ;rea actual% e$te m3todo no te dar; error' +omo $upon,o lo -abr;$ deducido% para
a,re,ar ;rea$ de impre$i4n% $olo tenemo$ 6ue llenar dic-a matri/ con direccione$ de ran,o
&alido$ como en el $i,uiente e2emplo'
2FF )') 9mprimiendo
"u. #(8'+(+%ndo823
A+( (!#213 !s =%^ *o(-sun-s&a'-&a.l%-$%llRang%!dd'%ss
,Rango !14E5
(!#203-"h%%& B 0
(!#203-"&a'&$olu(n B 0
(!#203-"&a'&Ro^ B 0
(!#203-End$olu(n B 4
(!#203-EndRo^ B 4
,Rango J114016
(!#213-"h%%& B 1
(!#213-"&a'&$olu(n B 10
(!#213-"&a'&Ro^ B 10
(!#213-End$olu(n B 15
(!#213-EndRo^ B 15
,!g'%ga(os las >'%as d% +(8'%s+6n
Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&-s%&0'+n&!'%as2 (!#23 3
End "u.
Si% *a lo nota$te% -ice un poco de LtrampitaM% nota 6ue en el primer ran,o% en la
propiedad S(eet% pu$e 0 * en el $e,undo ran,o% en e$ta mi$ma propiedad pu$e 1% e$to no a1ecta
el Lde$tinoM de la$ ;rea$ de impre$i4n% pue$ e$ta$ $e a,re,ar;n a la -o2a de$de donde e$
in&ocado el m3todo setPrintAreas% 6ue% para nue$tro e2emplo% e$ la -o2a acti&a% no e$ta de m;$
recordarte 6ue lo$ &alore$ de inicio * 1in% tanto de columna como de 1ila% deben e$tar dentro de
ran,o$ &;lido$ * en el orden correcto' >$ta 1orma de a,re,ar ;rea$ de impre$i4n% te $u$titu*e la$
e:i$tente$% pero como *a $abe$ mane2ar matrice$% tu tarea e$ modi1icar la macro para a,re,ar
nue&a$ $in borrar la$ e:i$tente$'
A-ora% &amo$ a e$tablecer la$ 1ila$ 6ue 6ueremo$ repetir en cada -o2a de impre$i4n'
"u. #(8'+(+%ndo923
A+( oHo)a!*&+9a !s ?.)%*&
A+( (!#203 !s =%^ *o(-sun-s&a'-&a.l%-$%llRang%!dd'%ss
A+( oK+lR !s =%^ *o(-sun-s&a'-&a.l%-$%llRang%!dd'%ss
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
(!#203-"h%%& B 0
(!#203-"&a'&$olu(n B 0
(!#203-"&a'&Ro^ B 0
(!#203-End$olu(n B 3
(!#203-EndRo^ B 18
oHo)a!*&+9a-s%&0'+n&!'%as2 (!#23 3
,5% d%*+(os Gu% Gu%'%(os &H&ulos d% f+la a '%8%&+'
oHo)a!*&+9a-s%&0'+n&I+&l%Ro^s2I'u%3
,Es&a.l%*%(os %l 'ango d% f+las
oK+lR-"&a'&Ro^ B 2
?K+lR-EndRo^ B 3
,5as %s&a.l%*%(os
oHo)a!*&+9a-s%&I+&l%Ro^s2 oK+lR 3
End "u.
Nota 6ue $olo -acemo$ u$o de la 1ila de inicio * 1in% la$ dem;$ propiedade$ de la
e$tructura CellRangeAddress% no $er;n tomada$ en cuenta% a$e,urate de e$tablecer un ran,o de
1ila$ &alido' +uando -ace$ u$o del m3todo set0itleRo<s% en teor=a% autom;ticamente% la propiedad
setPrint0itleRo<s% $e e$tablece en &erdadero (True)% pero no e$ta de m;$ 6ue lo e$table/ca$
Aprendiendo OOo .a$ic 2FG
primero% tambi3n% $i e$tablece$ setPrint0itleRo<s% en &erdadero (True)% pero no e$tablece$ un
ran,o con set0itleRo<s% de 1orma predeterminada% $e e$tablecer; la 1ila 1 como titulo a repetir% del
mi$mo modo% $i e$tablece$ en set0itleRo<s% una e$tructura &ac=a% la 1ila 1 $er; e$tablecida'
Para repetir la$ columna$ e$ $imilar'
"u. #(8'+(+%ndo1023
A+( oHo)a!*&+9a !s ?.)%*&
A+( o$olR !s =%^ *o(-sun-s&a'-&a.l%-$%llRang%!dd'%ss
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
,5% d%*+(os Gu% Gu%'%(os &+&ulos d% *olu(na a '%8%&+'
oHo)a!*&+9a-s%&0'+n&I+&l%$olu(ns2I'u%3
,Es&a.l%*%(os %l 'ango d% $olu(nas !4B
o$olR-"&a'&$olu(n B 0
?$olR-End$olu(n B 1
,5as %s&a.l%*%(os
oHo)a!*&+9a-s%&I+&l%$olu(ns2 o$olR 3
End "u.
>$to$ m3todo$ tienen la$ mi$ma$ con$ideracione$ &i$ta$ para la$ 1ila$% $i &a$ a
repetir 1ila$ * columna$% puede$ -acer u$o de una $ola e$tructura CellRangeAddress% lo$ m3todo$
re$pecti&o$ omitir;n la$ propiedade$ no nece$aria$ para ello$% como en el $i,uiente e2emplo'
"u. #(8'+(+%ndo1123
A+( oHo)a!*&+9a !s ?.)%*&
A+( oI+&ulosR !s =%^ *o(-sun-s&a'-&a.l%-$%llRang%!dd'%ss
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
oI+&ulosR-"&a'&$olu(n B 1
oI+&ulosR-End$olu(n B 1
oI+&ulosR-"&a'&Ro^ B 2
oI+&ulosR-EndRo^ B 2
,5os %s&a.l%*%(os
oHo)a!*&+9a-s%&I+&l%$olu(ns2 oI+&ulosR 3
oHo)a!*&+9a-s%&I+&l%Ro^s2 oI+&ulosR 3
End "u.
Si &a$ al men? -nsertar $ Salto Manual AB% &era$ 6ue tiene$ do$ opcione$% Salto de 1ila
* Salto de columna% t? puede$ e$tablecer la 1ila o columna 6ue de$ee$ como un $alto de p;,ina
manual% e$ decir% e$ta$ 1or/ando un $alto de p;,ina% &eamo$ como -acerlo'
"u. #(8'+(+%ndo1223
A+( oHo)a!*&+9a !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
,Es&a.l%*%(os la f+la 5 *o(o sal&o d% 8>g+na
oHo)a!*&+9a-g%&Ro^s-g%&B@#nd%x243-#s"&a'&?f=%^0ag% B I'u%
,1%'+f+*a(os Gu% s% ha@a %s&a.l%*+do
#f oHo)a!*&+9a-g%&Ro^s-g%&B@#nd%x243-#sManual0ag%B'%a] Ih%n
MsgBox "5a f+la %s un sal&o d% 8>g+na"
End #f
End "u.
2G0 )') 9mprimiendo
Nota como e$tamo$ accediendo a una 1ila (la 5) * la e$tablecemo$ como inicio de
una nue&a p;,ina con la propiedad8 -sStartO!5e<Page% al e$tablecer e$ta propiedad en &erdadero
(True)% e$tamo$ in$ertando un $alto de p;,ina manualmente% lo cual &eri1icamo$ con la propiedad8
-sManualPageBrea=% por $upue$to% para 6uitarlo% $olo tiene$ 6ue e$tablecerla en 1al$o (!al$e)'
"u. #(8'+(+%ndo1323
A+( oHo)a!*&+9a !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
,Pu+&a(os %l sal&o d% 8>g+na
oHo)a!*&+9a-g%&Ro^s-g%&B@#nd%x243-#s"&a'&?f=%^0ag% B Kals%
,5o 9%'+f+*a(os
#f =o& oHo)a!*&+9a-g%&Ro^s-g%&B@#nd%x243-#sManual0ag%B'%a] Ih%n
MsgBox "5a f+la =? %s un sal&o d% 8>g+na"
End #f
End "u.
#o mi$mo para la$ columna$'
"u. #(8'+(+%ndo1423
A+( oHo)a!*&+9a !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
,Es&a.l%*%(os un sal&o d% 8>g+na d% *olu(na
oHo)a!*&+9a-g%&$olu(ns-g%&B@#nd%x223-#s"&a'&?f=%^0ag% B I'u%
,5o 9%'+f+*a(os
#f oHo)a!*&+9a-g%&$olu(ns-g%&B@#nd%x223-#sManual0ag%B'%a] Ih%n
MsgBox "5a *olu(na %s un sal&o d% 8>g+na"
End #f
End "u.
"u. #(8'+(+%ndo1523
A+( oHo)a!*&+9a !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
,Pu+&a(os un sal&o d% 8>g+na d% *olu(na
oHo)a!*&+9a-g%&$olu(ns-g%&B@#nd%x223-#s"&a'&?f=%^0ag% B Kals%
,5o 9%'+f+*a(os
#f =o& oHo)a!*&+9a-g%&$olu(ns-g%&B@#nd%x223-#sManual0ag%B'%a] Ih%n
MsgBox "5a *olu(na =? %s un sal&o d% 8>g+na"
End #f
End "u.
>n la$ -o2a$ de +alc% tenemo$ do$ tipo$ de $alto$ de p;,ina% lo$ autom;tico$ * lo$
manuale$% lo$ primero$ $e in$ertan autom;ticamente% de acuerdo8 al 1ormato de la p;,ina * $u
contenido% lo$ $e,undo$ lo$ e$tablecemo$ no$otro$% con el $i,uiente e2emplo% mo$tramo$ todo$
lo$ $alto$ de p;,ina% tanto de 1ila como de columna 6ue ten,a la -o2a acti&a e in1ormamo$ $i e$
manual o no'
"u. #(8'+(+%ndo1623
A+( oHo)a!*&+9a !s ?.)%*&
A+( ("023
A+( *o1 !s #n&%g%'
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
,?.&%n%(os &odos los sal&os d% 8>g+na7 8o' f+las7 d% la ho)a a*&+9a
Aprendiendo OOo .a$ic 2G1
("0 B oHo)a!*&+9a-g%&Ro^0ag%B'%a]s23
,Mos&'a(os los sal&o d% f+la
Ko' *o1 B 5Bound2 ("0 3 Io DBound2 ("0 3
MsgBox "El sal&o d% 8>g+na %s&a %n la lHn%a4 " : ("02*o13-0os+&+on C 1 : $h'2133 : /
"Es sal&o (anual4 " : ("02*o13-ManualB'%a]
=%x& *o1
,!ho'a los d% *olu(na
("0 B oHo)a!*&+9a-g%&$olu(n0ag%B'%a]s23
Ko' *o1 B 5Bound2 ("0 3 Io DBound2 ("0 3
MsgBox "El sal&o d% 8>g+na %s&a %n la *olu(na4 " : ("02*o13-0os+&+on C 1 : $h'2133 : /
"Es sal&o (anual4 " : ("02*o13-ManualB'%a]
=%x& *o1
End "u.
+uidado% la macro anterior puede lle,ar a mo$trarte decena$ de $alto$ de p;,ina%
e$to puede pa$ar cuando tiene$ dato$ * borra$ toda$ la$ ;rea$ de impre$i4n% de 1orma
predeterminada% $e a,re,an $alto$ de p;,ina en toda la -o2a% de nue&o% la recomendaci4n e$
$iempre e$tablecer tu$ ;rea$ de impre$i4n de 1orma e:plicita'
Puede$ 6uitar Ltodo$M% lo$ $alto$ de p;,ina$% tanto de 1ila como de columna% con el
$i,uiente m3todo'
"u. #(8'+(+%ndo1723
A+( oHo)a!*&+9a !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
,Pu+&a(os I?A?" los sal&os d% 8>g+nas (anual%s
oHo)a!*&+9a-'%(o9%!llManual0ag%B'%a]s23
End "u.
>l $i,uiente e2emplo% te in$erta un $alto de p;,ina cada 2 1ila$ en la $elecci4n actual%
procura no tener una $elecci4n mu* ,rande * $obre todo no mandar a imprimir 6ue te podr=an $alir
muc-a$ -o2a$% &e el re$ultado en tu &i$ta preliminar'
"u. #(8'+(+%ndo1823
A+( o"%l !s ?.)%*&
A+( *o1 !s #n&%g%'
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
,#ns%'&a(os un sal&o d% 8>g+na *ada dos f+las
Ko' *o1 B 2 Io o"%l-g%&Ro^s-g%&$oun&23 T 1 "&%8 2
o"%l-g%&Ro^s-g%&B@#nd%x2*o13-#s"&a'&?f=%^0ag% B I'u%
=%x&
End "u.
Por ultimo% para &er tu &i$ta pre&ia% u$a el $i,uiente m3todo% 6ue no me ,u$ta pero
por a-ora e$ la ?nica 1orma 6ue cono/co'
"u. #(8'+(+%ndo1923
A+( oAo*K !s ?.)%*&
A+( oAH !s ?.)%*&
oAo*K B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-K'a(%
oAH B *'%a&%Dno"%'9+*%2"*o(-sun-s&a'-f'a(%-A+s8a&*hH%l8%'"3
,Mos&'a(os la 9+s&a 8'%9+a
2G2 )') 9mprimiendo
oAH-%x%*u&%A+s8a&*h2oAo*K7 "-uno40'+n&0'%9+%^"7 ""7 07 !''a@233
End "u.
>n &er$ione$ anteriore$ de OOo% cuando en&iaba$ a imprimir% de 1orma
predeterminada% $e en&iaba toda$ la$ -o2a$ del documento% a-ora% $olo $e en&=an la$ -o2a$
$eleccionada$% claro% e$to $iempre lo puede$ cambiar de$de el cuadro de dialo,o imprimir en el
men? Arc(ivo $ -mprimir'''% Para $eleccionar &aria$ -o2a$ a imprimir% $olo tiene$ 6ue $eleccionar un
ran,o de cada una de ella$% puede $er $olo una celda% * a,re,arlo$ a un contenedor de ran,o$
6ue *a aprendimo$ a u$ar% * $eleccionarlo$% al $eleccionar ran,o$ de di1erente$ -o2a$% como
con$ecuencia% $e $eleccionan la$ -o2a$ 6ue lo$ contienen% de$pu3$% podemo$ en&iar a imprimir
como en el $i,uiente e2emplo'
"u. #(8'+(+%ndo2023
A+( oAo* !s ?.)%*&
A+( oHo)as !s ?.)%*&
A+( (?8*23
A+( oRangos !s ?.)%*&
oAo* B Ih+s$o(8on%n&
oHo)as B oAo*-g%&"h%%&s23
,$'%a(os %l *on&%nd%' 8a'a los 'angos
oRangos B oAo*-*'%a&%#ns&an*%2"*o(-sun-s&a'-sh%%&-"h%%&$%llRang%s"3
,!g'%ga(os la 8'+(%' *%lda d% *ada ho)a7 8u%d% s%' *ualGu+%' *%lda
oRangos-addRang%!dd'%ss2 oHo)as-g%&B@#nd%x263-g%&$%llRang%B@=a(%2"!1"3-g%&Rang%!dd'%ss23 7Kals% 3
oRangos-addRang%!dd'%ss2 oHo)as-g%&B@#nd%x273-g%&$%llRang%B@=a(%2"!1"3-g%&Rang%!dd'%ss23 7Kals% 3
oRangos-addRang%!dd'%ss2 oHo)as-g%&B@#nd%x283-g%&$%llRang%B@=a(%2"!1"3-g%&Rang%!dd'%ss23 7Kals% 3
,!l s%l%**+ona' las *%ldas d% d+f%'%n&%s ho)as7 %s&a(os s%l%**+onando d+*has ho)as
oAo*-g%&$u''%n&$on&'oll%'-s%l%*&2 oRangos 3
,En9+a(os a +(8'+(+'
oAo*-8'+n&2 (?8*23 3
End "u.
#a recomendaci4n ,eneral% e$ 6ue $iempre e$table/ca$ tu$ ;rea$ de impre$i4n
correctamente% a$= como el e$tilo de p;,ina con la con1i,uraci4n de$eada% con lo cual% la
impre$i4n $e 1acilitar; enormemente'
=.A 8an*os de datos
#o$ ran,o$ de dato$% $on ;rea$ rectan,ulare$ de ran,o$ de celda$ delimitado$ por al
meno$ una 1ila * una columna en blanco a la$ cuale$ $e le$ e$tablece un nombre * tienen
caracter=$tica$ e$peciale$ 6ue 1acilitan $u u$o como $i de una ba$e de dato$ $e tratara' No
con1unda$ e$to$ nombre$% con lo$ 6ue puede$ de1inir en el cuadro de nombre$ de la barra de
1ormula$% *a 6ue $on di$tinto$' #a$ ma*or parte de la$ opcione$ 6ue e$tudiaremo$ en e$te
Aprendiendo OOo .a$ic 2G(
capitulo% $on la$ pre$ente$ en el men? /atos% de la inter1a/ del u$uario' >l u$o de -o2a$ de calculo
con dato$ tratado$ como ba$e$ de dato$% e$% $e,?n mi e:periencia% el u$o m;$ cotidiano dado a
e$ta -erramienta% * no e$ ,ratuito% la$ -erramienta$ di$ponible$ para traba2ar con dato$
e$tructurado$ de e$ta manera% pre$ente$ en +alc% $in -acer u$o de macro$% e$ ba$tante amplio%
podero$o * &er$;til% a-ora% ima,=nate lo 6ue $e puede -acer% automati/ando e$to$ proce$o$' Si
bien e$te libro no e$ de ba$e$ de dato$ e:pl=citamente% te a*udar; muc-o recordar 6ue cada
columna de tu ran,o de dato$% lo podemo$ llamar8 campo% * cada 1ila de e$to$8 re,i$tro$' A$=
mi$mo% en la primer 1ila de e$to$% $e e$tablecen lo$ Lt=tulo$ de campoM% normalmente en un 1ormato
di1erente del re$to de lo$ dato$% aun6ue e$ta primer 1ila no e$ indi$pen$able% e$ muc-o me2or
tenerla' Tambi3n% e$ recomendable% no de2ar nin,una 1ila en blanco% entre e$ta * lo$ dato$% la$
1ila$% e$ decir% lo$ re,i$tro$% e$ me2or $i e$t;n completo$% e$ decir% 6ue todo$ $u$ campo$
contienen dato$% de nue&o% e$to no e$ indi$pen$able pero una ba$e de dato$ $e -ace para
llenar$e de dato$' Tampoco e$ recomendable de2ar 1ila$ completa$ en blanco' Trata de 6ue tu$
dato$ $ean Lcon$i$tente$M% e$to 6uiere decir 6ue $i una columna (campo) lo llama$ >dad%
e1ecti&amente $e capturen n?mero$% o 1ec-a$ $i la calcula$' >n la actualidad -a* una amplia
1uente de in1ormaci4n para una buena con$trucci4n de tu$ ba$e$ de dato$% de tarea% bu$ca al,o
acerca del $i,uiente tema< Lnormali/aci4n de ba$e$ de dato$M% &era$ 6ue tema tan intere$ante e$'
=.A.1 De3iniendo ran*os
>n el $i,uiente e2emplo% de1inimo$ un ran,o de ba$e$ de dato$% en la primer -o2a del
documento% en el ran,o A1<"2E'
"u. RangoA%Aa&os123
A+( oAo* !s ?.)%*&
A+( oRangosBA !s ?.)%*&
A+( s=o(.'% !s "&'+ng
A+( oRBA !s ?.)%*&
A+( oA+' !s =%^ *o(-sun-s&a'-&a.l%-$%llRang%!dd'%ss
oAo* B Ih+s$o(8on%n&
,!**%d%(os al *on)un&o d% los 'angos d% .as%s d% da&os
oRangosBA B oAo*-Aa&aBas%Rang%s23
,El no(.'% d%l nu%9o 'ango
s=o(.'% B "A+'%**+on%s"
,5a d+'%**+6n d%l nu%9o 'ango
U+&h oA+'
-"h%%& B 0 ,5a ho)a
-"&a'&$olu(n B 0 ,5a *olu(na d% +n+*+o
-End$olu(n B 3 ,5a *olu(na f+nal
-"&a'&Ro^ B 0 ,5a f+la d% +n+*+o
-EndRo^ B 23 ,5a f+la f+nal
End U+&h
,5o ag'%ga(os a la *ol%**+6n
oRangosBA-add=%^B@=a(%2 s=o(.'%7 oA+' 3
,R%g'%sa(os %l 'ango '%*+Sn ag'%gado
oRBA B oRangosBA-g%&B@=a(%2 s=o(.'% 3
U+&h oRBA
-Mo9%$%lls B I'u% ,0a'a Gu% s% a*&ual+*% al +ns%'&a' o %l+(+na' *%ldas
-J%%8Ko'(a&s B I'u% ,0a'a Gu% (an&%nga los fo'(a&os
End U+&h
End "u.
2GE )'7 @an,o$ de dato$
>l nombre del nue&o ran,o no debe de e:i$tir o te dar; un error% en el $i,uiente
e2emplo% $olicitamo$ al u$uario el nombre del ran,o de dato$ * tomamo$ la $elecci4n actual como
direcci4n para el nue&o ran,o de dato$% tambi3n% &eri1icamo$ 6ue no e:i$ta el nue&o nombre'
"u. RangoA%Aa&os223
A+( oAo* !s ?.)%*&
A+( o"%l !s ?.)%*&
A+( oRangosBA !s ?.)%*&
A+( s=o(.'% !s "&'+ng
A+( oRBA !s ?.)%*&
A+( oA+' !s =%^ *o(-sun-s&a'-&a.l%-$%llRang%!dd'%ss
oAo* B Ih+s$o(8on%n&
o"%l B oAo*-g%&$u''%n&"%l%*&+on23
,=os as%gu'a(os d% Gu% s%a un 'ango d% *%ldas
#f o"%l-g%&#(8l%(%n&a&+on=!(% B ""*$%llRang%?.)" Ih%n
,"ol+*+&a(os %l nu%9o no(.'%
s=o(.'% B I'+(2 #n8u&Box2"Es*'+.% %l no(.'% d%l nu%9o 'ango"3 3
,"+ no %s&a 9a*Ho
#f s=o(.'% XY "" Ih%n
oRangosBA B oAo*-Aa&aBas%Rang%s23
,1%'+f+*a(os Gu% no %x+s&a %l no(.'%
#f =o& oRangosBA-hasB@=a(%2 s=o(.'% 3 Ih%n
,O lo ag'%ga(os- ?.s%'9a *o(o &o(a(os la d+'%**+6n d% la s%l%**+6n
oRangosBA-add=%^B@=a(%2 s=o(.'%7 o"%l-g%&Rang%!dd'%ss23 3
oRBA B oRangosBA-g%&B@=a(%2 s=o(.'% 3
U+&h oRBA
-Mo9%$%lls B I'u%
-J%%8Ko'(a&s B I'u%
End U+&h
Els%
MsgBox "Oa %x+s&% %l no(.'% d%l 'ango"
End #f
Els%
MsgBox "El no(.'% no 8u%d% %s&a' 9a*Ho"
End #f
Els%
MsgBox "=o %s un 'ango d% *%ldas"
End #f
End "u.
Para borrar un ran,o de dato$ u$amo$ el m3todo removeB,5ame% toma en cuenta
6ue lo ?nico 6ue $e borra e$ el nombre del ran,o de dato$ * $u$ propiedade$% la$ celda$ * $u$
&alore$ $e mantienen'
"u. RangoA%Aa&os323
A+( oAo* !s ?.)%*&
A+( oRangosBA !s ?.)%*&
A+( s=o(.'% !s "&'+ng
oAo* B Ih+s$o(8on%n&
oRangosBA B oAo*-Aa&aBas%Rang%s23
,El no(.'% d%l 'ango a .o''a'
s=o(.'% B "0'u%.as"
,"+ %l no(.'% no %x+s&% o.&%nd'>s un %''o'
#f oRangosBA-hasB@=a(%2 s=o(.'% 3 Ih%n
,5o '%(o9%(os d% la *ol%**+6n
oRangosBA-'%(o9%B@=a(%2 s=o(.'% 3
MsgBox "Rango d% da&os .o''ado"
Els%
MsgBox "El 'ango d% da&os no %x+s&%"
End #f
Aprendiendo OOo .a$ic 2G5
End "u.
Podemo$ cambiar la$ propiedade$ de un ran,o de dato$ e:i$tente% por e2emplo%
cambiarle el nombre'
"u. RangoA%Aa&os423
A+( oAo* !s ?.)%*&
A+( oRangosBA !s ?.)%*&
A+( s=o(.'% !s "&'+ng
A+( oRBA !s ?.)%*&
oAo* B Ih+s$o(8on%n&
oRangosBA B oAo*-Aa&aBas%Rang%s23
,El no(.'% d%l 'ango a (od+f+*a'
s=o(.'% B "0'u%.as"
#f oRangosBA-hasB@=a(%2 s=o(.'% 3 Ih%n
oRBA B oRangosBA-g%&B@=a(%2 s=o(.'% 3
,5% *a(.+a(os %l no(.'%
oRBA-s%&=a(% 2"=u%9o no(.'%"3
Els%
MsgBox "El 'ango d% da&os no %x+s&%"
End #f
End "u.
O cambiar $u direcci4n'
"u. RangoA%Aa&os523
A+( oAo* !s ?.)%*&
A+( oRangosBA !s ?.)%*&
A+( s=o(.'% !s "&'+ng
A+( oRBA !s ?.)%*&
A+( oA+' !s =%^ *o(-sun-s&a'-&a.l%-$%llRang%!dd'%ss
oAo* B Ih+s$o(8on%n&
oRangosBA B oAo*-Aa&aBas%Rang%s23
,El no(.'% d%l 'ango a (od+f+*a'
s=o(.'% B "A+'%**+on%s"
#f oRangosBA-hasB@=a(%2 s=o(.'% 3 Ih%n
oRBA B oRangosBA-g%&B@=a(%2 s=o(.'% 3
,$a(.+a(os la d+'%**+6n
U+&h oA+'
-"h%%& B 0 ,$a(.+a(os la ho)a
-"&a'&$olu(n B 2 ,5a *olu(na d% +n+*+o
-End$olu(n B 5 ,5a *olu(na f+nal
-"&a'&Ro^ B 5 ,5a f+la d% +n+*+o
-EndRo^ B 19 ,5a f+la f+nal
End U+&h
oRBA-s%&Aa&a!'%a2 oA+' 3
Els%
MsgBox "El 'ango d% da&os no %x+s&%"
End #f
End "u.
+ambia la direcci4n de un ran,o con cuidado% puede $uceder 6ue acabe apuntando
a un ran,o &ac=o de celda$ $in 6uerer'
2G) )'7 @an,o$ de dato$
=.A.2 %rdenar datos
Para ordenar dato$% no nece$ita$ 1or/o$amente un ran,o de dato$ con nombre%
&eamo$ como ordenar un ran,o de celda$ con * $in nombre de ran,o de dato$' Tomaremo$ como
dato$ de e2emplo% lo$ $i,uiente$'
Nv Nombre AKo >dad
1 nisole 1G7) ((
2 ,loria 1G7) ((
( antonio 1G77 (2
E lidia 1G)7 E2
5 paola 1G7G (0
) &ane$$a 1G7E (5
7 paola 1G72 (7
F paola 1G)F E1
G paola 1G)F E1
10 li/ette 1G7F (1
11 li/ette 1G7F (1
12 li/ette 1G7F (1
1( nisole 1G77 (2
1E ,loria 1G75 (E
15 antonio 1G7G (0
1) lidia 1G77 (2
17 paola 1G)F E1
1F &ane$$a 1G7F (1
1G li/ette 1G)G E0
20 nisole 1G70 (G
21 ,loria 1G71 (F
22 antonio 1G7( ()
2( lidia 1G)F E1
5amo$ a ordenar lo$ dato$ por nombre'
"u. ?'d%na'Aa&os123
A+( oHo)a !s ?.)%*&
A+( oRango !s ?.)%*&
A+( ($a(8os?'d%n203 !s =%^ *o(-sun-s&a'-&a.l%-Ia.l%"o'&K+%ld
A+( (A%s*'+8&o'?'d%n23
,5a ho)a dond% %s&a %l 'ango a o'd%na'
oHo)a B Ih+s$o(8on%n&-g%&"h%%&s-g%&B@=a(%2"agos&o"3
,El 'ango a o'd%na'
oRango B oHo)a-g%&$%llRang%B@=a(%2"!14A24"3
,A%s*'+8&o' d% o'd%na(+%n&o7 o s%a7 %l "*o(o"
(A%s*'+8&o'?'d%n B oRango-*'%a&%"o'&A%s*'+8&o'23
,5os *a(8os a o'd%n7 o s%a7 %l "Gu%"
Aprendiendo OOo .a$ic 2G7
,5os *a(8os %(8+%;an %n 0
($a(8os?'d%n203-K+%ld B 1
,?'d%n as*%nd%n&%
($a(8os?'d%n203-#s!s*%nd+ng B I'u%
,"%ns+.l% a M!OD"$D5!"/(+nus*ulas
($a(8os?'d%n203-#s$as%"%ns+&+9% B Kals%
,I+8o d% *a(8o !DI?M!I#$?
($a(8os?'d%n203-K+%ldI@8% B *o(-sun-s&a'-&a.l%-Ia.l%"o'&K+%ldI@8%-!DI?M!I#$
,#nd+*a(os s+ %l 'ango *on&+%n% &H&ulos d% *a(8os
(A%s*'+8&o'?'d%n213-=a(% B "$on&a+nsH%ad%'"
(A%s*'+8&o'?'d%n213-1alu% B I'u%
,5a (a&'+; d% *a(8os a o'd%na'
(A%s*'+8&o'?'d%n233-=a(% B ""o'&K+%lds"
(A%s*'+8&o'?'d%n233-1alu% B ($a(8os?'d%n
,?'d%na(os *on los 8a'>(%&'os %s&a.l%*+dos
oRango-so'&2 (A%s*'+8&o'?'d%n 3
End "u.
#o$ punto$ a lo$ 6ue debe$ poner atenci4n $on8 el tipo de campo 4ield0,pe% puede
tomar lo$ $i,uiente$ &alore$'
com(sun(star(table(-able.ortField-ype 1alor 1alor en -nter!az
com'$un'$tar'table'TableSort!ieldT*pe'AUTOMAT9+ 0 Autom;tico
com'$un'$tar'table'TableSort!ieldT*pe'NUM>@9+ 1 Num3rico
com'$un'$tar'table'TableSort!ieldT*pe'A#PdANUM>@9+ 2 Al1anum3rico
>n mi$ prueba$% e$tablecer en uno * en otro% no me -a dado muc-a$ &ariante$ en
&elocidad% e$to e$% $upon,o% por 6ue -e -ec-o prueba$ con poco$ dato$% -abr=a 6ue -acer
prueba$ de rendimiento con ,rande$ dato$ para &er $u de$empeKo pue$ no creo 6ue e$ta
propiedad e$te de adorno'
>n el de$criptor de orden% $i e$tablece$ la propiedad8 Contains#eader% en 1al$o
(!al$e)% * tu ran,o de dato$ e1ecti&amente tiene t=tulo$ de campo% e$to$ no $er;n tomado$ en
cuenta * $e ordenaran en relaci4n con el re$to de tu$ dato$% mi recomendaci4n e$ 6ue $iempre
e$table/ca$ e$ta propiedad en &erdadero (True) * e1ecti&amente te a$e,ure$ de tenerlo$% claro% a
meno$ de 6ue no te $ea indi$pen$able o de plano no lo$ nece$ite$'
Si 6uiere$ ordenar por m;$ de un campo (por a-ora el limite e$ tre$)% no -a* m;$ 6ue
a,re,ar el $e,undo criterio a la matri/ de campo$% como en el e2emplo $i,uiente 6ue ordenamo$
por nombre a$cendente * de$pu3$ por edad de$cendente'
"u. ?'d%na'Aa&os223
A+( oHo)a !s ?.)%*&
A+( oRango !s ?.)%*&
A+( ($a(8os?'d%n213 !s =%^ *o(-sun-s&a'-&a.l%-Ia.l%"o'&K+%ld
A+( (A%s*'+8&o'?'d%n23
oHo)a B Ih+s$o(8on%n&-g%&"h%%&s-g%&B@=a(%2"agos&o"3
oRango B oHo)a-g%&$%llRang%B@=a(%2"!14A24"3
(A%s*'+8&o'?'d%n B oRango-*'%a&%"o'&A%s*'+8&o'23
($a(8os?'d%n203-K+%ld B 1
($a(8os?'d%n203-#s!s*%nd+ng B I'u%
($a(8os?'d%n203-#s$as%"%ns+&+9% B Kals%
2GF )'7 @an,o$ de dato$
($a(8os?'d%n203-K+%ldI@8% B *o(-sun-s&a'-&a.l%-Ia.l%"o'&K+%ldI@8%-!DI?M!I#$
,!g'%ga(os un s%gundo *a(8o
($a(8os?'d%n213-K+%ld B 3
,Es&% %s d%s*%nd%n&%
($a(8os?'d%n213-#s!s*%nd+ng B Kals%
($a(8os?'d%n213-#s$as%"%ns+&+9% B Kals%
($a(8os?'d%n213-K+%ldI@8% B *o(-sun-s&a'-&a.l%-Ia.l%"o'&K+%ldI@8%-!DI?M!I#$
(A%s*'+8&o'?'d%n213-=a(% B "$on&a+nsH%ad%'"
(A%s*'+8&o'?'d%n213-1alu% B I'u%
(A%s*'+8&o'?'d%n233-=a(% B ""o'&K+%lds"
(A%s*'+8&o'?'d%n233-1alu% B ($a(8os?'d%n
,?'d%na(os *on los 8a'>(%&'os %s&a.l%*+dos
oRango-so'&2 (A%s*'+8&o'?'d%n 3
End "u.
Una opci4n mu* intere$ante% e$ la po$ibilidad de en&iar el re$ultado a un de$tino
di1erente como en el $i,uiente e2emplo'
"u. ?'d%na'Aa&os323
A+( oHo)a !s ?.)%*&
A+( oRango !s ?.)%*&
A+( ($a(8os?'d%n203 !s =%^ *o(-sun-s&a'-&a.l%-Ia.l%"o'&K+%ld
A+( oA%s&+no !s ?.)%*&
A+( (A%s*'+8&o'?'d%n23
oHo)a B Ih+s$o(8on%n&-g%&"h%%&s-g%&B@=a(%2"agos&o"3
oRango B oHo)a-g%&$%llRang%B@=a(%2"!14A24"3
oA%s&+no B oHo)a-g%&$%llRang%B@=a(%2"E1"3
(A%s*'+8&o'?'d%n B oRango-*'%a&%"o'&A%s*'+8&o'23
($a(8os?'d%n203-K+%ld B 1
($a(8os?'d%n203-#s!s*%nd+ng B I'u%
($a(8os?'d%n203-#s$as%"%ns+&+9% B Kals%
($a(8os?'d%n203-K+%ldI@8% B *o(-sun-s&a'-&a.l%-Ia.l%"o'&K+%ldI@8%-!DI?M!I#$
(A%s*'+8&o'?'d%n213-=a(% B "$on&a+nsH%ad%'"
(A%s*'+8&o'?'d%n213-1alu% B I'u%
(A%s*'+8&o'?'d%n233-=a(% B ""o'&K+%lds"
(A%s*'+8&o'?'d%n233-1alu% B ($a(8os?'d%n
,Es&a.l%*%(os Gu% Gu%'%(os *o8+a' %l '%sul&ado a o&'o lado
(A%s*'+8&o'?'d%n253-=a(% B "$o8@?u&8u&Aa&a"
(A%s*'+8&o'?'d%n253-1alu% B I'u%
,Es&a.l%*%(os %l d%s&+no d% la *o8+a
(A%s*'+8&o'?'d%n263-=a(% B "?u&8u&0os+&+on"
(A%s*'+8&o'?'d%n263-1alu% B oA%s&+no-g%&$%ll!dd'%ss23
,?'d%na(os *on los 8a'>(%&'os %s&a.l%*+dos
oRango-so'&2 (A%s*'+8&o'?'d%n 3
End "u.
Ob$er&a como e$tablecemo$ el de$tino con una e$tructura getCellAddress% e$ta $olo
inclu*e la -o2a de$tino% la columna * la 1ila de inicio' Si en el ran,o de$tino e:i$ten dato$% e$to$
$er;n totalmente reempla/ado$ $in pre,untarte nada'
A-ora% ordenamo$% pero accediendo de$de un ran,o de dato$'
"u. ?'d%na'Aa&os423
A+( oAo* !s ?.)%*&
Aprendiendo OOo .a$ic 2GG
A+( oRangosBA !s ?.)%*&
A+( s=o(.'% !s "&'+ng
A+( oRBA !s ?.)%*&
A+( oRango !s ?.)%*&
A+( ($a(8os?'d%n203 !s =%^ *o(-sun-s&a'-&a.l%-Ia.l%"o'&K+%ld
A+( (A%s*'+8&o'?'d%n23
oAo* B Ih+s$o(8on%n&
oRangosBA B oAo*-Aa&aBas%Rang%s23
s=o(.'% B "A+'%**+on%s"
,1%'+f+*a(os Gu% %x+s&a %l no(.'% d%l 'ango d% da&os
#f oRangosBA-hasB@=a(%2 s=o(.'% 3 Ih%n
,R%f%'%n*+a al 'ango
oRBA B oRangosBA-g%&B@=a(%2 s=o(.'% 3
,R%f%'%n*+a al o'+g%n d%l 'ango
oRango B oRBA-g%&R%f%''%d$%lls23
(A%s*'+8&o'?'d%n B oRango-*'%a&%"o'&A%s*'+8&o'23
($a(8os?'d%n203-K+%ld B 1
($a(8os?'d%n203-#s!s*%nd+ng B I'u%
($a(8os?'d%n203-#s$as%"%ns+&+9% B Kals%
($a(8os?'d%n203-K+%ldI@8% B *o(-sun-s&a'-&a.l%-Ia.l%"o'&K+%ldI@8%-!DI?M!I#$
(A%s*'+8&o'?'d%n213-=a(% B "$on&a+nsH%ad%'"
(A%s*'+8&o'?'d%n213-1alu% B I'u%
(A%s*'+8&o'?'d%n233-=a(% B ""o'&K+%lds"
(A%s*'+8&o'?'d%n233-1alu% B ($a(8os?'d%n
oRango-so'&2 (A%s*'+8&o'?'d%n 3
Els%
MsgBox "El 'ango d% da&os no %x+s&%"
End #f
End "u.
#a propiedad importante e$8 getRe!erredCells% 6ue te da acce$o al ran,o ori,en de
lo$ dato$% e$ta propiedad te de&uel&e un ob2eto ScCellRangeObj% por lo 6ue puede$ tener acce$o
a toda$ la$ propiedade$ de manipulaci4n * 1ormato &i$ta$ de e$te ob2eto% por e2emplo% puede$
aplicarle un auto1ormato de tabla a lo$ dato$'
=.A. Filtrar datos
#a$ opcione$ 6ue e$tudiaremo$ en e$te capitulo% $on la$ pre$ente$ en el men?
/atos $ 4iltro AB * $e,uiremo$ u$ando lo$ dato$ del tema anterior'
(00 )'7 @an,o$ de dato$
"o* por -ec-o 6ue no tiene$ problema$% como u$uario% con cada una de e$ta$
opcione$% &eamo$ como e$tablecerla$ por c4di,o' Primero% la m;$ $encilla% el 1iltro autom;tico% te
a,re,a un control de li$ta de$ple,able en el encabe/ado de campo de tu$ dato$% como en'
Para -acer lo mi$mo por c4di,o% u$amo$'
"u. K+l&'a'Aa&os123
A+( oAo* !s ?.)%*&
A+( oRangosBA !s ?.)%*&
A+( s=o(.'% !s "&'+ng
A+( oRBA !s ?.)%*&
oAo* B Ih+s$o(8on%n&
oRangosBA B oAo*-Aa&aBas%Rang%s23
s=o(.'% B "A+'%**+on%s"
#f oRangosBA-hasB@=a(%2 s=o(.'% 3 Ih%n
,R%f%'%n*+a al 'ango
oRBA B oRangosBA-g%&B@=a(%2 s=o(.'% 3
,Mos&'a(os %l au&of+l&'o
oRBA-!u&oK+l&%' B I'u%
Els%
MsgBox "El 'ango d% da&os no %x+s&%"
End #f
End "u.
IO para 6uitarlo$J% mu* bien deducido% $olo la e$tablecemo$ en 1al$o (!al$e)
"u. K+l&'a'Aa&os223
A+( oAo* !s ?.)%*&
A+( oRangosBA !s ?.)%*&
A+( s=o(.'% !s "&'+ng
A+( oRBA !s ?.)%*&
oAo* B Ih+s$o(8on%n&
oRangosBA B oAo*-Aa&aBas%Rang%s23
s=o(.'% B "A+'%**+on%s"
#f oRangosBA-hasB@=a(%2 s=o(.'% 3 Ih%n
,R%f%'%n*+a al 'ango
oRBA B oRangosBA-g%&B@=a(%2 s=o(.'% 3
,Mos&'a(os %l au&of+l&'o
oRBA-!u&oK+l&%' B Kals%
Els%
MsgBox "El 'ango d% da&os no %x+s&%"
End #f
End "u.
Pero cuidado% la macro anterior% $olo te 6uitar; la$ 1lec-a$ para de$ple,ar el 1iltro del
campo% $i tiene$ e$tablecido un 1iltro autom;tico% e$te permanecer;% para eliminar completamente
un 1iltro% tiene$ 6ue -acer do$ co$a$8 primero% eliminar el 1iltro * de$pu3$ mo$trar la$ 1ila$ oculta$
como te mue$tro en el $i,uiente e2emplo'
"u. K+l&'a'Aa&os323
A+( oAo* !s ?.)%*&
Aprendiendo OOo .a$ic (01
A+( oRangosBA !s ?.)%*&
A+( s=o(.'% !s "&'+ng
A+( oRBA !s ?.)%*&
A+( oA%sK+l&'o !s ?.)%*&
A+( ($a(8osK+l&'o23 !s =%^ *o(-sun-s&a'-sh%%&-Ia.l%K+l&%'K+%ld
oAo* B Ih+s$o(8on%n&
oRangosBA B oAo*-Aa&aBas%Rang%s23
s=o(.'% B "A+'%**+on%s"
#f oRangosBA-hasB@=a(%2 s=o(.'% 3 Ih%n
oRBA B oRangosBA-g%&B@=a(%2 s=o(.'% 3
,?.&%n%(os la d%s*'+8*+6n d%l f+l&'o
oA%sK+l&'o B oRBA-g%&K+l&%'A%s*'+8&o'23
,5% 8asa(os una (a&'+; 9a*Ha *on una %s&'u*&u'a d% *a(8o d% f+l&'o
oA%sK+l&'o-K+l&%'K+%lds B ($a(8osK+l&'o
,Pu+&a(os las fl%*has
oRBA-!u&oK+l&%' B Kals%
,Mos&'a(os las f+las o*ul&as
oRBA-g%&R%f%''%d$%lls-g%&Ro^s-#s1+s+.l% B I'u%
Els%
MsgBox "El 'ango d% da&os no %x+s&%"
End #f
End "u.
>ntonce$% cuando 1iltramo$ por c4di,o% no e$ indi$pen$able mo$trar la$ 1lec-a$ de
lo$ campo$ del 1iltro% podemo$ 1iltrar directamente como en el $i,uiente e2emplo'
"u. K+l&'a'Aa&os423
A+( oAo* !s ?.)%*&
A+( oRangosBA !s ?.)%*&
A+( s=o(.'% !s "&'+ng
A+( oRBA !s ?.)%*&
A+( oA%sK+l&'o !s ?.)%*&
A+( ($a(8osK+l&'o203 !s =%^ *o(-sun-s&a'-sh%%&-Ia.l%K+l&%'K+%ld
oAo* B Ih+s$o(8on%n&
oRangosBA B oAo*-Aa&aBas%Rang%s23
s=o(.'% B "A+'%**+on%s"
#f oRangosBA-hasB@=a(%2 s=o(.'% 3 Ih%n
oRBA B oRangosBA-g%&B@=a(%2 s=o(.'% 3
oA%sK+l&'o B oRBA-g%&K+l&%'A%s*'+8&o'23
,El *a(8o 8o' %l Gu% Gu%'%(os f+l&'a'
($a(8osK+l&'o203-K+%ld B 1
,El &+8o d% *o(8a'a*+6n
($a(8osK+l&'o203-?8%'a&o' B *o(-sun-s&a'-sh%%&-K+l&%'?8%'a&o'-EPD!5
,"+ %s un n<(%'o
($a(8osK+l&'o203-#s=u(%'+* B Kals%
,El 9alo' d% *o(8a'a*+6n
($a(8osK+l&'o203-"&'+ng1alu% B "l+;%&&%"
,5% 8asa(os los *a(8os
oA%sK+l&'o-K+l&%'K+%lds B ($a(8osK+l&'o
,R%f'%s*a(os %l 'ango 8a'a 9%' %l '%sul&ado d%l f+l&'o
oRBA-'%f'%sh23
Els%
MsgBox "El 'ango d% da&os no %x+s&%"
End #f
End "u.
eue comprobamo$ 6ue lo -ace correctamente<
(02 )'7 @an,o$ de dato$
A-ora% &eamo$ como 1iltrar un campo con do$ condicione$'
"u. K+l&'a'Aa&os523
A+( oAo* !s ?.)%*&
A+( oRangosBA !s ?.)%*&
A+( s=o(.'% !s "&'+ng
A+( oRBA !s ?.)%*&
A+( oA%sK+l&'o !s ?.)%*&
A+( ($a(8osK+l&'o213 !s =%^ *o(-sun-s&a'-sh%%&-Ia.l%K+l&%'K+%ld
oAo* B Ih+s$o(8on%n&
oRangosBA B oAo*-Aa&aBas%Rang%s23
s=o(.'% B "A+'%**+on%s"
#f oRangosBA-hasB@=a(%2 s=o(.'% 3 Ih%n
oRBA B oRangosBA-g%&B@=a(%2 s=o(.'% 3
oA%sK+l&'o B oRBA-g%&K+l&%'A%s*'+8&o'23
($a(8osK+l&'o203-K+%ld B 1
($a(8osK+l&'o203-?8%'a&o' B *o(-sun-s&a'-sh%%&-K+l&%'?8%'a&o'-EPD!5
($a(8osK+l&'o203-#s=u(%'+* B Kals%
($a(8osK+l&'o203-"&'+ng1alu% B "l+;%&&%"
,!g'%ga(os la s%gunda *ond+*+6n al (+s(o *a(8o
($a(8osK+l&'o213-K+%ld B 1
,Es&a.l%*%(os la '%la*+6n *on la *ond+*+6n an&%'+o'
($a(8osK+l&'o213-$onn%*&+on B *o(-sun-s&a'-sh%%&-K+l&%'$onn%*&+on-?R
($a(8osK+l&'o213-?8%'a&o' B *o(-sun-s&a'-sh%%&-K+l&%'?8%'a&o'-EPD!5
($a(8osK+l&'o213-#s=u(%'+* B Kals%
($a(8osK+l&'o213-"&'+ng1alu% B "8aola"
oA%sK+l&'o-K+l&%'K+%lds B ($a(8osK+l&'o
oRBA-'%f'%sh23
Els%
MsgBox "El 'ango d% da&os no %x+s&%"
End #f
End "u.
Ob$er&a mu* bien la propiedad Connection% e$ mu* importante e$tablecer
correctamente e$ta% para obtener el re$ultado de$eado% $olo tiene do$ po$ibilidade$% una LOM (O@)
de di$*unci4n o una LOM (AN") de con2unci4n% muc-o$ errore$ de 1iltro$ incorrecto$% $on por la
incorrecta aplicaci4n de e$te $encillo par;metro% comprobamo$ 6ue nue$tro 1iltro e$ta correcto% *
&eamo$ m;$ e2emplo$'
Aprendiendo OOo .a$ic (0(
A-ora 1iltraremo$ con condicione$ en do$ campo$ di1erente$'
"u. K+l&'a'Aa&os623
A+( oAo* !s ?.)%*&
A+( oRangosBA !s ?.)%*&
A+( s=o(.'% !s "&'+ng
A+( oRBA !s ?.)%*&
A+( oA%sK+l&'o !s ?.)%*&
A+( ($a(8osK+l&'o213 !s =%^ *o(-sun-s&a'-sh%%&-Ia.l%K+l&%'K+%ld
oAo* B Ih+s$o(8on%n&
oRangosBA B oAo*-Aa&aBas%Rang%s23
s=o(.'% B "A+'%**+on%s"
#f oRangosBA-hasB@=a(%2 s=o(.'% 3 Ih%n
oRBA B oRangosBA-g%&B@=a(%2 s=o(.'% 3
oA%sK+l&'o B oRBA-g%&K+l&%'A%s*'+8&o'23
($a(8osK+l&'o203-K+%ld B 1
($a(8osK+l&'o203-?8%'a&o' B *o(-sun-s&a'-sh%%&-K+l&%'?8%'a&o'-EPD!5
($a(8osK+l&'o203-#s=u(%'+* B Kals%
($a(8osK+l&'o203-"&'+ng1alu% B "l+d+a"
,!g'%ga(os la s%gunda *ond+*+6n a o&'o *a(8o
($a(8osK+l&'o213-K+%ld B 3
,Es&a.l%*%(os la '%la*+6n *on la *ond+*+6n an&%'+o' 2O3
($a(8osK+l&'o213-$onn%*&+on B *o(-sun-s&a'-sh%%&-K+l&%'$onn%*&+on-!=A
($a(8osK+l&'o213-?8%'a&o' B *o(-sun-s&a'-sh%%&-K+l&%'?8%'a&o'-EPD!5
,!ho'a s+ .us*a(os 8o' n<(%'o
($a(8osK+l&'o213-#s=u(%'+* B I'u%
($a(8osK+l&'o213-=u(%'+*1alu% B 32
oA%sK+l&'o-K+l&%'K+%lds B ($a(8osK+l&'o
oRBA-'%f'%sh23
Els%
MsgBox "El 'ango d% da&os no %x+s&%"
End #f
End "u.
O una &e/ m;$ lo comprobamo$'
>n lo$ $i,uiente$ e2emplo$% *a no te mo$trar3 el re$ultado% dando por entendido% 6ue
e$ta$ comprobando% como *o% 6ue el re$ultado e$perado e$ el correcto' >n el $i,uiente e2emplo%
1iltramo$ a todo$ lo$ 6ue ten,an entre (0 * (5 aKo$'
"u. K+l&'a'Aa&os723
A+( oAo* !s ?.)%*&
A+( oRangosBA !s ?.)%*&
A+( s=o(.'% !s "&'+ng
A+( oRBA !s ?.)%*&
A+( oA%sK+l&'o !s ?.)%*&
A+( ($a(8osK+l&'o213 !s =%^ *o(-sun-s&a'-sh%%&-Ia.l%K+l&%'K+%ld
oAo* B Ih+s$o(8on%n&
oRangosBA B oAo*-Aa&aBas%Rang%s23
s=o(.'% B "A+'%**+on%s"
#f oRangosBA-hasB@=a(%2 s=o(.'% 3 Ih%n
oRBA B oRangosBA-g%&B@=a(%2 s=o(.'% 3
oA%sK+l&'o B oRBA-g%&K+l&%'A%s*'+8&o'23
($a(8osK+l&'o203-K+%ld B 3
($a(8osK+l&'o203-?8%'a&o' B *o(-sun-s&a'-sh%%&-K+l&%'?8%'a&o'-ERE!IER/EPD!5
(0E )'7 @an,o$ de dato$
($a(8osK+l&'o203-#s=u(%'+* B I'u%
($a(8osK+l&'o203-=u(%'+*1alu% B 30
,!g'%ga(os la s%gunda *ond+*+6n a o&'o *a(8o
($a(8osK+l&'o213-K+%ld B 3
($a(8osK+l&'o213-$onn%*&+on B *o(-sun-s&a'-sh%%&-K+l&%'$onn%*&+on-!=A
($a(8osK+l&'o213-?8%'a&o' B *o(-sun-s&a'-sh%%&-K+l&%'?8%'a&o'-5E""/EPD!5
($a(8osK+l&'o213-#s=u(%'+* B I'u%
($a(8osK+l&'o213-=u(%'+*1alu% B 35
oA%sK+l&'o-K+l&%'K+%lds B ($a(8osK+l&'o
oRBA-'%f'%sh23
Els%
MsgBox "El 'ango d% da&os no %x+s&%"
End #f
End "u.
Ob$er&a como -emo$ cambiado la propiedad LoperadorM (Operator) para $ati$1acer la
condici4n% lo$ po$ible$ &alore$ para e$ta propiedad% &iene condicionado$ por la enumeraci4n
com%sun%star%s(eet%4ilterOperator% cu*o$ &alore$ $on'
com%sun%star%s(eet%4ilterOperator 1alor 1alor en -nter!az
com'$un'$tar'$-eet'!ilterOperator'>MPTO 0 5ac=o
com'$un'$tar'$-eet'!ilterOperator'NOTQ>MPTO 1 No &ac=o
com'$un'$tar'$-eet'!ilterOperator'>eUA# 2 9,ual
com'$un'$tar'$-eet'!ilterOperator'NOTQ>eUA# ( No i,ual
com'$un'$tar'$-eet'!ilterOperator'@>AT>@ E Ma*or 6ue
com'$un'$tar'$-eet'!ilterOperator'@>AT>@Q>eUA# 5 Ma*or o i,ual 6ue
com'$un'$tar'$-eet'!ilterOperator'#>SS ) Menor 6ue
com'$un'$tar'$-eet'!ilterOperator'#>SSQ>eUA# 7 Menor o i,ual 6ue
com'$un'$tar'$-eet'!ilterOperator'TOPQ5A#U>S F >l ma*or &alor
com'$un'$tar'$-eet'!ilterOperator'TOPQP>@+>NT G >l ma*or porcenta2e
com'$un'$tar'$-eet'!ilterOperator'.OTTOMQ5A#U>S 10 >l menor &alor
com'$un'$tar'$-eet'!ilterOperator'.OTTOMQP>@+>NT 11 >l menor porcenta2e
>n el $i,uiente e2emplo% $eleccionamo$ lo$ cinco re,i$tro$ con m;$ edad'
"u. K+l&'a'Aa&os823
A+( oAo* !s ?.)%*&
A+( oRangosBA !s ?.)%*&
A+( s=o(.'% !s "&'+ng
A+( oRBA !s ?.)%*&
A+( oA%sK+l&'o !s ?.)%*&
A+( ($a(8osK+l&'o203 !s =%^ *o(-sun-s&a'-sh%%&-Ia.l%K+l&%'K+%ld
oAo* B Ih+s$o(8on%n&
oRangosBA B oAo*-Aa&aBas%Rang%s23
s=o(.'% B "A+'%**+on%s"
#f oRangosBA-hasB@=a(%2 s=o(.'% 3 Ih%n
oRBA B oRangosBA-g%&B@=a(%2 s=o(.'% 3
oA%sK+l&'o B oRBA-g%&K+l&%'A%s*'+8&o'23
($a(8osK+l&'o203-K+%ld B 3
($a(8osK+l&'o203-?8%'a&o' B *o(-sun-s&a'-sh%%&-K+l&%'?8%'a&o'-I?0/1!5DE"
($a(8osK+l&'o203-#s=u(%'+* B I'u%
Aprendiendo OOo .a$ic (05
,5os *+n*o d% (>s %dad
($a(8osK+l&'o203-=u(%'+*1alu% B 5
oA%sK+l&'o-K+l&%'K+%lds B ($a(8osK+l&'o
oRBA-'%f'%sh23
Els%
MsgBox "El 'ango d% da&os no %x+s&%"
End #f
End "u.
A-ora% 1iltremo$ todo$ lo$ nombre$ 6ue comiencen por la letra L#M'
"u. K+l&'a'Aa&os923
A+( oAo* !s ?.)%*&
A+( oRangosBA !s ?.)%*&
A+( s=o(.'% !s "&'+ng
A+( oRBA !s ?.)%*&
A+( oA%sK+l&'o !s ?.)%*&
A+( ($a(8osK+l&'o203 !s =%^ *o(-sun-s&a'-sh%%&-Ia.l%K+l&%'K+%ld
oAo* B Ih+s$o(8on%n&
oRangosBA B oAo*-Aa&aBas%Rang%s23
s=o(.'% B "A+'%**+on%s"
#f oRangosBA-hasB@=a(%2 s=o(.'% 3 Ih%n
oRBA B oRangosBA-g%&B@=a(%2 s=o(.'% 3
oA%sK+l&'o B oRBA-g%&K+l&%'A%s*'+8&o'23
($a(8osK+l&'o203-K+%ld B 1
($a(8osK+l&'o203-?8%'a&o' B *o(-sun-s&a'-sh%%&-K+l&%'?8%'a&o'-EPD!5
($a(8osK+l&'o203-#s=u(%'+* B Kals%
,?.s%'9a %l 8a'a(%&'o d% la *ond+*+6n
($a(8osK+l&'o203-"&'+ng1alu% B "l-"
,Es&a.l%*%(os Gu% us% %x8'%s+on%s '%gula'%s
oA%sK+l&'o-Ds%R%gula'Ex8'%ss+ons B I'u%
oA%sK+l&'o-K+l&%'K+%lds B ($a(8osK+l&'o
oRBA-'%f'%sh23
Els%
MsgBox "El 'ango d% da&os no %x+s&%"
End #f
End "u.
Ob$er&a como -emo$ e$tablecido la propiedad para u$ar e:pre$ione$ re,ulare$
(7seRegular&+pressions) del de$criptor del 1iltro para 6ue ten,a e1ecto nue$tra condici4n' #a$
e:pre$ione$ re,ulare$ $on un concepto mu* podero$o como podr;$ a&eri,uarlo en tu bu$cador
1a&orito'
Otra po$ibilidad ba$tante intere$ante de lo$ 1iltro$% e$ poder copiar el re$ultado en
otra po$ici4n * de2ar el ori,en intacto% &eamo$ como'
"u. K+l&'a'Aa&os1023
A+( oAo* !s ?.)%*&
A+( oRangosBA !s ?.)%*&
A+( s=o(.'% !s "&'+ng
A+( oRBA !s ?.)%*&
A+( oA%sK+l&'o !s ?.)%*&
A+( ($a(8osK+l&'o203 !s =%^ *o(-sun-s&a'-sh%%&-Ia.l%K+l&%'K+%ld
A+( oA%s&+no !s ?.)%*&
oAo* B Ih+s$o(8on%n&
oRangosBA B oAo*-Aa&aBas%Rang%s23
(0) )'7 @an,o$ de dato$
s=o(.'% B "A+'%**+on%s"
#f oRangosBA-hasB@=a(%2 s=o(.'% 3 Ih%n
oRBA B oRangosBA-g%&B@=a(%2 s=o(.'% 3
oA%sK+l&'o B oRBA-g%&K+l&%'A%s*'+8&o'23
($a(8osK+l&'o203-K+%ld B 1
($a(8osK+l&'o203-?8%'a&o' B *o(-sun-s&a'-sh%%&-K+l&%'?8%'a&o'-EPD!5
($a(8osK+l&'o203-#s=u(%'+* B Kals%
($a(8osK+l&'o203-"&'+ng1alu% B "glo'+a"
,5% +nd+*a(os Gu% Gu%'%(os %l '%sul&ado %n o&'o luga'
oA%sK+l&'o-$o8@?u&8u&Aa&a B I'u%
,O l% +nd+*a(os dond%7 o.s%'9a *o(o o.&%n%(os la d+'%**+6n d% la 8'+(%' *%lda d%l 'ango
oA%s&+no B oRBA-R%f%''%d$%lls23-g%&$%llB@0os+&+on20703-g%&$%ll!dd'%ss23
,A%s8uSs su(a(os %l an*ho @ al&o d%l 'ango 8a'a d%)a' una *olu(na @ f+la %n .lan*o
oA%s&+no-$olu(n B oA%s&+no-$olu(n C oRBA-R%f%''%d$%lls-g%&$olu(ns-g%&$oun& C 1
oA%s&+no-Ro^ B oA%s&+no-Ro^ C oRBA-R%f%''%d$%lls-g%&Ro^s-g%&$oun& C 1
,Es&a.l%*%(os %l d%s&+no
oA%sK+l&'o-?u&8u&0os+&+on B oA%s&+no
oA%sK+l&'o-K+l&%'K+%lds B ($a(8osK+l&'o
oRBA-'%f'%sh23
Els%
MsgBox "El 'ango d% da&os no %x+s&%"
End #f
End "u.
>n &er$ione$ anteriore$ a la ('2% la propiedad para indicar 6ue 6ueremo$ el re$ultado
en otra po$ici4n $e llama< Sa&eOutputPo$ition% e$ta propiedad $olo aplicaba para ran,o$ de dato$%
a partir de la &er$i4n ('2 $e -omolo,4 para u$ar la mi$ma propiedad tanto en ran,o$ de dato$
como en ran,o$ de celda$' Si la$ celda$ de$tino no e$t;n &ac=a$% e$ta$% $er;n reempla/ada$ $in
pre,untarte nada% modi1ica la macro% para e&aluar e$to * $e lo noti1i6ue$ al u$uario'
Otra caracter=$tica mu* podero$a de lo$ 1iltro$% e$ la po$ibilidad de 1iltrar lo$ re,i$tro$%
omitiendo lo$ duplicado$% copia &ario$ re,i$tro$ i,uale$ para 6ue note$ la di1erencia% $e -ace de la
$i,uiente manera'
"u. K+l&'a'Aa&os1123
A+( oAo* !s ?.)%*&
A+( oRangosBA !s ?.)%*&
A+( s=o(.'% !s "&'+ng
A+( oRBA !s ?.)%*&
A+( oA%sK+l&'o !s ?.)%*&
A+( ($a(8osK+l&'o203 !s =%^ *o(-sun-s&a'-sh%%&-Ia.l%K+l&%'K+%ld
A+( oA%s&+no !s ?.)%*&
oAo* B Ih+s$o(8on%n&
oRangosBA B oAo*-Aa&aBas%Rang%s23
s=o(.'% B "A+'%**+on%s"
#f oRangosBA-hasB@=a(%2 s=o(.'% 3 Ih%n
oRBA B oRangosBA-g%&B@=a(%2 s=o(.'% 3
oA%sK+l&'o B oRBA-g%&K+l&%'A%s*'+8&o'23
($a(8osK+l&'o203-K+%ld B 0
,"%l%**+ona(os los '%g+s&'os =? 9a*Hos
($a(8osK+l&'o203-?8%'a&o' B *o(-sun-s&a'-sh%%&-K+l&%'?8%'a&o'-=?I/EM0IO
,5% +nd+*a(os Gu% solo Gu%'%(os '%g+s&'os <n+*os
oA%sK+l&'o-"]+8Au8l+*a&%s B I'u%
oA%sK+l&'o-$o8@?u&8u&Aa&a B I'u%
oA%s&+no B oRBA-R%f%''%d$%lls-g%&$%llB@0os+&+on20703-g%&$%ll!dd'%ss23
oA%s&+no-$olu(n B oA%s&+no-$olu(n C oRBA-R%f%''%d$%lls-g%&$olu(ns-g%&$oun& C 1
oA%sK+l&'o-?u&8u&0os+&+on B oA%s&+no
oA%sK+l&'o-K+l&%'K+%lds B ($a(8osK+l&'o
oRBA-'%f'%sh23
Els%
MsgBox "El 'ango d% da&os no %x+s&%"
End #f
Aprendiendo OOo .a$ic (07
End "u.
da$ta a-ora% -emo$ aplicado$ 1iltro$% de$de un ran,o de dato$% pero lo$ 1iltro$ no
e$t;n limitado$ a e$ta$ ;rea$% al $er un m3todo de ran,o de celda$ (ScCellRangeObj)% puede$
aplicar un 1iltro a cual6uier ran,o de celda$% la $i,uiente macro% toma el ran,o de celda$
$eleccionado * 1iltra lo$ dato$ ?nico$ do$ columna$ a la derec-a% e$ta macro e$ mu* ?til para de2ar
li$tado$ ?nico$ de lo 6ue $ea% &eri1icalo'
"u. K+l&'a'Aa&os1223
A+( oAo* !s ?.)%*&
A+( o"%l !s ?.)%*&
A+( oA%sK+l&'o !s ?.)%*&
A+( ($a(8osK+l&'o203 !s =%^ *o(-sun-s&a'-sh%%&-Ia.l%K+l&%'K+%ld
A+( oA%s&+no !s ?.)%*&
oAo* B Ih+s$o(8on%n&
o"%l B oAo*-g%&$u''%n&"%l%*&+on23
,=os as%gu'a(os d% Gu% s%a un 'ango d% *%ldas
#f o"%l-g%&#(8l%(%n&a&+on=a(% B ""*$%llRang%?.)" Ih%n
,$'%a(os un nu%9o d%s*'+8&o' d% f+l&'o 9a*+o 2I'u%3
oA%sK+l&'o B o"%l-*'%a&%K+l&%'A%s*'+8&o'2I'u%3
,Es&a.l%*%(os los *a(8os
($a(8osK+l&'o203-K+%ld B 0
($a(8osK+l&'o203-?8%'a&o' B *o(-sun-s&a'-sh%%&-K+l&%'?8%'a&o'-=?I/EM0IO
,Es&a.l%*%(os %l d%s&+no
oA%s&+no B o"%l-g%&$%llB@0os+&+on20703-g%&$%ll!dd'%ss23
oA%s&+no-$olu(n B o"%l-g%&Rang%!dd'%ss23-End$olu(n C 2
,Es&a.l%*%(os las 8'o8+%dad%s d%l f+l&'o
oA%sK+l&'o-$on&a+nsH%ad%' B Kals%
oA%sK+l&'o-"]+8Au8l+*a&%s B I'u%
oA%sK+l&'o-$o8@?u&8u&Aa&a B I'u%
oA%sK+l&'o-?u&8u&0os+&+on B oA%s&+no
oA%sK+l&'o-K+l&%'K+%lds B ($a(8osK+l&'o
,O lo a8l+*a(os
o"%l-f+l&%'2 oA%sK+l&'o 3
Els%
MsgBox "=o %s un 'ango d% *%ldas"
End #f
End "u.
da* di1erencia$ importante$ en comparaci4n con lo$ 1iltro$ en ran,o de dato$8 la
primera e$ la 1orma de crear el de$criptor de 1iltro% para un ran,o de celda$ $e u$a el m3todo
create4ilter/escriptor% al cual $e le pa$a el par;metro &erdadero (True) $i 6ueremo$ 6ue el nue&o
de$criptor e$te &ac=o * 1al$o (!al$e) $i toma el e:i$tente en dic-o ran,o de celda$% ob$er&a 6ue
tambi3n -emo$ e$tablecido 6ue e$te ran,o no tiene encabe/ado$ de campo$ (Contains#eader)%
tambi3n cambia la propiedad para decirle 6ue 6ueremo$ copiar el re$ultado (Cop,Output/ata) en
otra po$ici4n (-omolo,ada a partir de la &er$i4n ('2% $e u$a la mi$ma tanto en ran,o$ de dato$
como en ran,o$ de celda)% * por ultimo% no re1re$camo$ el ran,o% $i no 6ue aplicamo$ el 1iltro
(!ilter)% pa$;ndole como par;metro el de$criptor de 1iltro creado' Al i,ual 6ue con lo$ ran,o$ de
dato$% $i el de$tino contiene dato$% $er;n reempla/ado$ $in con$ultarte'
5eamo$ como u$ar la$ opcione$ del 1iltro e$pecial% e$te tipo de 1iltro% no$ permite
e$tablecer un ran,o como ori,en de lo$ criterio$ para el 1iltro% lo 6ue no$ da la po$ibilidad de poder
lle,ar a u$ar como criterio$ Ltodo$M lo$ campo$ de nue$tra ba$e de dato$% d;ndono$ ab$oluto
(0F )'7 @an,o$ de dato$
control $obre lo$ re,i$tro$ 1iltrado$' Para demo$trar el poder * &er$atilidad de e$ta opci4n%
preparate una buena tabla de dato$% con al meno$ cinco campo$ * &aria$ decena$ de re,i$tro$% $i
lo pre1iere$% puede$ u$ar la -o2a llamada LPelicula$M% pre$ente en lo$ e2emplo$ 6ue acompaKan a
e$to$ apunte$ * 6ue $er; la 6ue *o u$e'
>l ran,o de nue$tro$ dato$ e$< LA1<2E(M% e$tablecemo$ un nombre a e$te ran,o8
L5ideotecaM $i te parece% de$pu3$% copia lo$ t=tulo$ de lo$ campo$ a la 1ila 250% $elecciona el ran,o
LA250<255M * nombrala como L+riterio$M% por ultimo% $elecciona la celda LA2)0M * la bauti/amo$
como L"e$tinoM% $i e$ de tu a,rado% todo lo anterior puede$ -acerlo por c4di,o 6ue *a $abe$
-acerlo% I&erdadJ' @ecuerda 6ue e$ta de1inici4n de nombre$ e$ en el men? /atos $ /e!inir
rango%%%
Nue$tra tabla debe &er$e m;$ o meno$ a$='
#a de1inici4n de criterio$ para el 1iltro e$pecial% $e puede -acer como lo -emo$ &enido
aprendiendo% por lo 6ue no lo repetiremo$ a6u=% concentr;ndono$ en e$tudiar la 1orma de
e$tablecer e$to$ criterio$ de$de un ran,o de dato$ con nombre' Te $u,iero% con e$ta macro en
e$peci1ico% a$i,narle una combinaci4n de tecla$ o un bot4n en al,una barra de -erramienta$ con
la 1inalidad de 6ue podamo$ e2ecutarla &aria$ &ece$ de$de la inter1a/ del u$uario e ir &iendo en
&i&o * en directo lo$ re$ultado$ 6ue no$ arro,ue' A6u= la macro'
"u. K+l&'a'Es8%*+al123
A+( oAo* !s ?.)%*&
A+( oRangosBA !s ?.)%*&
A+( o1+d%o&%*a !s ?.)%*&
A+( oA%s&+no !s ?.)%*&
A+( o$'+&%'+os !s ?.)%*&
A+( oA%sK+l&'o !s ?.)%*&
oAo* B Ih+s$o(8on%n&
oRangosBA B oAo*-Aa&aBas%Rang%s23
,=os as%gu'a(os d% Gu% %x+s&%n nu%s&'os &'%s 'angos
#f oRangosBA-hasB@=a(%2 "1+d%o&%*a" 3 !nd oRangosBA-hasB@=a(%2 "$'+&%'+os" 3 !nd
oRangosBA-hasB@=a(%2 "A%s&+no" 3 Ih%n
,?.&%n%(os una '%f%'%n*+a a los 'angos o'+g%n
o1+d%o&%*a B oRangosBA-g%&B@=a(%2 "1+d%o&%*a" 3-R%f%''%d$%lls23
o$'+&%'+os B oRangosBA-g%&B@=a(%2 "$'+&%'+os" 3-R%f%''%d$%lls23
oA%s&+no B oRangosBA-g%&B@=a(%2 "A%s&+no" 3-R%f%''%d$%lls-g%&$%llB@0os+&+on2 070 3-g%&$%ll!dd'%ss23
,?.&%n%(os %l d%s*'+8&o' d%l f+l&'o d%l 'ango d% *'+&%'+os a 8a'&+' d%l 'ango d% da&os
oA%sK+l&'o B o$'+&%'+os-*'%a&%K+l&%'A%s*'+8&o'B@?.)%*&2 o1+d%o&%*a 3
,"+n du8l+*ados
Aprendiendo OOo .a$ic (0G
oA%sK+l&'o-"]+8Au8l+*a&%s B I'u%
,Pu% 8u%da usa' %x8'%s+on%s '%gula'%s
oA%sK+l&'o-Ds%R%gula'Ex8'%ss+ons B I'u%
,Pu%'%(os %l '%sul&ado %n o&'a 8os+*+6n
oA%sK+l&'o-$o8@?u&8u&Aa&aB I'u%
,5% +nd+*a(os dond%
oA%sK+l&'o-?u&8u&0os+&+on B oA%s&+no
,El 'ango *on&+%n% %n*a.%;ados d% *a(8os
oA%sK+l&'o-$on&a+nsH%ad%' B I'u%
,K+l&'a(os *on las o8*+on%s s%l%**+onadas
o1+d%o&%*a-f+l&%'2 oA%sK+l&'o 3
Els%
MsgBox "El 'ango d% da&os no %x+s&%"
End #f
End "u.
>$ importante notar 6ue para el 1iltro e$pecial u$amo$ en nue&o m3todo llamado
create4ilter/escriptorB,Object% 6ue $e in&oca de$de el ran,o de criterio$ (oCriterios)% pa$;ndole
como ar,umento% el ran,o de dato$ (o1ideoteca)% la$ re$tante$ propiedade$ u$ada$ en el e2emplo
*a la$ -emo$ tratado'
A-ora% lo$ criterio$ tiene$ 6ue e$tablecerlo$ en la$ celda$ corre$pondiente$% por
e2emplo% para $aber 6ue pel=cula$ tenemo$ de mi director 1a&orito% u$amo$'
>2ecuta la macro * &emo$ el re$ultado'
@ecuerda 6ue la 1inalidad de e$tablecer criterio$ * reali/ar 1iltro$% e$ la de re$ponder
pre,unta$ como por e2emplo% Icuanta$ pel=cula$ tenemo$ del aKo 1G7EJ% e$tablece la condici4n *
e2ecuta la macro para re$ponderla'
Nv Titulo "irector enero AKo Pa=$ "uraci4n
1G7E
Si 6uiere$ e$tablecer m;$ de un criterio * lo -ace$ en una mi$ma 1ila% e$ta$ u$ando
el operador de con2unci4n LOM (And)% como la re$pue$ta a la pre,unta8 Icuanta$ pel=cula$
tenemo$% reali/ada$ en jap4n reali/ada$ en 1GF0J
Nv Titulo "irector enero AKo Pa=$ "uraci4n
(10 )'7 @an,o$ de dato$
1GF0 jap4n
Si u$a$ di1erente$ 1ila$% e$ta$ u$ando el operador de di$*unci4n LOM (Or)% por
e2emplo% para re$ponder la pre,unta8 Icuanta$ pel=cula$ tenemo$ de la 9ndia o del director Peter
reena7a*J
Nv Titulo "irector enero AKo Pa=$ "uraci4n
9ndia
Peter reena7a*
+omo declaramo$ en el de$criptor de 1iltro% 6ue $e u$ar;n e:pre$ione$ re,ulare$%
puede$ re$ponder pre,unta$ como8 Icuanta$ pel=cula$ empie/an con la letra L"MJ
Nv Titulo "irector enero AKo Pa=$ "uraci4n
d'o
+omo -abr;$ notado% la$ po$ibilidade$ $on enorme$' Te 6ueda de tarea% e$tablecer
la$ condicione$ para re$ponder la $i,uiente pre,unta8 Icuale$ pel=cula$ duran entre )0 * G0
minuto$J% la primer pi$ta e$8 nota 6ue e$tamo$ $olicitando un ran,o e$peci1ico% por lo tanto% tiene$
6ue u$ar el operador LOM (AN") para re$ol&erlo% * *a ca$i te di2e todo% recuerda 6ue el ran,o de
criterio$ e$ $olo e$o un ran,o * no e$tamo$ limitado$ a cambiar lo 6ue 6ueramo$ en e$te ran,o%
con lo 6ue *a te re$ol&= la tarea% a traba2ar'
Nv Titulo "irector enero AKo Pa=$ "uraci4n
JJ
=.A.) Subtotales
#o$ $ubtotale$ no$ permiten obtener in1ormaci4n de la$ ;rea$ de dato$% a,rupar *
reali/ar una operaci4n determinada en un ,rupo de dato$% en el $i,uiente e2emplo * continuando
traba2ando con nue$tra ba$e de dato$ de pel=cula$% obtenemo$ la cantidad de t=tulo$ por director'
"u. "u.&o&al%s123
A+( oAo* !s ?.)%*&
A+( oRangosBA !s ?.)%*&
A+( o0%l+*ulas !s ?.)%*&
A+( oRango !s ?.)%*&
A+( oA%s"u.Io&al !s ?.)%*&
A+( ($a(8os"u.Io&al203 !s =%^ *o(-sun-s&a'-sh%%&-"u.Io&al$olu(n
oAo* B Ih+s$o(8on%n&
oRangosBA B oAo*-Aa&aBas%Rang%s23
,=os as%gu'a(os d% Gu% %x+s&% %l 'ango
#f oRangosBA-hasB@=a(%2 "0%l+*ulas" 3 Ih%n
,?.&%n%(os una '%f%'%n*+a a los 'angos o'+g%n
o0%l+*ulas B oRangosBA-g%&B@=a(%2 "0%l+*ulas" 3
,R%f%'%n*+a al 'ango d% *%ldas o'+g%n
Aprendiendo OOo .a$ic (11
oRango B o0%l+*ulas-R%f%''%d$%lls23
,$'%a(os un nu%9o su.&o&al
oA%s"u.Io&al B oRango-*'%a&%"u.Io&alA%s*'+8&o'2 I'u% 3
,Pu% o'd%n% d% fo'(a as*%nd%n&% %l g'u8o s%l%**+onado
oA%s"u.Io&al-Ena.l%"o'& B I'u%
oA%s"u.Io&al-"o'&!s*%nd+ng B I'u%
,5a *olu(na %n la Gu% s% usa'a la fun*+6n %s8%*+f+*ada
($a(8os"u.Io&al203-$olu(n B 1
($a(8os"u.Io&al203-Kun*&+on B *o(-sun-s&a'-sh%%&-E%n%'alKun*&+on-$?D=I
,!g'%ga(os la o8%'a*+6n7 al g'u8o d%s%ado
oA%s"u.Io&al-add=%^2 ($a(8os"u.Io&al72 3
,!8l+*a(os %l su.&o&al
oRango-a88l@"u.Io&als2 oA%s"u.Io&al7 I'u% 3
End #f
End "u.
>l ;rea de dato$ (/ataBaseRanges)% $olo la utili/amo$ para acceder (Re!erredCells)
al ran,o de celda$ ori,en% $i al m3todo del ran,o de celda$ para crear el de$criptor del $ubtotal
(createSub0otal/escriptor)% $e le pa$a como ar,umento un &alor &erdadero (0rue)% te creara un
nue&o de$criptor &ac=o% $i e$ 1al$o (4alse)% tomar; el e:i$tente% $i lo -a*% del ran,o $eleccionado'
>$ importante 6ue e$table/ca$ 6ue ordene el ,rupo% $i e$ a$cendente o de$cendente% 6ueda a tu
criterio * nece$idade$% pero $i no ordena$ el ,rupo% * dependiendo de como e$t3n tu$ dato$
ori,en% te puede dar re$ultado$ incorrecto$' >n la matri/ de columna$ del $ubtotal
(com%sun%star%s(eet%Sub0otalColumn)% e$tablecemo$ el campo (Column) en el cual 6ueremo$
-acer una operaci4n% determinada por la propiedad 1unci4n (4unction)% a $u &e/% ba$ada en la
enumeraci4n com'$un'$tar'$-eet'eneral!unction% 6ue puede tomar lo$ $i,uiente$ &alore$'
com(sun(star(sheet(8eneralFunction 1alor 1alor en -nter!az
com'$un'$tar'$-eet'eneral!unction'NON> 0 Nin,una
com'$un'$tar'$-eet'eneral!unction'AUTO 1 Autom;tico
com'$un'$tar'$-eet'eneral!unction'SUM 2 Suma
com'$un'$tar'$-eet'eneral!unction'+OUNT ( +uenta
com'$un'$tar'$-eet'eneral!unction'A5>@A> E Promedio
com'$un'$tar'$-eet'eneral!unction'MAp 5 M;:imo
com'$un'$tar'$-eet'eneral!unction'M9N ) M=nimo
com'$un'$tar'$-eet'eneral!unction'P@O"U+T 7 Producto
com'$un'$tar'$-eet'eneral!unction'+OUNTNUMS F +uenta $olo n?mero$
com'$un'$tar'$-eet'eneral!unction'ST">5 G "e$&iaci4n e$t;ndar (Mue$tra)
com'$un'$tar'$-eet'eneral!unction'ST">5P 10 "e$&iaci4n e$t;ndar (Poblaci4n)
com'$un'$tar'$-eet'eneral!unction'5A@ 11 5arian/a (Mue$tra)
com'$un'$tar'$-eet'eneral!unction'5A@P 12 5arian/a (Poblaci4n)
Al aKadir lo$ campo$ (add5e<) al de$criptor de $ubtotal% le pa$amo$ como
par;metro$% la matri/ de campo$ de columna del $ubtotal donde -emo$ e$tablecido 6ue campo$ *
6ue operaci4n -aremo$ con ello$% a-= mi$mo% con el $e,undo par;metro% le indicamo$ por 6ue
campo 6ueremo$ a,rupar% por ?ltimo% aplicamo$ (appl,Sub0otals) lo$ $ubtotale$% cu*o$
par;metro$ $on8 el de$criptor de $ubtotal * un &alor booleano indic;ndole $i de$eamo$ reempla/ar
el $ubtotal actual (0rue)% $i lo -a*% o a,re,amo$ al e:i$tente (4alse)% u$a con cuidado e$te
(12 )'7 @an,o$ de dato$
par;metro% pue$ $i a,re,a$ criterio$ Lincon$i$tente$M% el re$ultado puede $er impreci$o *
de$a$tro$o &i$ualmente -ablando'
#a $i,uiente macro% borra cual6uier $ubtotal e:i$tente en el ran,o del ;rea de dato$'
"u. "u.&o&al%s223
A+( oAo* !s ?.)%*&
A+( oRangosBA !s ?.)%*&
A+( o0%l+*ulas !s ?.)%*&
A+( oRango !s ?.)%*&
oAo* B Ih+s$o(8on%n&
oRangosBA B oAo*-Aa&aBas%Rang%s23
#f oRangosBA-hasB@=a(%2 "0%l+*ulas" 3 Ih%n
o0%l+*ulas B oRangosBA-g%&B@=a(%2 "0%l+*ulas" 3
oRango B o0%l+*ulas-R%f%''%d$%lls23
,Pu+&a(os %l su.&o&al
oRango-'%(o9%"u.Io&als23
End #f
End "u.
+omo $e mue$tra en el $i,uiente e2emplo% no e$ indi$pen$able u$ar un ;rea de dato$
para -acer u$o de lo$ $ubtotale$% al $er m3todo$ implementado$ en ran,o$ de celda% podemo$
in&ocarlo$ de$de cual6uiera de e$to$' #a $i,uiente macro% no$ da el total de t=tulo$ por ,enero *
$uma la cantidad de minuto$ del mi$mo'
"u. "u.&o&al%s323
A+( oAo* !s ?.)%*&
A+( o"%l !s ?.)%*&
A+( oA%s"u.Io&al !s ?.)%*&
A+( ($a(8os"u.Io&al213 !s =%^ *o(-sun-s&a'-sh%%&-"u.Io&al$olu(n
oAo* B Ih+s$o(8on%n&
o"%l B oAo*-g%&$u''%n&"%l%*&+on23
,"+ %s una sola *%lda o un 'ango d% *%ldas
#f o"%l-g%&#(8l%(%n&a&+on=a(% B ""*$%llRang%?.)" ?' o"%l-g%&#(8l%(%n&a&+on=a(% B ""*$%ll?.)" Ih%n
o"%l B o"%l-g%&"8'%ad"h%%&-*'%a&%$u'so'B@Rang%2o"%l3
,Ex8and+(os a la '%g+6n a*&ual
o"%l-*olla8s%Io$u''%n&R%g+on23
,$'%a(os %l d%s*'+8&o' a 8a'&+' d% la s%l%**+6n
oA%s"u.Io&al B o"%l-*'%a&%"u.Io&alA%s*'+8&o'2 I'u% 3
oA%s"u.Io&al-Ena.l%"o'& B I'u%
oA%s"u.Io&al-"o'&!s*%nd+ng B I'u%
,$olu(na d% &+&ulos
($a(8os"u.Io&al203-$olu(n B 1
($a(8os"u.Io&al203-Kun*&+on B *o(-sun-s&a'-sh%%&-E%n%'alKun*&+on-$?D=I
,$olu(na d% (+nu&os
($a(8os"u.Io&al213-$olu(n B 6
($a(8os"u.Io&al213-Kun*&+on B *o(-sun-s&a'-sh%%&-E%n%'alKun*&+on-"DM
,!8l+*a(os al g%n%'o
oA%s"u.Io&al-add=%^2 ($a(8os"u.Io&al73 3
o"%l-a88l@"u.Io&als2 oA%s"u.Io&al7 I'u% 3
Els%
MsgBox "=o %s un 'ango d% *%ldas"
End #f
End "u.
Aprendiendo OOo .a$ic (1(
>l $i,uiente e2emplo% no$ mue$tra cuanto$ t=tulo$ tenemo$ por pa=$% * de$pu3$ otro
$ubtotal no$ indica cuanto$ t=tulo$ por ,enero% LdentroM de cada pa=$ tenemo$'
"u. "u.&o&al%s423
A+( oAo* !s ?.)%*&
A+( o"%l !s ?.)%*&
A+( oA%s"u.Io&al !s ?.)%*&
A+( ($a(8os"u.Io&al203 !s =%^ *o(-sun-s&a'-sh%%&-"u.Io&al$olu(n
oAo* B Ih+s$o(8on%n&
o"%l B oAo*-g%&$u''%n&"%l%*&+on23
,"+ %s una sola *%lda o un 'ango d% *%ldas
#f o"%l-g%&#(8l%(%n&a&+on=a(% B ""*$%llRang%?.)" ?' o"%l-g%&#(8l%(%n&a&+on=a(% B ""*$%ll?.)" Ih%n
o"%l B o"%l-g%&"8'%ad"h%%&-*'%a&%$u'so'B@Rang%2o"%l3
o"%l-*olla8s%Io$u''%n&R%g+on23
oA%s"u.Io&al B o"%l-*'%a&%"u.Io&alA%s*'+8&o'2 I'u% 3
oA%s"u.Io&al-Ena.l%"o'& B I'u%
oA%s"u.Io&al-"o'&!s*%nd+ng B I'u%
,$olu(na d% &H&ulos
($a(8os"u.Io&al203-$olu(n B 1
($a(8os"u.Io&al203-Kun*&+on B *o(-sun-s&a'-sh%%&-E%n%'alKun*&+on-$?D=I
,!8l+*a(os al 8aHs
oA%s"u.Io&al-add=%^2 ($a(8os"u.Io&al75 3
,$olu(na d% &H&ulos
($a(8os"u.Io&al203-$olu(n B 1
($a(8os"u.Io&al203-Kun*&+on B *o(-sun-s&a'-sh%%&-E%n%'alKun*&+on-$?D=I
,!8l+*a(os al g%n%'o
oA%s"u.Io&al-add=%^2 ($a(8os"u.Io&al73 3
o"%l-a88l@"u.Io&als2 oA%s"u.Io&al7 I'u% 3
Els%
MsgBox "=o %s un 'ango d% *%ldas"
End #f
End "u.
Ob$er&a% 6ue -emo$ e$tablecido la matri/ de campo$ do$ &ece$ * u$ado el m3todo
add5e< tambi3n do$ &ece$ para lo,rar el re$ultado de$eado' Solo puede$ $acar $ubtotale$ por
-a$ta un m;:imo de tre$ ,rupo$' >l orden en 6ue e$table/ca$ * a,re,ue$ lo$ campo$% $er; el
orden de precedencia de lo$ $ubtotale$' #a obtenci4n de $ubtotale$% tiene un &alor a,re,ado
ba$tante ?til% al reali/ar la operaci4n e$tablecida en al,?n campo% la -erramienta -ace una
comparaci4n Le:actaM de cada &alor% por lo 6ue te podr;$ dar cuenta $i tiene$ campo$ con% por
e2emplo% e$pacio$ &ac=o$ de m;$% al principio o al 1inal de el% o en el ca$o de tener &alore$ de
campo mu* $imilare$% $i un re,i$tro tiene $olo un error de LdedoM% con lo$ $ubtotale$ te podr;$ dar
cuenta de 1orma &i$ual mu* 1;cilmente% $obre todo cuando -ace$ u$o de la 1unci4n cuenta% re&i$a
lo$ re,i$tro$ 6ue $olo ten,an un $olo re,i$tro% por $upue$to% tu debe$ determinar $i e$ correcto o
no' Para e2empli1icar e$to% $i e$ta$ u$ando la mi$ma ba$e de dato$ 6ue *o% $aca un $ubtotal por
,enero% bu$ca * ob$er&a lo$ ,3nero$ L+omediaM * L"ramaM% * cu3ntame cual e$ el error' >$a e$ tu
tarea 6ue no e$ muc-a'
=.A.! -alidando datos
A e$ta$ altura$ del libro% te -abr;$ dado cuenta de la importancia de &alidar la
in1ormaci4n 6ue el u$uario le proporciona a un pro,rama% una ,ran cantidad de pro,rama$% 1allan
(1E )'7 @an,o$ de dato$
en e$te tema de% creo *o% alta prioridad' +alc cuenta con una -erramienta llamada 5alide/%
pre$ente en el men? "ato$% 6ue no$ permite e$tablecer criterio$ en celda$ para la captura de
in1ormaci4n por parte del u$uario * limitarlo en la medida de lo po$ible% a capturar dado$ &;lido$ en
el pro,rama% in1ormando% $i a$= lo de$ea$% con cuadro$ de men$a2e para a*udarle a introducir la
in1ormaci4n correctamente'
5eamo$ como e$tablecer e$ta$ opcione$ por c4di,o' >n el $i,uiente e2emplo%
e$tablecemo$ 6ue la$ celda$ $eleccionada$% $olo puedan aceptar n?mero$ entero$ del 1 al 12% e$
decir% un entero corre$pondiente a un me$ del aKo'
"u. 1al+da'Aa&os123
A+( oAo* !s ?.)%*&
A+( o"%l !s ?.)%*&
A+( o1al+da*+on !s ?.)%*&
oAo* B Ih+s$o(8on%n&
o"%l B oAo*-g%&$u''%n&"%l%*&+on23
,1al+da(os Gu% s%a una *%lda o un 'ango d% *%ldas
#f o"%l-g%&#(8l%(%n&a&+on=a(% B ""*$%ll?.)" ?' o"%l-g%&#(8l%(%n&a&+on=a(% B ""*$%llRang%?.)" Ih%n
,?.&%n%(os la %s&'u*&u'a 9al+da*+6n
o1al+da*+on B o"%l-g%&0'o8%'&@1alu%2"1al+da&+on"3
,Es&a.l%*%(os sus 8'o8+%dad%s
U+&h o1al+da*+on
,El &+8o d% 9al+da*+6n
-I@8% B *o(-sun-s&a'-sh%%&-1al+da&+onI@8%-UH?5E
,El o8%'ado' d% la 9al+da*+6n
-s%&?8%'a&o' 2 *o(-sun-s&a'-sh%%&-$ond+&+on?8%'a&o'-BEIUEE= 3
,Es&a.l%*%(os la 8'+(%' *ond+*+6n
-s%&Ko'(ula1 2 "1" 3
,Es&a.l%*%(os la s%gunda
-s%&Ko'(ula2 2 "12" 3
,Pu% +gno'% las *%ldas %n .lan*o
-#gno'%Blan]$%lls B I'u%
,Pu% (u%s&'% un (%nsa)% al s%l%**+ona' la *%lda
-"ho^#n8u&M%ssag% B I'u%
,El &+&ulo d%l (%nsa)%
-#n8u&I+&l% B "#n&'odu*% %l (%s d%l a\o"
,El (%nsa)%
-#n8u&M%ssag% B "$a8&u'a un n<(%'o %n&'% 1 @ 12"
,Pu% (u%s&'% un (%nsa)% s+ la *ond+*+6n no s% *u(8l%
-"ho^E''o'M%ssag% B I'u%
,El %s&+lo d%l (%nsa)% d% al%'&a
-E''o'!l%'&"&@l% B *o(-sun-s&a'-sh%%&-1al+da&+on!l%'&"&@l%-"I?0
Aprendiendo OOo .a$ic (15
,El &+&ulo d%l (%nsa)% d% %''o'
-E''o'I+&l% B "Aa&o %''on%o"
,El (%nsa)% d% %''o'
-E''o'M%ssag% B "El 9alo' +n&'odu*+do no %s un n<(%'o %n&'% 1 @ 12"
End U+&h
,R%+ns%'&a(os la 8'o8+%dad 8a'a Gu% su'&an %f%*&o los *a(.+os
o"%l-s%&0'o8%'&@1alu%2"1al+da&+on"7 o1al+da*+on3
End #f
End "u.
Ob$er&a como e$tamo$ obteniendo la e$tructura de &alidaci4n (getPropert,1alue)%
pa$;ndole como ar,umento% el nombre de la propiedad 6ue no$ intere$a' #a$ re$tante$
propiedade$ $on< el tipo (0,pe)% $e re1iere al tipo de &alidaci4n 6ue -aremo$ * e$ta condicionado
por la enumeraci4n com%sun%star%s(eet%1alidation0,pe% cu*o$ po$ible$ &alore$ $on'
com(sun(star(sheet(2alidation-ype 1alor 1alor en -nter!az
com'$un'$tar'$-eet'5alidationT*pe'ANO 0 +ual6uier &alor
com'$un'$tar'$-eet'5alidationT*pe'NdO#> 1 >ntero
com'$un'$tar'$-eet'5alidationT*pe'">+9MA# 2 "ecimal
com'$un'$tar'$-eet'5alidationT*pe'"AT> ( !ec-a
com'$un'$tar'$-eet'5alidationT*pe'T9M> E dora
com'$un'$tar'$-eet'5alidationT*pe'T>pTQ#>N 5 #on,itud de te:to
com'$un'$tar'$-eet'5alidationT*pe'#9ST ) #i$ta
com'$un'$tar'$-eet'5alidationT*pe'+USTOM 7 !ormula
"e$pu3$% e$tablecemo$ el operador (setOperator)% para e&aluar la condici4n% e$ta
propiedad puede tomar lo$ $i,uiente$ &alore$'
com(sun(star(sheet(ConditionOperator 1alor 1alor en -nter!az
com'$un'$tar'$-eet'+onditionOperator'NON> 0 Nin,una
com'$un'$tar'$-eet'+onditionOperator'>eUA# 1 9,ual
com'$un'$tar'$-eet'+onditionOperator'NOTQ>eUA# 2 "i$tinta de
com'$un'$tar'$-eet'+onditionOperator'@>AT>@ ( Ma*or 6ue
com'$un'$tar'$-eet'+onditionOperator'@>AT>@Q>eUA# E Ma*or o i,ual
com'$un'$tar'$-eet'+onditionOperator'#>SS 5 Menor 6ue
com'$un'$tar'$-eet'+onditionOperator'#>SSQ>eUA# ) Menor o i,ual
com'$un'$tar'$-eet'+onditionOperator'.>TN>>N 7 >ntre
com'$un'$tar'$-eet'+onditionOperator'NOTQ.>TN>>N F No entre
com'$un'$tar'$-eet'+onditionOperator'!O@MU#A G !ormula
"ependiendo de 6ue operador $eleccione$% puede 6ue nece$ite$ e$tablecer el primer
&alor de comparaci4n (set4ormula')% * tambi3n el $e,undo (set4ormula9)% com?nmente lo$
operadore$ LentreM (B&0C&&5)% * Lno entreM (5O0*B&0C&&5)% $on lo$ 6ue re6uieren lo$ do$
&alore$' Podemo$ determinar $i la &alidaci4n i,nora o no% la$ celda$ en blanco (-gnoreBlan=Cells)%
pero debe$ de $aber 6ue e$ta propiedad no determina el &alidar celda$ &ac=a o no% $i no 6ue
traba2a en con2unto la utilidad "etecti&e del men? derramienta$% para determinar $i una celda
(1) )'7 @an,o$ de dato$
&ac=a $e con$idera error o no' Podemo$ mo$trar un men$a2e (S(o<-nputMessage)% cuando el
u$uario $eleccione una celda% e$tablecer $u titulo (-nput0itle)% * el men$a2e 6ue &er;
(-nputMessage)% e$te te:to orienta al u$uario $obre lo$ &alore$ a introducir' >n ca$o de 6ue el &alor
capturado por el u$uario% no $ati$1a,a la$ condicione$ de la &alidaci4n% podemo$ mo$trar un
men$a2e de error (S(o<&rrorMessage)% de determinado e$tilo (&rrorAlertSt,le)% e$te e$tilo%
determinar; la acci4n a tomar con el &alor capturado% e$te e$tilo e$ta determinado por lo$
$i,uiente$ &alore$'
com(sun(star(sheet(2alidationAlert.tyle 1alor 1alor en -nter!az
com'$un'$tar'$-eet'5alidationAlertSt*le'STOP 0 Stop
com'$un'$tar'$-eet'5alidationAlertSt*le'NA@N9N 1 Ad&ertencia
com'$un'$tar'$-eet'5alidationAlertSt*le'9N!O 2 9n1ormaci4n
com'$un'$tar'$-eet'5alidationAlertSt*le'MA+@O ( Macro
Si e$tablece$ el &alor en L$topM (S0OP)% $e mo$trara al u$uario un men$a2e
(&rrorMessage) con un titulo (&rror0itle) para in1ormarle del error% al aceptar% la celda re,re$ar; al
&alor inmediato anterior% en lo$ ca$o$ de Lad&ertenciaM (CAR5-5) e Lin1ormaci4nM (-54O)% 6uedar;
a criterio del u$uario $i acepta o no el nue&o &alor aun * cuando no cumpla la condici4n * en el
ca$o de la opci4n LmacroM (MACRO)% puede$ e$co,er una macro a e2ecutar% para% por e2emplo%
mo$trar un men$a2e m;$ elaborado o reali/ar una operaci4n m;$ comple2a' Por ultimo% e$
importante% Lrein$ertarM (setPropert,1alue) la propiedad al ob2eto para 6ue lo$ cambio$ $urtan
e1ecto'
Para 6uitar una &alidaci4n% $olo e$tablece el tipo (0,pe) en cual6uier &alor (A5D) *
de$-abilita el men$a2e de entrada (S(o<-nputMessage)'
"u. 1al+da'Aa&os223
A+( oAo* !s ?.)%*&
A+( o"%l !s ?.)%*&
A+( o1al+da*+on !s ?.)%*&
oAo* B Ih+s$o(8on%n&
o"%l B oAo*-g%&$u''%n&"%l%*&+on23
,1al+da(os Gu% s%a una *%lda o un 'ango d% *%ldas
#f o"%l-g%&#(8l%(%n&a&+on=a(% B ""*$%ll?.)" ?' o"%l-g%&#(8l%(%n&a&+on=a(% B ""*$%llRang%?.)" Ih%n
,?.&%n%(os la %s&'u*&u'a 9al+da*+6n
o1al+da*+on B o"%l-g%&0'o8%'&@1alu%2"1al+da&+on"3
,El &+8o d% 9al+da*+6n
o1al+da*+on-I@8% B *o(-sun-s&a'-sh%%&-1al+da&+onI@8%-!=O
,Pu% (u%s&'% un (%nsa)% al s%l%**+ona' la *%lda
o1al+da*+on-"ho^#n8u&M%ssag% B Kals%
,R%+ns%'&a(os la 8'o8+%dad 8a'a Gu% su'&an %f%*&o los *a(.+os
o"%l-s%&0'o8%'&@1alu%2"1al+da&+on"7 o1al+da*+on3
End #f
End "u.
>l tipo decimal% te permite capturar n?mero$ con decimale$'
"u. 1al+da'Aa&os323
A+( oAo* !s ?.)%*&
A+( o"%l !s ?.)%*&
A+( o1al+da*+on !s ?.)%*&
oAo* B Ih+s$o(8on%n&
o"%l B oAo*-g%&$u''%n&"%l%*&+on23
Aprendiendo OOo .a$ic (17
#f o"%l-g%&#(8l%(%n&a&+on=a(% B ""*$%ll?.)" ?' o"%l-g%&#(8l%(%n&a&+on=a(% B ""*$%llRang%?.)" Ih%n
o1al+da*+on B o"%l-g%&0'o8%'&@1alu%2"1al+da&+on"3
U+&h o1al+da*+on
-I@8% B *o(-sun-s&a'-sh%%&-1al+da&+onI@8%-AE$#M!5
-s%&?8%'a&o' 2 *o(-sun-s&a'-sh%%&-$ond+&+on?8%'a&o'-BEIUEE= 3
-s%&Ko'(ula1 2 "0" 3
-s%&Ko'(ula2 2 "10" 3
-#gno'%Blan]$%lls B I'u%
-"ho^#n8u&M%ssag% B I'u%
-#n8u&I+&l% B "#n&'odu*% la *al+f+*a*+on"
-#n8u&M%ssag% B "0u%d%s usa' d%*+(al%s"
-"ho^E''o'M%ssag% B I'u%
-E''o'!l%'&"&@l% B *o(-sun-s&a'-sh%%&-1al+da&+on!l%'&"&@l%-#=K?
-E''o'I+&l% B "Aa&o %''on%o"
-E''o'M%ssag% B "El 9alo' +n&'odu*+do no %s 9>l+do"
End U+&h
,R%+ns%'&a(os la 8'o8+%dad 8a'a Gu% su'&an %f%*&o los *a(.+os
o"%l-s%&0'o8%'&@1alu%2"1al+da&+on"7 o1al+da*+on3
End #f
End "u.
>n el $i,uiente e2emplo &alidamo$ 6ue no $ea una 1ec-a 1utura% nota el u$o de la
1unci4n incorporada de +alc'
"u. 1al+da'Aa&os423
A+( oAo* !s ?.)%*&
A+( o"%l !s ?.)%*&
A+( o1al+da*+on !s ?.)%*&
oAo* B Ih+s$o(8on%n&
o"%l B oAo*-g%&$u''%n&"%l%*&+on23
#f o"%l-g%&#(8l%(%n&a&+on=a(% B ""*$%ll?.)" ?' o"%l-g%&#(8l%(%n&a&+on=a(% B ""*$%llRang%?.)" Ih%n
o1al+da*+on B o"%l-g%&0'o8%'&@1alu%2"1al+da&+on"3
U+&h o1al+da*+on
-I@8% B *o(-sun-s&a'-sh%%&-1al+da&+onI@8%-A!IE
-s%&?8%'a&o' 2 *o(-sun-s&a'-sh%%&-$ond+&+on?8%'a&o'-5E""/EPD!5 3
,Dsa(os una fo'(ula *o(o *ond+*+6n
-s%&Ko'(ula1 2 "I?A!O23" 3
-#gno'%Blan]$%lls B I'u%
-"ho^#n8u&M%ssag% B I'u%
-#n8u&I+&l% B "K%*ha d% =a*+(+%n&o"
-#n8u&M%ssag% B "5a f%*ha no 8u%d% s%' fu&u'a"
-"ho^E''o'M%ssag% B I'u%
-E''o'!l%'&"&@l% B *o(-sun-s&a'-sh%%&-1al+da&+on!l%'&"&@l%-U!R=#=E
-E''o'I+&l% B "Aa&o %''on%o"
-E''o'M%ssag% B "El 9alo' +n&'odu*+do no %s 9>l+do"
End U+&h
o"%l-s%&0'o8%'&@1alu%2"1al+da&+on"7 o1al+da*+on3
End #f
End "u.
A-ora% $olo puede capturar una -ora 6ue no $ea entre 1 p'm' ( p'm'
"u. 1al+da'Aa&os523
A+( oAo* !s ?.)%*&
A+( o"%l !s ?.)%*&
A+( o1al+da*+on !s ?.)%*&
oAo* B Ih+s$o(8on%n&
o"%l B oAo*-g%&$u''%n&"%l%*&+on23
#f o"%l-g%&#(8l%(%n&a&+on=a(% B ""*$%ll?.)" ?' o"%l-g%&#(8l%(%n&a&+on=a(% B ""*$%llRang%?.)" Ih%n
(1F )'7 @an,o$ de dato$
o1al+da*+on B o"%l-g%&0'o8%'&@1alu%2"1al+da&+on"3
U+&h o1al+da*+on
-I@8% B *o(-sun-s&a'-sh%%&-1al+da&+onI@8%-I#ME
-s%&?8%'a&o' 2 *o(-sun-s&a'-sh%%&-$ond+&+on?8%'a&o'-=?I/BEIUEE= 3
,#n&'odu*+' una ho'a Gu% no s%a %n&'% 1 @ 3 8-(-
-s%&Ko'(ula1 2 "I#ME213f0f0" 3
-s%&Ko'(ula2 2 "I#ME215f0f0" 3
-#gno'%Blan]$%lls B I'u%
-"ho^#n8u&M%ssag% B I'u%
-#n8u&I+&l% B "Ho'a d% sal+da"
-#n8u&M%ssag% B "5a ho'a d% sal+'"
-"ho^E''o'M%ssag% B I'u%
-E''o'!l%'&"&@l% B *o(-sun-s&a'-sh%%&-1al+da&+on!l%'&"&@l%-"I?0
-E''o'I+&l% B "Aa&o %''6n%o"
-E''o'M%ssag% B "El 9alo' +n&'odu*+do no %s 9>l+do"
End U+&h
o"%l-s%&0'o8%'&@1alu%2"1al+da&+on"7 o1al+da*+on3
End #f
End "u.
Ob$er&a 6ue e$tamo$ -aciendo u$o de la 1unci4n de +alc% T9>MPO (0-M&)% 6ue te
de&uel&e el n?mero de $erie de la -ora pa$ada% e$to e$ nece$ario para e$tablecer lo$ limite$
correctamente' >n el $i,uiente e2emplo% e$tablecemo$ 6ue lo$ &alore$ lo$ tome de$de un ran,o de
celda$% ob$er&a 6ue la$ re1erencia$ al ran,o $on ab$oluta$'
"u. 1al+da'Aa&os623
A+( oAo* !s ?.)%*&
A+( o"%l !s ?.)%*&
A+( o1al+da*+on !s ?.)%*&
oAo* B Ih+s$o(8on%n&
o"%l B oAo*-g%&$u''%n&"%l%*&+on23
#f o"%l-g%&#(8l%(%n&a&+on=a(% B ""*$%ll?.)" ?' o"%l-g%&#(8l%(%n&a&+on=a(% B ""*$%llRang%?.)" Ih%n
o1al+da*+on B o"%l-g%&0'o8%'&@1alu%2"1al+da&+on"3
U+&h o1al+da*+on
-I@8% B *o(-sun-s&a'-sh%%&-1al+da&+onI@8%-5#"I
,#n&'odu*+' 9alo'%s d%sd% un 'ango d% *%ldas
-s%&Ko'(ula1 2 "d#d24d#d8" 3
-"ho^E''o'M%ssag% B I'u%
-E''o'!l%'&"&@l% B *o(-sun-s&a'-sh%%&-1al+da&+on!l%'&"&@l%-"I?0
-E''o'I+&l% B "Aa&o %''6n%o"
-E''o'M%ssag% B "El 9alo' +n&'odu*+do no %s 9>l+do"
End U+&h
o"%l-s%&0'o8%'&@1alu%2"1al+da&+on"7 o1al+da*+on3
End #f
End "u.
Tambi3n podemo$ e$tablecer el ran,o de$de un ran,o de celda$ con nombre'
"u. 1al+da'Aa&os723
A+( oAo* !s ?.)%*&
A+( o"%l !s ?.)%*&
A+( o1al+da*+on !s ?.)%*&
oAo* B Ih+s$o(8on%n&
o"%l B oAo*-g%&$u''%n&"%l%*&+on23
#f o"%l-g%&#(8l%(%n&a&+on=a(% B ""*$%ll?.)" ?' o"%l-g%&#(8l%(%n&a&+on=a(% B ""*$%llRang%?.)" Ih%n
o1al+da*+on B o"%l-g%&0'o8%'&@1alu%2"1al+da&+on"3
U+&h o1al+da*+on
-I@8% B *o(-sun-s&a'-sh%%&-1al+da&+onI@8%-5#"I
Aprendiendo OOo .a$ic (1G
,#n&'odu*+' 9alo'%s d%sd% un 'ango d% *%ldas
-s%&Ko'(ula1 2 "9alo'%s" 3
-"ho^5+s& B 2
-"ho^E''o'M%ssag% B I'u%
-E''o'!l%'&"&@l% B *o(-sun-s&a'-sh%%&-1al+da&+on!l%'&"&@l%-"I?0
-E''o'I+&l% B "Aa&o %''6n%o"
-E''o'M%ssag% B "El 9alo' +n&'odu*+do no %s 9>l+do"
End U+&h
o"%l-s%&0'o8%'&@1alu%2"1al+da&+on"7 o1al+da*+on3
End #f
End "u.
@ecuerda 6ue lo$ ran,o$ con nombre lo$ e$tablecemo$% en la inter1a/ del u$uario%
de$de el cuadro de nombre$ de la barra de 1ormula$% o por c4di,o% como -emo$ aprendido en e$te
libro% aun6ue tambi3n puede$ u$ar un nombre de ;rea de dato$ de1inida en el men? /atos $
/e!inir%%%) de -ec-o% puede$ u$ar cual6uier te:to o 1ormula 6ue te de&uel&a un ran,o de celda$
&;lido% $i el ran,o de celda$ tiene m;$ de una columna% $olo $e u$ara la primer columna'
Ob$er&a 6ue -emo$ u$ado una nue&a propiedad (S(o<;ist)% cuando el tipo de la
&alidaci4n e$ta e$tablecida en Lli$taM (;-S0)% podemo$ determinar $i mo$tramo$ la 1lec-a de li$ta
de $elecci4n% el &alor 2 determina 6ue $e mue$tre con lo$ &alore$ ordenado$ de 1orma
a$cendente% el &alor 1 6ue $e mue$tre pero 6ue no ordene lo$ &alore$% 6ue lo$ mue$tre tal * como
e$t;n en el ori,en% * el &alor 0 6ue no $e mue$tre la li$ta de $elecci4n% al,o no mu* recomendable
cuando $e u$a una li$ta' >$to$ &alore$ corre$ponden a'
com%sun%star%s(eet%0able1alidation1isibilit, 1alor 1alor en -nter!az
com'$un'$tar'$-eet'Table5alidation5i$ibilit*'9N59S9.#> 0 No mo$trar li$ta
com'$un'$tar'$-eet'Table5alidation5i$ibilit*'UNSO@T>" 1 Mo$trar de$ordenada
com'$un'$tar'$-eet'Table5alidation5i$ibilit*'SO@T>"AS+>N"9N
2
Mo$trar ordenada
a$cendente
>n el $i,uiente e2emplo% e$tablecemo$ el ori,en de celda$ con 1ormula$ de +alc% e$ta
1ormula debe e$tar bien con$truida% $i no% no te dar; el ran,o correcto'
"u. 1al+da'Aa&os823
A+( oAo* !s ?.)%*&
A+( o"%l !s ?.)%*&
A+( o1al+da*+on !s ?.)%*&
oAo* B Ih+s$o(8on%n&
o"%l B oAo*-g%&$u''%n&"%l%*&+on23
#f o"%l-g%&#(8l%(%n&a&+on=a(% B ""*$%ll?.)" ?' o"%l-g%&#(8l%(%n&a&+on=a(% B ""*$%llRang%?.)" Ih%n
o1al+da*+on B o"%l-g%&0'o8%'&@1alu%2"1al+da&+on"3
U+&h o1al+da*+on
-I@8% B *o(-sun-s&a'-sh%%&-1al+da&+onI@8%-5#"I
,#n&'odu*+' 9alo'%s d%sd% un 'ango d% *%ldas
-s%&Ko'(ula1 2 "#=A#RE$I2!AARE""21f13:""4"":!AARE""210f133" 3
-"ho^5+s& B 2
-"ho^E''o'M%ssag% B I'u%
-E''o'!l%'&"&@l% B *o(-sun-s&a'-sh%%&-1al+da&+on!l%'&"&@l%-"I?0
-E''o'I+&l% B "Aa&o %''on%o"
-E''o'M%ssag% B "El 9alo' +n&'odu*+do no %s 9>l+do"
End U+&h
o"%l-s%&0'o8%'&@1alu%2"1al+da&+on"7 o1al+da*+on3
End #f
(20 )'7 @an,o$ de dato$
End "u.
@ecuerda 6ue la 1unci4n "9@>++9ON (A""@>SS)% no$ de&uel&e una re1erencia en
1orma de te:to% de acuerdo a lo$ par;metro$ pa$ado$% de$pu3$% la 1unci4n 9N"9@>+TO
(9N"9@>+T)% no$ de&uel&e% de una cadena de te:to 6ue ten,a un ran,o de celda &;lido% la
re1erencia a dic-a celda' +omo a la 1unci4n "9@>++9ON $e le pueda e$tablecer entre $u$
par;metro$ el nombre de una -o2a% te 6ueda de tarea modi1icar la macro anterior para 6ue el
ran,o de celda$ de la &alidaci4n% e$te en una -o2a di1erente' >l poder de -acerlo con 1uncione$ o
de$de c4di,o% e$ 6ue la li$ta de &alidaci4n la puede$ actuali/ar din;micamente% por e2emplo% una
li$ta de cliente$ 6ue &a creciendo con1irme &amo$ a,re,ando re,i$tro$ o cual6uier otro li$tado 6ue
&a*a creciendo en $entido &ertical'
Otra po$ibilidad% e$ introducir una li$ta 1i2a de &alore$% o $emi1i2a% pue$ de$de c4di,o
la podemo$ actuali/ar $iempre 6ue 6ueramo$% &eamo$ como'
"u. 1al+da'Aa&os923
A+( oAo* !s ?.)%*&
A+( o"%l !s ?.)%*&
A+( o1al+da*+on !s ?.)%*&
oAo* B Ih+s$o(8on%n&
o"%l B oAo*-g%&$u''%n&"%l%*&+on23
#f o"%l-g%&#(8l%(%n&a&+on=a(% B ""*$%ll?.)" ?' o"%l-g%&#(8l%(%n&a&+on=a(% B ""*$%llRang%?.)" Ih%n
o1al+da*+on B o"%l-g%&0'o8%'&@1alu%2"1al+da&+on"3
U+&h o1al+da*+on
-I@8% B *o(-sun-s&a'-sh%%&-1al+da&+onI@8%-5#"I
,#n&'odu*+' 9alo'%s f+)os
-s%&Ko'(ula1 2 "1!5?R1f1!5?R2f1!5?R3" 3
-"ho^5+s& B 2
-"ho^E''o'M%ssag% B I'u%
-E''o'!l%'&"&@l% B *o(-sun-s&a'-sh%%&-1al+da&+on!l%'&"&@l%-"I?0
-E''o'I+&l% B "Aa&o %''6n%o"
-E''o'M%ssag% B "El 9alo' +n&'odu*+do no %s 9>l+do"
End U+&h
o"%l-s%&0'o8%'&@1alu%2"1al+da&+on"7 o1al+da*+on3
End #f
End "u.
5e a la inter1a/ del u$uario * ob$er&a como LaparentementeM% $i a,re,o lo$ &alore$%
pero ob$er&a 6ue e$t;n en min?$cula$% cuando no$otro$ lo$ a,re,amo$ en ma*?$cula$% &eri1ica
de$de la inter1a/ de u$uario% de$de /atos $ 1alidez%%%% 6ue e$ta 1orma de introducir lo$ dato$ 1i2o$%
la detecta como $i 1uera un inter&alo de celda$% lo cual e$ incorrecto% para 6ue realmente la
detecte como una li$ta L1i2aM de &alore$% tiene$ 6ue pa$arle cada &alor como una cadena% como en
el $i,uiente e2emplo'
"u. 1al+da'Aa&os1023
A+( oAo* !s ?.)%*&
A+( o"%l !s ?.)%*&
A+( o1al+da*+on !s ?.)%*&
oAo* B Ih+s$o(8on%n&
o"%l B oAo*-g%&$u''%n&"%l%*&+on23
#f o"%l-g%&#(8l%(%n&a&+on=a(% B ""*$%ll?.)" ?' o"%l-g%&#(8l%(%n&a&+on=a(% B ""*$%llRang%?.)" Ih%n
o1al+da*+on B o"%l-g%&0'o8%'&@1alu%2"1al+da&+on"3
U+&h o1al+da*+on
-I@8% B *o(-sun-s&a'-sh%%&-1al+da&+onI@8%-5#"I
,#n&'odu*+' 9alo'%s f+)os
Aprendiendo OOo .a$ic (21
-s%&Ko'(ula1 2 """1!5?R1""":"f":"""1!5?R2""":"f":"""1!5?R3""" 3
-"ho^5+s& B 2
-"ho^E''o'M%ssag% B I'u%
-E''o'!l%'&"&@l% B *o(-sun-s&a'-sh%%&-1al+da&+on!l%'&"&@l%-"I?0
-E''o'I+&l% B "Aa&o %''on%o"
-E''o'M%ssag% B "El 9alo' +n&'odu*+do no %s 9>l+do"
End U+&h
o"%l-s%&0'o8%'&@1alu%2"1al+da&+on"7 o1al+da*+on3
End #f
End "u.
Pero &e 6ue cantidad de comilla$% I* $i $on muc-o$ &alore$J% podemo$ -acer una
1unci4n 6ue a,re,ue la$ comilla$ por no$otro$% como en el $i,uiente e2emplo'
"u. 1al+da'Aa&os11
A+( sI(8 !s "&'+ng
A+( (
A+( oAo* !s ?.)%*&
A+( o"%l !s ?.)%*&
A+( o1al+da*+on !s ?.)%*&
oAo* B Ih+s$o(8on%n&
o"%l B oAo*-g%&$u''%n&"%l%*&+on23
#f o"%l-g%&#(8l%(%n&a&+on=a(% B ""*$%ll?.)" ?' o"%l-g%&#(8l%(%n&a&+on=a(% B ""*$%llRang%?.)" Ih%n
o1al+da*+on B o"%l-g%&0'o8%'&@1alu%2"1al+da&+on"3
U+&h o1al+da*+on
,1alo'%s a ag'%ga'
( B !''a@2"Dno"7"Aos"7"I'%s"7"$ua&'o"7"$+n*o"3
,5os )un&a(os
sI(8 B [un&a'En5+s&a2(3
-I@8% B *o(-sun-s&a'-sh%%&-1al+da&+onI@8%-5#"I
-"ho^5+s& B 2
-s%&Ko'(ula12 sI(8 3
End U+&h
o"%l-s%&0'o8%'&@1alu%2"1al+da&+on"7 o1al+da*+on3
End #f
End "u.
,Io(a una (a&'+; @ l% ag'%ga *o(+llas a *ada %l%(%n&o
,A%9u%l9% una *ad%na *on los %l%(%n&os7 s%8a'ados 8o' "f"
Kun*&+on [un&a'En5+s&a2 B@1al ( 3 !s "&'+ng
A+( *o1 !s 5ong
Ko' *o1 B 5Bound2(3 Io DBound2(3
(2*o13 B """" : (2*o13 : """"
=%x&
[un&a'En5+s&a B [o+n2 (7 "f" 3
End Kun*&+on
A-ora $i% e$ un poco m;$ 1;cil a,re,ar &alore$ a una li$ta' >l $i,uiente e2emplo te
limita la entrada a una palabra de entre 5 * 10 letra$% no te acepta $olo n?mero$% $olo letra$ o
al1anum3rica$'
"u. 1al+da'Aa&os1223
A+( oAo* !s ?.)%*&
A+( o"%l !s ?.)%*&
A+( o1al+da*+on !s ?.)%*&
oAo* B Ih+s$o(8on%n&
(22 )'7 @an,o$ de dato$
o"%l B oAo*-g%&$u''%n&"%l%*&+on23
#f o"%l-g%&#(8l%(%n&a&+on=a(% B ""*$%ll?.)" ?' o"%l-g%&#(8l%(%n&a&+on=a(% B ""*$%llRang%?.)" Ih%n
o1al+da*+on B o"%l-g%&0'o8%'&@1alu%2"1al+da&+on"3
U+&h o1al+da*+on
-I@8% B *o(-sun-s&a'-sh%%&-1al+da&+onI@8%-IEFI/5E=
-s%&?8%'a&o' 2 *o(-sun-s&a'-sh%%&-$ond+&+on?8%'a&o'-BEIUEE= 3
-s%&Ko'(ula1 2 "5" 3
-s%&Ko'(ula2 2 "10" 3
-#gno'%Blan]$%lls B I'u%
-"ho^E''o'M%ssag% B I'u%
-E''o'!l%'&"&@l% B *o(-sun-s&a'-sh%%&-1al+da&+on!l%'&"&@l%-"I?0
-E''o'I+&l% B "5ong+&ud %''6n%a"
-E''o'M%ssag% B "5a 8ala.'a d%.% s%' d% %n&'% 5 @ 10 *a'a*&%'%s"
End U+&h
,R%+ns%'&a(os la 8'o8+%dad 8a'a Gu% su'&an %f%*&o los *a(.+os
o"%l-s%&0'o8%'&@1alu%2"1al+da&+on"7 o1al+da*+on3
End #f
End "u.
Tanto en la inter1a/ del u$uario * aun m;$ de$de c4di,o% la &alidaci4n de dato$ e$ un
tema central en la pro,ramaci4n% no lo tome$ como un tema menor% e$ pre1erible a,re,ar una$
cuanta$ l=nea$ m;$ de c4di,o a correr el rie$,o de 6ue un dato incon$i$tente no$ de&uel&a
in1ormaci4n incon$i$tente' Tiene$ in$truccione$ limitada$ pero $u1iciente$ para e&itarlo * tiene$
al,o ilimitado8 ima,inaci4n% inteli,encia% pero $obre todo% $entido com?n% e:plotalo$'

=.A.= (*rupando datos
+uando $e mane2a una ,ran cantidad de in1ormaci4n% encontrar una manera $imple *
r;pida de a,rupar dato$% puede $er la di1erencia entre e1iciencia e ine1iciencia% lo$ 1iltro$% el
ordenar * lo$ $ubtotale$% $on -erramienta$ 6ue pueden apo*arno$' +uando $implemente
nece$itemo$ a,rupar por un ran,o de columna$ o 1ila$ (6ue no e$ m;$ 6ue ocultarla$ * mo$trarla$
de acuerdo a nue$tra$ nece$idade$) podemo$ probar lo $i,uiente'
"u. !g'u8a'123
A+( oAo* !s ?.)%*&
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango !s =%^ *o(-sun-s&a'-&a.l%-$%llRang%!dd'%ss
oAo* B Ih+s$o(8on%n&
oHo)a!*&+9a B oAo*-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
,Es&a.l%*%(os las 8'o8+%dad%s d%l g'u8o
U+&h oRango
,5a ho)a dond% s% *'%a'>
-"h%%& B oHo)a!*&+9a-g%&Rang%!dd'%ss-"h%%&
,5a *olu(na d% +n+*+o
-"&a'&$olu(n B 0
,5a *olu(an d% f+n
-End$olu(n B 4
End U+&h
,$'%a(os %l g'u8o7 0 B 8o' *olu(nas
oHo)a!*&+9a-g'ou82 oRango7 0 3
End "u.
Aprendiendo OOo .a$ic (2(
#a macro anterior no$ a,rupar; la$ columna$ 1 a 5 en la inter1a/ del u$uario% e$ mu*
importante 6ue &alide/ 6ue la -o2a * el ran,o de columna$ e$tablecida$% e$t3n dentro de ran,o$
&;lido$% por e2emplo% 6ue el =ndice de -o2a e:i$ta% $i no% puede$ pro&ocar una ca=da de la
aplicaci4n% e$tamo$ &eri1icando el Ipor 6ueJ de e$to'
Ob$er&a como al a,rupar (group)% le pa$amo$ una e$tructura de direcci4n de un
ran,o (CellRangeAddress)% &i$ta muc-a$ &ece$ en e$te libro * como $e,undo ar,umento% $i
6ueremo$ 6ue $e a,rupe por columna$ (E) o por 1ila$ (')'
A-ora% a,rupamo$ la$ primera$ die/ 1ila$ de la -o2a acti&a'
"u. !g'u8a'223
A+( oAo* !s ?.)%*&
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango !s =%^ *o(-sun-s&a'-&a.l%-$%llRang%!dd'%ss
oAo* B Ih+s$o(8on%n&
oHo)a!*&+9a B oAo*-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
U+&h oRango
-"h%%& B oHo)a!*&+9a-g%&Rang%!dd'%ss-"h%%&
,!ho'a %s&a.l%*%(os %l 'ango d% f+las
-"&a'&Ro^ B 0
-EndRo^ B 9
End U+&h
,O ag'u8a(os7 1 B 8o' f+las
oHo)a!*&+9a-g'ou82 oRango7 1 3
End "u.
Por $upue$to puede$ e$tablecer con la mi$ma e$tructura% tanto la$ columna$ como
la$ 1ila$ como en el $i,uiente e2emplo'
"u. !g'u8a'323
A+( oAo* !s ?.)%*&
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango !s =%^ *o(-sun-s&a'-&a.l%-$%llRang%!dd'%ss
oAo* B Ih+s$o(8on%n&
oHo)a!*&+9a B oAo*-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
U+&h oRango
-"h%%& B oHo)a!*&+9a-g%&Rang%!dd'%ss-"h%%&
-"&a'&$olu(n B 9
-End$olu(n B 19
-"&a'&Ro^ B 9
-EndRo^ B 19
End U+&h
,!g'u8a(os 8o' *olu(nas 10 a la 20
oHo)a!*&+9a-g'ou82 oRango7 0 3
,!g'u8a(os 8o' f+las 10 a 20
oHo)a!*&+9a-g'ou82 oRango7 1 3
End "u.
"e$a,rupar (ungroup) e$ tri&ial% u$a lo$ mi$mo$ ar,umento$ 6ue para a,rupar'
"u. !g'u8a'423
(2E )'7 @an,o$ de dato$
A+( oAo* !s ?.)%*&
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango !s =%^ *o(-sun-s&a'-&a.l%-$%llRang%!dd'%ss
oAo* B Ih+s$o(8on%n&
oHo)a!*&+9a B oAo*-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
U+&h oRango
-"h%%& B oHo)a!*&+9a-g%&Rang%!dd'%ss-"h%%&
-"&a'&$olu(n B 0
-End$olu(n B 4
-"&a'&Ro^ B 0
-EndRo^ B 9
End U+&h
,A%ag'u8a(os f+las @ *olu(nas
oHo)a!*&+9a-ung'ou82 oRango7 0 3
oHo)a!*&+9a-ung'ou82 oRango7 1 3
End "u.
>l ran,o u$ado para de$a,rupar (ungroup)% no tiene 6ue coincidir e:actamente% en
tamaKo al ran,o ori,inal de a,rupamiento% e$ $u1iciente con 6ue e$te LdentroM del ran,o con 6ue
$e a,rup4% ante$ de comprobarlo% de$de la -o2a donde e$t3$ -aciendo e$ta$ prueba$% &e al men?
/atos $ Agrupar , &s.uema $ &liminar% lo 6ue borrara cual6uier ,rupo creado% de$pu3$% e2ecuta la
primer macro $i,uiente e inmediatamente de$pu3$% la $e,unda'
"u. !g'u8a'523
A+( oAo* !s ?.)%*&
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango !s =%^ *o(-sun-s&a'-&a.l%-$%llRang%!dd'%ss
oAo* B Ih+s$o(8on%n&
oHo)a!*&+9a B oAo*-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
U+&h oRango
-"h%%& B oHo)a!*&+9a-g%&Rang%!dd'%ss-"h%%&
-"&a'&$olu(n B 0
-End$olu(n B 9
-"&a'&Ro^ B 0
-EndRo^ B 19
End U+&h
,!g'u8a(os f+las 21T203 @ *olu(nas 21T103
oHo)a!*&+9a-g'ou82 oRango7 0 3
oHo)a!*&+9a-g'ou82 oRango7 1 3
End "u.
"u. !g'u8a'623
A+( oAo* !s ?.)%*&
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango !s =%^ *o(-sun-s&a'-&a.l%-$%llRang%!dd'%ss
oAo* B Ih+s$o(8on%n&
oHo)a!*&+9a B oAo*-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
U+&h oRango
-"h%%& B oHo)a!*&+9a-g%&Rang%!dd'%ss-"h%%&
,"olo +nd+*a(os la 8'+(%' *olu(na @ f+la
-"&a'&$olu(n B 0
-End$olu(n B 0
-"&a'&Ro^ B 0
Aprendiendo OOo .a$ic (25
-EndRo^ B 0
End U+&h
,A%sag'u8a(os f+las @ *olu(nas
oHo)a!*&+9a-ung'ou82 oRango7 0 3
oHo)a!*&+9a-ung'ou82 oRango7 1 3
End "u.
Ob$er&a como a,rupamo$ por un ran,o * de$a,rupamo$ por otro% donde $olo no$
tenemo$ 6ue a$e,urar 6ue% el ran,o a de$a,rupar% e$te LdentroM del ran,o a,rupado'
+uando elimina$ lo$ ,rupo$ de$de la inter1a/ del u$uario% $i el ,rupo e$ta contra=do%
la$ columna$ o 1ila$ oculta$% $e mo$trar;n inmediatamente% no $ucede lo mi$mo cuando lo -ace$
por c4di,o% &uel&e a reali/ar la prueba anterior% pero a$e,urate% de 6ue% ante$ de de$a,rupar%
contrae el ,rupo para ocultar $u contenido% a-ora $=% e2ecuta la macro para de$a,rupar% notara$
6ue el ran,o u$ado $e,uir; oculto% para e&itar e$to% ante$ de de$a,rupar% a$e,urate de mo$trar el
detalle del ran,o como en el $i,uiente e2emplo'
"u. !g'u8a'723
A+( oAo* !s ?.)%*&
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango !s =%^ *o(-sun-s&a'-&a.l%-$%llRang%!dd'%ss
oAo* B Ih+s$o(8on%n&
oHo)a!*&+9a B oAo*-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
U+&h oRango
-"h%%& B oHo)a!*&+9a-g%&Rang%!dd'%ss-"h%%&
,"olo +nd+*a(os la 8'+(%' *olu(na @ f+la
-"&a'&$olu(n B 0
-End$olu(n B 9
-"&a'&Ro^ B 0
-EndRo^ B 19
End U+&h
,Ex8and+(os %l g'u8o *on&%n+do %n %l 'ango
oHo)a!*&+9a-sho^A%&a+l2 oRango 3
,A%sag'u8a(os f+las @ *olu(nas
oHo)a!*&+9a-ung'ou82 oRango7 0 3
oHo)a!*&+9a-ung'ou82 oRango7 1 3
End "u.
>l e2emplo anterior 1uncionar;% $iempre * cuando% el ran,o a,rupado (group)%
corre$ponda Le:actamenteM con el ran,o mo$trado (s(o</etail) * con el ran,o de$a,rupado
(ungroup)% lo cual% en oca$ione$% podr=a no $er tan 1;cil de conocer' Si lo 6ue 6uiere$ e$ eliminar
cual6uier ,rupo e:i$tente en una -o2a% u$amo$'
"u. !g'u8a'823
A+( oAo* !s ?.)%*&
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango !s =%^ *o(-sun-s&a'-&a.l%-$%llRang%!dd'%ss
oAo* B Ih+s$o(8on%n&
oHo)a!*&+9a B oAo*-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
,El+(+na(os *ualGu+%' g'u8o d% la ho)a
oHo)a!*&+9a-*l%a'?u&l+n%23
(2) )'7 @an,o$ de dato$
End "u.
+on lo cual% e$ muc-o m;$ $encillo% eliminar cual6uier ,rupo * &ol&er a crear el
nece$ario' +uando a,re,a$ ,rupo$% dependiendo de $i e:i$ta o no pre&iamente uno en el ran,o
pa$ado% $uceder; cual6uiera de la$ $i,uiente$ accione$8 $i el ran,o *a contiene un ,rupo% $e
crear; un nue&o ni&el de a,rupamiento% puede$ crear -a$ta oc-o ni&ele$ de ello$% $i el ran,o no
contiene un ,rupo% e$te% $e a,re,ar; al mi$mo ni&el% &eamo$lo con e2emplo$% en el primero
comprobamo$ 6ue $e a,re,an lo$ ,rupo$ en ni&ele$'
"u. !g'u8a'923
A+( oAo* !s ?.)%*&
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango !s =%^ *o(-sun-s&a'-&a.l%-$%llRang%!dd'%ss
oAo* B Ih+s$o(8on%n&
oHo)a!*&+9a B oAo*-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
oHo)a!*&+9a-*l%a'?u&l+n%23
U+&h oRango
-"h%%& B oHo)a!*&+9a-g%&Rang%!dd'%ss-"h%%&
-"&a'&$olu(n B 0
-End$olu(n B 1
End U+&h
,!g'u8a(os las *olu(nas 1T2
oHo)a!*&+9a-g'ou82 oRango7 0 3
U+&h oRango
-"&a'&$olu(n B 0
-End$olu(n B 3
End U+&h
,!g'u8a(os las *olu(nas 1T4
oHo)a!*&+9a-g'ou82 oRango7 0 3
U+&h oRango
-"&a'&$olu(n B 0
-End$olu(n B 5
End U+&h
,!g'u8a(os las *olu(nas 1T6
oHo)a!*&+9a-g'ou82 oRango7 0 3
End "u.
A-ora &eamo$ como a,re,ar al mi$mo ni&el'
"u. !g'u8a'1023
A+( oAo* !s ?.)%*&
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango !s =%^ *o(-sun-s&a'-&a.l%-$%llRang%!dd'%ss
oAo* B Ih+s$o(8on%n&
oHo)a!*&+9a B oAo*-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
oHo)a!*&+9a-*l%a'?u&l+n%23
U+&h oRango
-"h%%& B oHo)a!*&+9a-g%&Rang%!dd'%ss-"h%%&
Aprendiendo OOo .a$ic (27
-"&a'&Ro^ B 0
-EndRo^ B 3
End U+&h
,!g'u8a(os la f+la 1 a 4
oHo)a!*&+9a-g'ou82 oRango7 1 3
U+&h oRango
-"&a'&Ro^ B 5
-EndRo^ B 8
End U+&h
,!g'u8a(os la f+la 4 a 7
oHo)a!*&+9a-g'ou82 oRango7 1 3
U+&h oRango
-"&a'&Ro^ B 10
-EndRo^ B 13
End U+&h
,!g'u8a(os la f+la 9 a 12
oHo)a!*&+9a-g'ou82 oRango7 1 3
End "u.
O lo comprobamo$<
Puede$ crear un ,rupo * ocultarlo inmediatamente% como en'
"u. !g'u8a'1123
A+( oAo* !s ?.)%*&
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango !s =%^ *o(-sun-s&a'-&a.l%-$%llRang%!dd'%ss
oAo* B Ih+s$o(8on%n&
oHo)a!*&+9a B oAo*-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
U+&h oRango
-"h%%& B oHo)a!*&+9a-g%&Rang%!dd'%ss-"h%%&
-"&a'&$olu(n B 0
-End$olu(n B 9
End U+&h
oHo)a!*&+9a-g'ou82 oRango7 0 3
,?*ul&a(os %l g'u8o *on&%n+do %n %l 'ango
oHo)a!*&+9a-h+d%A%&a+l2 oRango 3
End "u.
A di1erencia de mo$trar un ,rupo (s(o</etail)% cuando lo oculta$ ((ide/etail)% el
ran,o no nece$ariamente debe $er del mi$mo tamaKo% con 6ue apunte a cual6uier celda dentro
(2F )'7 @an,o$ de dato$
del ran,o a ocultar% 1uncionar;' Tambi3n tiene$ la po$ibilidad de mo$trar cual6uier ni&el de
a,rupamiento% lo$ dem;$ ni&ele$ -acia arriba% $i lo$ -a*% $e cerraran'
"u. !g'u8a'1223
A+( oAo* !s ?.)%*&
A+( oHo)a!*&+9a !s ?.)%*&
A+( oRango !s =%^ *o(-sun-s&a'-&a.l%-$%llRang%!dd'%ss
oAo* B Ih+s$o(8on%n&
oHo)a!*&+9a B oAo*-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
U+&h oRango
-"h%%& B oHo)a!*&+9a-g%&Rang%!dd'%ss-"h%%&
-"&a'&Ro^ B 0
-EndRo^ B 4
End U+&h
oHo)a!*&+9a-g'ou82 oRango7 1 3
U+&h oRango
-"&a'&Ro^ B 0
-EndRo^ B 9
End U+&h
oHo)a!*&+9a-g'ou82 oRango7 1 3
U+&h oRango
-"&a'&Ro^ B 0
-EndRo^ B 14
End U+&h
oHo)a!*&+9a-g'ou82 oRango7 1 3
U+&h oRango
-"&a'&Ro^ B 0
-EndRo^ B 19
End U+&h
oHo)a!*&+9a-g'ou82 oRango7 1 3
,Mos&'a(os %l n+9%l 2
oHo)a!*&+9a-sho^5%9%l2 27 1 3
End "u.
>l m3todo para mo$trar un ni&el e$peci1ico (s(o<;evel)% $olo u$a do$ par;metro$% el
ni&el a mo$trar como primero * como $e,undo par;metro% $i el ni&el a mo$trar e$ta en columna$
(E) o en 1ila$ (')' Para terminar e$te tema% &eamo$ un e2emplo practico ba$tante ?til% para 6ue &ea$
$u u$o% procura llamarla% teniendo el cur$or dentro de un ran,o de celda$ 6ue ten,a al meno$ do$
pantalla$ de dato$ en $entido &ertical% e$ decir% de 1ila$% $i tiene$ m;$ 1ila$% e$ muc-o me2or pue$
$e pa,inara m;$'
"u. !g'u8a'1323
A+( oAo* !s ?.)%*&
A+( oHo)a!*&+9a !s ?.)%*&
A+( o"%l !s ?.)%*&
A+( o$u'so' !s ?.)%*&
A+( +=u(K+l0ag !s #n&%g%'
A+( oRango !s =%^ *o(-sun-s&a'-&a.l%-$%llRang%!dd'%ss
A+( *o1 !s 5ong
oAo* B Ih+s$o(8on%n&
oHo)a!*&+9a B oAo*-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
o"%l B oAo*-g%&$u''%n&"%l%*&+on23
,?.l+ga(os a s%l%**+ona' solo una *%lda
#f o"%l-g%&#(8l%(%n&a&+on=a(% B ""*$%ll?.)" Ih%n
,$'%a(os un *u'so' a 8a'&+' d% la *%lda s%l%**+onada
o$u'so' B oHo)a!*&+9a-*'%a&%$u'so'B@Rang%2 o"%l 3
Aprendiendo OOo .a$ic (2G
,Ex8and+(os a la '%g+6n a*&ual
o$u'so'-*olla8s%Io$u''%n&R%g+on23
,?.&%n%(os %l n<(%'o d% f+las 9+s+.l%s 8o' 8>g+na
+=u(K+l0ag B oAo*-g%&$u''%n&$on&'oll%'-g%&1+s+.l%Rang%-EndRo^ T
oAo*-g%&$u''%n&$on&'oll%'-g%&1+s+.l%Rang%-"&a'&Ro^ T 1
,Es&a.l%*%(os %l 8'+(%' n+9%l d% ag'u8a(+%n&o %n %l &o&al d% f+las
U+&h oRango
-"h%%& B oHo)a!*&+9a-g%&Rang%!dd'%ss-"h%%&
-"&a'&Ro^ B 0
-EndRo^ B o$u'so'-g%&Rang%!dd'%ss-EndRo^
End U+&h
oHo)a!*&+9a-g'ou82 oRango7 1 3
,!g'%ga(os un s%gundo n+9%l d% ag'u8a(+%n&o7 8>g+na 8o' 8>g+na
Ko' *o1 B 0 Io o$u'so'-g%&Rang%!dd'%ss-EndRo^ "&%8 +=u(K+l0ag
oRango-"&a'&Ro^ B *o1 C 1
oRango-EndRo^ B *o1 C +=u(K+l0ag T 1
oHo)a!*&+9a-g'ou82 oRango7 1 3
=%x&
,0a'a %l ul&+(o 'ango s+ no %s %xa*&o
#f *o1 Y o$u'so'-g%&Rang%!dd'%ss-EndRo^ Ih%n
oRango-"&a'&Ro^ B *o1 T +=u(K+l0ag C 1
oRango-EndRo^ B o$u'so'-g%&Rang%!dd'%ss-EndRo^
oHo)a!*&+9a-g'ou82 oRango7 1 3
End #f
oHo)a!*&+9a-"ho^5%9%l2 17 1 3
Els%
MsgBox ""%l%**+ona solo una *%lda"
End #f
End "u.
O mira 6ue bien 6ueda'
+laro 6ue el ;rea no e$ta limitada a 6ue ten,a dato$% puede$ e$tablecer tu$ criterio$
pero $obre todo tu$ nece$idade$ particulare$ para a,rupar'
((0 )'F .a$e$ de dato$
=.B &ases de datos
#a manipulaci4n * admini$traci4n de dato$% e$ una de la$ nece$idade$ m;$
recurrente$ en u$uario$ de -o2a de c;lculo% e$to no e$ ,ratuito% pue$ la$ -erramienta$ pre$ente$
en ella$% 1acilitan enormemente e$ta tarea' Para el me2or apro&ec-amiento de e$te capitulo% $er=a
de$eable 6ue conociera$ lo$ $i,uiente$ concepto$< ba$e de dato$% tabla% campo% re,i$tro% con$ulta%
Se#% cla&e primaria% =ndice% relacione$ e inte,ridad re1erencial' "ada la amplia documentaci4n
e:i$tente en ca$tellano de e$to$ tema$% no duplicaremo$ e$1uer/o$ * te 6ueda de tarea in&e$ti,ar
un poco acerca de ello $i no lo$ domina$'
Tambi3n% e$ indi$pen$able 6ue la$ ba$e$ de dato$ 6ue u$emo$% al meno$ en e$te
capitulo% e$t3n re,i$trada$ en OOo% para re,i$trar una ba$e de dato$% $e,uimo$ lo$ $i,uiente$
pa$o$% &e al men? #erramientas $ Opciones%%%% $elecciona la rama OpenO11ice'or, .a$e * de$pu3$
la $ubrama .a$e$ de dato$% donde tiene$ 6ue &er la$ $i,uiente$ opcione$'
"a clic en el bot4n de comando 5uevo'''% para &e el $i,uiente cuadro de dialo,o'
>n el cual% le dar;$ clic al bot4n de comando &+aminar'''% 6ue te mo$trar; el
conocido cuadro de dialo,o para $eleccionar arc-i&o$% na&e,a -a$ta la ruta donde -a*a$
,uardado la ba$e de dato$ o e$te locali/ada la ba$e de dato$ 6ue 6uiera$ re,i$trar * $elecci4nala%
por ultimo da un clic en el bot4n de comando Abrir'
Aprendiendo OOo .a$ic ((1
Al dar clic en el bot4n de comando Abrir% tiene$ 6ue re,re$ar al cuadro de dialo,o
anterior% pero% a-ora% tiene$ 6ue &er la ruta completa del arc-i&o 6ue acaba$ de $eleccionar% a$=
como el nombre propue$to con el 6ue $e re,i$trar; la ba$e de dato$% e$te nombre puede$
per$onali/arlo a tu ,u$to pue$ acepta e$pacio$ inclu$o% pero mi recomendaci4n e$ 6ue no u$e$ ni
e$pacio$ ni caractere$ Le:traKo$M% para nue$tro e2emplo% de2aremo$ el propue$to'
"a un clic en el bot4n de comando Aceptar para re,re$ar al primero cuadro de
dialo,o% donde% a-ora% tendr;$ 6ue &er la nue&a ba$e de dato$ re,i$trada'
((2 )'F .a$e$ de dato$
A,re,a de una &e/ la otra ba$e de dato$ 6ue acompaKa a e$to$ apunte$% $e llama
L5ideotecaM * tambi3n la u$aremo$ para nue$tro$ e2emplo$' Solo te re$ta cerrar e$te cuadro de
dialo,o con el bot4n de comando Aceptar'
=.B.1 Importando datos
9mporta dato$ de$de ba$e$ de dato$ re,i$trada$ en OpenO11ice'or,% e$ tri&ial% $olo
tiene$ 6ue pre$ionar la tecla !E% 6ue te mo$trar; e$ta$ ba$e$ en la &entana L4uente de datosM%
2unto con todo$ $u$ ob2eto$8 tabla$ * con$ulta$% $eleccionar la ba$e de dato$ de nue$tro inter3$%
e:pandir para mo$trar $u contenido% $eleccionar la tabla o con$ulta 6ue 6uiera$% el contenido de
dic-o ob2eto% te lo mo$trar; en el panel derec-o del e:aminador de 1uente$ de dato$% $olo te re$ta
$eleccionar todo con el bot4n de $eleccionar todo% arra$trar a tu documento * li$to% tiene$ 6ue
tener lo$ dato$ $eleccionado$% como en la $i,uiente ima,en'
Aprendiendo OOo .a$ic (((
>n e$te capitulo% aprenderemo$ a -acer e$to mi$mo% pero claro% por c4di,o% con el
cual% podr;$ comprobarlo m;$ adelante% tenemo$ po$ibilidade$ Lca$iM ilimitada$ para importar
nue$tro$ dato$'
Para importar dato$% de ba$e$ de dato$ pre&iamente re,i$trada$ en OpenO11ice'or,%
u$amo$ el m3todo do-mport% pre$ente en ran,o$ de dato$% a e$te m3todo% $e le pa$a una matri/
de propiedade$ con la$ indicacione$ de 6ue * como 6ueremo$ importar% por e2emplo'
"u. Bas%sA%Aa&os123
A+( oHo)a!*&+9a !s ?.)%*&
A+( sBas%Aa&os !s "&'+ng
A+( sIa.la !s "&'+ng
A+( (?8*BA223 !s =%^ "*o(-sun-s&a'-.%ans-0'o8%'&@1alu%"
,El no(.'% d% nu%s&'a .as% d% da&os
sBas%Aa&os B "A+'%*&o'+o"
,5a &a.la Gu% nos +n&%'%sa &'a%'
sIa.la B "&.l$on&a*&os"
,5a ho)a a*&+9a
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
,5as 8'o8+%dad%s d% la +(8o'&a*+6n7 8'+(%'o %l no(.'% d% la .as% d% da&os
(?8*BA203-=a(% B "Aa&a.as%=a(%"
(?8*BA203-1alu% B sBas%Aa&os
,El &+8o d% o.)%&o fu%n&%
(?8*BA213-=a(% B ""ou'*%I@8%"
(?8*BA213-1alu% B *o(-sun-s&a'-sh%%&-Aa&a#(8o'&Mod%-I!B5E
,El no(.'% d%l o.)%&o fu%n&%
(?8*BA223-=a(% B ""ou'*%?.)%*&"
(?8*BA223-1alu% B sIa.la
,#(8o'&a(os la &a.la7 a 8a'&+' d% la *%lda !1
oHo)a!*&+9a-g%&$%llRang%B@=a(%2"!1"3-do#(8o'&2 (?8*BA23 3
End "u.
Nota como e$tamo$ u$ando el nombre con 6ue re,i$tramo$ la ba$e de dato$
(/atabase5ame)% de$pu3$% le e$tamo$ indicando el tipo de ob2eto (Source0,pe) 6ue 6ueremo$
importar% lue,o% el nombre del ob2eto (SourceObject) 6ue 6ueremo$ importar% por ultimo aplicamo$
la importaci4n (do-mport)' >l tipo de ob2eto e$ta determinado por la enumeraci4n'
com%sun%star%s(eet%/ata-mportMode 1alor 1alor en -nter!az
com'$un'$tar'$-eet'"ata9mportMode'NON> 0 Nin,uno
com'$un'$tar'$-eet'"ata9mportMode'Se# 1 9n$trucci4n Se#
com'$un'$tar'$-eet'"ata9mportMode'TA.#> 2 Tabla
com'$un'$tar'$-eet'"ata9mportMode'eU>@O ( +on$ulta
Si e$tablece$ el tipo de ob2eto 1uente en 0 (5O5&)% entonce$ tiene$ 6ue pa$arle una
in$trucci4n Se#% de lo contrario te dar; error al importar' Todo$ lo$ nombre$ de ob2eto$ (ba$e$ de
dato$% tabla$% con$ulta$% campo$) di$tin,ue ma*?$cula$ de min?$cula$% por lo 6ue tiene$ 6ue $er
mu* cuidado$o de como nombrarlo$ * u$ar e:actamente e$te nombre al importar% de lo contrario
te puede al,uno de lo$ $i,uiente$ errore$<
+uando el nombre de la ba$e de dato$ no corre$ponde'
((E )'F .a$e$ de dato$
+uando la tabla e$te incorrecta'
>n el $i,uiente e2emplo% importamo$ una tabla di1erente en una celda di1erente'
"u. Bas%sA%Aa&os223
A+( oHo)a!*&+9a !s ?.)%*&
A+( sBas%Aa&os !s "&'+ng
A+( sIa.la !s "&'+ng
A+( (?8*BA223 !s =%^ "*o(-sun-s&a'-.%ans-0'o8%'&@1alu%"
,El no(.'% d% nu%s&'a .as% d% da&os
sBas%Aa&os B "A+'%*&o'+o"
,5a &a.la Gu% nos +n&%'%sa &'a%'
sIa.la B "&.l0a+s%s"
,5a ho)a a*&+9a
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
,5as 8'o8+%dad%s d% la +(8o'&a*+6n7 8'+(%'o %l no(.'% d% la .as% d% da&os
(?8*BA203-=a(% B "Aa&a.as%=a(%"
(?8*BA203-1alu% B sBas%Aa&os
,El &+8o d% o.)%&o fu%n&%
(?8*BA213-=a(% B ""ou'*%I@8%"
(?8*BA213-1alu% B *o(-sun-s&a'-sh%%&-Aa&a#(8o'&Mod%-I!B5E
,El no(.'% d%l o.)%&o fu%n&%
(?8*BA223-=a(% B ""ou'*%?.)%*&"
(?8*BA223-1alu% B sIa.la
,#(8o'&a(os la &a.la7 a 8a'&+' d% la *%lda !10
oHo)a!*&+9a-g%&$%llRang%B@=a(%2"!10"3-do#(8o'&2 (?8*BA23 3
End "u.
A-ora% importamo$ una con$ulta (F7&RD) en &e/ de una tabla (0AB;&)'
"u. Bas%sA%Aa&os323
A+( oHo)a!*&+9a !s ?.)%*&
A+( sBas%Aa&os !s "&'+ng
A+( s$onsul&a !s "&'+ng
A+( (?8*BA223 !s =%^ "*o(-sun-s&a'-.%ans-0'o8%'&@1alu%"
sBas%Aa&os B "A+'%*&o'+o"
,!ho'a una *onsul&a
s$onsul&a B "G'@$+udad%s"
,5a ho)a a*&+9a
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
(?8*BA203-=a(% B "Aa&a.as%=a(%"
(?8*BA203-1alu% B sBas%Aa&os
,El &+8o d% o.)%&o fu%n&%7 una *onsul&a
(?8*BA213-=a(% B ""ou'*%I@8%"
(?8*BA213-1alu% B *o(-sun-s&a'-sh%%&-Aa&a#(8o'&Mod%-PDERO
Aprendiendo OOo .a$ic ((5
,El no(.'% d%l o.)%&o fu%n&%
(?8*BA223-=a(% B ""ou'*%?.)%*&"
(?8*BA223-1alu% B s$onsul&a
,#(8o'&a(os la &a.la7 a 8a'&+' d% la *%lda !1
oHo)a!*&+9a-g%&$%llRang%B@=a(%2"!1"3-do#(8o'&2 (?8*BA23 3
End "u.
Tiene$ 6ue tener la precauci4n de 6ue el nombre del ob2eto corre$ponda a $u tipo% $i
no% el m3todo te de&ol&er; un error<
9mportamo$ una con$ulta di1erente<
"u. Bas%sA%Aa&os423
A+( oHo)a!*&+9a !s ?.)%*&
A+( sBas%Aa&os !s "&'+ng
A+( s$onsul&a !s "&'+ng
A+( (?8*BA223 !s =%^ "*o(-sun-s&a'-.%ans-0'o8%'&@1alu%"
sBas%Aa&os B "A+'%*&o'+o"
,Dna *onsul&a
s$onsul&a B "G'@$on&a*&os"
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
(?8*BA203-=a(% B "Aa&a.as%=a(%"
(?8*BA203-1alu% B sBas%Aa&os
(?8*BA213-=a(% B ""ou'*%I@8%"
(?8*BA213-1alu% B *o(-sun-s&a'-sh%%&-Aa&a#(8o'&Mod%-PDERO
(?8*BA223-=a(% B ""ou'*%?.)%*&"
(?8*BA223-1alu% B s$onsul&a
oHo)a!*&+9a-g%&$%llRang%B@=a(%2"!1"3-do#(8o'&2 (?8*BA23 3
End "u.
+ambiemo$ de tipo de ob2eto 1uente% el $i,uiente e2emplo% -ace e:actamente lo
mi$mo 6ue el primer e2emplo% e$ decir% no$ importa la tabla Ltbl+ontacto$M'
"u. Bas%sA%Aa&os523
A+( oHo)a!*&+9a !s ?.)%*&
A+( sBas%Aa&os !s "&'+ng
A+( s"P5 !s "&'+ng
A+( (?8*BA223 !s =%^ "*o(-sun-s&a'-.%ans-0'o8%'&@1alu%"
sBas%Aa&os B "A+'%*&o'+o"
,Es&a.l%*%(os la *onsul&a "P5
s"P5 B ""E5E$I KR?M &.l$on&a*&os"
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
(?8*BA203-=a(% B "Aa&a.as%=a(%"
(?8*BA203-1alu% B sBas%Aa&os
(?8*BA213-=a(% B ""ou'*%I@8%"
,?.s%'9a *o(o h%(os *a(.+ado %l &+8o d% fu%n&% a "P5
(?8*BA213-1alu% B *o(-sun-s&a'-sh%%&-Aa&a#(8o'&Mod%-"P5
(?8*BA223-=a(% B ""ou'*%?.)%*&"
(?8*BA223-1alu% B s"P5
(() )'F .a$e$ de dato$
oHo)a!*&+9a-g%&$%llRang%B@=a(%2"!1"3-do#(8o'&2 (?8*BA23 3
End "u.
>ntonce$% Icual e$ la di1erenciaJ% la primera% e$ ob&io% e$ 6ue e$tamo$ u$ando una
in$trucci4n Se# para importar lo$ dato$% pero''' I6ue e$ Se#J% la re$pue$ta $encilla8 Se# e$ un
len,ua2e e$tructurado de con$ulta$% no$ permite recuperar Lca$iM cual6uier dato de cual6uier ba$e
de dato$ con $oporte para Se#% la re$pue$ta comple2a no$ podr=a lle&ar una libro completo' >n lo$
$i,uiente e2emplo$% me limitar3 a darte mue$tra$ de in$truccione$ Se# 6ue $ean lo
$u1icientemente ilu$trati&a$ del poder * &er$atilidad de e$te len,ua2e' Se# e$ un e$t;ndar% a$= 6ue%
en Lteor=aM% cual6uier documentaci4n de el Ldeber=aM $er&irte' +uando importamo$ tabla$ o
con$ulta$% e$ta$% $e importan con todo $u contenido% con Se#% podemo$ limitarno$ e:clu$i&amente
a lo$ dato$ 6ue nece$itamo$% en el $i,uiente e2emplo% $olo importamo$ tre$ (5ombre) Paterno ,
Materno) campo$ de la tabla (tblContactos)'
"u. Bas%sA%Aa&os623
A+( oHo)a!*&+9a !s ?.)%*&
A+( sBas%Aa&os !s "&'+ng
A+( s"P5 !s "&'+ng
A+( (?8*BA223 !s =%^ "*o(-sun-s&a'-.%ans-0'o8%'&@1alu%"
sBas%Aa&os B "A+'%*&o'+o"
,Es&a.l%*%(os la *onsul&a "P5
s"P5 B ""E5E$I =o(.'%7 0a&%'no7 Ma&%'no KR?M &.l$on&a*&os"
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
(?8*BA203-=a(% B "Aa&a.as%=a(%"
(?8*BA203-1alu% B sBas%Aa&os
(?8*BA213-=a(% B ""ou'*%I@8%"
(?8*BA213-1alu% B *o(-sun-s&a'-sh%%&-Aa&a#(8o'&Mod%-"P5
(?8*BA223-=a(% B ""ou'*%?.)%*&"
(?8*BA223-1alu% B s"P5
oHo)a!*&+9a-g%&$%llRang%B@=a(%2"!1"3-do#(8o'&2 (?8*BA23 3
End "u.
Ob$er&a como en el primer e2emplo de in$trucci4n Se#% le indicamo$ 6ue 6ueremo$
todo (o) con el a$teri$co% en e$te $e,undo e2emplo% le indicamo$ e:pl=citamente 6ue campo$
6ueremo$ importar% de nue&o% ten muc-o cuidado con lo$ nombre$ de tu$ campo$% $i el campo no
e:i$te% el m3todo te de&ol&er; un error'
Nota como claramente no$ e$ta diciendo 6ue el campo no e:i$te% recuerda 6ue en
lo$ nombre$ $e di$tin,ue entre ma*?$cula$ * min?$cula$'
#a$ in$truccione$ Se#% tiene uno$ modi1icadore$ 6ue $e llaman Lclau$ula$M% e$ta$ no
permiten complementar% limitar% 1iltrar * ordenar entre otra$ accione$ a lo$ dato$ importado$' >n el
$i,uiente e2emplo% ordenamo$ (OR/&R BD) lo$ dato$ importado$'
"u. Bas%sA%Aa&os723
Aprendiendo OOo .a$ic ((7
A+( oHo)a!*&+9a !s ?.)%*&
A+( sBas%Aa&os !s "&'+ng
A+( s"P5 !s "&'+ng
A+( (?8*BA223 !s =%^ "*o(-sun-s&a'-.%ans-0'o8%'&@1alu%"
sBas%Aa&os B "A+'%*&o'+o"
,Es&a.l%*%(os la *onsul&a "P5
s"P5 B ""E5E$I =o(.'%7 0a&%'no7 Ma&%'no KR?M &.l$on&a*&os ?RAER BO 0a&%'no"
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
(?8*BA203-=a(% B "Aa&a.as%=a(%"
(?8*BA203-1alu% B sBas%Aa&os
(?8*BA213-=a(% B ""ou'*%I@8%"
(?8*BA213-1alu% B *o(-sun-s&a'-sh%%&-Aa&a#(8o'&Mod%-"P5
(?8*BA223-=a(% B ""ou'*%?.)%*&"
(?8*BA223-1alu% B s"P5
oHo)a!*&+9a-g%&$%llRang%B@=a(%2"!1"3-do#(8o'&2 (?8*BA23 3
End "u.
>l nombre de lo$ campo$% ca$i $iempre $e e$tablece de 1orma 6ue $ea 1;cil de
recordar * de manipular por el pro,ramador% pero muc-a$ &ece$ e$te nombre no le dice muc-o al
u$uario% para e$to$ ca$o$% tenemo$ una clau$ula para cambiar el nombre ori,inal del campo% por
uno de m;$ 1;cil lectura para el u$uario% &eamo$ como'
"u. Bas%sA%Aa&os823
A+( oHo)a!*&+9a !s ?.)%*&
A+( sBas%Aa&os !s "&'+ng
A+( s"P5 !s "&'+ng
A+( (?8*BA223 !s =%^ "*o(-sun-s&a'-.%ans-0'o8%'&@1alu%"
sBas%Aa&os B "A+'%*&o'+o"
,Es&a.l%*%(os la *onsul&a "P5
s"P5 B ""E5E$I =o(.'%7 0a&%'no !s ""!8%ll+do 0a&%'no""7 Ma&%'no !s ""!8%ll+do Ma&%'no""7 $u(8l% !s
$u(8l%a\os KR?M &.l$on&a*&os ?RAER BO 0a&%'no"
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
(?8*BA203-=a(% B "Aa&a.as%=a(%"
(?8*BA203-1alu% B sBas%Aa&os
(?8*BA213-=a(% B ""ou'*%I@8%"
(?8*BA213-1alu% B *o(-sun-s&a'-sh%%&-Aa&a#(8o'&Mod%-"P5
(?8*BA223-=a(% B ""ou'*%?.)%*&"
(?8*BA223-1alu% B s"P5
oHo)a!*&+9a-g%&$%llRang%B@=a(%2"!1"3-do#(8o'&2 (?8*BA23 3
End "u.
Nota el u$o de la$ doble$ comilla$% e$to e$ indi$pen$able cuando el nombre u$ado
(AS) conten,a e$pacio$ como en nue$tro e2emplo% * e$ta$% deben $er e:actamente la$ nece$aria$%
ni una m;$ ni una meno$% ten cuidado con $u u$o' Si re&i$a$ la e$tructura de la tabla
LtblContactosM notara$ 6ue el campo LCumpleM e$ de tipo 1ec-a (/ate)% para -acer con$ulta$ $obre
campo$ de 1ec-a$% tiene$ 6ue u$ar una $inta:i$ mu* $in,ular% por e2emplo% para con$ultar una
1ec-a e$peci1ica% u$amo$'
s"P5 B ""E5E$I KR?M &.l$on&a*&os UHERE $u(8l%Bh A ,1974T01T15, g"
Ob$er&a como todo el criterio de la 1ec-a &a encerrado entre lla&e$% nota el u$o de la
letra " (de "ate) * la$ comilla$ en la 1ec-a% adem;$% el orden tiene 6ue $er preci$amente a$= aKo-
me$-d=a% $i e$tablece$ correctamente e$te criterio% no tendr;$ problema$ con el mane2o de 1ec-a$'
((F )'F .a$e$ de dato$
+ambiemo$ de ba$e de dato$% en el $i,uiente e2emplo% u$amo$ la ba$e de dato$
L5ideotecaM% * mo$tramo$ como podemo$ ordenar de 1orma a$cendente (ASC) por un campo * de
1orma de$cendente (/&SC) por otro'
"u. Bas%sA%Aa&os923
A+( oHo)a!*&+9a !s ?.)%*&
A+( sBas%Aa&os !s "&'+ng
A+( s"P5 !s "&'+ng
A+( (?8*BA223 !s =%^ "*o(-sun-s&a'-.%ans-0'o8%'&@1alu%"
sBas%Aa&os B "1+d%o&%*a"
,Es&a.l%*%(os la *onsul&a "P5
s"P5 B ""E5E$I KR?M &.l1+d%o ?RAER BO E%n%'o !"$7 A+'%*&o' AE"$"
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
(?8*BA203-=a(% B "Aa&a.as%=a(%"
(?8*BA203-1alu% B sBas%Aa&os
(?8*BA213-=a(% B ""ou'*%I@8%"
(?8*BA213-1alu% B *o(-sun-s&a'-sh%%&-Aa&a#(8o'&Mod%-"P5
(?8*BA223-=a(% B ""ou'*%?.)%*&"
(?8*BA223-1alu% B s"P5
oHo)a!*&+9a-g%&$%llRang%B@=a(%2"!1"3-do#(8o'&2 (?8*BA23 3
End "u.
+omo en lo$ e2emplo$ $i,uiente$ $olo cambia la in$trucci4n Se#% $olo te mo$trar3
e$ta% mientra$ no $e indi6ue lo contrario% $e,uiremo$ u$ando la ba$e de dato$ L5ideotecaM'
>n el $i,uiente e2emplo% 1iltramo$ lo$ dato$ importado$ por el campo Pais'
s"P5 B ""E5E$I KR?M &.l1+d%o UHERE 0a+sB,MSx+*o,"
Siempre 6ue 6uiera$ e$tablecer un criterio de 1iltrado u$a Nd>@> en donde
e$tablece$ el CAMPOGCR-0&R-O de$eado * nota tambi3n% como -acemo$ u$o de comilla$
$imple$ para el par;metro del criterio% e$to% e$ importante'
#a $i,uiente in$trucci4n% no$ importa todo$ lo$ t=tulo$ 6ue comiencen por la letra L5M%
ob$er&a el u$o de una nue&a clau$ula ;-H& $in $i,no i,ual * con el $=mbolo de porcenta2e de$pu3$
de la letra de$eada $in ol&idar el u$o de la$ comilla$ $imple$'
s"P5 B ""E5E$I KR?M &.l1+d%o UHERE I+&ulo 5#JE ,1e,"
A-ora% importamo$ toda$ la$ pel=cula$ 6ue Lconten,anM la palabra Lanillo$M'
s"P5 B ""E5E$I KR?M &.l1+d%o UHERE I+&ulo 5#JE ,ean+llose,"
+on la $i,uiente in$trucci4n% importamo$ toda$ la$ pel=cula$ 6ue duren entre )0 * G0
minuto$ ordenado$ por duraci4n% tenemo$ una nue&a clau$ula para importar dato$ entre do$
&alore$ (B&0C&&5) 2unto con el operador L*M (A5/)'
s"P5 B ""E5E$I KR?M &.l1+d%o UHERE Au'a*+on BEIUEE= 60 !=A 90 ?RAER BO Au'a*+on"
Aprendiendo OOo .a$ic ((G
A-ora% importamo$ la$ pel=cula$ 6ue $ean de cual6uiera (OR) de lo$ $i,uiente$ aKo$8
1G7E o 1GF) o 2000% ob$er&a 6ue &ol&emo$ a -ace u$o de la 1orma CAMPOGCR-0&R-O%
s"P5 B ""E5E$I KR?M &.l1+d%o UHERE !\oB1974 ?R !\oB1986 ?R !\oB2000"
Nue$tro $i,uiente e2emplo% -ace e:actamente lo mi$mo 6ue el anterior% $olo 6ue
a-ora -acemo$ u$o de la clau$ula -5 para e$tablecer lo$ aKo$ de$eado$'
s"P5 B ""E5E$I KR?M &.l1+d%o UHERE !\o #=2197471986720003"
>l $i,uiente e2emplo e$ mu* intere$ante% no$ permite obtener un li$tado con re,i$tro$
?nico$ (/-S0-5C0)% lo 6ue no$ da la po$ibilidad de importar% por e2emplo% todo$ lo$ directore$ 6ue
tenemo$ en nue$tra &ideoteca% adem;$% e$ una buena alternati&a para encontrar campo$ mal
capturado$% por e2emplo% $i al,?n campo tiene un $olo e$pacio de m;$% con e$ta clau$ula te dar;$
cuenta cuale$ de ello$ pueden tener e$te ca$o% *a 6ue lo$ con$iderar; como do$ re,i$tro$
di1erente$'
s"P5 B ""E5E$I A#"I#=$I A+'%*&o' KR?M &.l1+d%o"
>l len,ua2e Se#% tambi3n no$ permite -acer al,una$ operacione$ $obre lo$ campo$%
por e2emplo% en &e/ de re,re$ar lo$ di$tinto$ pa=$e$ 6ue tenemo$% $olo lo$ contamo$ ( CO750)%
nota 6ue primero obtenemo$ lo$ pa=$e$ 2/-S0-5C0 Pais3% * de$pu3$ lo$ contamo$ (CO750)%
adem;$% le e$tablecemo$ un nombre a e$te re$ultado (AS II0otal PasesII)'
s"P5 B ""E5E$I $?D=I2A#"I#=$I 0a+s3 !" ""Io&al 0aHs%s"" KR?M &.l1+d%o"
Podemo$ obtener% el total de minuto$ de nue$tra &ideoteca% $umando (S7M) lo$
minuto$ de duraci4n de toda$ la$ pel=cula$'
s"P5 B ""E5E$I "DM2Au'a*+on3 !" ""Io&al M+nu&os"" KR?M &.l1+d%o"
U obtener el promedio (A1) de duraci4n por pel=cula'
s"P5 B ""E5E$I !1E2Au'a*+on3 !" ""0'o(%d+o %n M+nu&os"" KR?M &.l1+d%o"
O la duraci4n m;:ima'
s"P5 B ""E5E$I M!F2Au'a*+on3 !" ""Au'a*+6n M>x+(a"" KR?M &.l1+d%o"
O la m=nima'
s"P5 B ""E5E$I M#=2Au'a*+on3 !" ""Au'a*+6n MHn+(a"" KR?M &.l1+d%o"
>n el $i,uiente e2emplo% u$amo$ una nue&a clau$ula 6ue no$ $ir&e para a,rupar
(RO7P BD) el re$ultado por al,?n campo% para obtener al $uma de minuto$ por ,enero% u$amo$
la $i,uiente in$trucci4n Se#'
(E0 )'F .a$e$ de dato$
s"P5 B ""E5E$I E%n%'o7 "DM2Au'a*+on3 !" ""Au'a*+6n 8o' E%n%'o"" KR?M &.l1+d%o ER?D0 BO E%n%'o"
Ob$er&a como en lo$ e2emplo$ para obtener la pel=cula de m;:ima (MAJ) * m=nima
(M-5) duraci4n% e1ecti&amente obtenemo$ el &alor% pero no $abe$ 6ue t=tulo e$ e$te% para $aberlo%
&amo$ a reali/ar una L$ubcon$ultaM% 6ue no e$ otra co$a 6ue con$ulta$ anidada$% en donde% el
re$ultado de la con$ulta interior% e$ el criterio de 1iltro para la e:terior% con en el $i,uiente e2emplo%
a-ora $i% obtenemo$ todo$ lo$ dato$ de la pel=cula de m;:ima duraci4n en nue$tra &ideoteca'
s"P5 B ""E5E$I KR?M &.l1+d%o UHERE Au'a*+onB2"E5E$I M!F2Au'a*+on3 KR?M &.l1+d%o3"
No te con1unda$% primero% obtenemo$ la m;:ima duraci4n (S&;&C0 MAJ2/uracion3
4ROM tbl1ideo)% $olo el &alor% de$pu3$% e$te &alor% lo e$tablecemo$ como criterio (C#&R&) de la
con$ulta e:terior% donde $i de&ol&emo$ todo$ lo$ campo$% e$ mu* importante el u$o de lo$
par3nte$i$ para la con$ulta interior'
#o$ e2emplo$ de in$truccione$ Se# &i$ta$ en todo$ lo$ e2emplo$ anteriore$% $on $olo
una mue$tra =n1ima de $u poder * &er$atilidad% pero creo% $u1iciente$ para ten,a$ muc-o para
practicar * probar' >l m3todo do-mport% no e$ el ?nico m3todo para con$ultar dato$ en ba$e$ de
dato$ pero $i el m;$ $encillo'
=.B.2 Insertando nue,os datos
#a$ in$truccione$ Se# no $olo $ir&en para importar dato$% tambi3n no$ $ir&en para
in$ertar nue&o$ dato$ en la$ tabla$ de nue$tra ba$e de dato$' >n el $i,uiente e2emplo% importamo$
lo$ pa=$e$ dado$ de alta en nue$tra tabla LtblPai$e$M de nue$tra ba$e de dato$ L"irectorioM'
"u. Bas%sA%Aa&os1023
A+( oHo)a!*&+9a !s ?.)%*&
A+( sBas%Aa&os !s "&'+ng
A+( sIa.la !s "&'+ng
A+( (?8*BA223 !s =%^ "*o(-sun-s&a'-.%ans-0'o8%'&@1alu%"
sBas%Aa&os B "A+'%*&o'+o"
sIa.la B "&.l0a+s%s"
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
(?8*BA203-=a(% B "Aa&a.as%=a(%"
(?8*BA203-1alu% B sBas%Aa&os
(?8*BA213-=a(% B ""ou'*%I@8%"
(?8*BA213-1alu% B *o(-sun-s&a'-sh%%&-Aa&a#(8o'&Mod%-I!B5E
(?8*BA223-=a(% B ""ou'*%?.)%*&"
(?8*BA223-1alu% B sIa.la
oHo)a!*&+9a-g%&$%llRang%B@=a(%2"!1"3-do#(8o'&2 (?8*BA23 3
End "u.
#a importaci4n anterior% tiene 6ue -aberte de&uelto al,o mu* $imilar a'
Aprendiendo OOo .a$ic (E1
Pero el m3todo para importar (do-mport)% -ace e:actamente $olo e$o% importar% por lo
6ue para in$ertar nue&o$ dato$ u$aremo$ una t3cnica di1erente'
Si re&i$a$ la e$tructura de la tabla LtblPai$e$M% ob$er&ara$ 6ue e$ta 1ormada por tre$
campo$8 L9dM% LPai$M * L#"Pai$M% el primero e$ un campo tipo entero% e$ la cla&e primaria * $u
in$erci4n e$ autom;tica% el $e,undo e$ un campo tipo te:to * e$ re6uerido% e$ decir% no puede
1altar% * el tercero% e$ un entero 6ue puede o no puede e$tar% e$to% la e$tructura de la tabla% el
nombre de lo$ campo$% el tipo de campo * $i e$ re6uerido o no% $on dato$ indi$pen$able$ para
in$ertar nue&o$ dato$% *a 6ue% de no cumplir con al,?n re6uerimiento e$peci1ico o no coincidir el
tipo de dato 6ue $e de$ea in$ertar con el tipo del campo de la tabla% lo m;$ probable e$ 6ue la
in$trucci4n no ten,a 3:ito * te de&uel&a un error' Ante$ de empe/ar con lo$ e2emplo$ propio$ de
in$erci4n de dato$% &eamo$ la nue&a 1orma de acceder a nue$tra ba$e de dato$% el $i,uiente
c4di,o% te mo$trar; toda$ la$ ba$e$ de dato$ Lre,i$trada$M en OpenO11ice'or,'
"u. Bas%sA%Aa&os1123
A+( oAB$ !s ?.)%*&
A+( (=o(.'%sBA23 !s "&'+ng
A+( *o1 !s #n&%g%'
,$'%a(os %l s%'9+*+o 8a'a a**%d%' @ (an+8ula' las .as%s d% da&os
oAB$ B *'%a&%Dno"%'9+*%2"*o(-sun-s&a'-sd.-Aa&a.as%$on&%x&"3
,?.&%n%(os los no(.'%s d% las .as%s d% da&os '%g+s&'adas
(=o(.'%sBA B oAB$-g%&El%(%n&=a(%s23
,Mos&'a(os %l no(.'% d% *ada una
Ko' *o1 B 5Bound2 (=o(.'%sBA 3 Io DBound 2 (=o(.'%sBA 3
MsgBox (=o(.'%sBA2*o13
=%x&
End "u.
Para acceder a la ba$e de dato$ de nue$tro inter3$% u$amo$'
"u. Bas%sA%Aa&os1223
A+( oAB$ !s ?.)%*&
A+( oBA !s ?.)%*&
A+( sBas%Aa&os !s "&'+ng
,El no(.'% d% la .as% d% da&os
sBas%Aa&os B "A+'%*&o'+o"
,$'%a(os %l s%'9+*+o 8a'a a**%d%' @ (an+8ula' las .as%s d% da&os
oAB$ B *'%a&%Dno"%'9+*%2"*o(-sun-s&a'-sd.-Aa&a.as%$on&%x&"3
,=os as%gu'a(os d% Gu% %x+s&a la .as% d% da&os
#f oAB$-hasB@=a(%2 sBas%Aa&os 3 Ih%n
,"+ %x+s&%7 a**%d%(os 8o' %l no(.'%
oBA B oAB$-g%&B@=a(%2 sBas%Aa&os 3
,Mos&'a(os la 'u&a d% la .as% d% da&os
MsgBox $on9%'&K'o(DR52 oBA-Aa&a.as%Ao*u(%n&-DR5 3
End #f
End "u.
(E2 )'F .a$e$ de dato$
>l $i,uiente e2emplo% no$ ilu$tra una nue&a 1orma de -acer una con$ulta
(e+ecuteFuer,)% di1erente al m3todo do9mport% e$te nue&o m3todo% tienen muc-a$ &ariante$ *
po$ibilidade$% pue$ no$ da acce$o al re$ultado de la con$ulta para manipular cada re,i$tro * cada
campo $e,?n nue$tra$ nece$idade$'
"u. Bas%sA%Aa&os1323
A+( oAB$ !s ?.)%*&
A+( oBA !s ?.)%*&
A+( o$on%x+on !s ?.)%*&
A+( oA%*la'a*+on !s ?.)%*&
A+( oR%sul&ado !s ?.)%*&
A+( sBas%Aa&os !s "&'+ng
A+( s"P5 !s "&'+ng
,El no(.'% d% la .as% d% da&os
sBas%Aa&os B "A+'%*&o'+o"
s"P5 B ""E5E$I KR?M &.l0a+s%s"
,$'%a(os %l s%'9+*+o 8a'a a**%d%' @ (an+8ula' las .as%s d% da&os
oAB$ B *'%a&%Dno"%'9+*%2"*o(-sun-s&a'-sd.-Aa&a.as%$on&%x&"3
,=os as%gu'a(os d% Gu% %x+s&a la .as% d% da&os
#f oAB$-hasB@=a(%2 sBas%Aa&os 3 Ih%n
,"+ %x+s&%7 a**%d%(os 8o' %l no(.'%
oBA B oAB$-g%&B@=a(%2 sBas%Aa&os 3
,$'%a(os una *on%x+on a la .as% d% da&os
o$on%x+on B oBA-g%&$onn%*&+on2""7""3
,$'%a(os un o.)%&o 8a'a las +ns&'u**+on%s "P5
oA%*la'a*+on B o$on%x+on-*'%a&%"&a&%(%n&23
,E)%*u&a(os la *onsul&a
oR%sul&ado B oA%*la'a*+on-%x%*u&%Pu%'@2 s"P53
,"+ ha@ '%sul&ados
#f =o& #s=ull2 oR%sul&ado 3 Ih%n
Ao Uh+l% oR%sul&ado-n%x&
,Mos&'a(os %l *on&%n+do d%l *a(8o
MsgBox oR%sul&ado-g%&"&'+ng2 2 3
5oo8
End #f
End #f
End "u.
A-ora $i% &eamo$ como in$ertar un nue&o re,i$tro en nue$tra ba$e de dato$'
"u. Bas%sA%Aa&os1423
A+( oAB$ !s ?.)%*&
A+( oBA !s ?.)%*&
A+( o$on%x+on !s ?.)%*&
A+( oA%*la'a*+on !s ?.)%*&
A+( sBas%Aa&os !s "&'+ng
A+( s"P5 !s "&'+ng
,El no(.'% d% la .as% d% da&os
sBas%Aa&os B "A+'%*&o'+o"
s"P5 B "#="ERI #=I? ""&.l0a+s%s"" 2""0a+s""3 1!5DE" 2,Hondu'as,3"
,$'%a(os %l s%'9+*+o 8a'a a**%d%' @ (an+8ula' las .as%s d% da&os
oAB$ B *'%a&%Dno"%'9+*%2"*o(-sun-s&a'-sd.-Aa&a.as%$on&%x&"3
,=os as%gu'a(os d% Gu% %x+s&a la .as% d% da&os
#f oAB$-hasB@=a(%2 sBas%Aa&os 3 Ih%n
,"+ %x+s&%7 a**%d%(os 8o' %l no(.'%
oBA B oAB$-g%&B@=a(%2 sBas%Aa&os 3
,$'%a(os una *on%x+on a la .as% d% da&os
o$on%x+on B oBA-g%&$onn%*&+on2""7""3
,$'%a(os un o.)%&o 8a'a las +ns&'u**+on%s "P5
oA%*la'a*+on B o$on%x+on-*'%a&%"&a&%(%n&23
,E)%*u&a(os la +ns%'*+6n d% da&os
Aprendiendo OOo .a$ic (E(
oA%*la'a*+on-%x%*u&%D8da&%2 s"P53
End #f
End "u.
>$ importante 6ue note$ 6ue e$tamo$ u$ando un nue&o m3todo (e+ecute7pdate)
para e2ecutar la in$trucci4n Se#' Para in$ertar re,i$tro$% u$amo$ una nue&a in$trucci4n Se#
(-5S&R0 -50O)% $e,uida de la tabla donde in$ertaremo$ lo$ nue&o$ dato$% entre par3nte$i$% lo$
nombre$ de lo$ campo$% de$pu3$ la clau$ula para indicar lo$ &alore$ (1A;7&S) * por ultimo% lo$
&alore$ a in$ertar entre par3nte$i$' Nota 6ue en la tabla * lo$ campo$% u$amo$ doble comilla * en
lo$ &alore$ a in$ertar% $i e$to$ $on te:to% u$amo$ comilla$ $imple$' @ecordemo$ 6ue la tabla
LtblPaisesM e$ta con1ormada por tre$ campo$% el primero $e llama L9dM de tipo entero% 6ue adem;$
e$ cla&e primaria * de in$erci4n autom;tica% por ello omitimo$% tanto el campo como el &alor% por
6ue e$te% $er; autom;ticamente in$ertado% no ob$tante% e$ po$ible in$ertarlo $i lo de$ea$% como en
el $i,uiente e2emplo'
s"P5 B "#="ERI #=I? ""&.l0a+s%s"" 2""#d""7 ""0a+s""3 1!5DE" 2117,Hondu'as,3"
Ob$er&a como indicamo$ el nombre del campo (9d) * $u &alor (11)% pero% al $er e$te
campo una cla&e primaria% e$ta$ Lno admiten duplicado$M% por lo 6ue $i el &alor indicado *a e:i$te%
te dar; un error como el $i,uiente% donde claramente no$ indica 6ue e$tamo$ &iolando la unicidad
del =ndice% intentando in$ertar &alore$ duplicado$ para la columna (campo) 9d'
Aun6ue e$te error en tiempo de e2ecuci4n e$ interceptable * manipulable% como lo
&imo$ en el capitulo E'10' +ontrol de errore$% $i tiene$ un campo 6ue e$ cla&e primaria * de
in$erci4n autom;tica como el campo L9dM de nue$tra tabla% la recomendaci4n e$ 6ue permita$ al
motor de ba$e$ de dato$% $e encar,ue de in$ertar el &alor $i,uiente como en nue$tro e2emplo% 6ue
tiene$ 6ue e2ecutar &aria$ &ece$ para 6ue note$ 6ue e1ecti&amente% in$erta el &alor
autom;ticamente' "e$pu3$ tenemo$ el campo LPai$M% $i e2ecuta$te la macro &aria$ &ece$ * -ace$
la con$ulta de la tabla o la abre$ de$de .a$e% notara$ 6ue a-ora% tenemo$ &aria$ &ece$ el pa=$
reci3n in$ertado% Ie$ e$to correctoJ% claro 6ue no% la idea de una ba$e de dato$ e$ tener la menor
cantidad de in1ormaci4n repetida% de -ec-o% Lno deber=aM -aber in1ormaci4n repetida en una ba$e
de dato$' Para e&itar la duplicidad de dato$ en otro campo 6ue no $ea la cla&e primaria% tiene$ do$
po$ible$ $olucione$8 una% puede$ crear un ndice en e$te campo% en el cual $e le indica 6ue $olo
conten,a dato$ ?nico$ con lo cual% $i $e intentan a,re,ar dato$ duplicado$% obtendr;$ un error
interceptable en tiempo de e2ecuci4n% para ello% tiene$ 6ue modi1icar la tabla de$de .a$e * a,re,ar
el =ndice manualmente (o por c4di,o) lo cual aprenderemo$ m;$ adelante% por a-ora% u$aremo$ el
$e,undo m3todo% 6ue con$i$te en con$ultar $i el pa=$ *a e:i$te o no% * actuar en con$ecuencia%
una primera apro:imaci4n a e$ta $oluci4n $eria'
"u. Bas%sA%Aa&os1523
A+( oAB$ !s ?.)%*&
A+( oBA !s ?.)%*&
A+( o$on%x+on !s ?.)%*&
(EE )'F .a$e$ de dato$
A+( oA%*la'a*+on !s ?.)%*&
A+( oR%sul&ado !s ?.)%*&
A+( sBas%Aa&os !s "&'+ng
A+( s"P5 !s "&'+ng
A+( s0a+s !s "&'+ng
s0a+s B I'+(2 #n8u&Box2 "#n&'odu*% %l no(.'% d%l nu%9o 8aHs" 3 3
#f s0a+s XY "" Ih%n
sBas%Aa&os B "A+'%*&o'+o"
s"P5 B ""E5E$I 0a+s KR?M ""&.l0a+s%s"" UHERE 0a+sB," : s0a+s : ","
oAB$ B *'%a&%Dno"%'9+*%2"*o(-sun-s&a'-sd.-Aa&a.as%$on&%x&"3
#f oAB$-hasB@=a(%2 sBas%Aa&os 3 Ih%n
oBA B oAB$-g%&B@=a(%2 sBas%Aa&os 3
o$on%x+on B oBA-g%&$onn%*&+on2""7""3
oA%*la'a*+on B o$on%x+on-*'%a&%"&a&%(%n&23
,1%'+f+*a(os Gu% %l 8aHs no %x+s&a
oR%sul&ado B oA%*la'a*+on-%x%*u&%Pu%'@2 s"P53
oR%sul&ado-n%x&23
#f oR%sul&ado-g%&Ro^ B 0 Ih%n
,"+ no %x+s&% lo +ns%'&a(os
s"P5 B "#="ERI #=I? ""&.l0a+s%s"" 2""0a+s""3 1!5DE" 2," : s0a+s : ",3"
oA%*la'a*+on-%x%*u&%D8da&%2 s"P53
MsgBox "El 8aHs4 " : s0a+s : " s% +ns%'&o *o''%*&a(%n&% %n la .as% d% da&os"
Els%
oR%sul&ado-*los%23
MsgBox "El 8aHs4 " : s0a+s : " @a %x+s&% %n la .as% d% da&os"
End #f
,$%''a(os las *on%x+on%s
oA%*la'a*+on-*los%23
o$on%x+on-*los%23
,5+.%'a(os la (%(o'+a
oR%sul&ado B =o&h+ng
oA%*la'a*+on B =o&h+ng
o$on%x+on B =o&h+ng
End #f
Els%
MsgBox "El *a(8o no 8u%d% %s&a' 9a*Ho"
End #f
End "u.
Aun con e$ta &alidaci4n% e$ po$ible 6ue -a*a toda&=a dato$ duplicado$ cuando
intentemo$ introducir &ariante$ como LM3:icoM% LMw:icoM% LMwpicoM o LMwp9+OM% e$to e$ por 6ue el
campo di$tin,ue ma*?$cula$ de min?$cula$% de nue&o% tiene$ do$ alternati&a$8 la primero e$
ob&ia% -ace$ la con$ulta * compara$ ($i -a* re$ultado)% el &alor de&uelto con el &alor nue&o todo
en ma*?$cula$ o min?$cula$ $e,?n pre1iera$% la otra% e$ modi1icar la e$tructura de la tabla para
6ue i,nore e$ta di$tinci4n% $al&o en contada$ e:cepcione$% e$ta $e,unda opci4n e$ m;$ r;pida%
practica * $e,ura * como $iempre% tiene$ la ultima palabra' Modi1ica la macro anterior para 6ue no
di$tin,a ma*?$cula$ de min?$cula$ * permite al u$uario $e,uir introduciendo pa=$e$ -a$ta 6ue
6uiera pre$ionando el bot4n Cancelar del cuadro de dialo,o'
>l ultimo campo de nue$tra tabla e$< LM#"Pai$M% 6ue e$ un entero% pero el campo no
e$ re6uerido% por lo 6ue puede$ omitirlo como lo -emo$ -ec-o -a$ta a-ora% o puede$ in$ertarlo%
como en el $i,uiente e2emplo<
s"P5 B "#="ERI #=I? ""&.l0a+s%s"" 2""0a+s""7 ""5A0a+s""3 1!5DE" 2,1%n%;u%la,7453"
Ob$er&a 6ue al $er un n?mero% no lle&a comilla$% no a$= el campo% Ltodo$M lle&an $u$
comilla$ doble$' >n Lteor=aM% una ba$e de dato$ ideal% no Ldeber=aM tener campo$ &ac=o$% por lo
6ue% aun6ue no $ea obli,atorio% procura de2ar &ac=o$ la menor cantidad de campo$ po$ible% en
Aprendiendo OOo .a$ic (E5
al,una$ oca$ione$% $i un campo e$ta ca$i $iempre &ac=o% tal &e/ podr=a$ plantearte la po$ibilidad
de eliminarlo de la tabla% aun6ue no e$ mu* recomendable e$tar eliminando o in$ertando campo$%
e$ muc-o me2or * m;$ e1iciente% Ldi$eKarM tu$ tabla$% anticipando lo me2or po$ible% $u contenido *
e$tructura * e&itar en lo po$ible cambio$ con$tante$ durante la implementaci4n de tu c4di,o% te
e&itara$ al,uno$ dolore$ de cabe/a'
Para terminar e$te tema% &eamo$ un e2emplo donde $e in$erta una 1ec-a% la cual%
debe ir entre comilla$ $imple$ * mu* importante% en el orden aKo-me$-d=a% $i no% te dar; un error
en tiempo de e2ecuci4n'
"u. Bas%sA%Aa&os1623
A+( oAB$ !s ?.)%*&
A+( oBA !s ?.)%*&
A+( o$on%x+on !s ?.)%*&
A+( oA%*la'a*+on !s ?.)%*&
A+( sBas%Aa&os !s "&'+ng
A+( s"P5 !s "&'+ng
sBas%Aa&os B "A+'%*&o'+o"
s"P5 B "#="ERI #=I? ""&.l$on&a*&os"" 2""=o(.'%""7""0a&%'no""7""Ma&%'no""7""$u(8l%""7""#d$+udad""3
1!5DE" 2,[uan,7,Eo(%;,7,0%'%;,7,1981T01T31,723"
oAB$ B *'%a&%Dno"%'9+*%2"*o(-sun-s&a'-sd.-Aa&a.as%$on&%x&"3
oBA B oAB$-g%&B@=a(%2 sBas%Aa&os 3
o$on%x+on B oBA-g%&$onn%*&+on2""7""3
oA%*la'a*+on B o$on%x+on-*'%a&%"&a&%(%n&23
oA%*la'a*+on-%x%*u&%D8da&%2 s"P53
oA%*la'a*+on-*los%23
o$on%x+on-*los%23
oA%*la'a*+on B =o&h+ng
o$on%x+on B =o&h+ng
End "u.
#a$ recomendacione$ ,enerale$ al in$ertar dato$ $on< ten cuidado con el tipo de
dato$ del campo de$tino% cuida de 6ue no 1alte nin,?n campo re6uerido * cuida lo$ campo$ 6ue
tienen al,una Lrelaci4nM con un campo de otra tabla'
=.B. (ctuali9ando datos
#a actuali/aci4n de dato$ en una tabla% e$ una acci4n recurrente en la manipulaci4n
de ba$e$ de dato$' 5eamo$ como -acerlo% el $i,uiente e2emplo% actuali/a el campo L#"Pai$M de la
tabla LtblPai$e$M pero $olo el re,i$tro 6ue cumple la condici4n'
"u. Bas%sA%Aa&os1723
A+( oAB$ !s ?.)%*&
A+( oBA !s ?.)%*&
A+( o$on%x+on !s ?.)%*&
A+( oA%*la'a*+on !s ?.)%*&
A+( sBas%Aa&os !s "&'+ng
A+( s"P5 !s "&'+ng
sBas%Aa&os B "A+'%*&o'+o"
,$ons&'u+(os la +ns&'u**+6n d% a*&ual+;a*+6n
s"P5 B "D0A!IE ""&.l0a+s%s"" "EI ""5A0a+s""B57 UHERE ""0a+s""B,$olo(.+a,"
oAB$ B *'%a&%Dno"%'9+*%2"*o(-sun-s&a'-sd.-Aa&a.as%$on&%x&"3
oBA B oAB$-g%&B@=a(%2 sBas%Aa&os 3
(E) )'F .a$e$ de dato$
o$on%x+on B oBA-g%&$onn%*&+on2""7""3
oA%*la'a*+on B o$on%x+on-*'%a&%"&a&%(%n&23
oA%*la'a*+on-%x%*u&%D8da&%2 s"P53
oA%*la'a*+on-*los%23
o$on%x+on-*los%23
oA%*la'a*+on B =o&h+ng
o$on%x+on B =o&h+ng
End "u.
Para actuali/ar% u$amo$ una nue&a in$trucci4n Se# (7P/A0&)% de$pu3$
e$tablecemo$ (S&0)% el campo a actuali/ar * el nue&o &alor% $i -a* m;$ campo $e $eparan por
coma$% por ?ltimo% la condici4n (C#&R&) para actuali/ar $olo lo$ re,i$tro$ de$eado$% cuidado% $i
no e$tablece$ un criterio% te actuali/ar; Ltodo$M lo$ re,i$tro$ de tu tabla' Si el criterio no de&uel&e
nin,?n re$ultado% no &era$ nin,?n men$a2e% $implemente no -ar; nin,?n cambio en la tabla'
>n el $i,uiente e2emplo% mo$tramo$ el pa=$ * la cla&e lada de cada uno con la
po$ibilidad de cambiarlo'
"u. Bas%sA%Aa&os1823
A+( oAB$ !s ?.)%*&
A+( oBA !s ?.)%*&
A+( o$on%x+on !s ?.)%*&
A+( oA%*la'a*+on !s ?.)%*&
A+( oA%*la'a*+on1 !s ?.)%*&
A+( oR%sul&ado !" ?.)%*&
A+( sBas%Aa&os !s "&'+ng
A+( s"P5 !s "&'+ng
A+( s#nfo !s "&'+ng
A+( s$la9% !s "&'+ng
sBas%Aa&os B "A+'%*&o'+o"
s"P5 B ""E5E$I 0a+s7 5A0a+s KR?M &.l0a+s%s"
oAB$ B *'%a&%Dno"%'9+*%2"*o(-sun-s&a'-sd.-Aa&a.as%$on&%x&"3
oBA B oAB$-g%&B@=a(%2 sBas%Aa&os 3
o$on%x+on B oBA-g%&$onn%*&+on2""7""3
oA%*la'a*+on B o$on%x+on-*'%a&%"&a&%(%n&23
oA%*la'a*+on1 B o$on%x+on-*'%a&%"&a&%(%n&23
oR%sul&ado B oA%*la'a*+on-%x%*u&%Pu%'@2 s"P53
Ao Uh+l% oR%sul&ado-=%x&
s#nfo B "El 8a+s4 " : oR%sul&ado-g%&"&'+ng213 : " &+%n% *o(o *la9% 5ada4 " : /
oR%sul&ado-g%&"&'+ng223 : $h'2133 : $h'2133 : "#n&'odu*% la nu%9a *la9% lada"
s$la9% B 1al2I'+(2#n8u&Box2s#nfo333
#f s$la9% Y 0 Ih%n
s"P5 B "D0A!IE ""&.l0a+s%s"" "EI ""5A0a+s""B" : s$la9% : " UHERE ""0a+s""B," :
oR%sul&ado-g%&"&'+ng213 : ","
oA%*la'a*+on1-%x%*u&%D8da&%2 s"P53
End #f
5oo8
oR%sul&ado-*los%23
oA%*la'a*+on-*los%23
oA%*la'a*+on1-*los%23
o$on%x+on-*los%23
oR%sul&ado B =o&h+ng
oA%*la'a*+on B =o&h+ng
oA%*la'a*+on1 B =o&h+ng
o$on%x+on B =o&h+ng
End "u.
Aprendiendo OOo .a$ic (E7
Ob$er&a 6ue creamo$ do$ declaracione$ (createStatement)% una e$ para la con$ulta
de $elecci4n * la otra para la actuali/aci4n% no puede$ u$ar la mi$ma% pue$ $e &en a1ectada$ una
por la otra' >n nue$tro $i,uiente e2emplo% actuali/amo$ la 1ec-a del contacto con 9d f 0'
"u. Bas%sA%Aa&os1923
A+( oAB$ !s ?.)%*&
A+( oBA !s ?.)%*&
A+( o$on%x+on !s ?.)%*&
A+( oA%*la'a*+on !s ?.)%*&
A+( sBas%Aa&os !s "&'+ng
A+( s"P5 !s "&'+ng
sBas%Aa&os B "A+'%*&o'+o"
,$ons&'u+(os la +ns&'u**+6n d% a*&ual+;a*+6n
s"P5 B "D0A!IE ""&.l$on&a*&os"" "EI ""$u(8l%""B,1980T02T28, UHERE ""#d""B0"
oAB$ B *'%a&%Dno"%'9+*%2"*o(-sun-s&a'-sd.-Aa&a.as%$on&%x&"3
oBA B oAB$-g%&B@=a(%2 sBas%Aa&os 3
o$on%x+on B oBA-g%&$onn%*&+on2""7""3
oA%*la'a*+on B o$on%x+on-*'%a&%"&a&%(%n&23
oA%*la'a*+on-%x%*u&%D8da&%2 s"P53
oA%*la'a*+on-*los%23
o$on%x+on-*los%23
oA%*la'a*+on B =o&h+ng
o$on%x+on B =o&h+ng
End "u.
Al i,ual 6ue en la in$erci4n% la 1ec-a debe cumplir el orden aKo-me$-d=a * e$tar entre
comilla$ $imple$' +uida re$petar el tipo de dato del campo a actuali/ar'
=.B.) &orrando datos
.orrar dato$ e$ $umamente $imple% por ello% ten muc-o cuidado cuando u$e$ e$ta
in$trucci4n% el $i,uiente e2emplo borra un pa=$ de la tabla'
"u. Bas%sA%Aa&os2023
A+( oAB$ !s ?.)%*&
A+( oBA !s ?.)%*&
A+( o$on%x+on !s ?.)%*&
A+( oA%*la'a*+on !s ?.)%*&
A+( sBas%Aa&os !s "&'+ng
A+( s"P5 !s "&'+ng
sBas%Aa&os B "A+'%*&o'+o"
,$ons&'u+(os la +ns&'u**+6n d% .o''ado
s"P5 B "AE5EIE KR?M ""&.l0a+s%s"" UHERE ""5A0a+s""B57"
oAB$ B *'%a&%Dno"%'9+*%2"*o(-sun-s&a'-sd.-Aa&a.as%$on&%x&"3
oBA B oAB$-g%&B@=a(%2 sBas%Aa&os 3
o$on%x+on B oBA-g%&$onn%*&+on2""7""3
oA%*la'a*+on B o$on%x+on-*'%a&%"&a&%(%n&23
oA%*la'a*+on-%x%*u&%D8da&%2 s"P53
oA%*la'a*+on-*los%23
o$on%x+on-*los%23
oA%*la'a*+on B =o&h+ng
o$on%x+on B =o&h+ng
End "u.
(EF )'F .a$e$ de dato$
W+uidadoV% $i no e$tablece$ la condici4n% Lborraras toda el contenido de la tablaM%
e$ recomendable% en cual6uier operaci4n de borrado% a$= $ea un campo% una tabla% un arc-i&o o lo
6ue $ea% pre,untarle al u$uario $i e$ta $e,uro de reali/ar la acci4n e in1ormarle 6ue e$ta no $e
puede de$-acer' #a$ in$truccione$ de borrado% pueden a1ectar a tabla$ 6ue e$t3n Lrelacionada$M%
tanto la actuali/aci4n como el borrado% e$t;n li,ado$ con un concepto en ba$e$ de dato$ 6ue $e
llama Linte,ridad re1erencialM% tema 6ue $ale de lo$ prop4$ito$ de e$te libro% pero 6ue $i 6uiere$
pro1undi/ar en ello% tiene$ 6ue conocerlo% e$tudiarlo% comprenderlo * aplicarlo en tu$ ba$e$ de
dato$% por a-ora% con 6ue ten,a$ el cuidado de no de2ar L-u3r1ano$M a tu$ dato$ e$ m;$ 6ue
$u1iciente' >n el $i,uiente e2emplo% borramo$ todo$ lo$ contacto$ 6ue $e llamen XjuanX'
"u. Bas%sA%Aa&os2123
A+( oAB$ !s ?.)%*&
A+( oBA !s ?.)%*&
A+( o$on%x+on !s ?.)%*&
A+( oA%*la'a*+on !s ?.)%*&
A+( sBas%Aa&os !s "&'+ng
A+( s"P5 !s "&'+ng
sBas%Aa&os B "A+'%*&o'+o"
,$ons&'u+(os la +ns&'u**+6n d% .o''ado
s"P5 B "AE5EIE KR?M ""&.l$on&a*&os"" UHERE ""=o(.'%""B,[uan,"
oAB$ B *'%a&%Dno"%'9+*%2"*o(-sun-s&a'-sd.-Aa&a.as%$on&%x&"3
oBA B oAB$-g%&B@=a(%2 sBas%Aa&os 3
o$on%x+on B oBA-g%&$onn%*&+on2""7""3
oA%*la'a*+on B o$on%x+on-*'%a&%"&a&%(%n&23
oA%*la'a*+on-%x%*u&%D8da&%2 s"P53
oA%*la'a*+on-*los%23
o$on%x+on-*los%23
oA%*la'a*+on B =o&h+ng
o$on%x+on B =o&h+ng
End "u.
Para con$ultar% in$ertar% actuali/ar o borrar dato$% puede$ tomar lo$ &alore$ de la$
celda$ de +alc% con la$ mi$ma$ t3cnica$ &i$ta a lo lar,o de e$to$ apunte$% $olo ten cuidado con el
correcto u$o de la$ comilla$% lo me2or% e$ crearte una 1unci4n 6ue a,re,ue la$ comilla$ nece$aria$%
e$to% te a$e,uro% te e&itar; muc-o$ dolore$ de cabe/a'
#o$ tema$ &i$to$ en e$te capitulo% $on $olo una pe6ueKa parte de e$e enorme tema
6ue $on la$ ba$e$ de dato$% no ob$tante% tiene$ *a% -erramienta$ $u1iciente$ para obtener muc-o
pro&ec-o de tu$ dato$ * tu$ conocimiento$'
=.F Era3icando datos
"icen 6ue una ima,en &ale m;$ 6ue mil palabra$% la &erdad e$ 6ue *o pre1iero la$ mil
palabra$% no ob$tante% dar3 por cierta la a$e&eraci4n anterior * &eremo$ como darle Lima,enM a
nue$tro$ dato$% 6ue de e$o $e trata cuando -acemo$ ,r;1ico$'
5amo$ a crear el $i,uiente ,r;1ico de la poblaci4n de cinco pa=$e$ de Am3rica #atina'
Aprendiendo OOo .a$ic (EG
>l cual creamo$ con la $i,uiente macro'
"u. E'af+*ando123
A+( oHo)a!*&+9a !s ?.)%*&
A+( oE'af+*os !s ?.)%*&
A+( (Rangos203
A+( s=o(.'% !s "&'+ng
A+( oR%* !s =%^ *o(-sun-s&a'-a^&-R%*&angl%
A+( oA+' !s =%^ *o(-sun-s&a'-&a.l%-$%llRang%!dd'%ss
,!**%so a la ho)a a*&+9a
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
,El no(.'% d% nu%s&'o g'>f+*o
s=o(.'% B "E'af+*o01"
,El &a(a\o @ la 8os+*+6n d%l nu%9o g'>f+*o7 &odas las (%d+das
,%n *%n&Ss+(as d% (+lH(%&'o
U+&h oR%*
-F B 5500 ,A+s&an*+a d%sd% la +;Gu+%'da d% la ho)a
-O B 0 ,A+s&an*+a d%sd% la 8a'&% su8%'+o'
-U+d&h B 10000 ,El an*ho d%l g'>f+*o
-H%+gh& B 10000 ,El al&o d%l g'>f+*o
End U+&h
,5a d+'%**+6n d%l 'ango d% da&os 8a'a %l g'>f+*o
U+&h oA+'
-"h%%& B oHo)a!*&+9a-g%&Rang%!dd'%ss-"h%%&
-"&a'&$olu(n B 0
-End$olu(n B 1
-"&a'&Ro^ B 0
-EndRo^ B 5
End U+&h
,Es una (a&'+; d% 'angos7 8u%s s% 8u%d%n %s&a.l%*%' (>s d% uno
(Rangos203 B oA+'
,!**%d%(os al *on)un&o d% &odos los g'>f+*os d% la ho)a
oE'af+*os B oHo)a!*&+9a-g%&$ha'&s23
,1%'+f+*a(os Gu% no %x+s&a %l no(.'%
#f oE'af+*os-hasB@=a(%2 s=o(.'% 3 Ih%n
MsgBox "Oa %x+s&% %s&% no(.'% d% g'>f+*o7 %s*og% o&'o"
Els%
,"+ no %x+s&% lo ag'%ga(os
oE'af+*os-add=%^B@=a(%2s=o(.'%7 oR%*7 (Rangos7 I'u%7 I'u%3
End #f
End "u.
(50 )'G ra1icando dato$
>l m3todo para a,re,ar un nue&o ,r;1ico e$ $encillo (add5e<B,5ame) * con$ta de
cinco ar,umento$'
add=%^B@=a(%2=o(.'%7 R%*&angulo7 Rangos7 En*a.%;ado$olu(na7 En*a.%;adoK+la3
1' Nombre< e$ el nombre del ob2eto a ni&el c4di,o% e$te nombre e$ di1erente del 6ue puede
e$tablecer el u$uario en la inter1a/ de la aplicaci4n% e$ indi$pen$able 6ue no e:i$ta otro
,r;1ico con e$te &alor'
2' @ect;n,ulo< e$ una e$tructura com%sun%star%a<t%Rectangle 6ue permite e$tablecer el
tamaKo * la po$ici4n del ,r;1ico% la$ unidade$ e$t;n e$peci1icada$ en cent3$ima$ de
mil=metro% 1000 f 1 cm
(' @an,o$< e$ una matri/ de ran,o$% e$ decir% de e$tructura$ com%sun%star%table%CellRangeAddress
6ue ,uardan la direcci4n del ran,o para lo$ dato$ de ori,en del ,r;1ico'
E' >ncabe/ado+olumna< &alor booleano% e$tablecido en &erdadero (True) $ir&e para indicar $i
la 1ila $uperior $e u$ara como titulo de eti6ueta$ para e2e o le*enda'
5' >ncabe/ado!ila< &alor booleano% e$tablecido en &erdadero (True) $ir&e para indicar $i $e
u$ar; la columna de la i/6uierda como eti6ueta$ de e2e o le*enda'
Oa creado el ,r;1ico% podemo$ per$onali/arlo completamente a nue$tro ,u$to' >n el
$i,uiente e2emplo% creamo$ tre$ nue&o$ ,r;1ico$% de tre$ e$tilo$ di1erente$< columna$% barra$ *
circular% uno al lado de otro% teniendo como ori,en de dato$% el mi$mo del e2emplo anterior'
"u. E'af+*ando223
A+( oHo)a!*&+9a !s ?.)%*&
A+( oE'af+*os !s ?.)%*&
A+( oE'af+*o !s ?.)%*&
A+( (Rangos203
A+( s=o(.'% !s "&'+ng
A+( oR%* !s =%^ *o(-sun-s&a'-a^&-R%*&angl%
A+( oA+' !s =%^ *o(-sun-s&a'-&a.l%-$%llRang%!dd'%ss
,!**%so a la ho)a a*&+9a
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
,El no(.'% d% nu%s&'o g'>f+*o
s=o(.'% B "E'af+*o!"
,El &a(a\o @ la 8os+*+6n d%l nu%9o g'>f+*o7 &odas las (%d+das
,%n *%n&Ss+(as d% (+lH(%&'o
U+&h oR%*
-F B 0 ,A+s&an*+a d%sd% la +;Gu+%'da d% la ho)a
-O B 4000 ,A+s&an*+a d%sd% la 8a'&% su8%'+o'
-U+d&h B 10000 ,El an*ho d%l g'>f+*o
-H%+gh& B 10000 ,El al&o d%l g'>f+*o
End U+&h
,5a d+'%**+6n d%l 'ango d% da&os 8a'a %l g'>f+*o
U+&h oA+'
-"h%%& B oHo)a!*&+9a-g%&Rang%!dd'%ss-"h%%&
-"&a'&$olu(n B 0
-End$olu(n B 1
-"&a'&Ro^ B 0
-EndRo^ B 5
End U+&h
,Es una (a&'+; d% 'angos7 8u%s s% 8u%d%n %s&a.l%*%' (>s d% uno
(Rangos203 B oA+'
,!**%d%(os al *on)un&o d% &odos los g'>f+*os d% la ho)a
oE'af+*os B oHo)a!*&+9a-g%&$ha'&s23
,1%'+f+*a(os Gu% no %x+s&a %l no(.'%
#f oE'af+*os-hasB@=a(%2 s=o(.'% 3 Ih%n
MsgBox "Oa %x+s&% %s&% no(.'% d% g'>f+*o7 %s*og% o&'o"
Els%
,"+ no %x+s&% lo ag'%ga(os7 d% fo'(a 8'%d%&%'(+nada s% *'%a
Aprendiendo OOo .a$ic (51
,un g'>f+*o d% *olu(nas
oE'af+*os-add=%^B@=a(%2s=o(.'%7 oR%*7 (Rangos7 I'u%7 I'u%3
End #f
,$a(.+a(os %l no(.'% @ la 8os+*+6n 8a'a un s%gundo g'>f+*o
s=o(.'% B "E'af+*oB"
U+&h oR%*
-F B 10000
-O B 4000
End U+&h
#f oE'af+*os-hasB@=a(%2 s=o(.'% 3 Ih%n
MsgBox "Oa %x+s&% %s&% no(.'% d% g'>f+*o7 %s*og% o&'o"
Els%
oE'af+*os-add=%^B@=a(%2s=o(.'%7 oR%*7 (Rangos7 I'u%7 I'u%3
,!**%d%(os al nu%9o g'>f+*o
oE'af+*o B oE'af+*os-g%&BO=a(%2 s=o(.'% 3-g%&E(.%dd%d?.)%*&23
,Es&a.l%*%(os Gu% s%an .a''as %n 9%; d% *olu(nas
oE'af+*o-g%&A+ag'a(-1%'&+*al B I'u%
End #f
,1ol9%(os a *a(.+a' %l no(.'% @ la 8os+*+6n 8a'a un &%'*%' g'>f+*o
s=o(.'% B "E'af+*o$"
U+&h oR%*
-F B 20000
-O B 4000
End U+&h
#f oE'af+*os-hasB@=a(%2 s=o(.'% 3 Ih%n
MsgBox "Oa %x+s&% %s&% no(.'% d% g'>f+*o7 %s*og% o&'o"
Els%
oE'af+*os-add=%^B@=a(%2s=o(.'%7 oR%*7 (Rangos7 I'u%7 I'u%3
oE'af+*o B oE'af+*os-g%&BO=a(%2 s=o(.'% 3-g%&E(.%dd%d?.)%*&23
oE'af+*o-s%&A+ag'a(2 oE'af+*o-*'%a&%#ns&an*%2"*o(-sun-s&a'-*ha'&-0+%A+ag'a("33
End #f
End "u.
#o$ ,r;1ico$ de columna$ * barra$ $on el mi$mo tipo de ,r;1ico% e:cepto por la
orientaci4n% uno e$ &ertical * otro e$ -ori/ontal% para el tercer ,r;1ico% cambiamo$ completamente
$u tipo (set/iagram)% lo e$tablecemo$ circular% toma en cuenta 6ue cada ,r;1ico e$ta pen$ado
para un determinado tipo de dato$% lo$ tipo$ de ,r;1ico$ 6ue puede$ e$tablecer $on'
com%sun%star%c(art 0ipo
com'$un'$tar'c-art'.ar"ia,ram .arra$ (* columna$)
com'$un'$tar'c-art'Area"ia,ram crea$
com'$un'$tar'c-art'#ine"ia,ram #=nea$
com'$un'$tar'c-art'Pie"ia,ram +ircular
com'$un'$tar'c-art'"onut"ia,ram "ona
com'$un'$tar'c-art'Net"ia,ram @ed
com'$un'$tar'c-art'pO"ia,ram "i$per$i4n pO
com'$un'$tar'c-art'Stocs"ia,ram Stocs
com'$un'$tar'c-art'.ubble"ia,ram .urbu2a$
+ada uno de e$to$ tipo$% tiene &ariante$ 6ue multiplican la$ po$ibilidade$ para
,ra1icar la in1ormaci4n% por e2emplo% repre$entacione$ en ("% a,re,ar l=nea$ * punto$% entre otra$
caracter=$tica$ 6ue &eremo$ m;$ adelante'
(52 )'G ra1icando dato$
#a ma*or parte de lo$ elemento$ de un ,r;1ico% $on en realidad una 1orma (S(ape)% a
la cual le puede$ e$tablecer $u$ propiedade$% principalmente8 el e$tilo de letra (tipo de 1uente%
color% ne,rita$% tamaKo% etc)% el e$tilo de 1ondo (e$tilo% color% etc)% * el e$tilo de borde (tipo de l=nea%
color% anc-o% etc)% entre otra$ m;$% &amo$ a mo$trar como modi1icar lo$ principale$ elemento$ de
un ,r;1ico% lo$ $i,uiente$ e2emplo$ manipulan el ,r;1ico $eleccionado% pero toda$ la$ propiedade$
6ue &eremo$% la$ puede$ e$tablecer per1ectamente al crearlo de modo 6ue tu ,r;1ico e$te
con1i,urado completamente a tu ,u$to * nece$idad a la primera' 5amo$ a -acer u$o de la$
$i,uiente$ $ubrutina$ para dar 1ormato'
,"u.'u&+na 8a'a fo'(a&%a' %l &%x&o d% una fo'(a7 s+ no Gu+%'%s *a(.+a' alguna
,8'o8+%dad7 solo 8asa una *ad%na 9a*Ha %n los &%x&os @ un 0 %n los n<(%'os
"u. Ko'(a&oI%x&o2?.) !s ?.)%*&7 I%x&o !s "&'+ng7 Ku%n&% !s "&'+ng7 =%g !s #n&%g%'7 Ia( !s #n&%g%'7
$olo' !s 5ong3
A+( oI%x&o !s ?.)%*&
A+( (I%x&o203
,El &+&ulo d%l g'>f+*o %s algo %s8%*+al
#f ?.)-su88o'&s"%'9+*%2"*o(-sun-s&a'-*ha'&2-I+&l%"3 Ih%n
,R%Gu+%'% un o.)%&o "$ad%na Ko'(a&%ada" 2Ko'(a&&%d"&'+ng3
oI%x&o B *'%a&%Dno"%'9+*%2"*o(-sun-s&a'-*o(8-*ha'&-Ko'(a&&%d"&'+ng"3
,O ag'%ga's% a una (a&'+;
(I%x&o203 B oI%x&o
,Es&a.l%*%' %l &%x&o
?.)-s%&I%x&2 (I%x&o 3
Els%
oI%x&o B ?.)
End #f
,$a(.+a(os %l fo'(a&o d%l &%x&o
U+&h oI%x&o
#f I%x&o XY "" Ih%n -"&'+ng B I%x&o
#f Ku%n&% XY "" Ih%n -$ha'Kon&=a(% B Ku%n&%
#f =%g Y 0 Ih%n -$ha'U%+gh& B =%g
#f Ia( Y 0 Ih%n -$ha'H%+gh& B Ia(
#f $olo' Y 0 Ih%n -$ha'$olo' B $olo'
End U+&h
End "u.
,"u.'u&+na 8a'a *a(.+a' %l fondo d% una fo'(a7
,Es&+lo 0 B =+nguno7 1 B $olo'7 2 B E'ad+%n&%7 3 B I'a(a7 4 B Ma8a d% .+&s
,$olo' 8u%d% s%' un n<(%'o o una *ad%na *on %l no(.'% d%l g'ad+%n&%7 &'a(a o (a8a d% .+&s
"u. Ko'(a&oKondo2?.) !s ?.)%*&7 Es&+lo !s #n&%g%'7 $olo'3
U+&h ?.)
-K+llBa*]g'ound B I'u%
-K+ll"&@l% B Es&+lo
"%l%*& $as% Es&+lo
$as% 1
#f $olo' Y 0 Ih%n -K+ll$olo' B $olo'
$as% 2
-K+llE'ad+%n&=a(% B $olo'
$as% 3
-K+llHa*h=a(% B $olo'
$as% 4
-K+llB+&(a8=a(% B $olo'
End "%l%*&
End U+&h
End "u.
,"u.'u&+na 8a'a *a(.+a' la lHn%a d% una fo'(a7 s+ no Gu+%'%s lHn%a7
,%s&a.l%*% %l %s&+lo %n 0
"u. Ko'(a&o5+n%a2?.) !s ?.)%*&7 Es&+lo !s #n&%g%'7 $olo' !s 5ong7 !n*ho !s #n&%g%'3
U+&h ?.)
Aprendiendo OOo .a$ic (5(
-5+n%"&@l% B Es&+lo
#f $olo' Y 0 Ih%n -5+n%$olo' B $olo'
#f !n*ho Y 0 Ih%n -5+n%U+d&h B !n*ho
End U+&h
End "u.
,Kun*+6n 8a'a d%9ol9%' %l g'>f+*o a*&+9o
,d%9u%l9% =D55 s+ no %s un g'>f+*o
Kun*&+on g%&E'af+*o23 !s ?.)%*&
A+( oHo)a!*&+9a !s ?.)%*&
A+( oE'af+*os !s ?.)%*&
A+( oE'af+*o !s ?.)%*&
A+( o"%l !s ?.)%*&
A+( s=o(.'% !s "&'+ng
A+( s#nfo !s "&'+ng
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
#f o"%l-g%&#(8l%(%n&a&+on=a(% B "*o(-sun-s&a'-d'a^+ng-"9x"ha8%$oll%*&+on" Ih%n
o"%l B o"%l-g%&B@#nd%x203
#f o"%l-su88o'&s"%'9+*%2"*o(-sun-s&a'-d'a^+ng-?5E2"ha8%"3 Ih%n
s=o(.'% B o"%l-0%'s+s&=a(%
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
oE'af+*os B oHo)a!*&+9a-g%&$ha'&s23
#f oE'af+*os-hasB@=a(%2 s=o(.'% 3 Ih%n
g%&E'af+*o B oE'af+*os-g%&B@=a(%2 s=o(.'% 3-g%&E(.%dd%d?.)%*&23
End #f
End #f
End #f
End Kun*&+on
>n el $i,uiente e2emplo% a,re,amo$ * damo$ 1ormato al titulo * al $ubtitulo del
,r;1ico% ob$er&a 6ue $i no e:i$te el titulo lo creamo$% el $ubtitulo $iempre e:i$te% $olo -a* 6ue
determinar $i lo mo$tramo$ o no% como $e indica en lo$ comentario$'
"u. E'af+*ando323
A+( oE'af+*o !s ?.)%*&
A+( oI+&ulo !s ?.)%*&
A+( o"u.I+&ulo !s ?.)%*&
,!**%d%(os al g'>f+*o s%l%**+onado
oE'af+*o B g%&E'af+*o23
#f =o& #s=ull2 oE'af+*o 3 Ih%n
,"+ ha@ un g'>f+*o7 s%l%**+ona(os %l &H&ulo
oI+&ulo B oE'af+*o-g%&I+&l%?.)%*&23
#f #s=ull2oI+&ulo3 Ih%n
,"+ no %x+s&% %l &H&ulo lo *'%a(os
oI+&ulo B *'%a&%Dno"%'9+*%2"*o(-sun-s&a'-*ha'&2-I+&l%"3
End #f
,5% da(os fo'(a&o al &%x&o d%l &H&ulo
$all Ko'(a&oI%x&o2 oI+&ulo7 "Ha.+&an&%s 0o' 0aHs"7 "5+.%'a&+on "%'+f"7 1507 157 REB225570703
3
,5% da(os fo'(a&o al fondo d%l &+&ulo
$all Ko'(a&oKondo2 oI+&ulo7 17 REB2220722072203 3
,5% da(os fo'(a&o a la lHn%a
$all Ko'(a&o5+n%a2 oI+&ulo7 17 REB210075072537 100 3
,"+ %s&a.l%*%s la lHn%a7 &al 9%; s%a .u%na +d%a7 %s&a.l%*%' los (a'g%n%s
,al &%x&o 8a'a Gu% no s% 9%a &an 8%gado
U+&h oI+&ulo
-0a'a5%f&Ma'g+n B 300
-0a'aR+gh&Ma'g+n B 300
-0a'aIo8Ma'g+n B 200
(5E )'G ra1icando dato$
-0a'aBo&&o(Ma'g+n B 200
End U+&h
,O lo %s&a.l%*%(os
oE'af+*o-s%&I+&l%?.)%*&2 oI+&ulo 3
,Es&a.l%*%(os Gu% s% (u%s&'% %l su.&+&ulo
oE'af+*o-Has"u.I+&l% B I'u%
,!**%d%(os al su.&+&ulo
o"u.I+&ulo B oE'af+*o-"u.I+&l%
,5% da(os fo'(a&o al &%x&o7 fondo @ lHn%a
$all Ko'(a&oI%x&o2 o"u.I+&ulo7 "!(S'+*a 5a&+na"7 "5+.%'a&+on "%'+f"7 1507 127 REB22557150703
3
$all Ko'(a&oKondo2 o"u.I+&ulo7 17 REB2240724072403 3
$all Ko'(a&o5+n%a2 o"u.I+&ulo7 27 REB210075072537 50 3
Els%
MsgBox ""%l%**+ona un g'>f+*o"
End #f
End "u.
#o$ mar,ene$ del borde al te:to% $olo e:i$ten en el t=tulo% no a$= en el $ubt=tulo' Si
u$a$ normalmente un con2unto de 1uente$% podr=a$ u$ar una matri/ de te:to ( string) con lo$
nombre$ de la$ 1uente$ 6ue m;$ u$e$% por e2emplo'
A+( (Ku%n&%s243 !s "&'+ng
(Ku%n&%s203 B "5+.%'a&+on "%'+f"
(Ku%n&%s213 B "5+.%'a&+on "ans"
(Ku%n&%s223 B "5+.%'a&+on Mono"
(Ku%n&%s233 B "K'%%Mono"
(Ku%n&%s243 B "K'%%"ans"
O mira 6ue bien no$ &a 6uedando% bueno% no tan bien% *a $abe$ 6ue $o* mu* malo
para el di$eKo% a$= 6ue no te me pon,a$ e:i,ente'
A-ora% cambiaremo$ el 1ormato de la le*enda% el circulo (bueno% intento de circulo)
ro2o en la ima,en anterior' Nota 6ue en la llamada a la $ubrutina 4ormato0e+to% el ar,umento
0e+to) 6ue no$ $ir&e para e$tablecer el t=tulo * el $ubt=tulo% a-ora% le pa$amo$ una cadena &ac=a%
e$to e$ mu* importante% pue$ la le*enda no implementa la propiedad String% por lo 6ue $i intenta$
e$tablecerla% te dar; un error en tiempo de e2ecuci4n% 6ue claro% puede$ interceptar * manipular'
Aprendiendo OOo .a$ic (55
"u. E'af+*ando423
A+( oE'af+*o !s ?.)%*&
A+( o5%@%nda !s ?.)%*&
oE'af+*o B g%&E'af+*o23
#f =o& #s=ull2 oE'af+*o 3 Ih%n
,!**%d%(os a la l%@%nda
o5%@%nda B oE'af+*o-5%g%nd23
,5% da(os fo'(a&o al &%x&o7 fondo @ lHn%a
$all Ko'(a&oI%x&o2 o5%@%nda7 ""7 "5+.%'a&+on "ans"7 1507 107 REB2255715071003 3
$all Ko'(a&oKondo2 o5%@%nda7 17 REB2240724072403 3
$all Ko'(a&o5+n%a2 o5%@%nda7 37 REB210075072537 50 3
Els%
MsgBox ""%l%**+ona un g'>f+*o"
End #f
End "u.
>n al,uno$ ca$o$% como en e$te e2emplo% no tiene muc-o $entido mo$trar la le*enda%
pue$ e$ una $ola $erie de dato$% a$= 6ue me2or la ocultamo$ * e$tablecemo$ el titulo de el e2e p *
el e2e O% a$= como $u 1ormato'
"u. E'af+*ando523
A+( oE'af+*o !s ?.)%*&
A+( oI+&uloE)% !s ?.)%*&
oE'af+*o B g%&E'af+*o23
#f =o& #s=ull2 oE'af+*o 3 Ih%n
,?*ul&a(os la l%@%nda
oE'af+*o-Has5%g%nd B Kals%
,!**%d%(os al &+&ulo d%l %)% F
oI+&uloE)% B oE'af+*o-g%&A+ag'a(-F!x+sI+&l%
,Es&a.l%*%(os Gu% s% (u%s&'%
oE'af+*o-g%&A+ag'a(-HasF!x+sI+&l% B I'u%
$all Ko'(a&oI%x&o2 oI+&uloE)%7 "0aHs%s"7 "5+.%'a&+on "ans"7 1507 117 REB2100715071003 3
$all Ko'(a&oKondo2 oI+&uloE)%7 17 REB2240724072403 3
$all Ko'(a&o5+n%a2 oI+&uloE)%7 17 REB22007200720037 20 3
,!**%d%(os al &+&ulo d%l %)% O
oI+&uloE)% B oE'af+*o-g%&A+ag'a(-O!x+sI+&l%
,Es&a.l%*%(os Gu% s% (u%s&'%
oE'af+*o-g%&A+ag'a(-HasO!x+sI+&l% B I'u%
$all Ko'(a&oI%x&o2 oI+&uloE)%7 "Ha.+&an&%s"7 "5+.%'a&+on "ans"7 1507 117 REB2100715071003 3
$all Ko'(a&oKondo2 oI+&uloE)%7 17 REB2240724072403 3
$all Ko'(a&o5+n%a2 oI+&uloE)%7 17 REB22007200720037 20 3
Els%
MsgBox ""%l%**+ona un g'>f+*o"
End #f
End "u.
>l punto importante% e$ la 1orma en 6ue accedemo$ a lo$ t=tulo$ de lo$ e2e$
(,et"ia,ram)% e$to$ e$t;n contenido$ LdentroM del ,r;1ico% pero tambi3n LdentroM de un 1orma 6ue
$e llama dia,rama% 6ue e$ propiamente el ;rea donde $e mue$tra el ,r;1ico'
"u. E'af+*ando623
A+( oE'af+*o !s ?.)%*&
A+( oE)% !s ?.)%*&
oE'af+*o B g%&E'af+*o23
#f =o& #s=ull2 oE'af+*o 3 Ih%n
,!**%d%(os al %)% F
(5) )'G ra1icando dato$
oE)% B oE'af+*o-g%&A+ag'a(-g%&F!x+s
$all Ko'(a&oI%x&o2 oE)%7 ""7 "5+.%'a&+on "ans"7 1507 107 REB2507507503 3
$all Ko'(a&o5+n%a2 oE)%7 17 REB2070725537 30 3
,Ro&a(os 60l %l &%x&o
oE)%-I%x&Ro&a&+on B 6000
,!**%d%(os al %)% O
oE)% B oE'af+*o-g%&A+ag'a(-g%&O!x+s
$all Ko'(a&oI%x&o2 oE)%7 ""7 "5+.%'a&+on "ans"7 1507 107 REB2507507503 3
$all Ko'(a&o5+n%a2 oE)%7 17 REB2070725537 30 3
,Es&a.l%*%(os %l l+(+&% su8%'+o' d%l %)%
oE)%-Max B 200000000
,Es&a.l%*%(os %l +n&%'9alo su8%'+o'
oE)%-"&%8Ma+n B 50000000
,El n<(%'o d% (a'*as s%*unda'+as
oE)%-"&%8H%l8$oun& B 5
,5Hn%as d%l %)% 8'+n*+8al
oE)% B oE'af+*o-g%&A+ag'a(-OMa+nE'+d
$all Ko'(a&o5+n%a2 oE)%7 17 REB2255707037 50 3
,Mos&'a(os las lHn%as s%*unda'+as
oE'af+*o-g%&A+ag'a(-HasO!x+sH%l8E'+d B I'u%
oE)% B oE'af+*o-g%&A+ag'a(-OH%l8E'+d
$all Ko'(a&o5+n%a2 oE)%7 17 REB2150707037 25 3
Els%
MsgBox ""%l%**+ona un g'>f+*o"
End #f
End "u.
Modi1icamo$ la$ propiedade$ de toda el ;rea del ,r;1ico'
"u. E'af+*ando723
A+( oE'af+*o !s ?.)%*&
A+( o!'%a !s ?.)%*&
oE'af+*o B g%&E'af+*o23
#f =o& #s=ull2 oE'af+*o 3 Ih%n
,"%l%**+ona(os %l >'%a d%l g'>f+*o
o!'%a B oE'af+*o-g%&!'%a23
,Es&a.l%*%(os %l fondo %n g'ad+%n&% @ su no(.'%
$all Ko'(a&oKondo2 o!'%a7 27 "Rad+al '%d/@%llo^" 3
$all Ko'(a&o5+n%a2 o!'%a7 17 REB250725575037 20 3
Els%
MsgBox ""%l%**+ona un g'>f+*o"
End #f
End "u.
A-ora% $olo del 1ondo del ,r;1ico% el ;rea e1ecti&a donde $e mue$tran lo$ dato$'
"u. E'af+*ando823
A+( oE'af+*o !s ?.)%*&
A+( oKondo !s ?.)%*&
oE'af+*o B g%&E'af+*o23
#f =o& #s=ull2 oE'af+*o 3 Ih%n
,"%l%**+ona(os %l fondo d%l g'>f+*o
oKondo B oE'af+*o-g%&A+ag'a(-g%&Uall
$all Ko'(a&oKondo2 oKondo7 27 9 3
Els%
MsgBox ""%l%**+ona un g'>f+*o"
End #f
End "u.
Aprendiendo OOo .a$ic (57
Modi1icamo$ la $erie de dato$% por a-ora% $olo tenemo$ una'
"u. E'af+*ando923
A+( oE'af+*o !s ?.)%*&
A+( oAa&os !s ?.)%*&
oE'af+*o B g%&E'af+*o23
#f =o& #s=ull2 oE'af+*o 3 Ih%n
,5a 8'+(%' s%'+% d% da&os
oAa&os B oE'af+*o-g%&A+ag'a(-g%&Aa&aRo^0'o8%'&+%s203
$all Ko'(a&oI%x&o2 oAa&os7 ""7 "5+.%'a&+on "ans"7 1507 117 REB207072503 3
$all Ko'(a&oKondo2 oAa&os7 47 5 3
,Es&a.l%*%(os Gu% s% (u%s&'%n los 9alo'%s d% *ada 8un&o
oAa&os-Aa&a$a8&+on B 1
Els%
MsgBox ""%l%**+ona un g'>f+*o"
End #f
End "u.
Para cambiar de tamaKo un ,r;1ico% tiene$ 6ue -acerlo como $i 1uera una 1orma
(s(ape) como te mue$tro en el $i,uiente e2emplo'
"u. E'af+*ando1023
A+( oE'af+*o !s ?.)%*&
A+( o"%l !s ?.)%*&
A+( oIa( !s =%^ *o(-sun-s&a'-a^&-"+;%
oE'af+*o B g%&E'af+*o23
#f =o& #s=ull2 oE'af+*o 3 Ih%n
,!GuH7 '%8%&+(os lo Gu% ha*% la fun*+6n Gu% nos '%g'%sa %l g'>f+*o
,%s&o %s 8o' Gu% @a %s&a(os s%gu'os d% Gu% %s un g'>f+*o @ 8o' Gu%7
,8a'a *a(.+a' d% &a(a\o7 ha@ Gu% ha*%'lo *o(o s+ fu%'a una fo'(a 2sha8%3
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
o"%l B o"%l-g%&B@#nd%x203
,Es&a.l%*%(os %l nu%9o &a(a\o
oIa(-U+d&h B 15000
oIa(-H%+gh& B 15000
o"%l-s%&"+;%2 oIa( 3
Els%
MsgBox ""%l%**+ona un g'>f+*o"
End #f
End "u.
Si -a$ probado cada una de la$ macro$ de e2emplo $obre el mi$mo ,r;1ico% tiene$
6ue tener al,o a$='
(5F )'G ra1icando dato$
Si lo $3% e$ta -orrible% al 1in 6ue no e$ cur$o de di$eKo'
#a $i,uiente macro% cambiara el ran,o de dato$ ori,en% al,o $umamente nece$ario
para tener realmente un ,r;1ico din;mico * podamo$ actuali/arlo cuando $ea nece$ario'
"u. E'af+*ando1123
A+( oE'af+*o !s ?.)%*&
A+( oHo)a!*&+9a !s ?.)%*&
A+( (Rangos203
A+( oA+' !s =%^ *o(-sun-s&a'-&a.l%-$%llRang%!dd'%ss
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
,!**%d%(os al g'>f+*o
oE'af+*o B g%&E'af+*o223
#f =o& #s=ull2 oE'af+*o 3 Ih%n
,El nu%9o 'ango d% da&os
U+&h oA+'
-"h%%& B oHo)a!*&+9a-g%&Rang%!dd'%ss-"h%%&
-"&a'&$olu(n B 0
-End$olu(n B 1
-"&a'&Ro^ B 0
-EndRo^ B 10
End U+&h
(Rangos203 B oA+'
,Es&a.l%*%(os %l nu%9o 'ango
oE'af+*o-s%&Rang%s2 (Rangos 3
Els%
MsgBox ""%l%**+ona un g'>f+*o"
End #f
End "u.
Nota 6ue e$tamo$ u$ando una $e,unda &er$i4n de la 1unci4n para re,re$ar el ,r;1ico
$eleccionado% la 1unci4n e$ ca$i id3ntica'
Kun*&+on g%&E'af+*o223 !s ?.)%*&
A+( oHo)a!*&+9a !s ?.)%*&
A+( oE'af+*os !s ?.)%*&
A+( oE'af+*o !s ?.)%*&
A+( o"%l !s ?.)%*&
A+( s=o(.'% !s "&'+ng
Aprendiendo OOo .a$ic (5G
A+( s#nfo !s "&'+ng
o"%l B Ih+s$o(8on%n&-g%&$u''%n&"%l%*&+on23
#f o"%l-g%&#(8l%(%n&a&+on=a(% B "*o(-sun-s&a'-d'a^+ng-"9x"ha8%$oll%*&+on" Ih%n
o"%l B o"%l-g%&B@#nd%x203
#f o"%l-su88o'&s"%'9+*%2"*o(-sun-s&a'-d'a^+ng-?5E2"ha8%"3 Ih%n
s=o(.'% B o"%l-0%'s+s&=a(%
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
oE'af+*os B oHo)a!*&+9a-g%&$ha'&s23
#f oE'af+*os-hasB@=a(%2 s=o(.'% 3 Ih%n
g%&E'af+*o2 B oE'af+*os-g%&B@=a(%2 s=o(.'% 3
End #f
End #f
End #f
End Kun*&+on
#a di1erencia% e$ 6ue la primera te de&uel&e el ob2eto (no me ,u$ta la palabra pero
a$= e$) LembebidoM (get&mbeddedObject)% con el cual tenemo$ acce$o a todo$ lo$ ob2eto$ dentro
del ,r;1ico% e$ta $e,unda 1orma% accede directamente al ,r;1ico (getB,5ame)'
5eamo$ al,uno$ e2emplo$ m;$ de creaci4n de ,r;1ico$% cuando ,ra1i6ue$% como *a
lo mencionamo$% debe$ de cuidar la corre$pondencia de tu$ dato$ con el tipo de ,r;1ico% a$=
mi$mo% cuando per$onalice$ un ,r;1ico% a$e,urate de 6ue el tipo de ,r;1ico e$ correcto% por
e2emplo% puede$ e$tablecerle e2e$ a un ,r;1ico circular% pero de2ar=a de $er un ,r;1ico circular * te
a$e,uro 6ue no obtendr=a$ el re$ultado pre&i$to'
>l $i,uiente e2emplo% modi1ica nue$tro ,r;1ico para 6ue $e &ea en ("'
"u. E'af+*ando1223
A+( oE'af+*o !s ?.)%*&
oE'af+*o B g%&E'af+*o23
#f =o& #s=ull2 oE'af+*o 3 Ih%n
,Es&a.l%*%(os %l g'>f+*o %n 3A
oE'af+*o-g%&A+ag'a(-A+(3A B I'u%
,Mos&'a(os *+l+nd'os %n 9%; d% *olu(nas
oE'af+*o-g%&A+ag'a(-"ol+dI@8% B 1
Els%
MsgBox ""%l%**+ona un g'>f+*o"
End #f
End "u.
Ob$er&a el $i,uiente ,r;1ico% para obtenerlo% e$ indi$pen$able 6ue el cur$or e$te en
Luna $ola celdaM de lo$ dato$% lo dem;$ $e calcula% tanto el ran,o de dato$ como la po$ici4n'
()0 )'G ra1icando dato$
"u. E'af+*ando1323
A+( oHo)a!*&+9a !s ?.)%*&
A+( o"%l !s ?.)%*&
A+( o$u'so' !s ?.)%*&
A+( oE'af+*os !s ?.)%*&
A+( (Rangos203
A+( s=o(.'% !s "&'+ng
A+( oR%* !s =%^ *o(-sun-s&a'-a^&-R%*&angl%
A+( o$%lda !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
o"%l B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&"%l%*&+on23
#f o"%l-g%&#(8l%(%n&a&+on=a(% B ""*$%ll?.)" Ih%n
o$u'so' B oHo)a!*&+9a-*'%a&%$u'so'B@Rang%2 o"%l 3
,Ex8and+(os %l *u'so' a la '%g+6n a*&ual
o$u'so'-*olla8s%Io$u''%n&R%g+on23
(Rangos203 B o$u'so'-g%&Rang%!dd'%ss
s=o(.'% B "E'af+*o10"
,$%lda 8a'a la 8os+*+6n d%l g'>f+*o
o$%lda B oHo)a!*&+9a-g%&$%llB@0os+&+on2 o$u'so'-g%&Rang%!dd'%ss-"&a'&$olu(n7
o$u'so'-g%&Rang%!dd'%ss-EndRo^ C 2 3
U+&h oR%*
-F B o$%lda-0os+&+on-F
-O B o$%lda-0os+&+on-O
-U+d&h B 11500 ,El an*ho d%l g'>f+*o
-H%+gh& B 7000 ,El al&o d%l g'>f+*o
End U+&h
oE'af+*os B oHo)a!*&+9a-g%&$ha'&s23
#f oE'af+*os-hasB@=a(%2 s=o(.'% 3 Ih%n
MsgBox "Oa %x+s&% %s&% no(.'% d% g'>f+*o7 %s*og% o&'o"
Els%
oE'af+*os-add=%^B@=a(%2s=o(.'%7 oR%*7 (Rangos7 I'u%7 I'u%3
End #f
Els%
MsgBox ""%l%**+ona solo una *%lda *on da&os"
End #f
End "u.
Aprendiendo OOo .a$ic ()1
>l mi$mo ,r;1ico% pero a-ora lo -acemo$ de barra$'
"u. E'af+*ando1423
A+( oHo)a!*&+9a !s ?.)%*&
A+( o"%l !s ?.)%*&
A+( o$u'so' !s ?.)%*&
A+( oE'af+*os !s ?.)%*&
A+( oE'af+*o !s ?.)%*&
A+( (Rangos203
A+( s=o(.'% !s "&'+ng
A+( oR%* !s =%^ *o(-sun-s&a'-a^&-R%*&angl%
A+( o$%lda !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
o"%l B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&"%l%*&+on23
#f o"%l-g%&#(8l%(%n&a&+on=a(% B ""*$%ll?.)" Ih%n
o$u'so' B oHo)a!*&+9a-*'%a&%$u'so'B@Rang%2 o"%l 3
,Ex8and+(os %l *u'so' a la '%g+6n a*&ual
o$u'so'-*olla8s%Io$u''%n&R%g+on23
(Rangos203 B o$u'so'-g%&Rang%!dd'%ss
s=o(.'% B "E'af+*o10"
,$%lda 8a'a la 8os+*+6n d%l g'>f+*o
o$%lda B oHo)a!*&+9a-g%&$%llB@0os+&+on2 o$u'so'-g%&Rang%!dd'%ss-"&a'&$olu(n7
o$u'so'-g%&Rang%!dd'%ss-EndRo^ C 2 3
U+&h oR%*
-F B o$%lda-0os+&+on-F
-O B o$%lda-0os+&+on-O
-U+d&h B 11500 ,El an*ho d%l g'>f+*o
-H%+gh& B 7000 ,El al&o d%l g'>f+*o
End U+&h
oE'af+*os B oHo)a!*&+9a-g%&$ha'&s23
#f oE'af+*os-hasB@=a(%2 s=o(.'% 3 Ih%n
MsgBox "Oa %x+s&% %s&% no(.'% d% g'>f+*o7 %s*og% o&'o"
Els%
oE'af+*os-add=%^B@=a(%2s=o(.'%7 oR%*7 (Rangos7 I'u%7 I'u%3
oE'af+*o B oE'af+*os-g%&B@=a(%2 s=o(.'% 3
oE'af+*o-g%&E(.%dd%d?.)%*&-g%&A+ag'a(-1%'&+*al B I'u%
End #f
Els%
MsgBox ""%l%**+ona solo una *%lda *on da&os"
End #f
()2 )'G ra1icando dato$
End "u.
#o$ ,r;1ico$ circulare$ $ir&en para darno$ una ima,en de la relaci4n de cada punto
re$pecto al total'
"u. E'af+*ando1523
A+( oHo)a!*&+9a !s ?.)%*&
A+( o"%l !s ?.)%*&
A+( o$u'so' !s ?.)%*&
A+( oE'af+*os !s ?.)%*&
A+( oE'af+*o !s ?.)%*&
A+( (Rangos203
A+( s=o(.'% !s "&'+ng
A+( oR%* !s =%^ *o(-sun-s&a'-a^&-R%*&angl%
A+( o$%lda !s ?.)%*&
A+( oAa&os !s ?.)%*&
oHo)a!*&+9a B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&!*&+9%"h%%&23
o"%l B Ih+s$o(8on%n&-g%&$u''%n&$on&'oll%'-g%&"%l%*&+on23
#f o"%l-g%&#(8l%(%n&a&+on=a(% B ""*$%ll?.)" Ih%n
o$u'so' B oHo)a!*&+9a-*'%a&%$u'so'B@Rang%2 o"%l 3
o$u'so'-*olla8s%Io$u''%n&R%g+on23
(Rangos203 B o$u'so'-g%&Rang%!dd'%ss
s=o(.'% B "E'af+*o15"
o$%lda B oHo)a!*&+9a-g%&$%llB@0os+&+on2 o$u'so'-g%&Rang%!dd'%ss-"&a'&$olu(n7
o$u'so'-g%&Rang%!dd'%ss-EndRo^ C 2 3
U+&h oR%*
-F B o$%lda-0os+&+on-F
-O B o$%lda-0