Você está na página 1de 49

Introduccin a VBA de Excel VBA (Visual Basic for Applications) es un lenguaje de macros utilizado para programar pequeas aplicaciones

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

A la derec)a /emos el marcado del $'jetos:"dulos:>ormularios.

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.

Nombre de la macro Mtodo abreviado (ata o! "uardar macro en

+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@&#4&-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).

VBA bucles Intro

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.

int2alor = 1 For i = 1 to 3 ste( 1 int2alor = int2alor & 2 Ne%t i


Inicio *&$ &ucles For Eac1((( 2ext 'or Eac#$$$ (ext

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

"3todo VBA Excel para repasar /arios arc)i/os de una 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

Marcar el tel,ono desde Excel


+esumen
#i tu pc est( equipado con mdem podr(s realizar llamadas desde Excel, teniendo el n<mero en una lista. A tra/3s de una A+0 (instruccin %indoSs) podemos )acer que Excel arranque el Marcador Telefnico. +ara usar tienes que marcar la celda con el nX, luego dar marcar.

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

#i tienes linea diecta, de'es quitar *6*.


BhoneCall 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

-b*ecto Application de Excel VBA


El o'jeto Application de VBA nos da informacin del usuario:m(quina. En este art!culo presentaremos unas aplicaciones del un o'jeto mu '(sico de Excel:VBA; Application. Este representa todo el conjunto del programa Excel sus li'ros de tra'ajo.

,nos e&emplos de propiedades del o$&eto Application


El o'jeto Application tiene muc)as propiedades. Ea unas que pueden ser interesantes para el programador de macros VBA de Excel. 2b eto Propiedad Application. &ser?ame $rganization?ame $perating# stem Version +roduct4ode #tandard>ont #tandard>ont#ize Aecimal#eparator Acti/e+rinter Aefault>ile+at) &ser-i'rar +at) #o're la /ersin de "# Excel arri'a; N4 Versi$n F5 Excel 566N FF Excel 5667 F6 Excel 5665 (*J+*) R Excel 5666 P Excel RN N Excel RM #evuelve ?om're del usuario ?om're de la empresa #istema operati/o Versin de "# Excel 4digo de "# Excel >uente por defecto 2amao fuente por defecto 4ar(cter separador de miles 0mpresora por defecto Cuta de acceso por defecto Cuta a carpeta Add,ins

!eterminar idioma del usuario desde Excel VBA


[a partir de Excel 2000] Este marcado sir/e para a/eriguar el idioma de Excel del usuario. -a funcin Application.International de Excel VBA nos a uda. -o <nico es que )a que sa'er los marcadores de telefon!a de los pa!ses para descodificar la respuesta de la funcin. Ver por ejemplo esta lista a'u5.

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

VBA . libros Excel


errar li$ro Excel -guardar cam$ios.
0cti,eWor9boo9.Close 0cti,eWor9boo9.Close Sa,echan*es@=#rue 0cti,eWor9boo9.Close(#rue)

errar li$ro Excel -sin guardar cam$ios.


0cti,eWor9boo9.Close(False) 0cti,eWor9boo9.Close Sa,echan*es@=False

errar li$ro Excel -varia$le/ sin guardar cam$ios.


0((lication.Dis(laH0lerts = False Win7o=s('ibro?maHor).Close 0((lication.Dis(laH0lerts = #rue

A$rir li$ro Excel -ruta #i&a.


Wor9boo9s.>(en FileName@="C@A#raba;oA5n!orme.%ls"

A$rir li$ro Excel -di0logo.


)s* = )s*+o%("$li;a archi,o (ara abrir.", ,b>J>nlH, ("")) str0rchi,o = 0((lication.Ket>(enFilename >n $rror Ko#o LL Wor9boo9s.>(en#e%t Filename@=str0rchi,o 5! str0rchi,o = "" #hen $%it Sub str0rchi,o = 0cti,eWin7o=.Ca(tion LL@ $%it sub

"evolver nom$re del li$ro Excel


strNombre = 0cti,eSheet.Barent.FullName )s*+o% 0cti,eWor9boo9.FullName

VBA . #o*as Excel


1om$re de la 2o&a -varia$le.
8asi*na nombre ,ariable a la ho;a a ,ariable str:o;a = 0cti,eWin7o=.Ca(tion Win7o=s(str:o;a).0cti,ate 8(ara acti,ar el libro 7el nombre asi*na7o

3nsertar 2o&a nueva -elegir posici%n.


0cti,eWor9boo9.Sheets.077 +e!ore@=Wor9sheets("5n!orme1")

3nsertar 2o&a nueva -primera posici%n.


Sheets("5n!orme1").Co(H 0!ter@=Wor9sheets(Wor9sheets.Count)

4over 2o&a
Wor9sheets("in!orme"").)o,e 0!ter@=Wor9sheets("5n!orme3")

Ordenar 2o&as -orden al#a$tico.

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

(uprimir una 2o&a 53n#orme5


0((lication.Dis(laH0lerts = False For i = 1 #o Sheets.Count Sheets(i).0cti,ate %%% = 0cti,eCell.Wor9sheet.Name 5! %%% = "5n!orme" #hen 0cti,eWin7o=.Selecte7Sheets.Delete $n7 5! Ne%t 0((lication.Dis(laH0lerts = #rue

(eleccionar primera 2o&a


0cti,eWin7o=.ScrollWor9boo9#abs Bosition@=%lFirst

(eleccionar 6ltima 2o&a


0cti,eWin7o=.ScrollWor9boo9#abs Bosition@=%l'ast

/crollro0 ) Imagen ,i*a a un costado de la pantalla


#i queremos que el usuario /ea una imagen en el costado superior izquierdo de la pantalla, est3 donde est3 en la )oja, podemos aplicar el siguiente cdigo. 2rata de utilizar la propiedad SC !LL !", que nos da la celda superior izquierdo de la pantalla /isi'le. @ SC !LLC!L#M$ de la columna por supuesto. -uego insertamos un comentario, en la cual ponemos una imagen El resultado ser( algo como un poco de texto.

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

VBA para proteger ciertas #o*as de un libro Excel


4on la a uda de un truco de VBA de Excel puedes permitir que el usuario solo pueda a'rir por ejemplo la primera )oja (sin pala'ra de paso) , pero no las otras (cuales requieren pala'ra de paso). Esta funcin no est( integrada en Excel (sorprendentemente), por eso )a que recurrir a VBA.

Eventos empleados para la protecci%n


+ara esto /amos a utilizar el e/ento %or1'oo1B#)eetActi/ate, un e/ento que salta cada /ez que alguna )oja se acti/e. Es decir, el e/ento se acti/ar( cuando el usuario )ace clic1 so're una etiqueta de una )oja. #i la )oja forma parte de las restringidas, Excel pedir( pala'ra de paso. Al introducir una pala'ra de paso erronea, se queda en la )oja anterior.

7rado de seguridad de la macro para proteger 2o&as


4ualquier persona puede entrar al cdigo VBA para /er la pala'ra de paso. +or eso de'es proteger el codigo (%&A editor ' Clic( derec)o sobre EsteLibro ' Propiedades ). Este m3todo no da F66Y de seguridad. #i acti/amos la proteccin de los mdulos VBA tenemos 'astante seguridad, pero )a que tener en cuenta que existen /arios programas comerciales para resol/er el tema de pala'ras de paso de Excel.

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).

%digo VBA para proteger 2o&as Excel

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

Inicio *&$ Ejem%los

Crear enlaces a las #o*as Excel


#i nuestro li'ro Excel contiene muc)as )ojas ()asta 5MO) con/endr!a )acer una lista de enlaces a cada )oja. Esto puede a udar muc)o a los .na/egantes. de nuestros li'ros. @ como siempre, esta lista se puede crear manualmente. $ se puede recurrir a una macro de VBA, cual tardar( al m(ximo un par de segundos para concluir el tra'ajo.

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.

3erramientas # 5eferencias. "arca Microsoft $cti7eX "ataObjects x(x Librar' .

A)ora cierras el editor VBA, /uel/es a Excel. 9uardamos el li'ro.

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*.

Macro VBA para eliminar 1nculos Excel


4on esta macro podr(s eliminar /!nculos a otras )ojas:li'ros. I Elimina /!nculos a otras )ojas:li'ros I Ceferencias dentro de la )oja se mantienen. I -os /!nculos se con/ierten en /alores. I Antes de todo, Grecuerda )acer una copia de seguridadH

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.

3erramientas # 5eferencias. "arca Microsoft $cti7eX "ataObjects x(x Librar' .

A)ora cierras el editor VBA, /uel/es a Excel. 9uardamos el li'ro.

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*.

Macro VBA para crear arc#i os de cada #o*a Excel


4on un m!nimo de cdigo /amos a crear arc)i/os independientes de las )ojas de un li'ro. &n ejemplo ser!a un li'ro con F5Q )ojas, una )oja por empleado, cada colega crear li'ros independientes. a)ora queremos separar las )ojas de

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.

3erramientas # 5eferencias. "arca Microsoft $cti7eX "ataObjects x(x Librar' .

A)ora cierras el editor VBA, /uel/es a Excel. 9uardamos el li'ro.

%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*.

Columnas de Excel . VBA


+resentamos unas macros para tra'ajar con columnas Excel desde Excel VBA.

Encontrar 6ltima columna -$uscar al revs.

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

Encontrar 6ltima columna -en #ila especi#icada.


Sub Encontrar-ltimaColumna() Dim int/ltimaCol 0s 4an*e 5! Wor9sheetFunction.Count0(4o=s(1)) 0 #hen Set int/ltimaCol = 4an*e("521").$n7(%l#o'e!t) )s*+o% int/ltimaCol.077ress $n7 5! End Sub

(uprimir columnas vac9as en el rango


Sub SuprimirColumnas() Dim cCount 0s 5nte*er, c 0s 5nte*er Dim Delete4an*e as 4an*e Delete4an*e =("01@+10") 5! Delete4an*e 5s Nothin* #hen $%it Sub 8$;em(lo@ Delete$m(tHColumns 4an*e("01@W1") 5! Delete4an*e.0reas.Count 1 #hen $%it Sub With Delete4an*e cCount = .Columns.Count For c = cCount #o 1 Ste( X1 5! 0((lication.Count0(.Columns(c)) = 0 ? #hen .Columns(c).$ntireColumn.Delete Ne%t c $n7 With End Sub

(uprimir cada n:columnas


Sub SuprimirColumnas() Dim rCount 0s 'on*, r 0s 'on* Dim Delete4an*e as ran*e Delete4an*e =("01@+10")

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

'iltrar con colores en Excel


4arcar enca$e;ado de columnas #iltradas
Este ejemplo Excel VBA surge en 'ase a que si uno filtra con muc)o criterios, pasa que a /eces nos perdemos que columnas tenemos filtrado.

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.

ontenedor del c%digo


El cdigo de'e ir en el mdulo VBA correspondiente a la )oja para filtrar, por utilizar el suceso "or(s)eet,Calc.late/0. Ver ejemplo.

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

'ilas Excel ) macros VBA


Encontrar 6ltima #ila

int/ltimaFila = ? Columns("0@0").4an*e("0C""DC").$n7(%l/().4o=

Encontrar 6ltima #ila


int/ltimaFila = ? 0cti,eSheet./se74an*e.4o= X 1 & 0cti,eSheet./se74an*e.4o=s.Count

Encontrar 6ltima #ila


)a%4o= = Cells.S(ecialCells(%l'astCell).4o= )a%Col = Cells.S(ecialCells(%l'astCell).Column

Encontrar 6ltima celda -$uscar al revs.


Dim ln*/ltimaCel7a 0s 'on* 5! Wor9sheetFunction.Count0(Cells) 0 #hen ln*/ltimaCel7a = Cells.Fin7(What@="R", 0!ter@=O01P, ? Search>r7er@=%l+H4o=s, ? SearchDirection@=%lBre,ious).4o= )s*+o% ln*/ltimaCel7a $n7 5!

Encontrar 6ltima #ila -en columna especi#icada.


Dim int/ltimaFila 0s 4an*e 5! Wor9sheetFunction.Count0(Columns(1)) 0 #hen Set int/ltimaFila = 4an*e("C""DC").$n7(%l/() )s*+o% int/ltimaFila.077ress $n7 5!

(uprimir #ilas vac9as


int'ast4o= = Columns("0@0").4an*e("0C""DC").$n7(%l/().4o= For r = int'ast4o= #o 1 Ste( X1 5! 0((lication.Count0(4o=s(r)) = 0 #hen 4o=s(r).Delete Ne%t r

(uprimir #ilas vac9as


Dim intNumDeFilas 0s 'on* Selection.S(ecialCells(%lCell#H(e'astCell).Select intNumDeFilas = Selection.4o= For i = 1 #o intNumDeFilas 5! 0((lication.Wor9sheetFunction.Count0(4o=s(i)) = 0 #hen 4o=s(i).Delete $n7 5! Ne%t

(uprimir #ilas vac9as

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

(uprimir #ilas por condici%n


Dim rn*Strin* 0s 4an*e Do Set rn*Strin* = Cells.Fin7("0*lis", )atchCase@=False, ? 'oo90t@=%lBart, 'oo95n@=%l2alues) 5! Not rn*Strin* 5s Nothin* #hen rn*Strin*.$ntire4o=.Delete $n7 5! 'oo( /ntil rn*Strin* 5s Nothin*

(uprimir #ilas vac9as por dos condici%nes </ =


For i = int/ltimaFila #o 1 Ste( X1 'et str#est= 0((lication.Cells(i, 2) 5! str#est < "Z" 0n7 str#est < "V" #hen 4o=s(i).Delete Ne%t i

El tempori2ador de Excel VBA


#i queremos que una instruccin se )aga autom(ticamente, a inter/alos fijos, podemos recurrir al m3todo Application.!nTi+e.

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

"AIT ) Mostrar un ,ormulario VBA durante un tiempo predeterminado


4on el m3todo %A02 puedes )acer que un formulario se cierre despu3s de un tiempo determinado. Esto puede ser <til para presentar informacin al usuario (.-a importacin )a terminado con 3xito., .El arc)i/o est( guardado. etc). El truco est( en utilizar el m3todo %A02 de VBA.

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

Crear una barra de progreso en Excel


&n ejemplo de una macro VBA de como crear una 'arra de progreso (progress 'ar) para incluir en nuestras aplicaciones plantillas Excel.

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

Como armar un relo* en Excel 3mtodo -nTime4$

(o$re el mtodo de Excel VBA >OnTime>


El m3todo $n2ime de Excel ejecuta una macro en una )ora designada o en inter/alos fijos.

%digo VBA empleado para el mtodo OnTime


Sub )elo+() 4an*e("01").Formula = "=N>W()" 0((lication.>n#ime No= & #ime2alue("00@00@01"), "relo;" End Sub Sub auto%*pen() Call 4elo; End Sub

3mprimir la 2ora en la 2o&a Excel


#eg<n el cdigo VBA descrito arri'a, Excel pondr( el tiempo en la celda AF. +ara de/ol/er fragmentos ()ora:minuto:segundo), emplea formulas como
8 3O5$(9$+9! 8 MI2:4O(9$+9! 8 E;:2"O(9$+9!

'ormatos Excel . VBA


+edondear celdas
Set 0rea = Selection For $ach Cell 5n 0rea < = 4oun7(Cell, 2) Cell.2alue = < Cell.NumberFormat = "\,\\0.00" Ne%t Cell

?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

am$iar entre estilos A@ * +


0((lication.4e!erenceStHle = %l010((lication.4e!erenceStHle = %l41C1

Excel VBA . la paleta de colores


Excel emplea una paleta de MO colores predefinidos. +uedes cam'iar estos colores desde *erra+ientas ' !pciones ' Color o desde cdigo VBA. A'ajo presentamos unos ejemplos de cdigo VBA para modificar la paleta de colores del li'ro Excel. +or desgracia, a muc)os de nosotros los colores de la )oja Excel predefinidos por "icrosoft parecen 'astante fuertes, a /eces )acen que la )oja sea dif!cil de leer.

-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.

Excel ! olores +7B


Excel expresa colores del formato C9B (Ced, 9reen, Blue). Ced, 9reen, Blue son /aria'les cuales expresan el grado de estos colores, /alores entre F formato EEJ ()exadecimal). DfmAesign presenta una 'uena p(gina de +olores :"B ) ;(<. +ara cam'iar entre C9B EEJ necesitamos un +onversor :"B => ;(<. 5MM. 2am'ien podemos expresar el color en

am$iar colores de la paleta Excel


Entonces, Zqu3 podemos )acer para que Excel siempre tenga los colores definidos por ti[ &na solucin ser!a crear una plantilla con nuestros formatos. Excel llamar( esta plantilla al crear un li'ro nue/o. $tra solucin es crear una macro cual nosotros podemos llamar cuando nos con/enga. Esto nos da un poco m(s de control. En este ejemplo cam'iaremos los colores Q6
0cti,eWor9boo9.Colors(30) = 4K+(2D3, 2D3, 2D3) 0cti,eWor9boo9.Colors(31) = 4K+(2DC, 2D", 1L3)

QF (de los MO) de la paleta.

%digo VBA para cam$iar colores de celdas Excel


+ara cam'iar los colores aplicados a una celda ejecutamos una de las siguientes instrucciones.
Selection.5nterior.Color5n7e% = 30 Selection.5nterior.Color5n7e% = ? %lNoneM%lColor5n7e%0utomaticM%lColor5n7e%None Selection.5nterior.Color = 4K+(2D3, 2D3, 2D3) Selection.5nterior.Color = U0000CCU 8he%a7ecimal

+esetear paleta de colores


+ara resetear los colores a los predefinidos de Excel, aplicamos el m3todo
0cti,eWor9boo9.4esetColors

esetColors.

opiar colores de otro li$ro Excel


2am'i3n se puede copiar (importar) la paleta de otro li'ro Excel. +ara esto cam'iamos la propiedad Colors del li'ro.
0cti,eWor9boo9.Colors = Wor9boo9s("C@A)i'ibroDeColores.%ls").Colors

"evolver colores del li$ro Excel actual


A lo mejor nos interesa sa'er que color tiene una celda. -a propiedad 4olor0ndex nos a uda.
i = Cells(1, 1).5nterior.Color5n7e% )s*+o% i

Aplicar colores por condiciones en Excel VBA


+odemos colorear celdas por condiciones, e/aluando una cadena de texto, por ejemplo.
For $ach 5tem 5n 5ntersect(0cti,eSheet./se74an*e, Selection.Cells) 5! 5tem.#e%t = "ColaCao" #hen 5tem.5nterior.Color5n7e% = 33 $n7 5! Ne%t

Buscar ,ragmento de texto en una lista


-a funcin 0?#2C nos permite 'uscar un fragmento de texto en una lista de cadenas de texto. ?os de/uel/e la posicin dentro de la cadena. Esta cifra es cla/e; 6 U no coincide, W6 U s! que coincide. En este ejemplo 'uscaremos en una lista de apellidos. En el ejemplo a'ajo, *A'an* nos de/uel/e dos apellidos. $tro ejemplo ser!a .queiro*, c ual nos de/ol/er!a A'anquiero.

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

8Guitar resulta7os anteriores


4an*e("K"@:3000").ClearContents

8columna & !ila 7on7e em(e<arMterminar bQsGue7a


ln*Columna = 2 ln*Fila = " ln*/ltimaFila = Columns(ln*Columna). ? 4an*e("0C""DC").$n7(%l/().4o=

8columna & !ila 7on7e em(e<ar a (e*ar resulta7os


ln*Be*arColumna = C ln*Be*arFila = "

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)

8bucle@ reali<ar bQsGue7a


For n = ln*Fila #o ln*/ltimaFila

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

/umar rango ariable con VBA Excel


#umar un rango en Excel es f(cil. #umar un rango expresado por una /aria'le en VBA es un poco m(s complicado (pero sigue siendo f(cil). ?o siempre se sa'e de antemano que celdas formar(n parte del rango a sumar. Entonces tenemos que expresar el rango de forma /aria'le. En Excel es f(cil sumar este rango mediante una sencilla frmula. +ero VBA no contiene ninguna funcin igual. Entonces )a que )acer que VBA utilice las funciones de Excel.

,tili;ar #unciones Excel en VBA


2enemos un rango /ar#uma, el rango a sumar. +ara sumar las celdas de este rango tenemos que llamar a la funcin S#M de Excel.
0((lication.Wor9sheetFunction.Sum(,arSuma)

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.

Escri$ir la suma -en celda.


8el ran*o a sumar ,arSuma = 4an*e(Cells([, D), Cells(1D, D)) 8sumar el ran*o Cells(1, 1) = 0((lication.Wor9sheetFunction.Sum(,arSuma)

Escri$ir la suma -varia$le.


8el ran*o a sumar ,arSuma = 4an*e(Cells([, D), Cells(1D, D)) 8sumar el ran*o S/)0 = 0((lication.Wor9sheetFunction.Sum(,arSuma)

Messagebox . Excel VBA


-as message'ox son mu <tiles ( f(ciles de usar), programa. #ir/en para crea una interfaz entre el usuario el

Mostrar informacin al usuario 5ecibir informacin del usuario "e7ol7er informacin del usuario

onstrucci%n sint0ctica de la message$ox


)s*bo% ")ensa;e", +otonesM1conos, "#1tulo"

o en el caso de de/ol/er informacin


4es(uesta = )s*bo%(")ensa;e", ? +otonesM1conos, "#1tulo")

?ota los par3ntesis en la segunda construccin.

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

Calcular los !1gitos de control desde Excel VBA


En este ejemplo presentamos un ejemplo de marcado VBA para calcular los d!gitos de control de una cuenta 'ancaria espaola

'u son los d9gitos de control?


-as cuentas 'ancarias espaolas consisten de Q grupos de d!gitos. -os d!gitos de control /erifican los cdigos de Entidad Espaola de Banca). $ficina (el primer d!gito), el ?<mero de 4uenta (el segundo d!gito). El algoritmo para calcular los d!gitos de control se define en ?orma 'ancaria 7Q de AEB (Asociacin

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.

3erramientas # 5eferencias. "arca Microsoft $cti7eX "ataObjects x(x Librar' .

A)ora cierras el editor VBA, /uel/es a Excel. 9uardamos el li'ro.

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*.

Casilla de Veri,icacin 3e ento C#ange4


+esumen
#e usa el e/ento c)ange para simular una casilla de 2erificacin, en la columna A, tildados. luego com'inamos con una suma condicional, que que solamente #&"A los meses que se encuentran

,n e&emplo real
Al )acer clic so're la columna A, tilda la celda.

-uego se puede aplicar una frmula matricial

condicional para sumar los meses tildados.

<8 :M$( I(=$=,:=$=+->?99@=)=,:=)=+-@A!!B

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.

Importar tabla Access a Excel


Aqu! explicamos cmo importar una ta'la de una 'ase de datos Access, a una )oja Excel. Esta manio'ra tam'i3n puede realizarse desde los men<s del propio programa Access. Z+ero qu3 pasa si tenemos que acceder a un arc)i/o Access, Entonces podemos recurrir al cdigo VBA, no tenemos el programa Access instalado[ programar una macro.

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

Importar datos de -utloo5 a Excel


4on VBA de Excel podemos contactar con $utloo1 para de/ol/er datos. En este ejemplo /amos a importar algunos datos de los 4ontactos.

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

En iar #o*a Excel por correo electrnico 3-utloo5 etc$4


+esumen
Este truco sir/e para en/iar una )oja Excel por mail, utilizando $utloo1 u otro sistema de correo instalado en el ordenador del usuario.

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

4onfiguraciones Ea que indicar la direccin a utilizar.


str$mail = "aaa.bbbYccc.com"

Como hacer una macro para proteger una celda en excel?


Necesito hacer una macro que me protega celdas especificas en una hoja, pero que no proteja la hoja completa. Encontre este codigo: Sub Macro3() cti!eSheet."nprotect #$%3# Selection.&oc'ed ( )rue cti!eSheet.*rotect #$%3# cti!e+or'boo'.Sa!e End Sub *ero adem,s de protegerme la celda acti!a me protege la hoja completa, entonces no puedo modificar las dem,s celdas.

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

Mejor respuesta - Elegida por la comunidad


Sub Macro3() : : Macro3 Macro : Macro recorded 58;56;%556 b. S34 /ells.Select : selcciona todas las celdas de la hoja Selection.&oc'ed ( 0alse : las marca como desbloqueadas Selection.0ormula<idden ( 0alse

=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....

Você também pode gostar