Escolar Documentos
Profissional Documentos
Cultura Documentos
dentro de un documento Excel, permitiendo la ampliacin de la funcionalidad del mismo. Aprende a programar macros Excel! VBA es una modalidad adaptada del conocido lenguaje de programacin Visual Basic, incluida en la ma or!a de las aplicaciones "# $ffice como Excel, %ord Access. &na diferencia entre VBA Visual Basic es que el programa VBA no se puede separar del documento Excel, sino queda totalmente integrado dentro del li'ro de tra'ajo. Esta introduccin a Excel VBA te ensear( como empezar a desarrollar tus propias macros Excel. VBA Excel sus macros constitu en una a uda potente para particulares pequeas medianas empresas. Excel, so're todo la aplicacin de macros VBA, mejora pr(cticamente cualquier proceso de tra'ajo, desde sencillos c(lculos so're la econom!a familiar )asta complejos modelos empresariales de Excel para crear informes, presupuestos dem(s documentos financieros. Todo el mundo puede aprender a programar macros? #i, sin duda. "uc)a gente empieza por la gra'acin de macros, es decir gra'ar una secuencia de comandos, para luego reutilizarla. &n 'uen ejemplo es *+egar , Valores*, uno de los comandos VBA m(s utilizados. -uego se pasa a una programacin VBA mas compleja para 'uscar soluciones m(s !ntegras. Qu es VBA? VBA significa Visual Basic for Applications. Es un lenguage de programacin que surge de Visual Basic (VB). #e podr!a decir que es un dialecto de VB. VBA de Excel est( adaptado a Excel, para tra'ajar con celdas, )ojas, autofiltro etc (es decir, los o'jetos de la aplicacin Excel). Puedo acceder a VBA? #!. VBA est( incluido en el Excel .normal corriente.. #e instala con Excel por defecto. Porqu VBA? VBA sir/e para muc)as cosas. 0mag!nate todas las tareas repetiti/as que tienes que ejecutar todos los d!as. &n ejemplo , siempre /as aplicando el mismo formato a un grupo de celdas de un li'ro que te mandan todos los d!as. En /ez de )acer un monton de clic1s para o'tener este formato, puedes automatizar el proceso, a un 'oton, o un atajo de teclado. 2am'i3n puedes crear aplicaciones que importan datos desde el li'ro ma or, reorganizan los datos, crean informes personalizados para cada departamento. 4asi no )a l!mites.
VBA de Excel te permite interactuar no solo con otros li'ros Excel, sino con todos los programas $ffice, como Access, %ord etc (menos 0nfo+at) que forma parte del $ffice 5667). Origen de VBA Es de "icrosoft, surge de BA#04 (Beginner8s All,purpose # m'olic 0nstruction 4ode, o 4digo de 0nstrucciones #im'licas de &so 9eneral para +rincipiantes), el cual en su turno es un lenguage que tiene muc)os aos a (desde los aos sesenta). Existen varios VBAs? VBA existe para todas las aplicaciones de "icrosoft $ffice, estas se llaman .)ost aplicacions.. As! que )a VBA para Excel, otro para %ord etc. 4ada VBA se parece al resto, pero tam'i3n tienen diferencias, por ser/ir distintos .)ost aplications.. Excel utiliza, por supuesto, VBA para Excel. El editor VBA de Excel El editor VBA sir/e para controlar manipular tu cdigo VBA, tanto de macros como de completas aplicaciones VBA add,ins. 2odo parece muc)o a Visual Basic, con la diferencia de que VBA tiene otros o'jetos ()oja, celda etc):m3todos:e/entos. ontenido de un pro!ecto En la columna de izquierda tenemos las piezas que forman parte del pro ecto. En este ejemplo tenemos dos li'ros a'iertos; Libro1.xls Personal add-ins.xla (este segundo es un Add,in:4omplemento). Este -i'ro las )ojas del li'ro Excel Objetos 4ontenedores para el cdigo del pro ecto Mdulos 2us propios formularios, con controles ('otones, men<s... = Formularios cdigo
Qu es una macro "e#iniciones -a definicin m(s com<n de una macro es que se trata de un pequeo programa que sir/e para automatizar tareas repetiti/as. ?ormalmente se guarda en el mismo li'ro Excel en cual se /a a ejecutar, pero se puede guardar en otros li'ros Exel, tanto como en li'ros Add,in. 4uando ese programa crezca, podr( empezar a llamarse programa. +ero si )a'lamos de un programita que sir/e para ejecutar sencillas, repetiti/as tareas, de'emos llamarlo macro. El nom're macro /endr( de .macro,instrucciones. que as! se llama'an antes. #upongo que se referir!an a .instrucciones que i'an m(s all( de los men<s.. Para qu sirven las macros? +ara cualquier tra'ajo realizado en Excel, pr(cticamente. +uedes automatizar procesos, importaciones de Access, dar un formato predefinido (por ti) a las celdas seleccionadas, atajo para mandar el <ltimo +!/ot de Excel a $utloo1... Cmo grabar una macro Excel VBA +ara aprender a programar VBA de Excel la mejor manera de empezar es pro'a'lemente la gra'acin de macros en Excel. Es f(cil gra'ar tus propias macros. @ con un ligero retoque, salen toda/!a mejor. Preparar la gra$aci%n Entra Herramientas - Macro - Grabar nueva macro.
+on un nom're descripti/o, por ejemplo AosAecimales. #i quieres espacio entre pala'ras, pon AosBAecimales. #i quieres que la macro se acti/e desde el teclado, pon la com'inacin, por ejemplo 42C- = -. +resionando "A@&-A te dar(n toda/!a m(s com'inaciones. $ se guarda en Este -i'ro, o en -i'ro de "acros +ersonales. #i eliges -i'ro de "acros +ersonales, la macro /a a estar
disponi'le desde cualquier li'ro de Excel. #escripci$n #i quieres puedes poner un texto explicati/o el cual se incluir( en el cdigo de la macro. +resiona $D. A)ora la macro gra'ar( todo lo que pase a tu li'ro de Excel. #i seleccionas celda EF, esa misma accin se gra'ar(. Aespu3s, al ejecutar la macro, esa celda se seleccionar( (Gsorpresa...H). Entonces, mientras gra'as, selecciona celda EF, cam'ia el formato a ?<mero , 5 decimales. +aramos la gra'acin. Editar la macro gra$ada Entra el VBA editor (Herramientas- Macro - Visual Basic Editor).
Entra "dulos , "dulo F. A la derec)a se /e lo que VBA te )a gra'ado. El cdigo )ace que Excel selecione celda EF, que luego aplique un formato de n<mero de dos decimales. Es decir, la macro solo actuar( so're la celda EF. Al cam'iar el cdigo un poco podremos )acer que VBA cam'ie el formato a cualquier celda que tengas seleccionada. -impia el cdigo para que quede el siguiente marcado. Selection.NumberFormat = "0.00" E&ecutar la macro A)ora, /uel/e a la )oja, prue'a t< nue/a macro. #elecciona un rango de celdas, aplica el atajo (42C-=-). 2am'i3n puedes ejecutar la macro desde Herramientas - Macro - Macros. Macros personales en Excel 'u son las macros personales? #on macros que est(n accesi'les desde cualquier li'ro Excel. Estas macros se guardan en un li'ro especial llamado Personal.xls (Libro de Macros Personales). Al a'rir Excel, este li'ro se cargar(, ocultamente. Ae este modo, las macros que gra'es all! siempre estar(n accesi'les. 0deal para tus propios atajos, cmo por ejemplo #eparador de miles, +egar /alor etc. (o$re el li$ro Personal)xls Es un li'ro Excel normal corriente, pero con unas caracter!sticas especiales. I 2iene el nom're de +ersonal.xls I 4ontiene cdigo VBA para tus macros, funciones etc. I #e carga autom(ticamente al iniciar Excel
I 2iene el atri'uto Eidden (escondido) acti/ado (Ventana , "ostrar) I #e guarda en uno de estos sitios (normalmente) c:\Program Files\Microsoft Office\Office\InicioXL (XL tart! c:\"ocuments and ettings\ #user name# \$%%lication "ata\Microsoft\Excel\InicioXL %mo se crea el li$ro Personal)xls? Ea dos maneras de crear este li'ro. 1. Por tu cuenta% 4rea un li'ro nue/o, guardalo en la carpeta 0nicioJ- indicado arri'a, /uel/es a Excel para luego ocultarlo (Ventana , $cultar). -uego, para colocar macros dentro de tu nue/o li'ro, puedes introducirlas manualmente (editor VBA) o gra'ar una macro nue/o guardarla dentro del -i'ro de "acros personales. +ara gra'ar una macro /er 9ra'ar una macro. &. #e ar 'ue (xcel te a)ude% Al gra'ar una macro indicas donde guardarla. #i eliges -i'ro de macros personales, Excel crear( el li'ro +ersonal.xls en la carpeta 0nicioJ-. +ara gra'ar una macro /er 9ra'ar una macro. Alternativas a macros personales En /ez de colocar tus macros en el -i'ro de "acros +ersonales, puedes crear un Add,in (4omplemento). Este es un li'ro K.xlaL que se carga cada /ez que a'res Excel (igual que el -i'ro de "acros +ersonales), que no est( ocultado pero tampoco /isi'le.
VBA Variables (nlace #escripci$n 2ipos de Ceferencia de /aria'les /aria'les Aeclarar /aria'les -a importancia de declarar las /aria'les. Tipos de ariables A'ajo presentamos los m(s frecuentes tipos de /aria'le de Excel VBA. *ipo B)tes #escripci$n +omentario F 6,5MM 0ntegrales &'te positi/os F 2rue:>alse Valores discretos &oolean 5 ,75.NOP )asta = ... 0ntegrales Integer Q ,5.FQN.QP7.OQP )asta = ... 0ntegrales Long (long int(! Q ,7,Q65P57 E7P )asta = ... Aecimales ingle P ,F,NRNOR7F7QPO575 E76P )asta = Aecimales "ouble ... P FM d!g. = Q decimales ?<mero, Q dec. )urrenc' P F,ene,F66 )asta 7F,dic,RRRR >ec)as "ate Q referencia a o'jetos Ej. *%or1'oo1* Object F6= car(cteres Ascii (texto) 2exto tring F= car(cteres Ascii, longitud predef. 2exto tring (long( fija! FO= cualquier tipo de datos 4u're la ma or!a *ariant !eclarar ariables Porqu declarar varia$les? El cdigo saldr ms estructurado #i no declaras un /aria'le, no sa'r(s que tipo de datos contendr(. Es ms seguro - evitars errores tipogrficos VBA te a udar( a poner los nom'res correctos. #i no, un error tipogr(fico puede parar el programa. El cdigo trabajar ms eficaz Varia'les no declaradas ser(n tratatos como Variants, las cuales ocupan muc)a m(s memoria. Te a udar a programar VBA te a uda a elegir propiedades:m3todos que corresponden a esa /aria'le. "eclarar varia$les &na /aria'le se declara empleando el comando A0". A0" significa Aimension, /iene del antiguo BA#04. Al declarar, puedes indicar el n<mero de
dimensiones que la /aria'le /a a tener (ej. guardar n<meros dentro de una /aria'le, en 7 dimensiones). +ara que sea m(s f(cil leer el cdigo, pon un indicador en el nom're de la /aria'le. As! 'asta con leer el nom're de la /aria'le para sa'er de que tipo es. +uede ser str para #tring, int para 0nteger etc. &na alternati/a al A0" es +u'lic. -a /aria'le ser( accesi'le desde todas partes de t< pro ecto VBA. Poner nom$res explicativos 0ntenta poner nom'res explicati/os a las /aria'les. Aim str4odigo+ostal as #tring Aim dat>ec)aCecogida as Aate El nom're puede tener )asta 5MQ car(cteres (por supuesto demasiado...). ?o puede empezar con una cifra. Algunos nom'res son reser/ados para VBA:Excel, la cual te notificar( al ejecutar. "onde poner las declaraciones? VBA te deja declarar casi en cualquier sitio del cdigo. ?o o'stante, la posicin puede dar resultados distintos. +or eso es recomenda'le seguir unas normas. *ipo de ,bicaci$n Accesible declaraci$n Encima del procedimiento 2odos los procedimientos del "im (antes del primer #u') mdulo. Antes de un procedimiento Ese procedimiento . "im espec!fico. Aentro de un procedimiento. Cesto de ese procedimiento. "im Encima del procedimiento 2odos los procedimientos (de Public (antes del primer #u') todos los mdulos).
Para qu sirven los $ucles -os 'ucles sir/en para repetir instrucciones /arias /eces. A lo mejor tienes una columna en Excel con 5M.666 nom'res, quieres sacar las personas cu os apellidos empieza con *-o*. En este caso se puede emplear un 'ucle que e/alua todos estos nom'res seg<n el criterio *-o*, uno por uno. Ea dos tipos generales de 'ucles; Bucles Do... Loop Cepite las instrucciones mientras:)asta etc. una condicin es 2C&E:VECAAAEC$. #o -.ile... Loop Cepite las instrucciones mientras una condicin es 2C&E:VECAAAEC$. #o until... Loop Cepite las instrucciones )asta que una condicin se con/ierta en 2C&E:VECAAAEC$. /.ile... /end 0gual al 'ucle Ao S)ile... -oop. Bucles For... Next Cepite las instrucciones un n<mero especificado de /eces. 0or i... Next Cepite las instrucciones i /eces. !o "#ile$$$ %oop &"#ile$$$ "end
0nstruccin que repite las instrucciones mientras una condicin es 2C&E:VECAAAEC$. E&emplo Excel tiene /alores en las celdas BF;BF66. Tuieres 'uscar la primera celda que tenga un /alor m(s alto:igual que F,M6. i = 1 Do While Cells(i, 2) < "" ! Cells(i, 1) = 1." #hen $%it Do i = i & 1 'oo( )s*+o% "$l ,alor se encontr- en !ila no. " . i
i U la l!nea donde empezamos el 'ucle. +onemos i U F. 4ells(i, 5) significar( l!nea i (UF), columna 5. Es decir celda BF. Al final del 'ucle, i nos dar( la l!nea que 'uscamos. Ao %)ile 4ells(i, 5) VW ** significa que queremos que un 'ucle siga )asta que no )a an m(s celdas con /alores en esta columna. Aplicamos la condicin a cada celda, para luego salir del 'ucle (Exit Ao) si encuentra un /alor igual a m(s alto que F,M6 (VBA utiliza punto en /ez de coma para decimales). Al final de/ol/emos un "essage'ox para presentar el resultado. !o until$$$ %oop
0nstruccin que repite las instrucciones )asta que una condicin se con/ierta en 2C&E:VECAAAEC$. E&emplo &na )oja Excel tiene datos (en este caso nom'res) en las celdas AF;AM. Tueremos que el 'ucle pare en *Alexis*. $ & + $lberto , $lejandro $lex . $lexis / $llain 0
i = 1 Do /ntil Cells(i, 1) = "0le%is" i = i & 1 'oo( )s*+o% "$l nombre 0le%is se encontr- en la l1nea " . i i U la l!nea donde empezamos el 'ucle. +onemos i U F. 4ells(i, F) significar( l!nea i (UF), columna F. Es decir celda AF. Al final del 'ucle, i nos dar( la l!nea que 'uscamos. Ao &ntil 4ells(i, F) U *Alexis* significa que queremos que un 'ucle que siga )asta que se encuentre el texto *Alexis*. Al final presentamos una caja de di(logo para presentar el resultado, cual en este caso ser!a Q. 'or i$$$ (ext Esta instruccin se repite el n<mero de /eces (i) que t< indicas.
E&emplo 4reamos un 'ucle sencillo. Tueremos que se repita Q /eces, que la /aria'le intValor (al empezar U F) se incremente con 5 cada /uelta. Este nos da el resultado intValor U R (F=5=5=5=5). $'ser/a que el 'ucle tiene step F. Esto significa que i se incrementa con F cada /uelta. Esto es, que si queremos un 'ucle que /a a para atr(s, pondr!amos step ,F.
0nstruccin que repite las instrucciones seg<n el n<mero de o'jetos especificados. +or ejemplo, 0or eac. +ell de un rango en Excel. E&emplo En este ejemplo /amos a construir un 'ucle que e/alua cada celda de un rango. El rango ser( celdas AF;AM, que se escri'e como Cange(4ells(F, F), 4ells(M, F). 4on el Exit >or salimos del 'ucle al cumplir la condicin. Dim rn*0rea rn*0rea = 4an*e(Cells(1, 1), Cells(", 1)) For $ach Cell 5n rn*0rea 5! Cell = "0le%is" #hen )s*+o% "6$ncontr- 0le%is" $%it For $n7 5! Ne%t
VBA Excel ) e*emplos pr+cticos de macros &na de las utilidades principales de VBA es la de automatizar tareas cotidianas, como por ejemplo crear un atajo (del teclado) para la funcin de .+egar como /alor. en Excel. Estas pequeas aplicaciones suelen denominarse .macros., pero Excel VBA tam'i3n sir/e para la programacin de aplicaciones m(s complejas, como ser/icios de 'ases de datos la manipulacin de arc)i/os. E&emplos de macros VBA de Excel Esta lista de ejemplos VBA de Excel recopila algunas pequeas aplicaciones de cdigo VBA. Cecuerda , )az una copia de seguridad antes de aplicar cdigo VBA a tus arc)i/os. (xcel ) otros pro1ramas "3todo para a'rir,copiar,modificar,cerrar Excel desde VB. "arcador de tel3fono 4mo marcar el tel3fono desde Excel (A+0). 0mportar texto de %ord a Excel Aplicamos la funcin .4reate $'ject. de VBA para importar textos desde %ord. "acro para pegar celdas Excel "andar celdas Excel a una ta'la nue/o de en ta'la %ord %ord. 0mportar celdas de Excel a AA$ de Excel VBA nos deja conectar con otro Excel li'ro Excel para importar datos. (xcel ) bases de datos Access a Excel (AA$) 4rear:modificar arc)i/o de texto 0mportar dBase 0V a Excel A'rir arc)i/o de texto en Excel 0mportar (AA$) una ta'la Access a Excel. 4digo VBA , arc)i/o de texto como 'ase de datos. 0mportar una 'ase de datos dBase 0V a una )oja Excel. Ejemplo VBA cmo a'rir arc)i/os planos en Excel. (xcel ) 2utloo3 Excel por e,mail 0mportar datos de $utloo1 a Excel "andar )oja Excel por e,mail. 0mportar datos de $utloo1 a Excel. (VBA) A'rir Excel desde VB
Libros ) .o as (xcel -i'ros Eojas >ormatos >ilas 4olumnas -i'ros, )ojas etc. 4digo para insertar ordenar las )ojas Excel . >ormatear celdas en Excel (VBA). VBA; 2ra'ajar con filas. VBA; 2ra'ajar con columnas.
Cepasar arc)i/os:carpeta
Exportar Excel a Visual Basic Excel permite la exportacin de datos a un montn de aplicaciones como de Visual Basic, 'ases de datos, J"- etc. Es este ejemplo Excel presentamos una solucin para pasar datos desde celdas Excel a una /aria'le Visual Basic. En concreto /amos a )acer lo siguiente;
A'rimos un arc)i/o Excel desde VB -eemos el contenido del arc)i/o Excel +asamos el contenido Excel a una /aria'le Visual Basic +or <ltimo 4erramos la )oja de c(lculo on#iguraciones Excel*Visual Basic +ara que esto funcione, Visual Basic necesitar( cargar los o'jetos de Excel. +or eso, no ol/ides marcar Microsoft (xcel x.xx 2b ect Librar) en tu Visual Basic , +ro ecto:Ceferencias %digo Visual Basic para importar datos Excel Private Sub LeerExcel() 87imensiones Dim %l0(( 0s $%cel.0((lication Dim %l'ibro 0s $%cel.Wor9boo9 Dim %l:o;a 0s $%cel.Wor9sheet Dim ,ar)atri< 0s 2ariant Dim ln*/ltimaFila 0s 'on* 8abrir (ro*rama $%cel Set %l0(( = Ne= $%cel.0((lication 8%l.2isible = #rue 8abrir el archi,o $%cel (archivo en otra carpeta) Set %l'ibro = %l0((.Wor9boo9s.>(en ? ("c@AFa%2.%ls", #rue, #rue, , "") 8abrir el archi,o $%cel (archivo en la misma carpeta) Set %l'ibro = %l0((.Wor9boo9s.>(en(0((.Bath . ? "AFa%2.%ls", #rue, #rue, , "") Set %l:o;a = %l0((.Wor9sheets(":o;a1")
81. Si conoces el ran*o a leer 8,ar)atri< = %l:o;a.4an*e("01@C10").2alue 82. Si no conoces el ran*o ln*/ltimaFila = ? Columns("0@0").4an*e("0C""DC").$n7(%l/().4o= ,ar)atri< = %l:o;a.4an*e(Cells(1, 1), ? Cells(ln*/ltimaFila, 1)) 8utili<amos los 7atos... #e%t1.#e%t = ,ar)atri<(2E, 1) 8cerramos el archi,o $%cel %l'ibro.Close Sa,eChan*es@=False %l0((.Fuit 8reset ,ariables 7e los ob;etos Set %l:o;a = Nothin* Set %l'ibro = Nothin* Set %l0(( = Nothin* End Sub
on#iguraciones
Ea una parte del cdigo, que se puede configurar, por si alguien quiere llamar desde un lugar donde se tra'aja con una central telefonica. 9eneralmente para tomar una linea te pide que marques el (6).
BhoneCall "0" & strNumero, strNombre
El cdigo
8
>(tion $%(licit Bri,ate Declare Function ta(i4eGuest)a9eCall ? 'ib "#0B5D2.D''" ? (+H2al Dest 0s Strin*, ? +H2al 0((Name 0s Strin*, ? +H2al Calle7BartH 0s Strin*, ? +H2al Comment 0s Strin*) 0s 'on* Private Sub PhoneCall(sNumber As String, sName As String) Dim l4et2al 0s 'on* l4et2al = ta(i4eGuest)a9eCall(#rimI(sNumber), ? ")arcan7o", #rimI(sName), "") 5! l4et2al < 0 #hen $n7 5! $n7 Sub Public Sub Marcar ele!ono() Dim strNumero 0s Strin* Dim strNombre 0s Strin* strNombre = 0cti,eCell.2alue strNumero = 0cti,eCell.>!!set(0, 1).2alue BhoneCall "0" & strNumero, strNombre End Sub
El c%digo
Sub "eterminarPais() Co7i*oBais = 0((lication.5nternational(%lCountrHCo7e) 5! Co7i*oBais = 1 #hen )s*+o% (":ello") $lse5! Co7i*oBais = D3 #hen )s*+o% (":ola") $n7 5! End Sub
4over 2o&a
Wor9sheets("in!orme"").)o,e 0!ter@=Wor9sheets("5n!orme3")
intNumero:o;as = 0cti,eWor9boo9.Wor9sheets.Count For i = 1 #o intNumero:o;as For ; = i #o intNumero:o;as 5! 'Case(Wor9sheets(;).Name) < 'Case(Wor9sheets(i).Name) #hen Wor9sheets(;).)o,e +e!ore@=Wor9sheets(i) $n7 5! Ne%t ; Ne%t i
El c%digo
Private Sub #or$sheet%SelectionChange(&'(al Dim str4uta 0s Strin* Dim int4o=0ctual, intColumn0ctual 0s Double Dim int4o=, intColumn 0s Double 8ruta a ima*en str4uta = "C@Aima*en.;(*" 8!ilaMcolumna actual int4o=0ctual = 0cti,eCell.4o= intColumn0ctual = 0cti,eCell.Column 8!ilaMcolumna 7e scroll4o= int4o= = 0cti,eWin7o=.Scroll4o= & 1 intColumn = 0cti,eWin7o=.ScrollColumn 8insertamos comentario Cells.ClearComments With Cells(int4o=, intColumn) .077Comment .Comment.#e%t #e%t@=":ola" .Comment.2isible = #rue $n7 With
arget As )ange)
8aNa7imos ima*en al comentario Cells(int4o=, intColumn).Comment.Sha(e.Select #rue Selection.Sha(e4an*e.Fill./serBicture str4uta 8a(arcamos en cel7a actual Cells(int4o=0ctual, intColumn0ctual).Select End Sub
8os procedimientos
+on este cdigo en el contenedor .EsteLibro. del editor VBA (*erra+ientas ' Macro ' Editor %&A). -uego tienes que poner que )ojas:pala'ra de paso (/er . Preparar +odelo. del cdigo).
Dim strStart:o;a 0s Strin* Dim strSe*un7a:o;a 0s Strin* Private Sub #or$boo$%SheetActivate(&'(al Sh As *b+ect) Dim < 0s 5nte*er Dim i 0s 5nte*er Dim % 0s +oolean Dim ,ar:o;a 0s 2ariant Dim ,arBaso 0s 2ariant Dim ,ar5n(ut 0s 2ariant 8(re(arar mo7elo Oa7min. in(utP ,ar:o;a = 0rraH("Sheet2", "SheetD") 8las ho;as a (rote*er... ,arBaso = "*o!io" 8(alabra 7e (aso... OletrasMnQmerosP 87esconectar otros $,ents (e,itar un ti(o 7e bucle) 0((lication.$nable$,ents = False 8com(robar ho;as strSe*un7a:o;a = Sh.Name For i = '+oun7(,ar:o;a) #o /+oun7(,ar:o;a) 5! ,ar:o;a(i) = strSe*un7a:o;a #hen % = #rue Ne%t i 5! % = False #hen Ko#o LL 8ocultar la ho;a tem(oralmente < = 0cti,eWin7o=.5n7e% Win7o=s(<).2isible = False 8com(arar (alabra 7e (aso ,ar5n(ut = 5n(ut+o%("Balabra 7e (aso@") 5! ,ar5n(ut < ,arBaso #hen Sheets(strStart:o;a).Select 8,ol,er a mostrar la ho;a Win7o=s(<).2isible = #rue LL@ 8conectar $,ents 0((lication.$nable$,ents = #rue End Sub 8RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR Private Sub #or$boo$%Sheet"eactivate(&'(al Sh As *b+ect) 8recor7ar ho;a inicial strStart:o;a = Sh.Name End Sub
Procedimiento
Empezamos con un li'ro Excel cualquier, pero que tenga por lo menos dos )ojas. -uego /amos a crear un mdulo dentro de este li'ro. En este mdulo escri'imos el cdigo.
rear el m%dulo
Entra a 3erramientas # Macros # Editor *&$. A la izquierda /es (si no lo /es )45L65) algo como *Pro'ecto*&$ (4u libro!. "arca ese pro ecto. Insertar # Mdulo. Ao'le clic1 en el mdulo nue/o, a la derec)a sale un espacio 'lanco, es para el cdigo.
El c%digo
Sub Lin$s%ho+as() Dim =rb'ibro 0s Wor9boo9 Dim =rs:o;a0cti,a 0s Wor9sheet, =s:o;a 0s Wor9sheet Dim intFila, intColumna 0s 5nte*er Set =rb'ibro = 0cti,eWor9boo9 Set =rs:o;a0cti,a = 0cti,eSheet 8en Gue !ilaMcolumna em(e<ar la lista intFila = 3 intColumna = 1 8el bucle re(asa to7as las ho;as For $ach =s:o;a 5n =rb'ibro.Wor9sheets 8(ara e%cluir ho;a 7e los lin9s 5! =s:o;a.Name = ":o;a3" #hen Ko#o Bro%:o;a 8crear lin9s 5! =s:o;a.Name <
=rs:o;a0cti,a.Name #hen
=rs:o;a0cti,a.:H(er'in9s.077 =rs:o;a0cti,a.Cells(intFila, intColumna), ? "", Sub077ress@="8" . =s:o;a.Name . "8S01", ? #e%t#oDis(laH@==s:o;a.Name intFila = intFila & 1 $n7 5! Bro%:o;a@ Ne%t =s:o;a End Sub
E&ecutar macro
+ara ejecutar esta macro entras a 3erramientas # Macros. All! encontrar(s la macro *Conectar,Excel,A-!*. "arca esta, *Ejecutar*.
opia de seguridad
9uarda una copia de seguridad de tu li'ro. Eazlo porque nunca sa'es.
rear el m%dulo
Entra a 3erramientas # Macros # Editor *&$. A la izquierda /es (si no lo /es )45L65) algo como *Pro'ecto*&$ (4u libro!. "arca ese pro ecto. Insertar # Mdulo. Ao'le clic1 en el mdulo nue/o, a la derec)a sale un espacio 'lanco, es para el cdigo.
El c%digo
Sub ,uitar(inculos() Dim Dim Dim Dim ,ar2inculo 0s 2ariant =rs:o;a 0s Wor9sheet ob;Cel7a 0s >b;ect ,ar)s* 0s 2ariant
8(0) /n (eGueNo control ,ar)s* = )s*+o%("T:a *uar7a7o una co(ia 7e se*uri7a7U", ,bVesNo) 5! ,ar)s* = E #hen $%it Sub 8(1) Fuitar ,1nculos e%ternos (a otros libros) ,ar'in9 = 0cti,eWor9boo9.'in9Sources(#H(e@=%l'in9#H(e$%cel'in9s) 5! Not 5s$m(tH(,ar'in9) #hen i = 1 Do /ntil 5s$m(tH(,ar'in9) >n $rror Ko#o L 0cti,eWor9boo9.+rea9'in9 Name@=,ar'in9(i), ? #H(e@=%l'in9#H(e$%cel'in9s i = i & 1 'oo( $n7 5! L@ 8(2) Fuitar ,1nculos internos (a otras ho;as) >n $rror 4esume Ne%t For $ach =rs:o;a 5n 0cti,eWor9boo9.Wor9sheets For $ach ob;Cel7a 5n =rs:o;a./se74an*e.S(ecialCells(%lCell#H(eFormulas, 2D) 5! 5nStr(ob;Cel7a.Formula, "S") #hen ob;Cel7a.2alue = ob;Cel7a.2alue Ne%t Ne%t End Sub
E&ecutar macro
+ara ejecutar esta macro entras a 3erramientas # Macros. All! encontrar(s la macro *Conectar,Excel,A-!*. "arca esta, *Ejecutar*.
Procedimiento
Empezamos con el li'ro de una o /arias )ojas. -uego /amos a crear un mdulo dentro de este li'ro. En este mdulo escri'imos el cdigo.
rear el m%dulo
Entra a 3erramientas # Macros # Editor *&$. A la izquierda /es (si no lo /es )45L65) algo como *Pro'ecto*&$ (4u libro!. "arca ese pro ecto. Insertar # Mdulo. Ao'le clic1 en el mdulo nue/o, a la derec)a sale un espacio 'lanco, es para el cdigo.
%digo
Sub Crear%archivos%de%ho+as() Dim str:o;a, strStart:o;a, str4uta 0s Strin* Dim i 0s 5nte*er 0((lication.Screen/(7atin* = False strStart:o;a = 0cti,eCell.Wor9sheet.Name 8bucle to7as ho;as For i = 1 #o Sheets.Count 8co(ia la ho;a a libro nue,o Sheets(i).0cti,ate str:o;a = 0cti,eCell.Wor9sheet.Name Sheets(str:o;a).Co(H 87on7e *uar7ar los archi,os crea7os str4uta = "C@Ae%celA,baAe;em(los" 8*uar7a el libro nue,o 0cti,eWor9boo9.Sa,e0s Filename@=str4uta . "A" . str:o;a, ? FileFormat@=%lNormal, Bass=or7@="", Write4esBass=or7@="", ? 4ea7>nlH4ecommen7e7@=False, Create+ac9u(@=False 0cti,eWin7o=.Close Sa,echan*es@=#rue 8re(etir bucle8 Ne%t Sheets(strStart:o;a).0cti,ate 0((lication.Screen/(7atin* = #rue End Sub
E&ecutar macro
+ara ejecutar esta macro entras a 3erramientas # Macros. All! encontrar(s la macro *Conectar,Excel,A-!*. "arca esta, *Ejecutar*.
Sub Encontrar-ltimaColumna() Dim int/ltimaCol 0s 5nte*er 5! Wor9sheetFunction.Count0(Cells) 0 #hen int/ltimaCol = Cells.Fin7(What@="R", 0!ter@=O01P, ? Search>r7er@=%l+HColumns, ? SearchDirection@=%lBre,ious).Column )s*+o% int/ltimaCol $n7 5! End Sub
5! Delete4an*e 5s Nothin* #hen $%it Sub 5! Delete4an*e.0reas.Count 1 #hen $%it Sub 5! n < 2 #hen $%it Sub With Delete4an*e cCount = .Columns.Count For c = n #o cCount Ste( n X 1 .Columns(c).$ntireColumn.Delete Ne%t c $n7 With End Sub
En este caso se utiliza una macro, para que resalte el enca'ezado de las columnas filtradas. El usuario tiene la posi'ilidad de elegir el color que prefiere. En este caso tiene unos ejemplos pero se puede agregar m(s colores.
El c%digo
>(tion $%(licit 8 8aHu7ae%celY Hahoo.com.ar Private Sub #or$sheet%Calculate() Dim a! 0s 0utoFilter Dim !Filter 0s Filter
Dim iFilterCount 0s 5nte*er 5! 0cti,eSheet.0utoFilter)o7e #hen Set a! = 0cti,eSheet.0utoFilter iFilterCount = 1 For $ach !Filter 5n a!.Filters 5! !Filter.>n #hen a!.4an*e.Cells(1, iFilterCount) ? .5nterior.Color5n7e% = 4an*e("color") $lse a!.4an*e.Cells(1, iFilterCount) ? .5nterior.Color5n7e% = %lNone $n7 5! iFilterCount = iFilterCount & 1 Ne%t !Filter $lse 4o=s(1).$ntire4o=.5nterior.Color5n7e% = %lNone $n7 5! End Sub
int/ltimaFila = ? Columns("0@0").4an*e("0C""DC").$n7(%l/().4o=
int/ltimaFila = ? 0cti,eSheet./se74an*e.4o= X 1 & 0cti,eSheet./se74an*e.4o=s.Count For r = int/ltimaFila #o 1 Ste( X1 5! 0((lication.Count0(4o=s(r)) = 0 #hen 4o=s(r).Delete Ne%t r
Procedimientos
Vamos a necesitar tres sencillas macros. F. StartTe+pori1ador , 0niciar el temporizador 5. T.,S.b , 4ualquier instruccin 7. StopTe+pori1ador , 4errar el temporizador -uego )acen falta dos 'otones en la )oja, uno para la macro StartTe+pori1ador, StopTe+pori1ador. otro para la
"eclaraciones
+or encima de las macros descritas a'ajo, )acemos las declaraciones.
Bublic 7at:ora 0s Date Bublic Const con5nter,alo = C0 8un minuto Bublic Const con4un)acro = "#u?Sub" 8tu (roce7.
3niciar tempori;ador
-a primera macro inicia el temporizador.
Sub Start empori.ador() 7at:ora = No= & #imeSerial(0, 0, con5nter,alo) 8iniciar el tem(ori<a7or 0((lication.>n#ime ? $arliesttime@=7at:ora, ? Broce7ure@=con4un)acro, ? Sche7ule@=#rue End Sub
Tu procedimiento
Aqu! pones lo que quieres que Excel )aga periodicamente.
Sub u%Sub() )s*+o% 7at:ora 8o cualGuier instrucci-n 8reiniciar el tem(ori<a7or Start#em(ori<a7or End Sub
errar tempori;ador
El temporizador )a que cerrarlo .manualmente..
Sub Stop empori.ador() >n $rror 4esume Ne%t 87esacti,ar el tem(ori<a7or 0((lication.>n#ime ? $arliesttime@=7at:ora, ? Broce7ure@=con4un)acro, ? Sche7ule@=False End Sub
Todo el c%digo
A)ora, el mdulo de las macros descritas arri'a de'e tener el siguiente aspecto.
Bublic 7at:ora 0s Date Bublic Const con5nter,alo = C0 8un minuto Bublic Const con4un)acro = "#u?Sub" 8tu (roce7. Sub Start empori.ador() 7at:ora = No= & #imeSerial(0, 0, con5nter,alo) 8iniciar el tem(ori<a7or 0((lication.>n#ime ? $arliesttime@=7at:ora, ? Broce7ure@=con4un)acro, ? Sche7ule@=#rue End Sub Sub u%Sub() )s*+o% 7at:ora 8o cualGuier instrucci-n 8reiniciar el tem(ori<a7or Start#em(ori<a7or End Sub Sub Stop empori.ador() >n $rror 4esume Ne%t 87esacti,ar el tem(ori<a7or 0((lication.>n#ime ? $arliesttime@=7at:ora, ? Broce7ure@=con4un)acro, ? Sche7ule@=False End Sub
Procedimiento
4rea un formulario .frmMensa e. con el mensaje que quieres que aparezca. Aade este cdigo al formulario. El ejemplo nos dice que la rutina se /a a esperar (.%ait.) )asta la )ora No- 6 *imeValue(788%88%897! Es decir la )ora actual m(s Q segundos.
Sub /mportar%Access() Bri,ate Sub /serForm?0cti,ate() 0((lication.Wait No= & #ime2alue("00@00@03") !rm)ensa;e.:i7e End Sub
-uego, para mostrar el formulario en cualquier parte de tu programa, aplicas este cdigo.
!rm)ensa;e.Sho=
En el ejemplo de a'ajo, el formulario se mostrar( al a'rir el li'ro (ponemos el cdigo en el contenedor de cdigo VBA .Este-i'ro..
Private Sub #or$boo$%*pen() !rm)ensa;e.Sho= End Sub
Ae esta forma podemos aadir un medidor de progreso gr(fico a la 'arra de estado de Excel.
El c%digo
>(tion $%(licit Sub &arra"eProgreso()
Dim 4 0s 5nte*er Dim )# 0s Double For 4 = 1 #o 1[0 )# = #imer Do 'oo( While #imer X )# < 0.0" 0((lication.Status+ar = "Bro*ress@ " . 4 . " 7e 1[0@ " . ? Format(4 M 1[0, "Bercent") . " XXX " . "Cum(limiento" Do$,ents Ne%t 4 0((lication.Status+ar = False End Sub
?ormatear #uente
Cells.Select With Selection.Font .Name = ")S Sans Seri!" .Si<e = 10 $n7 With
89neas de divisi%n
0cti,eWin7o=.Dis(laHKri7lines = False
3ndice de colores
0cti,eWor9boo9.Colors(33) = 4K+(2DC, 2D", 1L3) 8,er7e
olorear rango
4an*e("01@+10").5nterior.Color5n7e% = 33
-os colores forman parte del diseo del li'ro, son importantes para una 'uena presentacin de un informe. +ero por regla general tampoco se de'e pasar utilizando demasiado color.
esetColors.
Preparamos la 2o&a
En celdas 4M;4F5 tenemos la lista en que 'uscar (celdas AM;AF5 tam'i3n pertenecen a la matriz. En celda 95 introducimos el criterio. En celdas 9M;EM el programa pondr( la lista *filtrada*, all! no tienes que introducir nada.
rear el m%dulo
Entra a 3erramientas # Macros # Editor *&$. A la izquierda /es (si no lo /es )45L65) algo como *Pro'ecto*&$ (4u libro!. "arca ese pro ecto. Insertar # Mdulo. Ao'le clic1 en el mdulo nue/o, a la derec)a sale un espacio 'lanco, es para el cdigo.
E&ecutar macro
+ara ejecutar esta macro entras a 3erramientas # Macros. All! encontrar(s la macro *Buscar?*exto?(n?Lista(!*. "arca esta, *Ejecutar*.
%digo
Sub &uscar% exto%En%Lista()
87imensiones
Dim Dim Dim Dim Dim Dim ln*/ltimaFila 0s 'on* str>b;eto+uscar 0s Strin* ln*4esulta7o 0s 'on* ln*Columna 0s 'on*, ln*Fila 0s 'on* ln*Be*arColumna 0s 'on*, ln*Be*arFila 0s 'on* % 0s 5nte*er, n 0s 5nte*er
8ob;eto a buscar
str>b;eto+uscar = 4an*e("K2").#e%t 5! str>b;eto+uscar = "" #hen Ko#o LL 8minQsculas str>b;eto+uscar = 'Case(str>b;eto+uscar)
8e,aluaci-n
ln*4esulta7o = 5nStr(1, Cells(n, D), ? str>b;eto+uscar, ,b#e%tCom(are)
8co(iarM(e*ar
5! ln*4esulta7o 0 #hen 4an*e(Cells(n, 2), Cells(n, 3)).Co(H 4an*e( ? Cells(ln*Be*arFila, ln*Be*arColumna), ? Cells(ln*Be*arFila, ln*Be*arColumna & 2)) ? .Select 0cti,eSheet.Baste ln*Be*arFila = ln*Be*arFila & 1 $n7 5! Ne%t n
8a(arcar
0((lication.CutCo(H)o7e = False 4an*e("K2").Select LL@ End Sub
Ae esta manera puedes aplicar cualquier frmula de Excel en VBA, con tal de que empieces la l!nea de cdigo con
0((lication.Wor9sheetFunction...
1uestro e&emplo
En este ejemplo el rango que nos interesa sumar son los /alores correspondientes a *BB*, es decir 4P;4F7.
Mostrar informacin al usuario 5ecibir informacin del usuario "e7ol7er informacin del usuario
4ensa&e
4ualquier tipo de texto. +ara crear un salto de l!nea empleamos el car(cter 2bCrLf.
0ctuali<aci-n termina7a@" . ,bCr'! . ? "X 5m(ortaci-n 7e 7atos 7e ,enta.
Botones #i quieres puedes aadir cualquier de estos cuatro 'otones (si no pones nada Excel te pondr( /'$1$nl por defecto).
2b!(!nl3 2b!(Cancel 2b4es$oCancel 2bAbort etr3I5nore @conos +uedes elegir entre los siguientes. 2bCritical 2b6.estion 2bExcla+ation 2bInfor+ation *5tulo
4ualquier texto. #evolver informaci$n #i quieres que el programa utilice la respuesta del usuario, estas son las cifras que te de/uel/e. !( 7 8 Cancel 7 2 Abort 7 9 etr3 7 : I5nore 7 ; 4es 7 < $o 7 =
E&emplos
2e ponemos unos ejemplos mdelo para que te /a as acostum'rando a las diferentes message'ox.
Sub Message&ox() ms*bo% "0ctuali<aci-n termina7a@", ? ,b>J>nlH, "5n!ormaci-n" End Sub
Sub Message&ox() ms*bo% "TFuieres se*uirU", ,bVesNo, ? "5n!ormaci-n im(ortante" End Sub
Sub Message&ox() Dim int4es(uesta 0s 5nte*er int4es(uesta = ms*bo%("TFuieres se*uirU", ? ,bFuestion & ,bVesNo, "5n!ormaci-n im(ortante") 5! int4es(uesta = C #hen ms*bo% "Se*uimos" $lse ms*bo% "#erminamos" $n7 5! End Sub
Sub Message&ox() ms*bo% "0ctuali<aci-n termina7a@" . ? ,bCr'! . ,bCr'! . ? "X 5m(ortaci-n 7e 7atos 7e ,enta." . ,bCr'! . ? "X C]lculos 7e im(uestos." . ,bCr'! . ? "X 2enta (or (ro,ee7or." . ,bCr'! ? , ,b>J>nlH, "0ctuali<aci-n termina7a." End Sub
Sub Message&ox() ms*bo% "0ctuali<aci-n termina7a@" . ,bCr'! . ? ,bCr'! . ? "X 5m(ortaci-n 7e 7atos 7e ,enta." . ,bCr'! . ? "X C]lculos 7e im(uestos." . ,bCr'! . ? "X 2enta (or (ro,ee7or." . ,bCr'! ? , ,b$%clamation & ,b>J>nlH, ? "0ctuali<aci-n termina7a." End Sub
Tarea
Tueremos un programa que nos calcule los d!gitos de control de una cuenta.
,n e&emplo de cuenta
6F57 , QMON , xx , 6F57QMONPR Entidad 6F57 $ficina QMON A!gitos de control Jx 4uenta 6F57QMONPR En el ejemplo arri'a, los d!gitos de control ser!an PF.
Empe;amos
A'rimos un li'ro nue/o. >ormateamos las celdas B7;E7 a 2EJ2$.
rear el m%dulo
Entra a 3erramientas # Macros # Editor *&$. A la izquierda /es (si no lo /es )45L65) algo como *Pro'ecto*&$ (4u libro!. "arca ese pro ecto. Insertar # Mdulo. Ao'le clic1 en el mdulo nue/o, a la derec)a sale un espacio 'lanco, es para el cdigo.
El c%digo
Sub "C%chec$() Dim Dim Dim Dim Dim +an9 0s Strin* >!!ice 0s Strin* DC 0s Strin* 0ccount 0s Strin* +an9>!!ice 0s Strin*
Dim 2alor1, 2alor2, 2alorD, 2alor3, 2alor" D5m 2alorC, 2alorE, 2alor[, 2alorL, 2alor10 Dim #est2alue1 0s 5nte*er Dim #est2alue2 0s 5nte*er Dim #est2alueDC 0s 5nte*er 8XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 8reco*er el nQmero 7e cuenta +an9 = 4an*e("+D").#e%t >!!ice = 4an*e("CD").#e%t DC = 4an*e("DD").#e%t 0ccount = 4an*e("$D").#e%t +an9>!!ice = +an9 . >!!ice 8XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 8e,aluar DC (1) 2alor1 = ()i7(+an9>!!ice, 1, 1) R 3) 2alor2 = ()i7(+an9>!!ice, 2, 1) R [) 2alorD = ()i7(+an9>!!ice, D, 1) R ") 2alor3 = ()i7(+an9>!!ice, 3, 1) R 10) 2alor" = ()i7(+an9>!!ice, ", 1) R L) 2alorC = ()i7(+an9>!!ice, C, 1) R E) 2alorE = ()i7(+an9>!!ice, E, 1) R D) 2alor[ = ()i7(+an9>!!ice, [, 1) R C) #est2alue1 = 2alor1 & 2alor2 & 2alorD & 2alor3 & ? 2alor" & 2alorC & 2alorE & 2alor[ #est2alue1 = (#est2alue1 )o7 11) #est2alue1 = 11 X #est2alue1 5! #est2alue1 = 10 #hen #est2alue1 = 1 5! #est2alue1 = 11 #hen #est2alue1 = 0 8XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 8e,aluar DC (2) 2alor1 = ()i7(0ccount, 1, 1) R 1) 2alor2 = ()i7(0ccount, 2, 1) R 2) 2alorD = ()i7(0ccount, D, 1) R 3) 2alor3 = ()i7(0ccount, 3, 1) R [) 2alor" = ()i7(0ccount, ", 1) R ") 2alorC = ()i7(0ccount, C, 1) R 10) 2alorE = ()i7(0ccount, E, 1) R L) 2alor[ = ()i7(0ccount, [, 1) R E) 2alorL = ()i7(0ccount, L, 1) R D) 2alor10 = ()i7(0ccount, 10, 1) R C) #est2alue2 = 2alor1 & 2alor2 & 2alorD & 2alor3 & 2alor" & ? 2alorC & 2alorE & 2alor[ & 2alorL & 2alor10 #est2alue2 = (#est2alue2 )o7 11) #est2alue2 = 11 X #est2alue2 5! #est2alue2 = 10 #hen #est2alue2 = 1 5! #est2alue2 = 11 #hen #est2alue2 = 0 8XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 8reconstituir las 7os ci!ras 7el DC #est2alueDC = #est2alue1 . #est2alue2 8e,aluar DC com(leto 5! #est2alueDC = DC #hen #est = #rue )s*+o% "Correcto." $lse #est = False )s*+o% "DC no corres(on7e a esta cuenta." . ,bCr'! . ? "Oen este caso DC ser1a " . #est2alueDC . ".P", ,b>J>nlH, ,b5n!ormation $n7 5! 8XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
End Sub
E&ecutar macro
+ara ejecutar esta macro entras a 3erramientas # Macros. All! encontrar(s la macro *Conectar,Excel,A-!*. "arca esta, *Ejecutar*.
,n e&emplo real
Al )acer clic so're la columna A, tilda la celda.
El c%digo
El cdigo de'e escri'irse en la misma )oja Excel, /er imagen.
Private Sub #or$sheet%SelectionChange(&'(al Dim a>!!set 0s 5nte*er >n $rror Ko#o err?han7ler 0((lication.$nable$,ents = False 5! Not 0((lication.5ntersect ? (#ar*et, Columns("0")) 5s Nothin* #hen
arget As Excel0)ange)
5! #ar*et.Column = 3 #hen a>!!set = D $lse a>!!set = 2 $n7 5! 5! 5s$m(tH(#ar*et.2alue) #hen With #ar*et .Font.Name = "Win*7in*s" .2alue = Chr(2"2) $n7 With #ar*et.>!!set(0, i>!!set).Select $lse #ar*et.2alue = "" #ar*et.>!!set(0, i>!!set).Select $n7 5! $n7 5! err?han7ler@ 0((lication.$nable$,ents = #rue End Sub
omentarios
+ara e/itar confusiones (so're todo si estamos preparando una plantilla para otras colegas), podr!amos optar por la frmula A,MAP:2#,+*2, que adem(s permite aplicar /arias condiciones de una manera f(cil. C $nders D(
8 :M$P5O":)4O(($,:$+->?99!E),:)+-!
Explorador de in,ormes
+esumen de este e&emplo de >Explorador de in#ormes>
Este ejemplo nos nuestra, de cmo armar un explorador de informes en Excel, manej(ndonos desde un +anel +rincipal. Esto nos permite dar una mejor est3tica a cualquier aplicacin desarrollada en Excel. La importancia del formato (xcel de presentaci$n 4omo )emos ido comentando en otros ejemplos de Excel +aptura de pantalla de esta plantilla (xcel VBA de este sitio, la presentacin de los li'ros Excel es algo mu importante, so're todo si trata de informes para distri'uir.
3nstrucciones
Encontrar(s un ejemplo real del (xplorador de arc.ivos (xcel en la carpeta de este curso en el servidor de ,"A +ara /er el cdigo utilizado, com'ine las siguientes 2eclas;A-2 = >FF.
Adem(s, esta importacin tarda poqu!simo , mu interesante si importamos muc)as ta'las al d!a.
El c%digo
Sub /mportar%Access() 87imensiones Dim 7atConnection 0s 0D>D+.Connection Dim recSet 0s 0D>D+.4ecor7set Dim strD+, strSF' 0s Strin* Dim str#abla 0s Strin* Dim ln*#ablas 0s 'on* Dim i 0s 'on* 8ele*ir uno 7e estas 7os rutas al archi,o 0ccess strD+ = #hisWor9boo9.Bath . "A" . "7b.m7b" 8strD+ = "C@A,baA7b.m7b" 8si en otra car(eta 8nombre 7e la tabla 7el archi,o 0ccess str#abla = "salarios?200D" 8crear la cone%i-n Set 7atConnection = Ne= 0D>D+.Connection Set recSet = Ne= 0D>D+.4ecor7set 7atConnection.>(en "Bro,i7er=)icroso!t.^et.>'$D+.3.0_" . ? "Data Source =" . strD+ . "_" 8consulta SF' strSF' = "S$'$C# R F4>) " . str#abla . "" recSet.>(en strSF', 7atConnection 8co(iar 7atos a la ho;a 0cti,eSheet.Cells(2, 1).Co(HFrom4ecor7set recSet 8co(iar r-tulos ln*Cam(os = recSet.Fiel7s.Count For i = 0 #o ln*Cam(os X 1 0cti,eSheet.Cells(1, i & 1).2alue = recSet.Fiel7s(i).Name Ne%t 87esconectar recSet.Close@ Set recSet = Nothin* 7atConnection.Close@ Set 7atConnection = Nothin* End Sub
O$&etos utili;ados
+ara contactar con $utloo1 desde Excel podemos utilizar el o'jeto >et$a+eSpace de la "A+0 , "essaging Application +rogramming 0nterface. -uego, el m3todo >et-efa.lt?older nos deja acceder a las carpetas de $utloo1, por ejemplo el de los 4ontactos. ParBmetro +arpeta 7 Aeleted 0tems (Elementos elimindos) Q $ut'ox (Bandeja de salida) M #ent 0tems (Elementos en/iados) O 0n'ox (Bandeja de entrada) R 4alendar (4alendario) F6 4ontacts (4ontactos) FF \ournal (Aiario) F5 ?otes (?otas) F7 2as1s (2areas) FO Arafts (Borrador)
El c%digo
Sub /mportarContactos() Dim Dim Dim Dim ol0(( 0s >utloo9.0((lication olContacts 0s >utloo9.)0B5Fol7er olContact 0s >utloo9.Contact5tem i 0s 5nte*er
Set ol0(( = Ne= >utloo9.0((lication Set olContacts = ol0((.KetNames(ace(")0B5").KetDe!aultFol7er(olFol7erContacts) 8rotulos Cells(1, Cells(1, Cells(1, Cells(1, Cells(1, Cells(1, Cells(1, Cells(1, Cells(1, Cells(1, Cells(1, Cells(1, Cells(1, Cells(1, Cells(1, Cells(1,
1) = "Nombre" 2) = "$Xmail" D) = "#1tulo" 3) = "$m(resa" ") = "#el (casa)" C) = "#el (m-bil)" E) = "#el (traba;o)" [) = "Fa% (traba;o)" L) = "Dir. (em(resa)" 10) = "Bostal (em(resa)" 11) = "Ciu7a7 (em(resa)" 12) = "Ba1s (em(resa)" 1D) = "Dir. (casa)" 13) = "Bostal (casa)" 1") = "Ciu7a7 (casa)" 1C) = "Ba1s (Casa)"
8im(ortar contact items For i = 2 #o olContacts.5tems.Count 5! #H(e>! olContacts.5tems.5tem(i) 5s ?>utloo9.Contact5tem #hen Set olContact = olContacts.5tems.5tem(i) Cells(i, 1) = olContact.FullName Cells(i, 2) = olContact.$mail1077ress
Cells(i, Cells(i, Cells(i, Cells(i, Cells(i, Cells(i, Cells(i, Cells(i, Cells(i, Cells(i, Cells(i, Cells(i, Cells(i, Cells(i, $n7 5! Ne%t
D) = olContact.^ob#itle 3) = olContact.Com(anHName ") = olContact.:ome#ele(honeNumber C) = olContact.)obile#ele(honeNumber E) = olContact.+usiness#ele(honeNumber [) = olContact.+usinessFa%Number L) = olContact.+usiness077ressStreet 10) = olContact.+usiness077ressBostalCo7e 11) = olContact.+usiness077ressCitH 12) = olContact.+usiness077ressCountrH 1D) = olContact.:ome077ressStreet 13) = olContact.:ome077ressBostalCo7e 1") = olContact.:ome077ressCitH 1C) = olContact.:ome077ressCountrH
8eliminar ,ariables 7e los ob;etos Set olContact = Nothin* Set olContacts = Nothin* Set ol0(( = Nothin* 8or7enar lista (or Nombre Cells.Sort JeH1@=4an*e("02"), >r7er1@=%l0scen7in*, :ea7er@=%lKuess End Sub
El c%digo
8
Sub Mail%ActiveSheet() Dim =b 0s Wor9boo9 Dim str7ate 0s Strin* Dim st$mail 0s Strin* str7ate = Format(No=, "77XmmXHH hXmmXss") str$mail = "aaa.bbbYccc.com" 0((lication.Screen/(7atin* = False 0cti,eSheet.Co(H Set =b = 0cti,eWor9boo9 With =b .Sa,e0s #hisWor9boo9.Name . " " . str7ate . ".%ls" .Sen7)ail str$mail, "0rchi,o 07;unto" .Chan*eFile0ccess %l4ea7>nlH Jill .FullName .Close False $n7 With 0((lication.Screen/(7atin* = #rue End Sub
Informacin adicional
-a probe con ese codigo, pero me protege toda la hoja . no puedo modificar las demas celdas: Sub Macro3() cti!eSheet."nprotect #$%3# /ells.&oc'ed ( 0alse Selection.&oc'ed ( )rue cti!eSheet.*rotect #$%3# End Sub hace 1 a2os
b. S34 Miembro desde el 56 abril %556 *untos totales: 3.78% (Ni!el 1) 2adir contacto 9loquear
=ange(#98:E$3#).Select : selecciona el rango de celdas que desees dejar bloqueadas Selection.&oc'ed ( )rue : bloquea las celdas seleccionadas Selection.0ormula<idden ( 0alse cti!eSheet.*rotect >ra?ing@bjects:()rue, /ontents:()rue, Scenarios:()rue : las protege End Sub /uando desees saber datos sobre como crear una macro puedes !er en herramientas;macro;grabar nue!a macro despues haces lo que desees en la hoja de eAcel . se estar, grabando autom,ticamente la macro, .a que termines le das en detener macro. . te !as al editor de !isual basic para !er el cBdigo generado. Suerte....