VARIABLES ••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• 30 SENTEN CIA DIM ••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• 31
CONSTANTES 34
MODULOS 35
PROCEDIMIENTOS 35
ARGUMENTOS 38
ASIGNACI6N DE VALORES 0 EXPRESIONES 39
Ingreso de datos. Emision de resultados 40
Sentencia condicional: If End If; Select Case End Select 44
Aplicacion 1 : Consulta y extracclen en una base de datos 148
Aplicacion 2. Emision de un reporte de compra 150
Aplicacion 3. Macro para imprimir un formato-recibo 151
Aplicacion 4. Realizar varias consultas y transferir al Excel 151
Pagina 2 de 154
Programacion de macros en Excel
CAPITULO I
INTRODUCCION
Antes de ingresar al desarrollo del Lenguaje Visual Basic para Aplicaciones, haremos una breve exposici6n de algunas herramientas del Excel que se supone son conocidas por nuestro amable lector. Sin embargo, para unificar criterios y con el animo de recordar 10 conocido, haremos una exposici6n de la secuencia de pasos que se sigue para ejecutar 0 usar determinadas herramientas.
Este repaso nos servlra tam bien para mostrar dicha secuencia usado en las versiones Excel 2003 y Excel 2007.
EI objetivo de esta secci6n es, entonces, refrescar al participante de dichos procedimientos a fin de que pueda usarlos sea durante la grabaci6n de macros 0 cuando tenga que programar ciertas acciones que requieran del uso de tales procedimientos.
En el numeral 1 presentamos la secuencia de pasos para realizar 0 ejecutar la herramienta con algunas observaciones y comentarios. En el numeral 2 daremos algunos ejemplos de grabaci6n de macros que hagan uso de determinadas herramientas. En el numeral 3 desarrollaremos algunas macros que nos permitan realizar algunas operaciones en Excel de uso frecuente. Esta introducci6n termina con una breve exposici6n de la filosoffa de objetos en la Programaci6n Orientada a Objetos (POO) , tecnlca empleada en la programaci6n de macros.
I
i1 11
a ,3
Fi Hespon. Producto Auxiliar Cantable Aux, Admihistrativo IAdmihistraci, C I
+----, -- -+,-~-~ opera:
Ing T ecnico Itlgenieria
Aux, Admin, Unidad Contabilidad r ~6J® registrosUnirns ,3
,Aux, Admin, Unidad Iingenieria 4
IContable I~on_tabilidad Aceptar Carnci:olar I;
InvE!sti,2ador ' I + D ......,,-,---:_. __ ---.-----------11 5
A II... T ~.__.ni·rn I nn ... ni ... r I iii!
I mnr","j'nriiI'i""
Figura 01
Usamos filtro avanzado para poder extraer, sea en una misma hoja 0 en otra, ciertos registros de una base de datos que cumplen determinadas condiciones.
Para realizar el filtro avanzado es necesario definir previamente el range de criterios as! como conocer el range de datos y la celda, a partir de la cual se deben emitir los resultados.
EI range de criterios debe contener en su primera fila, los nombres de los campos (columnas) yen las siguientes filas contener los valores 0 criterios del filtrado.
La imagen que se presenta en la Figura 01, nos muestran la secuencia de pasos que se debe seguir para realizar el filtro avanzado.
En la ventana de dialoqo Filtro avanzado seleccione d6nde desea el listado, cual es el range de criterios y a partir de que celda se debe recibir los resultados.
Pagina 4 de 154
Programacion de macros en Excel
Nota 1:
En el caso de Excel 2003, si desea extraer 10 filtrado hacia otra hoja, entonces debe definir el range de los datos con un nombre de rango. Si desea, el range de criterios puede estar otra hoja, s610 que, para mayor facilidad se puede usar tambien nombre de rango. En la versi6n 2007 no es necesario que el range tenga nombre, pero sf que el procedimiento se ejecute estando en la hoja hacia donde se desea el resultado.
Ejemplo
Abra el archivo Pedidos.xlsx. En la hoja Pedidos se tiene una lista de pedidos de 830 clientes, atendidos por un grupo de empleados y enviados a distintos destinos. En la hoja Detalles de pedidos, se tiene la lista de productos pedidos por cada cliente. Se desea obtener
a) Un reporte de los pedidos realizados por un cliente en particular.
b) Igualmente se desea obtener un reporte de todos los pedidos atendidos por dos empleados en particular y cuya forma de envfo sea Speddy Express.
Soluci6n
Haciendo clic en el cuadro de nombres, apreciamos que los datos de la hoja Pedidos tiene por nombre de rango, Pedidos y que la otra hoja tiene por nombre, Detalle.
Pregunta a)
Insertemos una nueva hoja; que su nombre sea Reporte 1.
~ ~ ~I I Pedidos I De1t~lles de Pedidos j Roeportoe] 1'tJ /I
,_,
Copiemos toda la cabecera (nombres de campo) de la hoja Detalles de pedidos y la peg amos en la primera fila de la hoja Reporte 1
Supongamos que se desea obtener los pedidos del cliente cuyo numero de pedido es 11077. Para ello digitamos debajo de Id Pedido, 11077 (en la hoja Reporte)
B
Producto
Ahora realizaremos el procedimiento del Filtro Avanzado:
Estando en la hoja Reporte, hacemos clic en eAvanzadas» del grupo -eorcenar y flltrao- de la ficha <Datos>.
Pagina 5 de 154
Programacion de macros en Excel
Completamos la ventana de dialoqo que aparece, sequn se muestra en la siguiente imagen:
r Eiltrar la lisla .in moverla .a otro lugar I+------:~'""~ ~:c;~,;.t~ *'~~"':'r~"'pe,:'-"~c"'!i""~:""~:'C",:,:,-,B,,,a,,,rleLY ---------+-----~~I_~~___=;C;S:7t____o;:
11077 Especias Cajun del chef Anton
Co" C_opiar a otro lugar 11077 Mermelada de qrosellas de la abuela
&~mgo d. criterios: I Reporte I ,j;!>,,~1::(iF .~Z
C!!piar ,a : I Reporte I $.0.$10
Precio por unidad Cantidad Oescuento Monto
~, 19_00 1638 20_00% 24897_60'
I 10_00 2907 0_00% 29070_00
H200 477 000% 1049400
~ 25_00 896 2.00% 21952_00
130_00 158 5_00% 4503_00
s 40_00 390 10_00% 14040_00
s 31.00 918 0_00% 28458_00
s 38_00 1344 5_00% 48518_40
$,6,_00 1716, 0_00% 10296,_00
s 23_25 199 3_00% 4487_95
s 17_45 1504 3_00% 25457_46
H1.00 780 4_00% 60652_80
$ 9_00 1960 0_00% 17640_00 11077 Pustre de merellg~ueo-'Pc-"avl""o""v • .-' ------+---______:;--c'-'-'~--~+_----"-"~+-~ 11077 Mermelada. de Sir Rodney's
r _:!.olo regi,_tros urncos
C~n,,,lar
11077 Pan fino
A la derecha se aprecia una parte de dicho reporte.
Pregunta b)
Inserte una nueva hoja y que se nombre sea Reporte 2.
Copiaremos la cabecera de la hoja Pedidos y la pegamos en esta nueva hoja. Supongamos que se desea obtener un reporte de los pedidos atendidos por Buchanan, Steven y por Davolio, Nancy. Esto significa que debemos ingresar estos nombres debajo de la columna Empleado y "Speddy Express" 10 ingresamos debajo de Forma de envfo pero repetido, como se muestra en la siguiente imagen:
EITipleado
A continuaci6n realice el mismo procedimiento anterior digitando en Rango de la lista:
Pedidos. La siguiente imagen muestra parte de este reporte.
~"'" ABC D E F G H
1 Id de pedido I Clients Ernpleado I Fecha de pedido I Fecha de entrega I Fecha de envio I Forma de envio I Ca;go=]
Pe.acock, Marg'aret 09,-07 -1996 06-08-1996 11-07 -1996 United Package
Pagina 6 de 154
Programacion de macros en Excel
Consolidaci6n
Se puede consolidar rangos de datos que estan en una misma hoja, rangos de datos que estan en diferentes hojas 0 igualmente range de datos que corresponden a libros diferentes.
Nota 1:
Se debe tomar en cuenta que la consolidaci6n se lIeva a cabo sobre rangos que tiene la misma estructura, aunque el nurnero de filas puede variar entre un range y otro.
Nota 2:
Si los rangos tuvieran columnas que no puedan ser consolidadas, puede dejar de incluirlas en la selecci6n y usar las siguientes 0 trasladarlas al final a fin de que se pueda elegir un range adecuado. Siempre consolida tomando en cuenta la primera columna del rango.
Consolidaci6n de rangos de una misma hoja
La Figura 02 muestra la secuencia de pasos para realizar una consolidaci6n de rangos dentro de una misma hoja de un libro.
Observaci6n
En la imagen de la Figura 02, se han consolidado cuatro rang os contenidos en la misma hoja. Haciendo clic en el cuadro <Referencia> se han seleccionado cada range y luego se hizo clic en <Agregar>. Esto para cada range a ser consolidado ..
Figura 2
Pagina 7 de 154
I
Programaci6n de macros en Excel
A
H
±
B
, (En miles de toneladas}
IAno 2000
Enero 164
Febrero 136
Marzo 286
Abril 266
Mayo 256
.Junio 518
~ulio 479
Agosto 326
Septiembre 505
Octubre 471
Noviembre 533
Diciembre 376
I
IAno 2001
IEnero I 1202
Febrero 1005
Marzo 654 ~~~~c~on~ro~.lid~a~r _
-I rFu~no~on~: ~
Isuma :::oJ
Refereqda:
:00 I -
EXBm.inar " -
~ Mregar I -
-
~Iiminar I - I Ano 2000 I $.0.$73: $8$8 5 Todas las references:
I:Af'iO 2.000 !.5A_S-31:.5B$43 Ano 2000 I $A$45: $8$5 7 AFio2000! :5A_SS,9: :58571
I~ar rctulos en-1
('7 Fila guperior
P' [¢.?.i.~.~.~.~.j~.g.~.i.~.~.~.~.1 r Crear ~rnculos con los datos de origen
I Aceptar
Cerrer 1-
+
1
t
Consolidaci6n de hojas
J_ +
En este caso, los rangos de consolidaci6n se encuentran en hojas diferentes, aunque no necesariamente deben estar todos en hojas diferentes.
La secuencia de acciones se muestra en la figura 03.
2 I
A------, 8 I c I 0 I E I F I G H
I' [Con~ol i da r ..:!:.
El0 - -
• E_ul'ioion:
JJ
ISWlm<l 3 '11
En esta imagen se ha seleccionado el range correspondiente a la hoja Semana1 y se procede a <Agregar> a la consolidaci6n la Semana2 y todas las otras seman as.
Nota 3
Pagina 8 de 154
Programacion de macros en Excel
Recuerde que, si desea una consolldaclon efectuando una suma, promedio, etc. Sobre la misma columna de consolldaclon, dicha columna debe tener la misma cabecera en todos los componentes (rangos) de la consolldaclon. En este ultimo caso, en lugar de tener 2001, 2002, etc, se debiera tener un mismo rotulo,
Consolidaci6n de libros
Igualmente, si los rangos a ser consolidados estuvieran en libros diferentes, tambien se pueden realizar dicha accion. Para elio es necesario que esten abiertos todos los libros a ser consolidados asf como un nuevo libro donde se realizara la misma.
Tab/as dinamicas
Una de las herramientas de mayor uso en el Excel es la tabla dlnamica. Los datos a ser empleados provienen de una tabla 0 base de datos en general. Tiene la caracterfstica de ser dlnamica por cuanto los elementos que conforman su estructura pueden ser modificados (ariadiendo 0 quitando campos) en el instante. Una tabla dinamlca esta ligada a un grafico dlnamico y cualquier cambio de uno afecta al otro.
Una tabla dinamlca puede construirse a partir de los datos contenidos en un libro del Excel, con los datos provenientes de una consulta por ejemplo del MS Access 0 directamente del MS Query.
Del mismo modo, una tabla dlnarnlca puede ser construida desde un cubo OLAP (On Line Analitical Processing), aunque este ya tiene diseriado las dimensiones (cada una de las cuales generan de por sf una tabla), podemos insertar en la misma tabla mas de una dimension, enrlqueclendola aun mas.
Si los datos que se tienen no estan en formato del Excel, no son consultas 0 no tienen un formato que permita acceder autornatlcarnente desde el Excel, podemos realizar el proceso de conversion mediante el uso de la secuencia: <Datos> - eObtener datos externos» - -dmportar datos>.
Pagina 9 de 154
Programacion de macros en Excel
Las siguientes figuras muestran la secuencia de acciones necesarias para construir una
2003 2003
Elij.-doode' deses eml"",r ellniorme de tabla,oinamic" ----- 2003 2003
ro !'Iueva tJoja de cll(ulo 2003
r H~ja de .;jlrul~ ~'i ,~te 20 03
Ubicaaon:" .-'1 --------------:::00=. 2003
20m I ~====::=:;:;:====~I~Af::e~p~ta~['~~e~~m~Oe~la[~I!!t,2003 ~1 :..l 2003
,Seleaione 'los datos, que desee: aRali'ar'----------,~ (0" ~ele'done uM 1,;1>1, 0 "rig~
Tab_la 0 ranqe: IMMelM1MiU411.pLm (". U~Uc:e una i=weilt~·,Q~ da0~,·~*tma
Ele,&!ir "tIJne:x:l(ih , , I
Nambre de, mnEXJOn';
Figura 4
2110812003 15/10/2003
Nota 1:
Para obtener una tabla dlnarnlca en Excel 2003 siga el siguiente procedimiento:
Hacer clic en cualquier celda dentro del rango de los datos.
<Datos> - -dntorme de Tablas y Gratlcos dlnamlcoss - «Llsta 0 base de datos de Microsoft Excel> - <Siguiente> - Verificar si el rango que se muestra es el indicado - <Siguiente> . En la ventana siguiente seleccionar d6nde se desea el resultado y luego hacer clic en <Diseno>. En esta ventana debe seleccionar el 0 los campos que debe colocar en el area de fila, en el area de columna y en area de datos (a los cuales de preferencia se debe colocar los campos numerlcos),
Nota 2:
Como se aprecia en (1), se debe hacer clic en la <Tabla dlnarnlcas de la ficha -dnsertar», EI cursor debe estar dentro de los datos a fin de disponer del rango ya seleccionado como se muestra en (3). En esta ventana se debe decidir si la tabla se desea en una nueva hoja 0 en