Professional Documents
Culture Documents
MS-EXCEL 2000
NIVEL III
Authorized
Technical
Education
Center
Microsoft
Indice
Introduccin
Que son las macros y qu es el lenguaje Visual Basic Cmo se comunica
Visual Basic Aplication con Excel
Introduccin a los modelos de objetos de Excel y VBA Objetos,
Propiedades y Mtodos
1- Trabajo con macros automticas.
Grabacin de una macro sencilla.
Asignacin de una macro a un botn en una hoja de clculo.
Asignacin de una macro a un icono, a un objeto grfico, al men
herramientas, a un mtodo abreviado del teclado
2- Editor de Visual Basic para Excel.
Descripcin de la Interfaz
Que es un proyecto en Visual Basic; Explorador de Proyectos
Que son controles Active X, Cuadro de Herramientas
Editor de Cdigo
Diseador de Formularios
Ventana de Propiedades
Barra de Herramientas estndar
Modo de Ejecucin y de Diseo
Programacin Orientada a Eventos
Edicin de macros, visualizacin de Eventos, Mtodos y Propiedades.
Impresin de un mdulo Visual Basic.
3- Procedimientos en Visual Basic.
Conceptos bsicos sobre procedimientos.
Cmo trabajan juntos los procedimientos para realizar una tarea completa.
Cmo invocar a un procedimiento.
Cmo organizar mdulos y procedimientos en un libro de trabajo.
Cmo proteger procedimientos para que no sea utilizado por otro.
Depuracin de errores en los procedimientos y tipos de errores posibles.
Ejecucin paso a paso. Alternar puntos de interrupcin.
4- Creacin de Funciones personalizadas.
Conceptos sobre las partes que componen una funcin.
Variables en VBA.
Utilizar y Combinar funciones de VBA y Excel.
Creacin de funciones personalizadas para utilizar en el asistente de
funciones.
Introduccin
Introduccin
Que son las macros y que es el lenguaje Visual Basic
Una macro consiste en una serie de comandos y funciones que se almacenan en
un mdulo de Visual Basic y que puede ejecutarse cuando uno quiera.
Los primeros lenguajes de macros para hojas de clculos consistan en una serie
de comandos que imitaban la interfaz del usuario, de esta manera solo se podan
realizar tareas repetitivas.
A partir de la Versin 5.0 de Excel se incorpora Visual Basic Aplication (VBA)
como lenguaje de programacin de la librera de objetos de Excel.
Visual Basic es un dialecto estructurado avanzado de Basic desarrollado por
Microsoft, y previsto para el desarrollo de la aplicacin. La sintaxis de Visual
Basic es similar a otros dialectos modernos de Basic, pero con muchas
caractersticas adicionales. Se utilizan los tipos de datos siguientes: nmeros
enteros, reales, strings, booleans, currency, fechas, y referencias del objeto.
Entonces Visual Basic es el lenguaje con el cual se escriben las macros en
Excel.
Pgina 1
Introduccin
Pgina 2
Introduccin
Por otro lado tenemos tambin la librera de VBA donde estn todas las clases
de Visual Basic como lenguaje.
Pgina 3
Introduccin
Objeto
Propiedades
Color
Rojo
=
16
Cant. de cambios
Si
=
10
Portaequipaje
Kl.
=
Peso
=
Mtodos
Pedalear
Rpido
Detenerse
En 5 min
Tocar la bocina Tres
veces
Pgina 4
Introduccin
Objeto (Sheets)
Propiedades
BeforeDoubleClick
3
Sheets.Count
Sheets.Application
Activate
Mtodos
Desactivate
SelectionChange
Sheets.Add
Sheets.Copy
Sheets.Delete
Destino
Cuando alguien hace doble Clic antes de generar una accin sobre Excel se va a
ejecutar el cdigo que escribamos dentro
Por ejemplo el usuario hace Doble Clic en la hoja que fue definido el evento,
dentro del evento se le pregunta a la propiedad count cuantas hojas hay en total
en este libro y se muestra un cuadro de dialogo.
Entonces programar o hacer macros ser ir escribiendo en los distintos eventos
de los objetos de Excel los cambios en las propiedades y eventos que queramos
hacer.
Suena fcil, claro porque es fcil pero requiere paciencia.
Pgina 5
Pgina 6
2.
3.
Pgina 7
8.
Desde la barrita de visual Basic que activamos hace unos minutos (ntese que
ahora el triangulo se convirti en un cuadradito).
O desde Herramientas/macros/Detener macro
Listo ya tenemos la macro creada para usarla basta con ir a
Herramientas/macros o clickear en el boton de ejecutar macros de la barra de
Visual Basic.
Pgina 8
Los ms fciles de usar estn con botn derecho sobre cualquier barrita
eligiendo Formularios
Pgina 9
Una vez que esta abierto el cuadro de dilogo se pueden hacer todas las
modificaciones que se necesiten del men y de las barritas de herramientas.
Podemos crear una barrita nueva para usar con todas nuestras macros y los
comandos que utilizamos con mas frecuencia, para eso hacemos un clic en
nueva...
Pgina 10
Ahora podemos arrastrar nuestra macro desde la ficha comandos del cuadro de
dialogo Personalizar
Una vez arrastrado a la nueva barrita podemos hacer clic en modificar seleccin
de la ficha de comandos o bien botn derecho sobre la carita feliz.
Pgina 11
Pgina 12
Pgina 13
Esta operacin suele complicarse presta atencin antes de soltar el mouse que
el cursor este en el cuadrado gris que aparece al llevar el elemento de men al
lugar deseado
.
Una vez creado podemos cambiarle las propiedades (nombre, icono, macro etc)
de la misma forma que lo hicimos anteriormente con el icono sobre la barra de
herramientas.
Podemos asignar macros a cualquier objeto grafico que insertemos sobre la hoja
con el botn derecho en el objeto deseado por ejemplo en una imagen del clipart
Para reasignar una combinacin de teclas (recordemos que al grabar una nueva
macro nos ofreca la opcin de hacerlo), Clikeamos como si furamos a ejecutar
una macro y elegimos Opciones y ah definimos la combinacin, ten en cuenta
que si usas una combinacin que se usa en Excel, quedar la macro asignada
Pgina 14
Dijimos en el capitulo anterior que Excel venia con un editor de VBA, en realidad
es un programa independiente que nos permite ver los mismos archivos xls de
Excel pero desde una ptica diferente.
En este Captulo aprenders a:
Pgina 15
Descripcin de la Interfaz.
En el editor vamos a considerar a los Libros como Proyectos de desarrollo
viendo a los libros como objetos contenedores de otros objetos con Propiedades
Mtodos y Eventos.
Visual Basic 6.0 (Como aplicacin independiente)
Pgina 16
Este editor es muy parecido al programa Visual Basic, esto es muy ventajoso
porque nos vamos a acostumbrar a trabajar en un entorno que podremos
aprovechar eventualmente en el futuro.
Visual Basic Aplication (Dentro de Excel 2000)
Pgina 17
Descripcin de la Interfaz
Podemos abrir el editor desde Herramientas/Macro/Editor de Visual Basic,
tecleando las teclas rpidas Atl+F11
Es muy parecido a la interfase del programa del lenguaje Visual Basic como
podrn notar quienes ya han trabajado con ese producto.
Al comienzo se suele complicar para organizarse dentro del editor por eso
primero vamos a cerrar todas las ventanas y dejaremos solo la barra de men
Estndar que viene por defecto.
Pgina 18
El explorador te muestra los mismos archivos de Excel que estn abiertos, con
todos los objetos que lo componen, en la figura de arriba podes ver que hay
varios archivos abiertos algunos tienen terminacin .xla y por ej. el acrobat
PDFWriter es un archivo que contiene macros que se agreg en esta
computadora al instalarse el Acrobat Writer.
El archivo ejemplo.xls es el que se esta usando y esta visible desde la interface
de Excel, dentro de la carpeta Microsoft Excel Objetos vemos las hojas que tiene
el libro con sus nombres respectivos. Entre parntesis figura el nombre que se
le dio a la etiqueta de la hoja, si lo cambiamos cambiar tambin en Visual Basic.
Pgina 19
Editor de Cdigo
Utilizamos la ventana Cdigo para escribir, mostrar y editar cdigo de Visual
Basic.
Es posible abrir tantas ventanas de Cdigo como mdulos tengas, por lo que
pods ver fcilmente el cdigo en diferentes formularios o mdulos y copiarlo y
pegarlo entre ellos.
Para abrir la ventana de cdigo simplemente tenes que hacer doble clic en el
modulo que queres editar. Si todava no tenes ningn modulo creado entonces
sobre tu proyecto con el botn derecho elegs insertar mdulo y luego doble clic.
El editor de cdigo tiene las facilidades de copiar y mover que tiene Word podes
usar el mouse con la tecla control para copiar o cualquiera de tus formas
preferidas.
Pgina 20
El Cuadro Objeto
Muestra el nombre del objeto seleccionado. Haga clic en la flecha situada a la
derecha del cuadro de lista para mostrar una lista de todos los objetos asociados
con el formulario.
El Cuadro Procedimiento/Evento
Presenta una relacin de todos los eventos reconocidos por Visual Basic para un
formulario o control mostrado en el cuadro Objeto. Cuando selecciones un
evento, el procedimiento de evento asociado con ese nombre de evento se
muestra en la ventana Cdigo.
Si aparece (General) en el cuadro Objeto, el cuadro Procedimiento presenta una
relacin de todas las declaraciones y todos los procedimientos generales que se
han creado para el formulario. Si ests editando cdigo del mdulo, el cuadro
Procedimiento enumera todos los procedimientos generales del mdulo. En
cualquier caso, el procedimiento seleccionado en el cuadro Procedimiento se
muestra en la ventana Cdigo.
Todos los procedimientos de un mdulo aparecen en una sola lista por la que se
puede desplazar y que est ordenada alfabticamente por nombre. Si se
selecciona un procedimiento utilizando los cuadros de lista desplegables de la
parte superior de la ventana Cdigo, se mueve el cursor a la primera lnea del
cdigo en el procedimiento seleccionado.
Ya s que esto es complicado, lo iremos viendo a lo largo del libro.
Barra de divisin
Si se arrastra esta barra hacia abajo, se divide la ventana Cdigo en dos paneles
horizontales, cada uno de los cuales tienen sus propias barras de
desplazamiento. Pods ver diferentes partes del cdigo a la vez. La informacin
que aparece en los cuadros Objeto y Procedimientos/Eventos se aplica al
cdigo del panel que tiene el enfoque. Si se arrastra la barra a la parte superior o
inferior de la ventana o se hace doble clic sobre ella, se cierra un panel.
Pgina 21
Pgina 22
Diseador de Formularios
Un Formulario es una ventana o cuadro de dialogo, es un control contenedor de
otros controles con esto quiero decir que dentro de l se pueden dibujar
controles Active x.
Cuando hablamos de programas o aplicaciones habla comandos dispuestos
para realizar determinada tarea, la forma que ese programa se comunica con el
usuario es por medio de formularios.
Para crear un formulario dentro de VBA, Clikeamos botn derecho sobre el
explorador de proyectos y elegimos insertar formulario.
Pgina 23
Pgina 24
No necesariamente los controles tienen que ser visibles, hay algunos controles
como por ejemplo el mscomm32 que sirve para comunicarse con un MODEM o
el puerto paralelo no es visible pero tiene propiedades mtodos y eventos y
tambin precisa un contenedor para dibujarlo. Un contenedor puede ser un
formulario (mas adelante veremos como hacer uno) o una hoja de Excel un
documento de Word una diapositiva de Power Point, el Explorador de windows.
Estos Active x son compilados en un archivo con extensin ocx y precisan ser
registrados para que funcionen.
Cuando instalamos Excel se registran algunos ocx, pero si usamos otros que
nosotros tenemos registrados en nuestro sistema porque algn otro programa
como Visual Basic o cualquier otra aplicacin lo hizo, e intentamos usar el libro
de Excel en otra mquina dar un error. Para evitar ese error tenemos que
copiar el archivo ocx correspondiente en la maquina del usuario y registrarlo
desde VBA Herramientas/Controles Adicionales o con alguna otra herramienta
como Regsvr32.exe
El cuadro de herramientas muestra los controles estndares que vienen con
Excel, cuando abrimos un formulario usualmente esta abierto pero si lo cerramos
podemos volver a abrirlo con el icono desde la barra Estndar
Pgina 25
Etiqueta
Permite tener texto que no desees que cambie el usuario, como el ttulo debajo
de un grfico.
Cuadro de texto
Contiene texto que el usuario puede introducir o cambiar.
Cuadro combinado
Permite dibujar un cuadro de lista combinado y un cuadro de texto. El usuario
puede elegir un elemento de la lista o introducir un valor en el cuadro de texto.
Cuadro de lista
Se utiliza para mostrar una lista de elementos entre los que puede elegir el
usuario. Puede desplazarse por la lista si sta contiene ms elementos de los
que se pueden ver en un determinado momento.
Casilla de verificacin
Crea una casilla que el usuario puede elegir fcilmente para indicar si algo es
verdadero o falso o para mostrar varias elecciones cuando el usuario puede
elegir ms de una.
Botn de opcin
Permite mostrar varias elecciones entre las que el usuario slo puede elegir una.
Botn de alternar
Crea un botn que alterna entre activado y desactivado.
Marco
Permite crear una agrupacin grfica o funcional de controles. Para agrupar los
controles, dibuje primero el marco y despus los controles dentro del marco.
Botn de comando
Crea un botn que el usuario puede elegir para realizar la accin de un
comando.
Pgina 26
Barra de tabulaciones
Permite definir mltiples pginas para la misma rea de una ventana o cuadro de
dilogo de la aplicacin.
Pgina mltiple
Presenta mltiples pantallas de informacin como un solo conjunto.
Barra de desplazamiento
Proporciona una herramienta grfica para desplazarse rpidamente por una
larga lista de elementos o una gran cantidad de informacin, para indicar la
posicin actual en una escala o como un dispositivo de entrada o indicador de
velocidad o cantidad.
Botn de nmero
Un control de giro que se puede utilizar con otro control para aumentar o reducir
los nmeros. Tambin lo puede utilizar para desplazarse hacia delante o detrs
de un intervalo de valores o una lista de elementos.
Imagen
Muestra una imagen grfica de un mapa de bits, icono o metaarchivo en el
formulario. Las imgenes mostradas en un control Imagen slo pueden ser
decorativas y utilizan menos recursos que un Cuadro de imagen.
Pgina 27
Ventana de Propiedades
Seleccionando un objeto y presionando F4 accedemos a la ventana de
propiedades de ese objeto.
En esta ventana podemos cambiar las propiedades de los objetos mientras
estamos en modo de Diseo o sea mientras no se este corriendo (ejecutando) el
procedimiento o el formulario.
Cada control tiene propiedades que le son propias para saber acerca de una
propiedad en particular siempre podemos recurrir a la ayuda de VBA
seleccionando la propiedad y apretando F1
Pgina 28
Pgina 29
Puede hacer clic una sola vez en un botn de la barra de herramientas para
realizar la accin representada por el botn. Puede seleccionar la opcin
Informacin sobre herramientas de la ficha General del cuadro de dilogo
Opciones si desea mostrar informacin sobre los botones de la barra de
herramientas.
Botones de la barra de herramientas
Ver <aplicacin principal >
Alterna entre la aplicacin principal y el documento de Visual Basic activo.
Insertar
Abre un men para que se pueda insertar uno de los objetos siguientes en el
proyecto activo. El icono cambia al ltimo objeto agregado. El objeto
predeterminado es el formulario.
Pero tambin se pueden insertar Mdulos y Mdulos de clase
Guardar <nombre de documento principal >
Guarda el documento principal, incluidos el proyecto y todos sus componentes:
formularios y mdulos.
Ejecutar Sub/UserForm o Ejecutar macro
Ejecuta el procedimiento actual si el cursor est en un procedimiento, ejecuta el
UserForm si un UserForm est activo actualmente o ejecuta una macro si no
est activa la ventana Cdigo ni un UserForm.
Interrumpir
Detiene la ejecucin de un programa y cambia al modo de interrupcin.
Restablecer <proyecto>
Borra las variables de nivel de mdulo de la pila de ejecucin y restablece el
proyecto.
Modo de diseo
Activa y desactiva el modo de diseo.
Explorador de proyectos
Abre el Explorador de proyectos que muestra una lista jerrquica de los
proyectos abiertos actualmente y su contenido.
Ventana de Propiedades
Pgina 30
Abre la ventana de Propiedades para que puedan verse las propiedades del
control seleccionado.
Examinador de objetos
Muestra el Examinador de objetos, que presenta una lista de bibliotecas de
objetos, biblioteca de tipos, clases, mtodos, propiedades, eventos y constantes
que se pueden utilizar en cdigo, as como los mdulos y procedimientos
definidos para el proyecto.
Cuadro de herramientas
Muestra u oculta el cuadro de herramientas que contiene todos los controles y
los objetos insertables (Como un grfico de Microsoft Excel) disponibles para la
aplicacin. Slo est disponible cuando est activo un UserForm.
Asistente de Office
Abre el Asistente de Office donde puede obtener ayuda sobre la ventana, el
comando o el cuadro de dilogo que est activo.
Pgina 31
Pgina 32
Pgina 33
Pgina 34
Si queremos ver los eventos de los objetos de Excel como ser la Hoja 1 o El libro
en general hacemos doble clic sobre el Explorador de Proyectos en Hoja1 o
ThisWorkbok respectivamente.
Vamos a ver que eventos tiene la Hoja1, doble clic en hoja1
Pgina 35
Dentro del evento Activate escribimos un comando para que al activarse la hoja
aparezca un cartelito de bienvenida, solo para ver el funcionamiento del evento.
Pgina 36
Pgina 37
Pgina 38
Cancelar
Cierra el cuadro de dilogo sin imprimir.
Configurar
Muestra el cuadro de dilogo Configurar Impresin.
Pgina 39
Pgina 40
Entre los parntesis podemos definir variables de esta manera podemos pasarle
parmetros a un procedimiento cuando lo invocamos
Podemos crear cuantos procedimientos queramos. Pueden estar todos en el
mismo modulo o estar en distintos mdulos, normalmente agrupamos todos los
procedimientos que tienen algo en comn en un mismo modulo para que sea
mas fcil encontrarlo y llevarlo a otro proyecto pero si el libro esta abierto no
importa en que modulo se encuentre el procedimiento va a estar disponible para
invocarlo.
Pgina 41
Para que sea mas fcil ubicar el modulo donde se van a grabar los
procedimientos que estamos haciendo y no se confundan con otros para otros
propsitos vamos a nombrar el modulo. Clickeamos en modulo1 y con F4
vemos las propiedades.
Pgina 42
Pgina 43
Pgina 44
Finalmente obtenemos el archivo, se creo una hoja con el nombre del archivo
Para ves lo que hicimos vamos con Atl + F11 a VBA, es inevitable que si
grabamos el personal.xls las nuevas macros vallan a parar a un nuevo modulo,
entonces siempre nos fijamos en el ultimo modulo para encontrar la macro que
acabamos de hacer.
Como podemos ver todo el asistente se ve resumido en un solo comando con
todos los parmetros que le fuimos dando.
Pgina 45
Como asumimos que el archivo cambia todos los meses El parmetro que no
podemos dejar fijo es el nombre del archivo porque sino todos los meses va a
buscar el mismo archivo y no nos sirve
Vamos a ponerle un comentario arriba de todo para que cuando venga otra
persona a ver de que se trata esto lo entienda, en realidad en un tiempito
nosotros tampoco nos vamos a acordar.
Te aconsejo en tus primeros pasos con VBA comentar todo es una buena forma
de aprender y clarificar lo que ya sabes.
Pgina 46
Para escribir un comentario basta con escribir delante de la frase una comilla
simple.
Para poder cambiar el archivo que vamos a abrir vamos a necesitar definir una
variable de tipo string para almacenar la ruta del archivo elegido
Ahora cargaremos esta variable con un comando de VBA que nos proporciona a
partir de una interface de windows (Abrir Archivo) la ruta elegida por el usuario.
El objeto Application esta por encima del los otros objetos de Excel nos sirve
para abrir libros, guardar como, encontrar un archivo, saber cual es la aplicacin
activa etc. Nosotros vamos a usar getOpenfilename pero como no sabemos bien
que parmetros darle vamos a escribir application luego el punto para que nos
traiga las propiedades y mtodos de la clase elegimos GetOpenFilename y
vamos a apretar F1 para obtener ayuda. Y clikeamos en donde dice ejemplo
(para no tener que leer tanto).
Pgina 47
Analicemos el ejemplo.
Pgina 48
Pgina 49
La otra forma es ir paso a paso, o sea comando por comando lo cual en este
caso es mucho ms didctico para eso F8.
Entonces estando el cursor dentro del procedimiento apretamos la tecla F8
Se ilumino en amarillo la primer lnea, se ejecutan las lneas despus de pasar
por ellas lo cual es bueno para controlar las variables ya vas a ver.
F8 otra vez.
Notaste que salteo la lnea dim, eso es porque las variables se cargan ni bien se
accede al procedimiento por eso en realidad da lo mismo donde estn escritas
Pgina 50
pero conviene que estn todas arriba de todo por una cuestion de practicidad
para leerlas.
Si pasas el mouse por arriba de la variable strNombreArchivo te cuenta cuanto
vale por ahora o sea nada. Esto que parece una bicoca es en realidad algo
muy til y que un viejo programador de Cobol o Pascal hubiera amado.
Al aceptar no se abri ningn archivo lo nico que hicimos hasta ahora es cargar
en nuestra variable el path elegido por el usuario.
Ves que ahora la variable vale la ruta elegida.
Pgina 51
Basta de filosofar que dice ac que los tipos no coinciden o sea que estamos
tratando de comparar la variable tipo string con un bolean. Lo mas fcil va a ser
pasar la variable a Variant entonces cuando el usuario elija cancelar va a
comparar con un bolean pero si elige un archivo compara con un string.
Manos a la obra, si clikeamos finalizar es como detener sino sigue activo.
En este caso podemos finalizar porque son cambios grandes los que tenemos
que hacer.
Vamos a cambiar str por var y string por variant
Pgina 52
Salteo el Exit Sub porque al comparar la variable con False no es igual (hubiese
sido igual si el usuario elega cancelar en vez de un archivo.
Ahora dos veces mas F8 y se ejecuta el asistente con la variable que acabamos
de cargar.
Al pasar por el asistente se creo un nuevo libro de excel con el archivo de texto.
Tene cuidado que no quede en amarillo End Sub porque significa que todava
esta corriendo el procedimiento y esto te deshabilitara muchas funciones de
Excel por eso para terminar o bien haces un clic en Parar macro o apretas otra
vez F8 para que termine
Si volves a ejecutar la macro primero cerra el libro que acabas de abrir para no
hacerte lio y ojo al cerrarlo no lo grabes para evitar que se sobre escriba y
pierdas el archivo original.
Ya tenemos el archivo de texto en Excel, ahora vamos a ir recorriendo las filas y
de acuerdo el tipo de facturas lo vamos a agrupar.
Para eso inventamos un nuevo procedimiento para que no quede todo
amontonado.
Pgina 53
Te acords no? Sub y el nombre del procedimiento debajo del end Sub.
En este caso podemos escribir sub proDistribuirFacturas
Grabemos una macro con el nombre borrame para insertar dos hojas una que se
llame FacturasA y otra FacturasB.
El resultado es el siguiente, por medio del objeto Sheet agregaste, nombraste y
seleccionaste las hojas, facil no?
Pgina 54
Pgina 55
Pgina 56
El objeto Range es muy til, nos sirve para ir dentro de la hoja a una celda
determinada, en este caso vamos a la celda B2 para ver de que tipo es la
primera factura.
Si en la celda el valor es A entonces que vaya a la hoja con las facturas A sino a
la otra. (en el capitulo 7 vamos a ver todas estas cosas raras de if else y otras
yerbas en detalle.)
Pero antes de ir a la otra hoja tenemos que copiar en el portapapeles los datos
del primer dato que queremos llevar por eso de la celda que estamos le vamos a
decir que valla uno para la izquierda.
Para hacer eso usamos el mtodo offset de la siguiente manera
Como ves tiene parmetros 0,1 el 0 corresponde a las filas y el -1 a las columnas
De esta manera ahorramos varios pasos porque no nos movemos, con lo cual no
tenemos que volver y no usamos variables.
Ahora tenemos que ir a la hoja correspondiente y pegarlo en el ultimo rengln
disponible, para eso te cuento un truco nos vamos a la fila 60000 y de ah subs
con Control flechita para arriba y de ah uno para abajo para no borrar el ultimo.
Pgina 57
Este cdigo funciona para el primer rengln de los datos importados pero no
podemos repetir esto por todos los renglones por un lado porque no sabemos
cuantos renglones hay adems que seria demasiado cdigo
Para eso sirven los loops que vamos a ver mas adelante en el capitulo 7 pero
por ahora vamos a usar la instruccin do While (hacelo mientras se cumpla una
condicin)
El do while repetir lo que escribamos en el medio hasta que la condicin sea
falsa.
Como veras hay varios cambios antes de entrar al do while tenemos que estar
uno mas arriba para facilitar la ubicacin dentro de la hoja con los datos. (B1 en
vez de B2).
El do while se va ejecutar hasta que en la celda no halla nada osea que halla
llegado al final de la columna
La primera linea despus del Do While bajamos una (esto sirve para la segunda
vuelta).
Pgina 58
Como podes ver al pegar usamos pasteSpecial en ves de paste para no tener
que ir hasta la celda y despus volver.
Una ventaja es que cada hoja guarda el valor de la celda activa con lo cual con
solo ir a la hoja el cursor queda en mismo lugar que estaba cuando nos fuimos.
Vamos a crear un ultimo procedimiento para ejecutar los otros dos.
Debajo de un End Sub escribimos sub proFacturacion y dentro invocamos a los
otros dos procedimientos.
La ultima lnea es un mensaje para avisar que todo sali bien
Pgina 59
Pgina 60
Pgina 61
Pgina 62
Pgina 63
Pgina 64
Declaracin de variables
Recuerdan en la escuela x=10 entonces x+2 =12, bien de eso se trata x es una
variable.
Una variable es un lugar de almacenamiento con nombre que puede contener
cierto tipo de datos que puede ser modificado durante la ejecucin del programa.
Cada variable tiene un nombre nico que la identifica dentro de su nivel de
mbito. Puede especificar un tipo de datos o no.
Nombres de variable deben comenzar con un carcter alfabtico, deben ser
nicos dentro del mismo mbito, no deben contener ms de 255 caracteres y no
pueden contener un punto o carcter de declaracin de tipo.
Para declarar (usar) variables se utiliza normalmente una instruccin Dim
Dim strMiVariable as string
Las variables se pueden declarar como de uno de los siguientes tipos de datos:
Boolean, Byte, Integer, Long, Currency, Single, Double, Date, String (para
cadenas de longitud variable), String * longitud (para cadenas de longitud fija),
Object, o Variant. Si no se especifica el tipo de datos, el tipo de datos Variant es
el predefinido. Tambin es posible crear un tipo definido por el usuario
empleando la instruccin Type.
Se pueden declarar varias variables en una instruccin. Para especificar el tipo
de datos se debe incluir un tipo de datos para cada variable.
No es necesario especificar el tipo de datos en la instruccin de declaracin. Si
se omite, la variable ser del tipo Variant.
Cuando se utiliza la instruccin Static en lugar de la instruccin Dim, la variable
declarada mantendr su valor entre llamadas sucesivas.
En Visual Basic se puede declarar implcitamente una variable usndola en una
instruccin de asignacin. Todas las variables que se definen implcitamente son
del tipo Variant. Las variables del tipo Variant consumen ms recursos de
memoria que la mayor parte de las otros tipos de variables. Tu aplicacin ser
ms eficiente si se declaran explcitamente las variables y se les asigna un tipo
de datos especfico. Al declararse explcitamente las variables se reduce la
posibilidad de errores de nombres y el uso de nombres errneos.
Si no quers que Visual Basic realice declaraciones implcitas, puede incluir en
un mdulo la instruccin Option Explicit antes de todos los procedimientos. Esta
Pgina 65
instruccin exige que todas las variables del mdulo se declaren explcitamente.
Si un mdulo incluye la instruccin Option Explicit, se producir un error en
tiempo de compilacin cuando Visual Basic encuentre un nombre de variable
que no ha sido previamente declarado, o cuyo nombre se ha escrito
incorrectamente.
Se puede seleccionar una opcin del entorno de programacin de Visual Basic
para incluir automticamente la instruccin Option Explicit en todos los nuevos
mdulos.
Para seguir con la codificacin gregoriana tenemos un prefijo para cada tipo de
variables.
Tipo de datos
Boolean
Byte
Objeto Collection
Currency
Date (Time)
Double
Error
Integer
Long
Object
Single
String
Tipo definido por el usuario
Variant
Prefijo
bln
byt
col
cur
dtm
dbl
err
int
lng
obj
sng
str
udt
vnt
Ejemplo
BlnEncontrado
BytDatosImagen
colWidgets
curIngresos
dtmInicio
dblTolerancia
errNumDeOrden
intCantidad
lngDistancia
objActivo
sngMedia
strNombreF
udtEmpleado
vntCheckSum
Pgina 66
Y las variables Publicas que se pueden crear en cualquier lugar, aunque por una
cuestion de orden conviene crearlas en un modulo separado.
El tiempo durante el que una variable conserva su valor se conoce como vida. El
valor de la variable puede cambiar durante su vida, pero conserva algn valor.
Cuando una variable pierde su alcance, ya no tiene ningn valor.
Cuando un procedimiento o funcin comienza a ejecutarse, se inicializan todas
las variables. Las variables numricas se inicializan a cero, las cadenas de
longitud variable se inicializan a una cadena vaca de longitud cero ("") y una
cadena de longitud fija se llena con los caracteres correspondientes al cdigo
ASCII 0, o Chr(0). Las variables variant se inicializan a Empty. Cada uno de los
elementos de una variable de tipo definido por el usuario se inicializa como si se
tratase de una variable independiente.
Si el valor de una variable no cambia durante la ejecucin del cdigo, conserva
su valor de inicializacin hasta que pierda alcance.
Una variable de nivel de procedimiento declarada mediante la instruccin Dim
conserva su valor hasta que el procedimiento termina de ejecutarse. Si el
procedimiento llama a otros procedimientos, la variable conserva su valor
tambin mientras se ejecutan esos procedimientos.
Si una variable de nivel de procedimiento de declara con la palabra clave Static,
la variable conserva su valor mientras haya cdigo en ejecucin, sea cual sea el
mdulo. Cuando todo el cdigo ha terminado de ejecutarse, la variable pierde su
alcance y su valor. Su vida es la misma que la de una variable de nivel de
mdulo.
Una variable de nivel de mdulo es distinta a una variable esttica. En un mdulo
estndar, conserva su valor hasta que se termina de ejecutar el cdigo.
Las variables de nivel de mdulo consumen memoria hasta que sus valores se
vuelven a inicializa, por eso slo se deben utilizar cuando sea necesario.
Si se incluye la palabra clave Static antes de una instruccin Sub o Function,
los valores de todas las variables de nivel de procedimiento del procedimiento se
conservarn entre las sucesivas llamadas
Retomando nuestro ejemplo ya tenamos creado el encabezado de la funcin
ahora escribiremos el calculo
Pgina 67
Pgina 68
Si quisiramos que el monto fuera opcional o sea que en el caso que alguien no
pase este parmetro la funcin funcionara igual
Parece complicado tantas cosas no pero en realidad no es tan complicado como
parece y teniendo una de referencia siempre podemos copiar y pegar.
Pgina 69
La otra forma de ver que funciones podes usar es directamente con el objeto
WorksheetFunction, al tipear el punto te apareceran la lista de todas las
funciones.
Pgina 70
Bueno ahora simplemente elegis la celda que va a cargar el parmetro del monto
y pones aceptar
Pgina 71
Aca podes escribir lo que quieras incluso asignar una tecla rapida y la
descripcin aparecera en el asistente de funciones.
Pgina 72
Pgina 73
Una vez que esta dibujado vamos a ver como le cambiamos el nombre y las
propiedades para que nos sea de utilidad.
Imaginemos que necesitamos hacer un Cuadro Combinado que al cambiar
cambie un grafico que representa las ventas de una empresa
Nombra a una hoja Datos y a la que esta el Cuadro Combinado Reportes, en la
hoja Datos escrib la siguiente informacin:
Pgina 74
Pgina 75
En las propiedades cambiarle el nombre por uno normalizado para que no nos
volvamos locos cuando tengamos que asignarle cdigo desde VBA. Le
podemos llamar cmbReportes.
La propiedad para definir la lista es ListFillRange entonces ponemos la primera
celda de la lista dos puntos y la segunda.
Ya esta funcionando el combo ahora nos queda que al cambiar la seleccin se
modifique un Grfico.
Vamos a insertar un grafico basado en los datos de la hoja Datos mientras
grabamos una macro.
9.
Pgina 76
14. Siguiente y elegimos el rango de la hoja Datos. (para seleccin mltiple con
la tecla control)
Pgina 77
Pgina 78
Pgina 79
Pgina 80
Pgina 81
Pgina 82
Pgina 83
Pgina 84
Creacin de un men.
Existe una forma de poner una barra de men solo para nuestro libro sin
interferir con el resto de los usuarios.
Cuando abrimos nuestro libro o hoja lo creamos desde el cdigo y cuando nos
vamos lo borramos.
Vamos a crear un item en el men predeterminado de Excel que solo aparezca
cuando abrimos el libro del ejemplo.
Al final de este ejercicio tendramos que obtener algo asi:
Pgina 85
Pgina 86
Sub proCrearMenu()
Pgina 87
Pgina 88
6. Ahora solo queda agregar en el evento Open del libro el nombre del
procedimiento.
7. Por ultimo al salir del libro que se borre el item para que no se vea al abrir
otro libro
Pgina 89
Pgina 90
Pgina 91
Pgina 92
Application.CommandBars("MiBarraMenu").Delete
' Vuelve a manejar los errores
On Error GoTo 0
End Sub
Pgina 93
Pgina 94
Pgina 95
Pgina 96
Pgina 97
Definicin de constantes.
Una constante es elemento con nombre que mantiene un valor constante a
travs de la ejecucin de un programa.
Las constantes pueden ser cadenas o literales numricos, otras constantes o
cualquier combinacin que incluya operadores aritmticos o lgicos exceptuando
Is y la exponenciacin.
Cada aplicacin principal puede definir su propio conjunto de constantes. El
usuario puede definir constantes adicionales con la instruccin Const.
Por ejemplo podemos crear una constante con el nombre del usuario y usarla en
el sistema, si queremos usar el sistema para otro usuario solo cambiamos el
nombre en un solo lugar.
Pgina 98
Pgina 99
Pgina 100
Pgina 101
Ejemplo:
Esta funcin tiene como parmetro de entrada un Integer que representa el
numero de mes y defuelve el nombre del mes
Pgina 102
Pgina 103
Do While <condicin>
<bloque de instrucciones>
Loop
Ejemplo:
Enva un mail a cada uno de los destinatarios de la hoja1 hasta que encuentre el
primero vaco.
Pgina 104
Pgina 105
Pgina 106
Descripcin
prompt
buttons
title
helpfile
Pgina 107
context
Valor
Descripcin
VbOKOnly
VbOKCancel
VbAbortRetryIgnore
VbYesNoCancel
VbYesNo
VbRetryCancel
VbCritical
16
VbQuestion
32
VbExclamation
48
VbInformation
64
VbDefaultButton1
VbDefaultButton2
256
VbDefaultButton3
512
VbDefaultButton4
768
VbApplicationModal
VbSystemModal
4096
VbMsgBoxHelpButton
16384
VbMsgBoxSetForeground 65536
Pgina 108
VbMsgBoxRight
524288
VbMsgBoxRtlReading
1048576
Valor
Descripcin
vbOK
Aceptar
vbCancel
Cancelar
vbAbort
Anular
vbRetry
Reintentar
vbIgnore
Ignorar
vbYes
vbNo
No
Cuando cargamos una variable con la respuesta los parmetros van entre
parentesis
Pgina 109
Pgina 110
}
Si nos fijamos en la variable vemos que vale Pepe
Pgina 111
Parte
Descripcin
prompt
title
default
xpos
ypos
helpfile
context
Pgina 112
En el evento open del libro escribimos el cdigo para saber quien es el que esta
entrando
Antes que nada ocultamos las barras para que el usuario no pueda modificar
cosas del men y se concentre en la tarea.
Al final ejecutamos el formulario FrmCliente para que carge los datos personales
Pgina 113
Pgina 114
En el evento clic del botn de comando tenemos que agregar el cdigo para que
guarde el contenido de los cuadros de texto en la hoja cliente que creamos
anteriormente.
Es sencillo vamos a la hoja clientes.
Vamos a una celda de abajo donde no halla datos
Subimos hasta el primer dato
Bajamos una fila
Empezamos a pegar los datos
Llamamos al siguiente form.
Pgina 115
Definimos algunas variables modulares para controlar los datos con la respuesta
correcta
Pgina 116
Pgina 117
Pgina 118
Pgina 119