Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Programación VBA Con Excel - Manuel Ángel Torres Remon-FREELIBROS - ME
Programación VBA Con Excel - Manuel Ángel Torres Remon-FREELIBROS - ME
VBA
con
Excel
PROGRAMACIÓN VBA CON EXCEL
Autor: Manuel Ángel Torres Remon
ISBN Nº 978-612-304-064-2
Hecho el Depósito Legal en la Biblioteca Nacional del Perú Nº 2012-06469
Prohibida la reproducción parcial o total, por cualquier medio o método de este libro sin
previa autorización de la Empresa Editora Macro E.I.R.L.
MANUEL ÁNGEL TORRES REMON
Manuel Ángel TORRES REMON es Licenciado en Informática de la Universidad Alas Peruanas (Lima-
Perú), actualmente docente de Tecnología del Instituto de Educación Superior CIBERTEC; imparte cursos
de programación en los ciclos III y IV de la carrera profesional de Computación e Informática.
En la actualidad se ha capacitado en cursos de programación Net con Visual Studio 2010 dictando los
Fundamentos de la Programación en Net, Conexión a Base de Datos con ADO NET y la Programación
Orientada a Objetos con NET aplicando en esta última parte las N-Capas de la Programación.
Los cursos que actualmente dicta son: Programación Orientada a Objetos II con Net 2010, Base de Datos
Avanzado I con Transact SQL Server 2008 r2, Programación VBA con Excel 2010, Análisis y Diseño de
Sistemas I-II con UML y Rational Architect Software.
Agradecimientos
Quiero agradecer la oportunidad que me está
brindando la editorial Macro de exponer un trabajo
que lo tenía pensado hace mucho, pero por la falta
de tiempo no se podía concretar y también un
porcentaje se lo debo a los valiosos aportes de los
estudiantes que compartieron conmigo las sesiones
de VBA para Excel impartidos en Unimaster de
la Universidad Nacional de Ingeniería, en el IEST
Manuel Arévalo Cáceres y a Cibertec, ya que
gracias a sus experiencias pude desarrollar casos
que se expondrán en este material.
Me olvidaba mencionar a mi gran amigo Paul
Paredes que por intermedio de su persona conocí
a la gran familia Macro, gracias por el apoyo
desinteresado que siempre demuestras Paul.
Dedicatoria
Este libro está dedicado a mis pequeñas Ángela y
Fernanda por darme las fuerzas necesarias para
seguir adelante y mucho más a mi esposa Luz por
comprenderme en todo lo que me propongo.
Introducción
Hoy en día los usuarios de aplicaciones de oficina han evolucionado sus conocimientos sobre estas
herramientas, tanto así que tienen la necesidad de crear aplicaciones para el desarrollo de sus funciones
que faciliten y ahorren tiempo en el proceso, para esto existe la herramienta de desarrollo de Office
como es VBA, la cual les ayudará a plasmar todo lo planeado en aplicaciones mucho más interactivas
con el usuario; al principio resultará un poco complicado entender el lenguaje pero conforme avance
los capítulos comprenderá que no es tan complejo el desarrollo en VBA sino al contrario nos incentiva a
crear nuevas formas de presentar un proceso en poco tiempo y de fácil uso para el usuario.
Cada vez hay más usuarios interesados en conocer qué es lo que ofrece VBA, pues la respuesta la tiene
en este material, el cual le mostrará con casos prácticos el uso adecuado que le puede dar al VBA y el
enorme tiempo que ahorrará en ejecutar procesos; la ventaja de la programación VBA es que evita el uso
de fórmulas extensas, como las que puede aplicar en Excel, y resumirlas en códigos preparados por usted
mismo con VBA, empezará a notar un cambio conforme avancen los capítulos del libro y sugiero no dejar
de practicar los ejercicios propuestos de este material.
Con el libro de Programación VBA con Excel aprenderá el manejo integral de Visual Basic para Aplicaciones
(VBA) y su empleo dentro de Excel. Así logrará conocer el lenguaje de programación, crear nuevas
funciones de cálculo, controlar los objetos de Excel por medio de programación, implementar aplicaciones
comerciales y ampliar enormemente la funcionalidad que ofrece Excel a sus usuarios. Asimismo, contará
con la posibilidad de editar profesionalmente las macros que se genere en las aplicaciones.
Programación VBA con Excel está dirigido a usuarios intermedios y/o avanzados de Excel que aún no son
programadores, este material pretende explicar el inicio de la programación hasta el control de una base
de datos con Access proponiendo casos prácticos y su respectiva evaluación en cada capítulo.
Índice
Capítulo 1
Introducción ......................................................................................................................................17
Introducción .......................................................................................................................................19
¿Qué es un programa? .......................................................................................................................20
¿Qué son los Lenguajes de Programación? ........................................................................................21
Introducción a la Programación Orientada a Objetos ........................................................................22
Clase ............................................................................................................................................22
Objeto .........................................................................................................................................22
Propiedad ....................................................................................................................................23
Evento .........................................................................................................................................24
¿El Office y su relación con VBA? .......................................................................................................24
¿Por qué debemos aprender VBA? ....................................................................................................24
Automatización y repetición .......................................................................................................24
Mayor interacción con el usuario ................................................................................................25
Interacción entre aplicaciones de Office .....................................................................................25
¿Cuál es el futuro de VBA? .................................................................................................................25
Herramientas para Office de Microsoft Visual Studio ........................................................................25
Convenciones del libro .......................................................................................................................26
Listado de comandos de Excel en inglés y español ............................................................................27
Evaluación de la capacidad ................................................................................................................49
Capítulo 2
Capítulo 3
La Macro ............................................................................................................................................73
La Grabadora de Macros ....................................................................................................................75
Implementación de una Macro ..........................................................................................................78
Ejecutar una Macro ............................................................................................................................81
Administrar una Macro (crear, modificar y eliminar) .........................................................................81
Asignar una Macro a un control de formulario, activeX, imagen o forma .........................................83
Caso desarrollado 1: Encabezado de Informe .................................................................................... 85
Caso desarrollado 2: Navegador Web ................................................................................................88
Evaluación de la capacidad ................................................................................................................92
Capítulo 4
Capítulo 5
Capítulo 6
Capítulo 7
Capítulo 9
Capítulo 10
1
INTRODUCCIÓN
Introducción
¿Qué es un programa?
¿Qué son los Lenguajes de Programación?
Introducción a la Programación Orientada a Objetos
– Clase
– Objeto
– Propiedades
– Eventos
¿El Office y su relación con VBA?
¿Por qué debemos aprender VBA?
– Automatización y repetición
– Mayor interacción con el usuario
– Interacción entre aplicaciones de Office
¿Cuál es el futuro de VBA?
Herramientas para Office de Microsoft Visual Studio
Convenciones del libro
Listado de comandos de Excel en inglés y español
Evaluación de la capacidad
• INTRODUCCIÓN
Partiendo desde que un usuario hace uso de una computadora
personal, debemos considerar los diferentes roles que se asumen
frente a esta, es decir, los roles que ejecutamos al manipular una
computadora; usted conocerá que existen los administradores de
base de datos que tienen por misión gestionar y administrar una
base de datos, como su rol lo indica, luego están los programadores
o desarrolladores que tienen por misión implementar códigos
fuentes y crear aplicaciones en todos los entornos ya sea web,
plataforma o móvil y finalmente los operadores de aplicaciones.
El término operador hace referencia a un rol de sólo uso de los
programas aplicativos que puede implementar un programador,
este no tiene por qué manipular el código ya que no sería un rol
adecuado para un operador. VBA está diseñado justamente para aquellos usuarios emprendedores, que
necesitan ir más allá de sólo operar la aplicación, es decir, ya conocen toda las actividades de proceso de
la aplicación y ahora necesitan reducir tiempos a la hora de aplicarlos y la única forma es por medio de
códigos. A partir de un estudio de fundamentos de programación como es este libro, podrá desarrollar
aplicaciones pequeñas pero de gran calidad para Excel dentro del entorno VBA manipulando el código
del lenguaje Basic.
La idea principal del uso de VBA en Excel es agilizar las tareas que se
realizan en forma repetitiva o de aquellas fórmulas extensas que alguna
vez usó en Excel, VBA resume dichas tareas en porciones pequeñas de
códigos que son manipulados como Macros de Excel.
Conocer VBA implica facilitar su trabajo en Excel y le brinda la posibilidad de realizar tareas más ágiles;
que antes de conocer VBA eran un poco engorrosas, no hay que dejar de lado la tarea importante que
se realiza en Excel, VBA lo resume ahorrando tiempo e inclusive realiza tareas no posibles desde Excel, le
pregunto ¿Será necesario conocer el lenguaje que propone VBA?
No obstante, VBA no es útil sólo para tareas repetitivas. También puede usar VBA para crear nuevas
funcionalidades en Excel (por ejemplo, puede desarrollar nuevos algoritmos para analizar datos, manipular
grandes cantidades de registros, ahorrar tiempo en la toma de decisiones) y realizar tareas que integren
Excel con otras aplicaciones de Office, como Microsoft Access 2010. Es muy cierto que de todas las
aplicaciones de Office, Excel es la más usada. Este libro no pretende enseñar los comandos de Excel sino
más bien prepararlo para desarrollar aplicaciones de alta calidad y en el futuro ser programador en Excel.
A pesar de todas las buenas razones para usar VBA en Excel 2010, es importante recordar que la mejor
solución de un problema posiblemente no se relacione con VBA en absoluto. Excel tiene una gran
variedad de características sin VBA y es posible que hasta un usuario avanzado no esté familiarizado con
todas ellas. Antes de acudir a una solución de VBA, realice una búsqueda exhaustiva en Ayuda y Recursos
en Línea para asegurarse de que no existe una manera más simple.
20 CAP. 1 INTRODUCCIÓN
• ¿QUÉ ES UN PROGRAMA?
Si usted es usuario de las aplicaciones de Office como Word,
Power Point o el mismo Excel entonces usted ha usado un
programa, estos y muchos programas tienen por misión
facilitar el trabajo del usuario y realizar procesos mucho más
rápidos e intuitivos esa es la característica de los programas;
es así como existen programas para reproducir música, video
o acceder a internet.
Todos los programas han sido diseñados pensando en
el usuario final, por tanto; el desarrollo de programas que
usted realice con VBA para Excel tendrá que tener el mismo
objetivo, es decir, estará diseñado para agilizar las tareas que antes con Excel resultaban un poco largas
aplicarlas, un caso real es la función SI de Excel que sólo tiene 8 niveles de comparación, VBA para Excel
lo supera con la Estructura Selectiva If que no tiene límite de comparaciones y así se encontrarán muchas
más comparaciones conforme avance en VBA.
Fig. 1-1
En la Fig. 1.1 se muestra una porción de código fuente que tiene por misión calcular el valor de Celsius a
partir de un valor en Farenheit.
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 21
Vea el siguiente ejemplo, para poder mostrar un mensaje desde VBA se debe colocar el comando Msgbox,
pero como nota en la Fig. 1.2 se debe respetar cierto patrón del comando; por ejemplo, colocarlo en
comillas, a lo largo de este libro comprenderá muchos de esos patrones.
Fig. 1-2 Fig. 1-3
Para que se pueda generar la ventana de saludo, la computadora debe entender la instrucción, esto es
un trabajo interno de VBA gracias a su soporte del lenguaje Basic es que interpreta, traduce y ejecuta
las instrucciones de un código fuente.
Fig. 1-4
En la Fig. 1.4 se muestra el ciclo de elaboración de un programa típico, todo empieza con un programa
fuente que es donde reside el código VBA, hay que tener en cuenta que un programa fuente se basa en
reglas propias del lenguaje, el intérprete verifica justamente esas instrucciones y las traduce para que la
computadora las pueda entender, aquí ocurre 2 cuestiones: si el programa está correcto se mostrará la
aplicación en tiempo de ejecución, caso contrario se mostrará un mensaje de error como el que sigue:
Fig. 1-5
22 CAP. 1 INTRODUCCIÓN
Luego VBA lo devuelve al código fuente para que usted pueda corregir los errores y volver a empezar el
ciclo de elaboración de un programa. Ojo no necesariamente un programa se encuentra correcto cuando
pasa esta etapa ya que también existen diferentes tipos de errores como los de lógica. "Un programa
puede ejecutarse correctamente pero no necesariamente devuelve la respuesta adecuada".
Hay algunos conceptos que debe considerar antes de comenzar con el VBA ya que varios de los procesos
que realizará en VBA están basados en objetos, como por ejemplo, asignar propiedades a los UserForm
o simplemente implementar un código fuente.
• CLASE
Son las plantillas para hacer objetos. En una clase se define los comportamientos y propiedades que
poseerán los objetos, esto quiere decir que cada vez que use un objeto estará usando una copia de
la clase, esto explica muchas cosas en Excel por ejemplo Hoja1, Hoja2, Hoja3 son objetos de la clase
WorkSheets de Excel.
Fig. 1-6
• OBJETO
Un objeto es una instancia (copia) de la clase de la cual hereda todos los atributos
y métodos que la clase contiene con el fin de interactuar con el exterior. Ahora
pongamos un ejemplo real, cuando usted tiene un simple lápiz como objeto
¿Cuáles son las características que nota? ¿Qué puede realizar con el lápiz?
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 23
Alto Escribir
Diámetro Sobrescribir
Color Garabatear
Marca
PROPIEDADES EVENTOS
• PROPIEDAD
Son las características que tiene un objeto seleccionado, cada
objeto en VBA tiene sus propiedades bien definidas,las cuales
pueden ser modificadas por el programador con la idea de
personalizar el objeto.
Fig. 1-8
24 CAP. 1 INTRODUCCIÓN
• EVENTO
Es un suceso que podría tener un objeto (tal como una interacción del usuario con la máquina o un
mensaje enviado por un objeto). El sistema maneja el evento enviando el mensaje adecuado al objeto
pertinente. También se puede definir como evento a la reacción que puede desencadenar un objeto,
es decir, la acción que genera.
Fig. 1-9
En la Fig. 1.9 se muestra la lista de eventos de un determinado objeto, como sucedió con las propiedades,
los eventos también son parcialmente similares entre los objetos pero hay eventos propiamente de un
tipo de objeto, por ejemplo, la propiedad PaswordChar es exclusivo del objeto TextBox.
Usted puede realizar estas y muchas tareas haciendo uso del código VBA para Office, hay que tener en
cuenta que algunos software de ingeniería también necesitan lo mismo y están incorporando VBA con la
misma idea que se tenía con Office.
Supongo que usted pensará que las interrogantes planteadas anteriormente se pueden resolver usando
Excel y está en lo cierto, pero tenga en cuenta el tiempo usado en cada interrogante e imagínese hacerlo
a varios archivos de Excel en diferentes tiempos se volvería engorroso estar haciendo repetidamente una
acción que ya antes había aplicado, VBA suple las tareas cotidianas por macros de acceso sencillo.
• AUTOMATIZACIÓN Y REPETICIÓN
VBA es efectivo y eficaz a la hora de implementar soluciones repetitivas ante problemas de corrección
o formato.
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 25
Fig. 1-10
En la Fig. 1.10 se muestra el logo oficial del VSTO, sugiero que como herramienta que desplazará al VBA
comience a investigar el tema, aquí sólo se han mencionado referencias globales del VSTO ya que no es
tema de este libro.
“Visual Studio Tools para Office puede ayudarle a aprovechar las mejoras de productividad de
Microsoft .NET Framework Version 2.0 para extender las aplicaciones de Microsoft Office 2003 y Microsoft
Office System 2007 mediante Visual Basic y Visual C#. Las herramientas incluyen nuevos proyectos de
Visual Studio que le ayudan a empezar con la creación de soluciones de Microsoft Office.”
Ahora hay dos ediciones de Visual Studio Tools para Office:
Microsoft Visual Studio 2005 Tools para Microsoft Office System (VSTO 2005)
Microsoft Visual Studio 2005 Tools para Microsoft Office System 2007 (VSTO 2005 SE)
Estas dos ediciones proporcionan muchas características nuevas que ayudan a crear soluciones
administradas que utilizan Microsoft Office 2003 y Microsoft Office System 2007.
26 CAP. 1 INTRODUCCIÓN
En este libro encontrará muchos códigos VBA incrustados en el tema, para esto se usará la fuente
Consolas al hacer referencia a una instrucción VBA como por ejemplo: Dim N%: N=10
Si se toma en cuenta que a partir de Office 2007 ya no existen los menús de opciones en este libro se
considerarán las referencias a las opciones de la siguiente manera, por ejemplo, si se quiere acceder a
la herramienta Visual Basic de la ficha programador entonces se mencionará de la siguiente manera:
Ficha Programador Visual Basic (fuente: Tahoma). A continuación se verá una comparación de la
evolución de las barras entre Excel 2003 y 2010.
Fig. 1-12
El editor de VBA tiene un aspecto Visual Basic 6 y aquí sí encontrará la barra de menús, suponga que
necesita acceder a Referencias del Menú Herramientas del entorno VBA, entonces lo mencionará de
la siguiente manera: Herramientas Referencias (fuente: Tahoma).
Las notas importantes e interrogantes del tema serán colocadas en el siguiente formato:
Por esta razón, a finales de los años 50 surgió un nuevo tipo de lenguaje de programación
que evitaba inconvenientes, a costa de ceder un poco en las ventajas. Estos lenguajes se
llaman lenguajes de programación de tercera generación o de alto nivel, en contraposición
a los de bajo nivel.
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 27
Financial PV VA
Statistical QUARTILE CUARTIL
Math QUOTIENT COCIENTE
Math RADIANS RADIANES
Math RAND ALEATORIO
Math RANDBETWEEN ALEATORIO.ENTRE
Statistical RANK JERARQUIA
Financial RATE TASA
Financial RECEIVED CANTIDAD.RECIBIDA
Text REPLACE REEMPLAZAR
Text DoubleByte REPLACEB REEMPLAZARB
Text REPT REPETIR
Text RIGHT DERECHA
Text DoubleByte RIGHTB DERECHAB
Math ROMAN NUMERO.ROMANO
Math ROUND REDONDEAR
Math ROUNDDOWN REDONDEAR.MENOS
Math ROUNDUP REDONDEAR.MAS
Lookup ROW FILA
Lookup ROWS FILAS
Statistical RSQ COEFICIENTE.R2
Lookup RTD fnNA:RTD
Text SEARCH HALLAR
Text DoubleByte SEARCHB HALLARB
Date SECOND SEGUNDO
Math SERIESSUM SUMA.SERIES
Math SIGN SIGNO
Math SIN SENO
Math SINH SENOH
Statistical SKEW COEFICIENTE.ASIMETRIA
Financial SLN SLN
Statistical SLOPE PENDIENTE
Statistical SMALL K.ESIMO.MENOR
External SQL.REQUEST SQL.REQUEST
Math SQRT RAIZ
Math SQRTPI RAIZ2PI
Statistical STANDARDIZE NORMALIZACION
Statistical STDEV DESVEST
Statistical STDEVA fnNA:STDEVA
Statistical STDEVP DESVESTP
Statistical STDEVPA fnNA:STDEVPA
Statistical STEYX ERROR.TIPICO.XY
Text SUBSTITUTE SUSTITUIR
34 CAP. 1 INTRODUCCIÓN
• EVALUACIÓN DE LA CAPACIDAD
1. ¿Qué concepto tiene de un programa y nombre tres programas de tipo lenguajes de programación?
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
2
INTRODUCCIÓN AL VISUAL BASIC
APLICACIONES (VBA)
Lenguaje Basic
Fundamentos de Visual Basic Aplicaciones para Excel
La ficha Programador de Excel 2010
Configurar la seguridad de Macros en un libro de Excel
Modos de Acceso al VBA
Descripción del editor VBA
– Descripción de la barra de herramientas estándar
– El explorador de Proyectos
– La Ventana de Propiedades
– La Ventana de Código
Personalizar del entorno VBA
– Asignar derechos sobre el proyecto VBA
– Asignar una clave al código VBA
– Activar el requerimiento de declaración obligatoria de variables
– Aplicar formato al editor de código VBA
El objeto ThisWorkBook
El objeto WorkSheets
Evaluación de la capacidad
• LENGUAJE BASIC
El lenguaje BASIC fue inventado en 1964 por John George Kemeny (1926-1992) y Thomas Eugene Kurtz
(1928-) en el Dartmouth College. En años subsiguientes, mientras que otros dialectos de BASIC aparecían,
el BASIC original de Kemeny y Kurtz fue conocido como Dartmouth BASIC.
BASIC fue diseñado para permitir a los estudiantes escribir programas usando terminales de una
computadora en tiempo compartido. Estaba pensado para reducir notablemente la complejidad de
los otros lenguajes del momento, con uno diseñado específicamente para la clase de usuarios que los
sistemas de tiempo compartido permitían: un usuario más sencillo, fuera del área de las ciencias de
la computación, a quien no le interesaba tanto la velocidad, sólo el hecho de ser capaz de programar
y usar la máquina sin demasiadas complicaciones. Los diseñadores del lenguaje también querían que
permaneciera en el dominio público, lo cual contribuyó a que se diseminara rápidamente.
1. Ser fácil de usar para los principiantes, propone sentencias en inglés que son de simple corte, sólo
debe tener cuidado en el formato de cada una de ellas.
2. Ser un lenguaje de propósito general, Basic no está destinado a un área específica más bien es
portable.
3. Permitir a los expertos añadir características avanzadas, conservando simple el lenguaje para los
principiantes.
4. Ser interactivo.
5. Proveer mensajes de error, claros y amigables.
6. Responder rápido en los programas pequeños.
7. No requerir un conocimiento del hardware de la computadora.
8. Proteger al usuario del sistema operativo.
Microsoft VBA viene integrado en aplicaciones de Microsoft Office, como Word, Excel y Access.
Prácticamente cualquier cosa que se pueda programar en Visual Basic 5.0 o 6.0 se puede hacer también
dentro de un documento de Office, con la sola limitación que el producto final no se puede compilar
separadamente del documento, hoja o base de datos en que fue creado; es decir, se convierte en una
macro (o más bien una súper macro). Esta macro puede instalarse o distribuirse con sólo copiar el
documento o base de datos.
54 CAP. 2 INTRODUCCIÓN AL VISUAL BASIC APLICACIONES (VBA)
Fig. 2-1
Finalmente para habilitar la ficha programador sólo debe realizar un check en el recuadro de la Fig. 2.1
y finalmente clic en aceptar.
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 55
Fig. 2-2
COMBINACIÓN DE
HERRAMIENTA DESCRIPCIÓN
TECLAS
No presenta
Y optó por pensarlo antes de seleccionar Habilitar
contenido, la advertencia ocurre por la actividad macro
que se encuentra dentro del Excel y que al no configurar
la Seguridad de macros; Excel opta por preguntar si
desea habilitarlas.
Ahora tiene 2 opciones, primero dejar que Excel le pregunte al momento de abrir un documento de
Excel si quiere habilitar el contenido o segundo configurar la seguridad de la macro para que al acceder
al archivo de Excel con macros no realice pregunta alguna y habilite las macros.
Acceso:
Ficha Programador
En la ventana Centro de confianza se muestra una serie de opciones y como verá ya está predefinida la
opción Deshabilitar todas las macros con notificación, de la cual usted debe configurar de la siguiente
manera:
Fig. 2-3
Debe seleccionar Habilitar todas las macros (1) y active el check Confiar en el acceso al modelo de
objetos de proyectos de VBA (2). Entiéndase que la habilitación conlleva a no preguntar sobre las
macros al momento de abrir un archivo de Excel, en el caso de confiar en el modelo de objetos habilite
el uso de los comandos WorkBook, WorkSheets, Cells, Range, etc.
COMBINACIÓN DE
DESCRIPCIÓN
TECLAS
Fig. 2-4
Fig. 2-5
58 CAP. 2 INTRODUCCIÓN AL VISUAL BASIC APLICACIONES (VBA)
A continuación se muestra las principales herramientas que contiene la barra de herramientas estándar,
su descripción y la combinación de teclas con la cual podrá acceder a dichas herramientas:
COMBINACIÓN DE
TOOLS DESCRIPCIÓN
TECLAS
Para un trabajo más fluido en el código VBA se recomienda también habilitar la barra de herramientas
Edición (VerBarra de HerramientasEdición)
Fig. 2-6
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 59
COMBINACIÓN
TOOLS DESCRIPCIÓN
DE TECLAS
Lista de Propiedades y Métodos, cuando se está
implementando código en VBA es necesario invocar a las CTRL+J
propiedades de un determinado objeto ya que será difícil CTRL+Barra
aprender todas las propiedades o métodos de todos los Espaciadora
objetos en VBA.
Lista de constantes, se presenta una lista de constantes
CTRL+SHIFT+J
declaradas dentro del entorno VBA.
• EL EXPLORADOR DE PROYECTOS
Desde el explorador de proyectos se puede tener el control de todos los objetos que tiene Excel.
1
2
3 Fig. 2-7
4
5
2 Visualiza el nombre del documento habilitado para macros (Macros Basicos.xlsm) enmarcado en
el proyecto VBA.
3 Visualiza las hojas del libro activo: Sheets1 (Sheets1) – Hoja1(Hoja1)
ThisWorkBook representa al libro activo.
4 UserForm1 es el formulario.
5 Módulo1: es el objeto que permite crear funciones o procedimientos definidos por el usuario,
cuando usted crea una macro en Excel automáticamente se crea un módulo con el código
autogenerado por VBA.
Agregar un módulo
En el desarrollo de una aplicación se necesitará agregar un Módulo y dentro de él, colocar el código
VBA por medio de Funciones o Procedimientos, además de declarar variables globales. Usted puede
añadir un número indeterminado de Módulos al proyecto. Veamos:
Primera Forma:
Desde el Menú InsertarMódulo
Segunda Forma:
Haga clic derecho en el Explorador de Proyectos.
Seleccione Insertar.
Seleccione Módulo.
Fig. 2-8
En la ventana de la Fig. 2.8 se puede implementar funciones o procedimientos que serán públicos
dentro de Excel, entienda que si implementa una función (Function), Excel la visualizará dentro de la
lista de funciones y si implementa un procedimiento(Sub) Excel lo podrá visualizar por medio de una
macro.
Fig. 2-9
Cambie la propiedad (Name) desde la ventana Propiedades; por ejemplo, moFunciones que
representa a un módulo de puras funciones.
Fig. 2-10
Eliminar un módulo
Tenga en cuenta que al eliminar un Módulo estará eliminando a todas las funciones o procedimientos
programados en él.
Fig. 2-11
Caso. Implemente una función que determine la raíz cúbica de un número N dentro del módulo
moFunciones.
Fig. 2-12
62 CAP. 2 INTRODUCCIÓN AL VISUAL BASIC APLICACIONES (VBA)
Como notará hay varias funciones que se deben explicar en los siguientes capítulos como Round o la
misma función.
Para probar la función debe implementar en Excel una hoja de la siguiente forma:
Fig. 2-13
Agregar un UserForm
Un UserForm es la forma en que el usuario se puede comunicar con
una aplicación VBA, la idea principal es que el programador implemente
lo mejor posible dicho UserForm y sea amigable para el usuario. Existen varias
i fforma d
de agregar un
UserForm tenemos:
Primera Forma:
Desde el Menú InsertarUserForm
Segunda Forma:
Presione clic derecho en el Explorador de Proyectos.
Seleccione Insertar.
Seleccione UserForm.
Fig. 2-14
Eliminar el UserForm
Tenga en cuenta que al eliminar un UserForm también elimina las macros que hacen referencia a dicho
UserForm.
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 63
Fig. 2-15
Ejecutar un UserForm
Ejecutar un UserForm implica pasar al modo de ejecución de una aplicación; por lo tanto, no podrá
realizar ningún cambio en el código mientras se encuentre en este estado. Tenemos las siguientes
formas:
Primera Forma:
Realice 2 clics en un UserForm del Explorador de Proyectos.
Presione F5.
Segunda Forma:
Realice 2 clics en un UserForm del Explorador de Proyectos.
Presione .
• LA VENTANA DE PROPIEDADES
Cada objeto contenido en el proyecto de VBA tiene propiedades, algunas de ellas parecidas, pero
esto es debido a la teoría de los objetos (consulte el Capítulo 1, el tema de Programación Orientada
a Objetos).
1
1 En esta sección aparece el nombre del Objeto y la
clase a la que pertenece.
Nombre del Objeto: frmPago
Nombre de la Clase: UserForm
2 Lista de propiedades activas por el objeto
2 3
seleccionado.
3 Valor asignado a cada propiedad, que puede ser
modificado en tiempo de diseño, la modificación
en esta sección está predeterminada por VBA, la
mayoría de las propiedades ya tienen un valor inicial.
Fig. 2-16
64 CAP. 2 INTRODUCCIÓN AL VISUAL BASIC APLICACIONES (VBA)
• LA VENTANA DE CÓDIGO
La ventana de código no es visible directamente por el entorno VBA, para asignar un código a un
objeto debe dar doble clic sobre el mismo y así logrará acceder a su entorno de código, recuerde
respetar las reglas VBA ya que al pasar a ejecutar la aplicación verificará instrucción por instrucción y
emitirá los errores por medio de mensajes en la pantalla. A continuación se describirá las partes que
componen una ventana de código en VBA.
1 2
Fig. 2-17
1 En este cuadro combinado se muestra una relación de objetos contenidos dentro del UserForm.
2 Lista de eventos activos por un objeto seleccionado.
3 VBA forma una estructura de tipo procedimiento con el objeto y el evento seleccionado, se puede
interpretar de la siguiente forma: procedimiento privado del objeto Workbook (Libro de Excel) con
el evento Open, es decir, el código se ejecutará cuando se aperture un libro de Excel.
Vea el siguiente caso: se necesita mostrar la fecha actual por medio de un mensaje, todo esto debe
ocurrir al abrir un libro de Excel.
Fig. 2-18
Fig. 2-19
La función MsgBox mostrará la fecha actual siempre y cuando grabe la aplicación como tipo Libro
de Excel habilitado para Macros. Abra el libro guardado recientemente y observe el mensaje
programado, más adelante se describirá con detalle la forma de envíos de mensaje.
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 65
Fig. 2-20
Esta ventana presenta la ficha general para la asignación de datos personalizados al proyecto y la ficha
protección que permite asignar una clave al código VBA. Veamos algunos casos:
Fig. 2-21
66 CAP. 2 INTRODUCCIÓN AL VISUAL BASIC APLICACIONES (VBA)
Al finalizar el ingreso regístrelo con el botón Aceptar y quedará de la siguiente forma en el Explorador
de Proyectos.
Fig. 2-22
Fig. 2-23
Active el check Bloquear proyecto para visualización, para poder bloquear la vista del código VBA
implementado y en la caja de contraseña y confirmar contraseña, digite el código en ambas cajas,
finalmente clic en Aceptar.
Recuerde que no se refiere a la contraseña del libro, esta clave es propiamente del código VBA.
Fig. 2-24
Una vez activada la opción Requerir declaración de variables aparece la instrucción Option Explicit
al inicio del entorno de código VBA esto indica que las variables deben ser declaradas de manera
obligatoria, caso contrario se emitirá un mensaje de error indicando que la variable no ha sido declarada.
Fig. 2-25
Fig. 2-26
En la Fig. 2.26 modifique lo necesario para un cómodo desplazamiento dentro del código VBA.
68 CAP. 2 INTRODUCCIÓN AL VISUAL BASIC APLICACIONES (VBA)
• EL OBJETO THISWORKBOOK
El objeto ThisWorkBook o simplemente WorkBook representa a un libro de Excel.
El evento Open permite la apertura de un archivo de tipo Excel, ahora sería muy complicado crear un
VBA para cada archivo que se desee abrir, mejor seleccione un archivo de tipo Excel desde una ventana
emergente, la cual tiene el siguiente código VBA Application.GetOpenFileName.
Caso: crear un procedimiento que permita seleccionar un archivo de tipo de Excel y permita visualizar
su contenido.
Fig. 2-27
Hay que tener en cuenta que el usuario no seleccione ningún archivo de tipo Excel, entonces el código
fuente de la Fig. 2.27 emitirá un error, para controlar dicho evento se implementó la instrucción On Error
Goto 1 que atrapa el error del procedimiento y lo envía a 1: donde no hay ninguna acción en algunas
ocasiones se coloca un mensaje, pero para este caso no es necesario.
Fig. 2-28
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 69
Luego:
Una vez implementado el código, grabe el archivo de Excel con tipo
Archivo de Excel habilitado para Macros.
Cierre el libro y vuélvalo a abrir y se mostrará el siguiente mensaje.
• EL OBJETO WORKSHEETS
El objeto WorkSheets o simplemente Sheets representa la hoja de un libro de Excel. Existen las siguientes
opciones para poder analizar al Sheets.
Fig. 2-29
El procedimiento HojaActiva muestra en la Celda A1 de cualquier hoja el nombre de la hoja activa, para
esto deberá crear el procedimiento dentro del ThisWorkBook de VBA como se muestra en la Fig. 2.29.
Fig. 2-30
El procedimiento muestraFechaAct permite mostrar la fecha actual en las celdas cuyo rango se encuentra
desde A1 hasta A4 de la hoja1, otra forma de referenciar a la hoja1 sería:
Sheets("Hoja1").Range("A1:A4").Value = "=Today()"
Sheets(1).Range("A1:A4").Value = "=Today()"
70 CAP. 2 INTRODUCCIÓN AL VISUAL BASIC APLICACIONES (VBA)
Propiedades
El objeto Sheets cuenta con las siguientes propiedades:
.Name: obtiene el nombre de la hoja.
.Index: obtiene el número de índice de la hoja.
.Count: obtiene el total de hojas del libro.
.Delete: elimina la hoja seleccionada.
Fig. 2-31
Caso. Crear un procedimiento llamado muestraHoja que solicite un número de hoja para activarla y al
final muestre un mensaje de bienvenida a dicha hoja.
Fig. 2-32
Note que hay más códigos de programación que se explicarán en los capítulos siguientes.
Caso. Crear un procedimiento llamado EliminaHoja() que permita eliminar una hoja por medio del
nombre de la misma, esta deberá ser ingresada por el usuario.
Fig. 2-33
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 71
Fig. 2-34
En la Fig. 2.34 se muestra el cuadro que genera la instrucción InputBox, en donde se solicita el nombre
de la hoja que desea eliminar.
Fig. 2-35
En la Fig. 2.35 se muestra la ventana de confirmación de eliminación. Se podría ampliar el código fuente
para que no se le pregunte por la eliminación de la hoja en Excel con la siguiente instrucción:
Application.DisplayAlerts= False
72 CAP. 2 INTRODUCCIÓN AL VISUAL BASIC APLICACIONES (VBA)
• EVALUACIÓN DE LA CAPACIDAD
1. ¿Qué cambios nota si no configura la seguridad de macros en un libro de excel?
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
4. ¿Cuál cree que es el beneficio de colocar una clave al código VBA dentro de un libro de excel?
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
3
LA MACRO
La grabadora de Macros
Implementación de una Macro
Ejecutar una Macro
Administrar una Macro (crear, modificar y eliminar)
Asignar una Macro a un control de formulario, activeX, imagen o forma
Caso desarrollado 1: Encabezado de Informe
Caso desarrollado 2: Navegador Web
Evaluación de la capacidad
• LA GRABADORA DE MACROS
Excel da la posibilidad de crear programas que faciliten y agilicen las tareas cotidianas, ya sean simples o
complejas, a estos programas se les denomina macros, dichas macros son creadas desde la Grabadora
de Macros de Excel en la cual inmediatamente después de activar la grabadora se creará una macro y
automáticamente comenzará la grabación desde el primer clic o movimiento de teclado, todo quedará
registrado en la grabadora y a su vez generará un código VBA por cada acción realizada.
Veamos un caso, imagine usted preparar un Reporte de los Empleados todos los días para registrar sus
horas de trabajo diario, también debemos considerar que puede contar con horas extras. Elabore una
Macro que permita diseñar el formato del Reporte de la Fig. 3.1.
Fig. 3-1
A continuación se muestra el código generado por la macro ReporteEmpleados que permite dar solución
al problema de diseñar la interfaz del Reporte de Empleados.
Sub ReporteEmpleados()
‘
‘ ReporteEmpleados Macro
‘
Range(“B4”).Select
ActiveCell.FormulaR1C1 = “REPORTE DE EMPLEADOS”
Range(“B6”).Select
ActiveCell.FormulaR1C1 = “CÓDIGO”
Range(“C6”).Select
ActiveCell.FormulaR1C1 = “EMPLEADO”
Range(“D6”).Select
ActiveCell.FormulaR1C1 = “HORAS” & Chr(10) & “TRABAJADAS”
Range(“E6”).Select
ActiveCell.FormulaR1C1 = “HORAS” & Chr(10) & “EXTRAS”
Range(“F6”).Select
Columns(“C:C”).ColumnWidth = 33.86
Columns(“D:D”).ColumnWidth = 17.57
Columns(“E:E”).ColumnWidth = 14
Range(“B4:E4”).Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
76 CAP. 3 LA MACRO
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.Merge
Selection.Font.Size = 12
Selection.Font.Size = 14
Cells.Select
With Selection.Font
.Name = “Trebuchet MS”
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ThemeColor = xlThemeColorLight1
.TintAndShade = 0
.ThemeFont = xlThemeFontNone
End With
Range(“C6”).Select
Columns(“C:C”).ColumnWidth = 44
Range(“B6:E6”).Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlCenter
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 77
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.Font.Bold = True
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorDark1
.TintAndShade = -0.249977111117893
.PatternTintAndShade = 0
End With
Range(“B7:E27”).Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
Columns(“G:G”).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.EntireColumn.Hidden = True
ActiveWindow.SmallScroll ToRight:=-2
ActiveWindow.SmallScroll Down:=18
Rows(“36:36”).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.EntireRow.Hidden = True
ActiveWindow.SmallScroll Down:=-45
ActiveWindow.DisplayGridlines = False
Range(“B4:E4”).Select
Selection.Font.Size = 28
Range(“C2”).Select
End Sub
78 CAP. 3 LA MACRO
Ficha Programador
Fig. 3-2
De cualquiera de las formas que haya optado, le aparecerá la siguiente ventana, en la cual deberá
configurar los datos de la Macro, veamos sus partes:
Fig. 3-3
En la Fig. 3.3 se debe asignar un nombre a la macro (1), tener en cuenta que no debe tener
espacios en blanco ni caracteres especiales, Método abreviado (2) es la asignación de un juego
desde el teclado para la activación de la macro podría ser CTRL+SHIFT+F como nota en (2) sólo
aparece CTRL+ para asignar la tecla Shift sólo hay que presionarla al momento de asignar el método
abreviado, Guardar macro en (3) determina donde se grabará la macro, por lo general se selecciona
Este libro; ya que las macros son personalizadas de acuerdo al libro de Excel, ya veremos cómo usar
macros en otros libros. Descripción (4) define un comentario sobre la actividad de la macro, no es
obligatorio registrarlo pero es muy cómodo al momento de administrar la macro ya que describe
cual es el objetivo de la misma.
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 79
Ahora definirá que tareas grabará la macro. Para este caso implemente una macro que permita mostrar
la fecha actual en la celda activa. Una vez aceptada la ventana de Grabar Macro coloque la función
=hoy() en la celda activa trate de no dar clic sobre la celda sólo asigne la función y presione la tecla
Enter.
Una vez definida las características y qué acciones grabará la macro, debe seleccionar Parar de la barra
de estado de Excel para finalizar la grabación de la macro.
Fig. 3-4
Ficha Programador
Agregue un módulo al Proyecto y llámelo moMacros (Módulo de Macros). El aspecto del Explorador
de Proyectos es el siguiente:
Fig. 3-5
Ahora, como notará se habilita la carpeta Módulos y dentro aparece el módulo creado en el paso
anterior, para poder visualizar el código fuente que contiene sólo presione doble clic sobre el nombre
del módulo.
Fig. 3-6
En la Fig. 3.6 dividimos en 5 bloques el código fuente del Encabezado de Informa, la idea principal de esta
macro es implementar una interfaz de Registro de Productos.
En el primer bloque se asigna directamente los títulos del Encabezado en las celdas de la hoja activa, esto
quiere decir que la macro no es exclusivamente de una determinada hoja.
En el segundo bloque se define el ancho de la columna C, con la propiedad ColumnWidth del objeto
Columns el cual hace referencia a toda la columa C.
En el tercer bloque se define el tamaño, tipo de letra y el estilo negrita a las celdas especificadas en Range
("B4:E4"). Select. La aplicación del formato también podría ser de la siguiente forma:
Range(“B4:E4”).Select
With Selection
.Font.Size=14
.Font.Name=”Trebuchet MS”
.Font.Bold=True
End With
En el cuarto bloque se aplica un alineado central a los textos del encabezado y finalmente en el
quinto bloque se aplica un relleno de color a las celdas con la propiedad Interior.Pattern e Interior.
TintAndShade.
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 81
Fig. 3-7
Como verá en la Fig. 3.7 aparece una lista de Macros predefinidas por el usuario. A partir de esta lista
usted podrá seleccionar una de ellas para luego seleccionar el botón Ejecutar y podrá ver los resultados
que la Macro enmarca.
Fig. 3-8
82 CAP. 3 LA MACRO
Permite ejecutar una macro seleccionada desde la lista, esta vez no lo realizará en
bloque sino línea por línea, para continuar a la siguiente línea del código presione
F8 tantas líneas de código contenga la macro desde VBA.
Fig. 3-9
Una vez editado el código cerrar la ventana editora de VBA y puede ejecutar la
macro, no es necesario grabar las modificaciones por cada cambio basta sólo
modificar y probar.
Fig. 3-10
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 83
Ya se tiene una macro llamada AsignaFecha a la cual se le implementará un control a dicha macro.
Fig. 3-11
Fig. 3-12
Fig. 3-13
Fig. 3-14
Fig. 3-15
Tercero: Imagen
Ubicarse en la celda A4 de la Hoja1.
Inserte una Imagen en la Hoja1.
Presione clic derecho sobre la imagen y seleccione Asignar Macro.
De la ventana, seleccione la macro AsignaFecha de la lista y Aceptar.
Fig. 3-16
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 85
Para ejecutar la macro sólo tendrá que hacer clic sobre la imagen.
Fig. 3-17
Cuarto: Forma
Ubicarse en la celda A5 de la Hoja1.
Inserte una Forma en la Hoja1.
Presione clic derecho sobre la forma y seleccione Asignar Macro.
De la ventana, seleccione la macro AsignaFecha de la lista y Aceptar.
Para ejecutar la macro sólo tendrá que hacer clic sobre la forma.
Fig. 3-18
Fig. 3-19
Fig. 3-20
4. Seleccione Aceptar de la Fig. 3.20 (tome las cosas con calma, a partir de aquí se graba todas las
acciones que realice).
5. De un clic en la celda B3 y escriba CÓDIGO.
6. De un clic en la celda C3 y escriba DESCRIPCIÓN.
7. De un clic en la celda D3 y escriba PRECIO.
8. De un clic en la celda E3 y escriba STOCK.
9. Configure el ancho de las columnas B, C, D y E para que los textos se aprecien de manera correcta.
10. Seleccione los textos: céntrelos y rellene la celda de color.
11. Seleccione el encabezado de columna G y presione CTRL+SHIFT+, presione clic derecho sobre
cualquier columna del encabezado seleccionado y seleccione Ocultar.
12. Finalmente, seleccione la ficha Vista y desactive el check de Líneas de cuadrícula.
13. Finalice la grabación de la macro.
Sub EncabezadoInforme()
‘
‘ EncabezadoInforme Macro
‘ Encabezado que define los títulos del informe de Productos
‘
‘ Acceso directo: Ctrl+Mayús+E
‘
Range(“B3”).Select
ActiveCell.FormulaR1C1 = “CÓDIGO”
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 87
Range(“C3”).Select
ActiveCell.FormulaR1C1 = “DESCRIPCION”
Range(“D3”).Select
ActiveCell.FormulaR1C1 = “PRECIO”
Range(“E3”).Select
ActiveCell.FormulaR1C1 = “STOCK”
Range(“B3”).Select
Columns(“B:B”).ColumnWidth = 10.14
Columns(“C:C”).ColumnWidth = 33.71
Range(“B3:E3”).Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.Font.Bold = True
With Selection.Font
.Name = “Trebuchet MS”
.Size = 11
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ThemeColor = xlThemeColorLight1
.TintAndShade = 0
.ThemeFont = xlThemeFontNone
End With
Columns(“G:G”).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.EntireColumn.Hidden = True
ActiveWindow.SmallScroll ToRight:=-3
Range(“B4”).Select
ActiveWindow.DisplayGridlines = False
Range(“B3:E3”).Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorDark1
.TintAndShade = -0.149998474074526
.PatternTintAndShade = 0
End With
Range(“B4”).Select
End Sub
88 CAP. 3 LA MACRO
Fig. 3-21
Tener en cuenta:
Deberá colocar cualquier URL en la celda D19 como se visualiza en la Fig. 3.21.
Al presionar el botón Mostrar la Web, la macro mostrará la página en el explorador WebBrowser1
colocado dentro de cualquier hoja de Excel.
Solución al caso:
Ficha Programador Grabe Macro y asigne las siguientes características a la nueva Macro.
Fig. 3-22
Fig. 3-23
Una vez aceptada la ventana, arrastre sobre la hoja de Excel desde la celda B4 hasta N17
aproximadamente, notará que aparece el siguiente cuadro.
Fig. 3-24
Note que se activó el botón Modo Diseño de la Ficha Programador y ahora es el momento de poder
ampliar la imagen hasta la celda N17.
Ubíquese en la celda B19 y coloque el texto Digite aquí su web.
Ubíquese en la celda D19 y digite una URL válida, es decir, la dirección tendrá el protocolo Http como
inicio de la URL.
Finalmente agregue un botón de comando de los controles ActiveX a la celda F21.
Pare la grabación de la Macro y obtendrá el siguiente código fuente.
Sub MiExplorador()
‘
‘ MiExplorador Macro
‘ Entorno de mi aplicacion Web
‘
‘ Acceso directo: Ctrl+Mayús+W
‘
Range(“B2”).FormulaR1C1 = “Mi Explorador Web”
Range(“B2:N2”).Select
90 CAP. 3 LA MACRO
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.Merge
Selection.Font.Size = 20
With Selection.Font
.Name = “Trebuchet MS”
.Size = 20
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ThemeColor = xlThemeColorLight1
.TintAndShade = 0
.ThemeFont = xlThemeFontNone
End With
Selection.Font.Bold = True
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent1
.TintAndShade = 0.599993896298105
.PatternTintAndShade = 0
End With
Range(“B4”).Select
ActiveSheet.OLEObjects.Add(ClassType:=”Shell.Explorer.2”, _
Link:=False, DisplayAsIcon:=False, Left:=60.75, _
Top:=58.5, Width:=583.5, Height:=159).Select
ActiveSheet.Shapes(“WebBrowser1”).ScaleWidth 1.3329048843, _
msoFalse, msoScaleFromTopLeft
ActiveSheet.Shapes(“WebBrowser1”).ScaleHeight 1.3160377358, _
msoFalse, msoScaleFromTopLeft
Range(“B19”).Select
ActiveCell.FormulaR1C1 = “Digite aquí su web “
Range(“D19:N19”).Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent1
.TintAndShade = 0.599993896298105
.PatternTintAndShade = 0
End With
Range(“B19”).Select
Selection.Font.Size = 14
With Selection.Font
.Color = -16776961
.TintAndShade = 0
End With
Selection.Font.Bold = True
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 91
Range(“B21”).Select
ActiveSheet.OLEObjects.Add(ClassType:=”Forms.CommandButton.1”, _
Link:=False, DisplayAsIcon:=False, Left:=322.5, _
Top:=316.5, Width:=248.25, Height:=27).Select
Selection.Verb Verb:=xlPrimary
Range(“K21”).Select
ActiveSheet.Shapes.Range(Array(“CommandButton1”)).Select
Range(“D19”).Select
ActiveCell.FormulaR1C1 = “http://www.google.com”
Range(“D20”).Select
Sheets(“Hoja1”).Select
Sheets(“Hoja1”).Name = “Web Browser”
Sheets(“Web Browser”).Select
Range(“D22”).Select
End Sub
Ahora, deberá ingresar el siguiente código al botón de comando insertado en la hoja de Excel.
• EVALUACIÓN DE LA CAPACIDAD
1. ¿Cuál es la diferencia entre una macro y una aplicación VBA?
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
2. Cree una macro para el siguiente informe, debe tener en cuenta que los colores y el formato dependerá
de su creatividad.
CAPÍTULO
4
EL MODELO DE OBJETOS
Fig. 4-1
El objeto Application hace referencia al libro de Excel, aquí hay que tener en cuenta que también puede
representar a un Documento de Word o una presentación de Power Point ya que VBA se puede aplicar
a todo el entorno Office.
El modelo le facilita la referencia a los objetos VBA dentro del entorno de Excel, las clases de objetos
se encuentran ordenadas en forma jerárquica, estos actúan como un contenedor de ellos mismos; por
ejemplo, un libro de Excel llamado objeto Application puede contener un objeto de WorkBook (Libro de
Excel) y este a su vez puede contener el objeto WorkSheets (Hoja de Trabajo) y Chart (Gráfico de Excel)
y a su vez el objeto WorkSheets puede contener el objeto Range (Rango de Celda de la hoja de Excel).
El modelo tiene especial utilidad cuando en una macro se integran varias WorkSheets o diferentes
WorkBooks. Los lenguajes de programación se caracterizan por tener comandos con un formato
específico; VBA tiene la misma estructura, es decir, para poder tener el control de los objetos visuales de
Excel debe entender por los menos 4 objetos del modelo, que a continuación se nombrarán.
• CLASE APPLICATION
Un objeto de tipo Application hace referencia al propio Excel este objeto contiene una referencia a todos
las opciones aplicadas a una ejecución de Excel, es decir, registra todo desde la apertura de Excel hasta
su finalización del entorno Windows.
96 CAP. 4 EL MODELO DE OBJETOS
El objeto Application debe tener acceso a los demás objetos, esto lo realizará por medio de sus
propiedades, las cuales se presentan a continuación:
• ACTIVECELL
Descripción y ejemplo:
Devuelve un objeto de tipo Range que representa a la celda activa de una determinada hoja de cálculo
de Excel siempre y cuando se especifique la hoja a referenciar, caso contrario devolverá la celda activa
de la hoja activa. Por ejemplo:
Implemente un procedimiento que permita formatear la celda activa de tipo de letra Trebuchet MS,
tamaño 14 y con estilo Negrita, vea el código:
Sub Formato
WorkSheets(1).Activate
Application.ActiveCell.Font.Name=”Trebuchet MS”
Application.ActiveCell.Font.Size=14
Application.ActiveCell.Font.Bold=True
End Sub
• ACTIVESHEETS
Descripción y ejemplo:
Hace referencia a un objeto de tipo WorkSheet que representa a la hoja de Excel activa, sólo puede
estar activa una hoja de las que contenga un libro de Excel.
Sub CopiaHoja()
Dim n$
Do Until n <> “”
n = InputBox(“Ingrese la cantidad de copias:”, _
“Ingreso”)
Loop
n = Val(n)
If n > 0 Then
For i = 1 To n
ActiveWorkbook.ActiveSheet.Copy _
After:=ActiveWorkbook. _
Sheets(Sheets.Count)
Next
End If
End Sub
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 97
Do Until n<>"" es una estructura repetitiva que permite hacer que el usuario ingrese un valor, en el
caso no lo haga nunca saldrá del ciclo; por lo tanto,la estructura lo devolverá para ingresar algún valor.
Loop cierra el ciclo del Do Until.
n=Val(n) es una instrucción de conversión de texto a número, ya que n inicialmente se ingresó como
cadena.
If n>0 Then evaluará si la variable n es superior a uno ya que no se podría sacar copias con valores
inferiores a 1.
For i=1 to n es un tipo de estructura repetitiva la idea principal es recorrer la cantidad de copias
que el usuario ha seleccionado. Para finalizar el cicloFor se asigna la instrucciónNext.
Tenga en cuenta que para ejecutar el procedimiento anterior deberá tener un formato en la hoja1 y
acceder al entorno VBA (ALT+F11) y crear un módulo dentro del proyecto y presionar F5 para ejecutar
el procedimiento.
• ACTIVEWINDOW
Descripción y ejemplo:
Esta propiedad devuelve el objeto Window que representa la ventana activa.
Vea un ejemplo de ActiveWindow, en el cual el usuario deberá ingresar el nombre de una hoja y la
aplicación deberá imprimir dicha hoja.
Sub ImprimirHoja()
Dim hoja$
Do Until hoja <> “”
hoja=InputBox(“Ingrese el nombre de la hoja a
imprimir: “, _
“Impresion”)
Loop
Sheets(hoja).Select
ActiveWindow.SelectedSheets.PrintOut _
Copies:=1, Collate:=True
End Sub
• SELECTION
Descripción y ejemplo:
Esta propiedad devuelve el objeto seleccionado en la ventana activa que podría ser un rango o un
gráfico. Vea un ejemplo de Selection, se requiere validar el contenido de un rango de celdas, mostrando
un mensaje es Número o No; dependiendo de los datos del rango.
Sub ValidaIngreso()
Dim Celda As Range
For Each Celda In Selection
If TypeName(Celda.Value) = "Integer" Or _
TypeName(Celda.Value) = "Double" Then
MsgBox "El valor " &Celda.Value& _
" Es Numero"
Else
MsgBox "El valor " &Celda.Value& _
" No esNumero"
End If
Next Celda
End Sub
A continuación se explica el proceso, Dim Celda as Range que permite declarar la variable Celda
del tipo Range, eso quiere decir que la Celda puede almacenar una referencia de celda de la hoja de
Excel, For Each Celda In Selection realiza un recorrido por todas las celdas seleccionadas
por el usuario, If TypeName(Celda.Value) = "Integer" Or TypeName(Celda.Value) =
"Double" Then valida el tipo de datos de cada valor encontrado en el recorrido anterior, eso quiere
decir que se evaluará valor por valor hasta que termine la selección, en este caso se mostrarán los
mensajes respectivos.
Como nota en la Fig. 4.3 se muestra un mensaje indicando que el valor ingresado en la celda A2 no es
un número.
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 99
Fig. 4-5
Sub Application_Data()
‘Definir la hoja activa
Sheets(“Hoja1”).Select
Sheets(“Hoja1”).Name = “Propiedades de la Aplicacion”
‘Eliminando la hoja2
Sheets(“Hoja2”).Select
ActiveWindow.SelectedSheets.Delete
‘Eliminando la hoja3
Sheets(“Hoja3”).Select
ActiveWindow.SelectedSheets.Delete
‘Declaración de Variables
Dim Data(10) As String
Dim i%, x%
‘Asignación de valores de la aplicación al Arreglo
Data(0) = Application.UserName
Data(1) = Application.OrganizationName
Data(2) = Application.OperatingSystem
Data(3) = Application.Version
Data(4) = Application.ProductCode
Data(5) = Application.StandardFont
Data(6) = Application.StandardFontSize
Data(7) = Application.DecimalSeparator
Data(8) = Application.ActivePrinter
Data(9) = Application.DefaultFilePath
‘Enviando los datos a las celdas de la hoja
x = 0
For i = 5 To 14
Cells(i, 3) = Data(x)
x = x + 1
Next i
End Sub
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 101
En el código presentado se hace referencia a la declaración de una variable tipo Arreglo; esta forma de
declaración implica tener varios valores en una sola variable, es así que se opta por usar una declaración
de este tipo para que observe que no es necesario crear una variable para cada tipo de respuesta.
La tendencia de los arreglos en programación es agrupar los valores comunes en una sola variable, es por
eso que la declaración de la variable tipo arreglo es de la forma Dim Data(10) as String, dando a
entender que es un arreglo de 10 elementos de tipo String que se almacenarán en una misma variable
denominada Data y esto servirá para imprimirlo dentro de la hoja con una estructura repetitiva.
Dicha estructura tiene el siguiente formato For i = 5 to 14; si se toma en cuenta que son 10 los
datos a imprimir, entonces es lógico que se necesite una estructura que recorra 10 vueltas y asigne a las
celdas el valor del arreglo como sucede con Cells(i, 3) = Data(x), x tiene un papel importante ya
que sacará la información contenida en el arreglo y lo enviará a las celdas según el número de ciclo que
se encuentre en el For.
Si necesita más información revise los capítulos donde se trata de la Estructura repetitiva For y el capítulo
de los Arreglos o Matrices de este mismo libro.
• CLASE RANGE
Un objeto Range representa una celda, una fila, una columna, una selección de celdas que contiene uno
o más bloques de celdas (que podrían ser contiguos o no), o incluso un grupo de celdas de varias hojas.
Sub CeldaActiva()
Dim x As String
x = InputBox("Ingrese la celda a activar: ")
Range(x).Activate
End Sub
El procedimiento CeldaActiva permite activar o posicionar el cursor en una celda proporcionada por
el usuario.
La variable x es de tipo cadena ya que el usuario ingresará por ejemplo "C4", recuerde que la instrucción
InputBox permite al usuario ingresar un valor por el teclado, sólo traduzca su castellano y notará que
indica Cuadro de Entrada. Siendo x un valor de una celda para a ser un parámetro del objeto Range,
eso quiere decir que Range(x).Activate permite activar la celda x ingresada por el usuario.
102 CAP. 4 EL MODELO DE OBJETOS
AddComment
Permite agregar un comentario a la celda activa.
Sub AgregaComentario()
On Error GoTo Imprevisto
Cells.Find(What:="Vacaciones", _
After:=ActiveCell, _
LookIn:=xlFormulas, LookAt:= _
xlPart, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False, _
SearchFormat:=False).Activate
ActiveCell.AddComment ("Observación: " & _
vbNewLine& "Vacaciones")
Exit Sub
Imprevisto:
MsgBox "Ya no hay mas empleados de
vacaciones...!!!", vbInformation
End Sub
A dicha celda activada por el encuentro de Find se le envía un comentario con addComment.
ClearComments
Este método permite eliminar los comentarios de un determinado conjunto de celdas. Por ejemplo:
Sub limpiaComentarios()
Sheets(1).Range("A1:N23").ClearComments
End Sub
ClearContents
Es un método que permite borrar el contenido de un determinado conjunto de celdas.
Sub limpiaCeldas()
Sheets(1).Range("B8:N21").ClearContents
End Sub
Copy
Permite copiar dentro de un conjunto de celdas.
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 103
CopyFromRecordset
Permite copiar un conjunto de registros a partir de una consulta a la tabla de una base de datos. Para
dicho evento se debe sólo especificar la celda de inicio y la función se encargará de llenar las columnas
y filas necesarias, todo esto dependerá del tipo de consulta realizada a la tabla.
Sheets(1).Cells(14, 2).CopyFromRecordset rs
Cut
Permite cortar o mover un elemento a una nueva hoja.
PROPIEDAD DESCRIPCIÓN
Representa la primera celda activa de la ventana activa (WindowActive) o
ActiveCell
especificada.
Areas Todos los rangos de una selección múltiple.
Cells Representa a una celda o colección de ellas.
Representa las columnas de la hoja activa o especificada o del rango
Columns
especificado.
Entirecolumn/row La columna/fila entera dentro del rango.
End La celda situada al final del rango especificado.
Offset La celda desplazada según un nº específico de fila/columna.
Indica la dirección del rango seleccionado.
Address
MsgBoxActiveCell.Address devolverá la dirección dela celda activa.
Cuenta el número de objetos de un conjunto.
Count
MsgBoxSelection.Cells.Count’ devolverá la cantidad de celdas seleccionadas.
Servirá para asignar o recuperar el nombre de un rango Selection.Name =
Name
"prueba_vba"
Devuelve el valor de un rango.
Value
MsgBoxRange(“A1”).Value ‘el valor del rango de la celda A1.
formula MsgBoxRange("A1").Formula
Los métodos:
PROPIEDAD DESCRIPCIÓN
Activate Activar el rango seleccionado.
Clear Borrar los valores y formatos del rango.
ClearContents Sólo borra los valores del rango manteniendo el formato intacto.
Delete Eliminar el rango indicado.
104 CAP. 4 EL MODELO DE OBJETOS
Ejemplos:
Range(“A1”).Select
Range(“A1:G5”).Select
Range(“A1,A5,B4”).Select
Range(“A1,A5,B4:B8”).Select
Columna A:
Range(“A:A”)
Fila uno:
Range(“1:1”)
Columnas de la A a la C:
Range(“A:C”)
Range(“1:5”)
Range(“1:1,3:3,8:8”)
Columnas A, C y F:
Range(“A:A,C:C,F:F”)
• MÉTODO OFFSET
Método que devuelve un valor dependiendo del desplazamiento especificado, es usado para desplazar el
cursor y devolver el dato encontrado a partir de un punto de inicio, este punto es la celda activa definida
por el usuario, desde allí se comenzará a desplazar en forma positiva o negativa dependiendo del valor
a recuperar. Su formato es como sigue:
Donde la fila y la columna son los valores de desplazamiento, OffSet deberá estar acompañado siempre
de un Range o Cells.
Vea un cuadro de desplazamiento para poder entender la idea del método OffSet.
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 105
Fig. 4-6
Solución:
Formulario Propuesto:
Fig. 4-7
Dim I As Integer
Sheets(1).Select
Range(“F3”).Activate
If txtNumero.Text = “” Then
MsgBox “Debe ingresar un Numero de Documento”,
vbCritical, “Aviso”
txtNumero.SetFocus
Else
Do
If ActiveCell.Value = numero Then
Sheets(2).Cells(3 + I, 2).Value = ActiveCell.Offset(0, -4).Value
Sheets(2).Cells(3 + I, 3).Value = ActiveCell.Offset(0, -3).Value
Sheets(2).Cells(3 + I, 4).Value = ActiveCell.Offset(0, -2).Value
Sheets(2).Cells(3 + I, 5).Value = ActiveCell.Offset(0, -1).Value
Sheets(2).Cells(3 + I, 6).Value = ActiveCell.Value
106 CAP. 4 EL MODELO DE OBJETOS
• EVALUACIÓN DE LA CAPACIDAD
1. Liste las propiedades de los siguientes objetos:
Application
Range
Cells
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
Sub Formato
WorkSheets(1).Activate
Application.ActiveCell.Font.Name="Trebuchet MS"
Application.ActiveCell.Font.Size=14
Application.ActiveCell.Font.Bold=True
End Sub
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
CAPÍTULO
5
FUNDAMENTOS DE PROGRAMACIÓN
EN ESTE CAPÍTULO:
Introducción a la programación con VBA
Comentarios
Concatenación
Operadores usados en VBA (matemáticos, lógicos y de comparación)
Las variables y su declaración en VBA – uso obligatorio de una variable
Tipos de datos y su operador de referencia
Las Constantes
Expresiones Algorítmicas vs. Algebraicas
Asignación de valores
Estructura secuencial
Caso Desarrollado 1: Sueldo de Trabajadores
Caso Desarrollado 2: Ejercicios Secuenciales
Casos propuestos
Evaluación de la capacidad
Ahora entonces, ¿Cuál es la idea de programar? Realizar un entorno mucho más amigable y de alta
eficiencia sobre los procesos, eso quiere decir que si usted es usuario fiel de Excel ahora podrá tener el
control de su propio código, es decir, desarrollará aplicaciones para Excel con la ayuda de VBA.
En la actualidad hablar de programar no es sólo digitar un código y que funcione como el usuario lo
desea, VBA va más allá, proponiendo a un usuario de Excel avanzado a programar bajo un entorno
totalmente de objetos y que esto lo empuje a seguir investigando el mundo de la programación no
importando el lenguaje ni el editor.
• COMENTARIOS
Hay que mencionar que los comentarios se colocan dentro del código fuente de programación y que
no tienen efecto al pasar al modo de ejecución de la aplicación, es decir, el compilador no lo toma en
cuenta, literalmente es un mensaje que está dirigido al usuario que lea el código fuente. Vea 2 formas
para añadir un comentario al código.
Fig. 5-1
110 CAP. 5 FUNDAMENTOS DE PROGRAMACIÓN
Fig. 5-2
Como notará ambos casos son similares, sólo asegúrese que el color del comentario sea de color verde,
no coloque comentarios en el medio de una expresión.
• CONCATENACIÓN
Una concatenación implica la unión de 2 o más elementos textuales, se podría decir que su funcionalidad
es para códigos, correos electrónicos, etc.
Vea el siguiente caso, tenga en cuenta que se implementará en Excel, se requiere implementar una fórmula
que permita mostrar el código de un empleado el cual está formado de la siguiente manera: (primera
letra de su nombre) + (apellido paterno) + (2 últimos dígitos de su fecha de ingreso) en mayúsculas.
Fig. 5-3
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 111
Solución 2. Haciendo uso de una función definida por el usuario se puede aplicar la misma fórmula por
medio de VBA, vea:
Fig. 5-4
=miCodigo(E7,C7,F7)
Operadores Aritméticos:
OPERADOR USO
+ (Suma) Dim suma As Integer: suma = 10 + 15
Operadores de Comparación:
OPERADOR USO
Comparando si la edad es igual a 18.
= (Igualdad)
If Edad = 18 Then
Comparando si es mayor a 40 años.
> (Mayor)
IF Edad > 39 Then
Comparando si es menor a 20 años.
< (Menor)
If Edad < 21 Then
Comparando si es mayor a 40 años.
>= (Mayor o Igual)
IF Edad >=40 Then
Operadores Lógicos:
Estos operadores permiten armar una expresión lógica especializada. Vea la tabla de verdad de los
operadores lógicos.
P Q P AND Q P OR Q NOT P
V V V V F
V F F V F
F V F V V
F F F F V
OPERADOR USO
AND (y Lógica)
La expresión condicional se interpreta como sigue: “La edad es mayor a 17, es
decir, de 18 para adelante y a la vez sea menor a 66, es decir,de 65 a 18”, note
que según la tabla de la verdad ambas condiciones deben ser verdaderas
para cumplir.
En este caso para que la condición sea verdad sólo se necesita que una de las
condiciones cumpla o que ambas cumplan.
Valida que un número entero sea menor o igual a 20.
NOT (Negación)
If NOT n>20 Then
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 113
Ahora queda preguntarse si es necesario o no declarar una variable sabiendo que VBA la declara de
acuerdo a su contenido, pues la respuesta es sencilla, vea qué sucedería si el usuario de su programa se
equivoca al ingresar un valor, VBA tomará ese valor y tratará de operar; en cambio, al declarar la variable
el error sería inmediato ya que todos los tipos de datos tienen un intervalo de valores, claro no debe dejar
todo a la declaración, aquí el programador deberá prever los datos errados ingresados por el usuario
aplicando validación de campos que se tratarán en los capítulos posteriores.
Fig. 5-5
Una vez activada la opción Requerir declaración de variables aparece la instrucción Option Explicit
al inicio del entorno de código VBA, esto indica que las variables deben ser declaradas de manera
obligatoria, caso contrario emitirá un mensaje de error.
Fig. 5-6
114 CAP. 5 FUNDAMENTOS DE PROGRAMACIÓN
Alcance de una variable: refiere hasta dónde puede llegar el ámbito de una variable.
OPERADOR USO
Se utiliza a nivel de Procedimiento y a nivel de Formulario, cada vez que utiliza el
Dim
procedimiento VBA borra el contenido de la variable.
Utilizado sólo a nivel de Procedimiento, cuando una variable se declara conserva su
Static
valor entre llamadas.
Public La variable será reconocida a nivel de la Aplicación.
Private Sólo a nivel módulo, es decir, sólo será reconocida dentro del módulo donde fue declarada.
TIPO DESCRIPCIÓN
También llamado entero, hace referencia a todos los valores numéricos enteros de una
Integer capacidad mediana, es decir, no muy grande, tiene un espacio de 2 bytes por cada
variable declarada.
También llamado entero largo, tiene un espacio por variable de 4 bytes en la memoria
Long
que representa al doble de capacidad de un entero.
También llamado simple precisión, hace referencia a todos los valores numéricos enteros
Single y decimal logrando una capacidad de 38 dígitos decimales con 7 valores enteros,
ocupando un espacio en la memoria de 4 bytes.
También llamado doble precisión, hace una referencia a los valores numéricos enteros,
largos, de simple precisión y decimales periódicos hasta 300 dígitos con 16 valores
Double
enteros, su uso es particularmente para cálculos científicos o estadísticos ya que estos
manejan mucha más aproximación en los decimales.
También llamada monetario, hace referencia a un valor decimal de tipo dinero en la cual
Currency
tenga 4 decimales con 14 dígitos enteros, ocupando 8 bytes en la memoria.
También llamado fecha, hace referencia a todo valor tipo fecha y hora, ocupando 8 bytes
Date
en la memoria.
También llamado lógico, hace referencia a los valores de tipo True y False, ocupando 2
Boolean
bytes en la memoria.
También llamado carácter, hace referencia a los valores de un sólo carácter como podría
Char
ser un estado civil S (Soltero), C (Casado), V (Viudo), D (Divorciado).
También llamado cadena de caracteres, hace referencia a un conjunto de caracteres,
String tiene una capacidad de 2 billones de caracteres. Tenga en cuenta que un carácter no sólo
puede ser un texto, también están los números y caracteres especiales.
También llamado variante, es el único de todos los tipos de datos que permite almacenar
cualquier tipo de valor, su uso se aplica cuando en el desarrollo de una aplicación usted
Variant
no declara las variables que usa, todas ellas pasan a una declaración tipo variante. En las
versiones posteriores VBA como .NET, ya no se implementa este tipo.
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 115
Ahora se listará los intervalos por cada tipo, además de mostrar el operador válido, para que la declaración
en el código fuente sea un poco más corta.
A continuación una lista de comparación entre la declaración tradicional y el uso de los operadores
en los tipos de datos, es muy importante para el desarrollo de una aplicación tener poco código que
sea efectivo; es por eso que el uso de estos operadores que permiten ahorrar espacio, vea la tabla de
comparación:
• LAS CONSTANTES
Una constante permite asignar un valor fijo a una variable, se tiene por ejemplo el valor de PI en 3.1415
el cual se declararía de la siguiente forma:
Note que para definir una constante en VBA no es necesario colocar la sentencia DIM, también hay que
asignar un valor a dicha constante.
Vea otro ejemplo: implementar una función llamada miImpuesto que permita devolver el 18% como
asignación IVA.
Fig. 5-7
Fig. 5-8
Una expresión algorítmica es una lista de elementos bien definidos, ordenada y finita de operaciones
que permita dar solución a un determinado problema. Dicho de otra forma, sería la misma expresión
algebraica en términos entendibles por la computadora. Vea una comparación entre las expresiones
algebraicas con las algorítmicas.
Fig. 5-9
Como observamos los resultados representan las expresiones algorítmicas porque usa los operadores
válidos en una expresión.
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 117
• ASIGNACIÓN DE VALORES
Una vez declarada la variable se tiene la necesidad de asignarle un valor para una tarea específica; por
lo tanto, tenemos muchas formas de asignar un valor a una variable. En VBA se hace necesario el uso
de asignaciones durante la implementación de un código fuente por eso es necesario tomar interés en
este tema.
Observe que en ambas formas la variable siempre está en el lado izquierdo puesto que los valores
siempre estarán en la derecha. Colocarlos al revés es un error de formato.
Cuando se le asigna un valor a una variable estamos colocando dicho valor en una dirección de la
memoria de la computadora.
Caso. Necesita declarar una variable llamada IVA para asignarle el valor de 19%.
Un error de asignación de valor sería: 0.19 = IVA puesto que rompería la regla. Ahora le presento una
segunda solución del mismo caso, observe:
Declaración y asignación
Dim IVA As Single: IVA = 0.19
de una variable
Declarar y asignar en una misma línea es posible sólo si los separa con dos (:) puntos.
• ESTRUCTURA SECUENCIAL
El código fuente de VBA está compuesto de varios tipos de estructuras, esta vez se verá la estructura
secuencial de programación, esta estructura es la más sencilla y ordenada posible. La idea principal
de programar en forma secuencial es crear expresiones algorítmicas reconocidas por VBA una a
continuación de la otra, teniendo en cuenta un orden lógico en su construcción. Vea un ejemplo típico
de una estructura secuencial.
La secuencialidad forma parte de nuestra vida diaria; por ejemplo, que usted viva en un 4to piso de un
edificio, si usa un ascensor o sube las escaleras siempre tendrá que pasar por los pisos 1, 2 y 3 en forma
secuencial, no podría subir al 4to piso sin pasar los pisos anteriores.
El Taipei 101 es uno de los edificios más altos del mundo, en consecuencia
requería de un ascensor lo suficientemente rápido para llevar pasajeros de las
primeras plantas hasta los últimos pisos en el menor tiempo posible, de esta
manera, el ascensor que tiene le permite llegar del quinto piso al piso 89 en sólo
37 segundos, lo que lo convierte en el ascensor más rápido del mundo, capaz de
lograr una velocidad de casi 60 Km/h, es decir 1,010 metros por minuto. Imagínese
hasta el ascensor más veloz del mundo debe cumplir con la estructura secuencial.
Para llevar a cabo esta tarea, el ascensor cuenta con un cuerpo aerodinámico de
alta tecnología, además de un sistema de frenado triple, que lucha en contra de
las grandes velocidades que logra este ascensor. Fue instalado por la compañía
Toshiba Elevator and Building System Corporation (Japón).
VBA en su entorno de desarrollo siempre aplica 2 formas de expresar su código, ya sea por una función
o por un procedimiento, la diferencia entre ellos la deberá estudiar en el capítulo siguiente. Su uso
dependerá del tipo de respuesta que necesite en la aplicación, si nota dentro del procedimiento o función
se colocan las instrucciones en forma de secuencia, la idea principal es dar un orden en la programación
de estos, llamados comúnmente programación secuencial. Siempre que tenga que realizar actividades
de desarrollo de aplicaciones escuchará el término secuencial; que representa la secuencialidad de las
instrucciones de una determinada aplicación en donde una instrucción sigue a la otra en forma de
secuencia, es decir, al finalizar una instrucción continuará a la siguiente hasta que VBA defina el término
de la función o procedimiento, este se define con el término End Sub o End Function.
Fig. 5-11
En el caso de la Fig. 5.11 note que para hallar el descuento primero se tuvo que calcular el sueldo (ht*ph)
a eso se le denomina secuencialidad, ya que visto de otra manera sería un error como en el siguiente caso.
Fig. 5-12
En la parte 1 la variable descuento tendría un resultado inicial de 0 ya que proviene de multiplicar sueldo
que no tiene valor por 0.08. El mismo caso sucede en la parte 2, primero se envía a la función el valor del
neto redondeado a 2 decimales y luego se calcula dicho valor.
Ahora se estará preguntando cómo podré determinar cuál es el orden de las expresiones para no
cometer estos errores, una de las soluciones que siempre manifiesto a mis estudiantes del curso de VBA
o programación es analizar bien el problema y descomponerlo en procesos pequeños haciendo una
lista de ellos en forma lógica.
Toda solución de un problema conlleva a un análisis inicial partiendo de la premisa de Entrada Proceso
Salida y la retroalimentación que tiene como fundamento es que la salida de un proceso es la entrada
de uno nuevo.
Fig. 5-13
120 CAP. 5 FUNDAMENTOS DE PROGRAMACIÓN
Además, propongo una plantilla que deberá usar de aquí en adelante con mucha lógica al definir la
secuencialidad de los procesos.
1. Implemente una función en VBA que dada la longitud de una soga en metros exprese dicha longitud
en pies y en yardas. Considere los siguientes factores de conversión:
1 metro = 100 centímetros
1 pulgada = 2.54 centímetros
1 yarda = 3 pies
1 pie = 12 pulgadas
Análisis
Fig. 5-14
Si tiene en cuenta que las conversiones de por sí son un poco complicadas al inicio, es sólo cuestión
de lógica; no se deje vencer, vea por separado algunos comentarios sobre las funciones realizadas.
Lo primero que tiene que explicarse es que a la función se le llamó fPies, la f se le asignó por ser una
función. Para las conversiones se optó por hacerlo separado para poder entenderlas; pero si analiza
bien podría ser de la siguiente forma:
En la última parte de la función note que la respuesta se redondeó a 3 decimales ya que estos tipos de
resultados tienen muchos decimales y se optó por controlarlos con la función Round (Valor, Número
Decimales).
La segunda función llamada fYardas fue más corta ya que según la tabla de conversiones para hallar
las yardas se necesita un valor expresado en pies y como la función fPies ya devolvía un valor en
metros expresado en pies, pues la respuesta es más corta, esta es la ventaja de la programación en
VBA que se puede llamar a las funciones en cualquier ámbito del módulo.
122 CAP. 5 FUNDAMENTOS DE PROGRAMACIÓN
Fig. 5-15
2. Una tienda comercial tiene sucursales en 3 países distintos y la necesidad de tener todo el monto
recaudado en un mismo tipo de moneda es que desean crear una función que facilite el trabajo de
la conversión, para este caso lo que necesitan es Euros. Para esto se cuenta con tres cantidades de
dinero; tenemos soles, dólares y marcos. Diseñe una función que determine el monto total recaudado
en Euros. Considere los siguientes tipos de cambio:
1 dólar = 3.51 soles
1 dólar = 1.09 euros
1 dólar = 2.12 marcos
Análisis
Monto en soles
Entrada Monto en dólares
Monto en marcos alemanes
Fig. 5-16
Ahora note que se está asignando directamente la respuesta de la conversión a la función, la idea
principal del libro es hacer menos códigos de programación a cambio de mayor efectividad del
mismo.
Para lograr convertir a euros los 3 montos distintos, se tiene que convertir todos los valores ingresados
como parámetros a dólares; es por eso que soles se convirtió con: soles/3.51 y los marcos con:
marcos/2.12, los dólares ingresados como parámetros no tienen necesidad de ser convertidos.
Fig. 5-17
124 CAP. 5 FUNDAMENTOS DE PROGRAMACIÓN
• CASOS PROPUESTOS
1. Implemente una función en VBA que dados dos recipientes llenos de gasolina cuyas capacidades
están dadas en galones y pies cúbicos, respectivamente. Determine la cantidad total de gasolina en
metros cúbicos, en pies cúbicos y en yardas cúbicas. Considere los siguientes factores de conversión:
Análisis
Entrada
Salida
Variables del
Proceso
2. Implemente una función en VBA que dada una capacidad de un disco duro en gigabytes, lo exprese
en megabytes, kilobytes y bytes. Considere los siguientes factores de conversión:
Entrada
Salida
Variables del
Proceso
3. Dada una cantidad de dinero en soles, diseñe una función en VBA que exprese dicha cantidad en
euros, en marcos y en dólares. Considere los siguientes tipos de cambio:
Entrada
Salida
Variables del
Proceso
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 125
4. Implemente una función en VBA que permita calcular el perímetro, semiperímetro y el área del
triángulo de los lados de un triángulo.
Entrada
Salida
Variables del
Proceso
5. Implemente una función en VBA que permita calcular el área de un círculo y la longitud del mismo
dado el valor de la radio del círculo.
Entrada
Salida
Variables del
Proceso
126 CAP. 5 FUNDAMENTOS DE PROGRAMACIÓN
• EVALUACIÓN DE LA CAPACIDAD
1. ¿Cuál es la diferencia entre asignación de una variable y una igualdad?
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
2. ¿Por qué cree que es importante realizar un análisis antes de realizar una aplicación?
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
4. ¿Cuándo se deberá declarar del tipo Variante en una aplicación VBA, explique brevemente?
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
CAPÍTULO
6
FUNCIONES Y PROCEDIMIENTOS
El código ASCII utiliza 7 bits para representar los caracteres, ASCII define códigos
para 33 caracteres no imprimibles, de los cuales la mayoría son caracteres de control
obsoletos que tienen efecto sobre cómo se procesa el texto, más otros 95 caracteres
imprimibles que les siguen en la numeración (empezando por el carácter espacio).
Casi todos los sistemas informáticos actuales utilizan el código ASCII o una extensión
compatible para representar textos y para el control de dispositivos que manejan
texto como el teclado. No deben confundirse los códigos ALT+número de teclado
con los códigos ASCII.
Por ejemplo:
Dim Num%
num = Asc(“B”)
Chr La Función Chr actúa a la inversa de la función ASC, esto quiere decir, que ingresado
un número le devolverá el carácter asociado a la tabla ASCII.
Por ejemplo:
Dim caracter As Char
caracter = Chr(165)
Se presenta una lista de formatos pre-establecidos por VBA para determinado tipos
de datos.
Currency
Usada para cantidades monetarias, es decir, la impresión anterior sería:
Standard
Usada para valores simples no necesariamente monetarios a 2 decimales.
Percent
Usada para valores de tipo porcentaje.
Long Date
Formatea una fecha completa.
Medium Date
Formatea una fecha del tipo día, mes en texto y año.
Short Date
Formatea una fecha en el formato corto.
Por ejemplo:
Por ejemplo:
Len Función que permite determinar el número de caracteres contenido en una cadena,
el resultado esperado es numérico.
Por ejemplo:
‘El Resultado sería: 14 tenga en cuenta que los espacios entre las
palabras también son contabilizadas por la función Len
132 CAP. 6 FUNCIONES Y PROCEDIMIENTOS
Left Función que permite capturar un número determinado de letras del lado izquierdo
de una cadena de caracteres.
Por ejemplo:
Dim Texto$: Texto=”VBA para Excel”
Msgbox “Las 3 primeras letras son: “ & Left(Texto,3)
Al usuario se le deberá solicitar el ingreso de una frase para poder implementar las funciones de texto
sobre dicho texto.
Fig. 6-1
Solución al caso:
En Excel debe tener el siguiente entorno en la hoja1.
Fig. 6-2
En la Fig. 6.2 no se olvide que al final se coloca el botón de formulario en la hoja de Excel ya que primero
deberá implementar los procedimientos en un módulo del proyecto.
Fig. 6-3
En la Fig. 6.3 primero se capturó la frase ingresada por el usuario, aquí se usó la función InputBox que
traducida sería cuadro de entrada, la cual le permite ingresar un valor de cualquier tipo, por ser una
cadena de caracteres lo que se ingresó no se tuvo que hacer una validación del valor. En segundo lugar,
a ese valor ingresado se le asigna la variable frase para poder aplicar las funciones sobre esta variables y
finalmente se imprime dentro de la hoja de Excel, tenga en cuenta que sólo se puede hacer impresiones
sobre la hoja de Excel cuando es un procedimiento no en una función definida por el usuario.
134 CAP. 6 FUNCIONES Y PROCEDIMIENTOS
Para probar la aplicación no se olvide de insertar un botón tipo formulario a la hoja de Excel de la
siguiente manera:
Ubíquese en la ficha Programador.
Seleccione Insertar y luego Botón de la sección Controles de Formulario.
Luego, arrastre sobre la hoja y al soltarlo aparecerá la siguiente ventana, en la cual usted deberá
escoger el procedimiento implementado dentro del módulo.
Fig. 6-4
• FUNCIONES NUMÉRICAS
Abs Función que permite devolver el valor absoluto de un número positivo o negativo.
Por ejemplo:
Dim N%: n = -10.9
Msgbox “El Valor absoluto es: “ & Abs(n)
Del 1 al 10.
Del 11 al 20.
Del 21 al 30.
Solución al caso:
En Excel debe tener el siguiente entorno en la hoja1.
Fig. 6-5
Código fuente
Para construir los procedimientos que debe implementar, primero debe crear un módulo dentro del
proyecto y colocar los siguientes procedimientos, si tiene problemas para construir un módulo regrese
al capítulo anterior.
Fig. 6-6
En la Fig. 6.6 el procedimiento Aleatorio1_10 tiene por misión mostrar 20 números aleatorios entre el 1
y el 10, no pudiendo mostrar otros números fuera de este rango, el For I =1 To 20 es la instrucción
que permite mostrar 20 valores.
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 137
Fig. 6-7
En la Fig. 6.7 sólo se cambió los valores de inicio y fin para los nuevos rangos de los números aleatorios.
Fig. 6-8
Igualmente en la Fig. 6.8 sólo se modificó el valor del inicio y del tope para los nuevos números aleatorios.
Fig. 6-9
Para limpiar un conjunto de celdas continuas en Excel se usa la función ClearContents que permite
limpiar los valores contenidos dentro de un rango de celdas, hay que tener en cuenta que también se
debe especificar a qué hoja se le estará limpiando los valores.
138 CAP. 6 FUNCIONES Y PROCEDIMIENTOS
• FUNCIONES DE FECHA
Date Función que permite devolver la fecha actual del sistema.
Por ejemplo:
Msgbox “La Fecha actual es: “ & Date
DateAdd Función que permite devolver una fecha añadiéndole un intervalo de tiempo.
Por ejemplo:
Msgbox “La proxima fecha de pago es:”& _
DateAdd(“m”,1,Date)
Intervalo de
Formato
Fecha
"d" Día
"y" Día
"h" Hora
"n" Minuto
"m" Mes
"q" Trimestre
"s" Segundo
"w" Semana
"ww" Semana del calendario
"yyyy" Año
Tenga en cuenta la tabla anterior ya que en varias de las funciones de fecha tienen
como requisito el tipo de intervalo de fechas a mostrar.
DateDiff Función que permite devolver la diferencia entre 2 fechas, tenga en cuenta que
puede haber diferencias entre días, meses o años.
Por ejemplo:
Dim FechaAnterior as Date
FechaAnterior = 18/03/2012
DatePart Función que permite devolver parte de una determinada fecha como por ejemplo:
el mes, el año, etc.
Por ejemplo:
Msgbox “La Fecha actual es: “ & Date
Msgbox “El mes es: “ & DatePart(“m”, Date)
Second
Función que permite devolver los segundos de un determinado tiempo.
Por ejemplo:
Msgbox “La Hora actual es: “ & Time
Msgbox “La Segundos son: “ & Second(Time)
Time
Función que permite devolver la hora actual del sistema.
Por ejemplo:
Msgbox “La Hora actual es: “ & Time
WeekDay
Función que permite devolver el número del día de la semana que corresponde una
determinada fecha.
Por ejemplo:
Msgbox “La Fecha actual es: “ & Date
Msgbox “EL dia es: “ & WeekDay(Date)
Hay que tener en cuenta que VBA considera los días de la semana de la siguiente
manera:
0 Domingo
1 Lunes
2 Martes
3 Miércoles
4 Jueves
5 Viernes
6 Sábado
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 141
Fig. 6-10
Para el código fuente: agregue un módulo al proyecto, llámelo moFuncionesFechas, luego coloque los
siguientes códigos.
Fig. 6-11
Fig. 6-12
Solución al caso:
En la hoja2 de Excel implemente el siguiente entorno:
Fig. 6-13
Fig. 6-14
No se olvide de colocar un botón desde los controles de formulario para llamar al procedimiento
implementado.
Solución al caso:
En la hoja3 de Excel implemente la siguiente ventana:
Fig. 6-15
Fig. 6-16
Solución al caso:
En la hoja4 prepare el siguiente entorno:
Fig. 6-17
144 CAP. 6 FUNCIONES Y PROCEDIMIENTOS
Cuando se solicite la fecha de pedido, deberá mostrar la siguiente ventana usando la instrucción
InputBox().
Fig. 6-18
En la Fig. 6.18 tenga en cuenta que la fecha debe registrarse en el formato adecuado.
Fig. 6-19
En la Fig. 6.19 en el punto 1 se declara una variable de tipo fecha recuerde que este tipo de datos no
tiene un símbolo para simplificarlo, entonces declare y capture la fecha de pedido con la instrucción
InputBox. En el punto 2 se declara la variable hoy que tendrá asignada la fecha actual del sistema. En el
punto 3 se declara una variable llamada días que permite calcular la diferencia en días entre dos fechas
tenga en cuenta que la función para esto es DateDiff y que se tiene que especificar el intervalo de fecha
(ver la tabla anterior), esto se realiza para que la función DateDiff sepa que diferencia va a controlar, ya
que también se puede diferenciar en meses o años. Finalmente, en el punto 4 se imprimen los valores a
la hoja de Excel.
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 145
Fig. 6-20
Dim N%
N = Val(txtN.text)
Dim N@
N = Val(txtMonto.text)
146 CAP. 6 FUNCIONES Y PROCEDIMIENTOS
CLng
Función que permite convertir un valor en el tipo Long.
Por ejemplo: suponga que se ingresa un valor por el teclado por medio de un cuadro
de texto.
Dim Numero as Long
Numero = CLng(txtNumero.text)
CSng
Función que permite convertir un valor en el tipo Single.
Por ejemplo: suponga que se ingresa un valor por el teclado por medio de un cuadro
de texto.
Dim Numero as Single
Numero= CSng(txtNumero.text)
CVar
Función que permite convertir un valor en el tipo Variant.
Por ejemplo: suponga que se ingresa un valor por el teclado por medio de un objeto
de cuadro de texto.
Dim Numero as Variant
Numero = CVar(txtNumero.text)
‘Convertirlo a cadena
TextoNumerico = CStr(Numero)
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 147
Fig. 6-21
Referencias:
Objeto: txtN
Evento: KeyPress
KeyAscii=13: hace referencia a la tecla Enter
SendKeys “{tab}”: hace referencia sobre el objeto indicándole que si se
presiona Enter, entonces salte al siguiente objeto. SendKeys hace referencia a
cualquier tecla, en este caso hace referencia al Tabulador.
Beep: es un sonido desde la aplicación.
148 CAP. 6 FUNCIONES Y PROCEDIMIENTOS
IsEmpty
Función que permite determinar si un valor ha sido inicializado o no, su valor de
respuesta es booleano.
Por ejemplo: suponga que quiere validar si se ha ingresado algún texto dentro de
un cuadro de texto, sería:
If IsEmpty(txtFrase.text) Then
Dim Frase$
Frase = txtFrase.text
…
Else
Msgbox “Debe ingresar un valor en el Cuadro”
End IF
Podría optar por otra forma que valida la entrada de valores a una caja no
necesariamente textual. Vea:
Segunda Forma:
If Not Trim(txtFrase.text) = Empty Then
Dim Frase$
Frase = txtFrase.text
…
Else
Msgbox “Debe ingresar un valor en el Cuadro”
End IF
Tercera Forma:
If Trim(txtFrase.text) = Empty Then
Msgbox “Debe ingresar un valor en el Cuadro”
Else
Dim Frase$
Frase = txtFrase.text
…
End IF
Cuarta Forma:
If Len(Trim(txtFrase.text)) >0 Then
Dim Frase$
Frase = txtFrase.text
…
Else
Msgbox “Debe ingresar un valor en el Cuadro”
End IF
IsDate Función que permite determinar si un valor es de tipo fecha, su valor de respuesta
es booleano.
Por ejemplo: suponga que quiere validar si el ingreso de un valor es fecha o no, sería:
If IsDate(txtFecha.text) Then
Dim Fecha as Date
Fecha = CDate(txtFecha.text)
…
Else
Msgbox “El valor ingresado no es una Fecha Valida”
End IF
Sólo hay que tener en cuenta que no puede crear funciones con el mismo nombre de las que ya existen,
porque Excel así como VBA tienen una biblioteca y no puede tener en su relación dos funciones con el
mismo nombre.
Toda función pre-establecida por el usuario debe ser implementada dentro de un módulo de un
determinado proyecto y que si lo quiere usar en otro proyecto o libro de Excel tiene que exportarlo o
volverlo a realizar dentro del otro proyecto pero siempre en un módulo establecido y siempre por el
editor VBA no en el entorno de Excel.
Donde:
Formato:
Forma 1 Public Function nombre(ByVal NombreParametro)
Forma 2 Public Function nombre(ByVal NombreParametro as TipoDato)
Ejemplo:
La función miIVA tiene por resultado 0.19 este valor resultante tiene que ser declarado como salida
de tipo Double.
Fig. 6-22
Vea en la Fig. 6.22 note que Private está encerrado y su ámbito sólo es dentro de su bloque no al
exterior. En el caso del Protected su ámbito es dentro del módulo y dentro de todos los procedimientos
y funciones del mismo módulo pero no fuera de él, y finalmente, el público hace visible a todas las
funciones o procedimientos inclusive fuera de su entorno, claro todo esto sólo es a nivel de Módulo de
Clase, en este caso debe considerar sólo dos de ellos el Public y el Private.
Vea un ejemplo, si tiene una función que permite ingresar 4 notas de un alumno para determinar su
promedio que cuenta con dos decimales. La implementación sería:
Fig. 6-23
Note que las notas ingresadas como parámetros son de tipo Integer mientras que la salida de la
función es Double, entonces la función opera y determina el promedio enviando un valor decimal de
tipo Double.
152 CAP. 6 FUNCIONES Y PROCEDIMIENTOS
¿Qué pasa si no define el tipo de datos de salida en la función? VBA no obliga a que declare el tipo de
salida ya que si usted no lo realiza la función tomará el valor resultante como un tipo llamado Variant
que adopta cualquier tipo de datos, pero es recomendable declarar la salida de la función.
=MiFuncion(Parametros)
Forma 2: Dentro Si dentro de un módulo hay varias funciones se pueden referenciar entre
del Mismo ellas por medio de la siguiente llamada:
Módulo
Variable = nombreFuncion(Parámetros)
Al asignarle a una variable una función, esta última tendrá que devolver el
valor de retorna y asignarlo.
Vea su formato:
Ahora, si usted necesita más de 2 parámetros entonces sólo sepárelos por comas, así como sigue:
¿Cuál es la diferencia entre ByVal y ByRef? El ByVal recibe un valor desde el exterior y lo envía a la
función para poder manipularla pero no actualizarla, es decir, dicho valor dentro de la función puede
ser alterada pero conservará el original. En el caso de ByRef recibe un valor del exterior y si dentro de
la función se altera dicho valor este será el nuevo valor del parámetro.
Es recomendado usar ByVal ya que para este caso sólo se necesita el paso de valores y no actualizaciones
de los mismos.
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 153
Análisis
Entrada Valor de la radio R
Salida Volumen de la Radio
Variables del Radio, valor de la radio
Proceso VE Volumen de la Esfera
Solución
Paso 1: en la Hoja 1 de Excel prepare el siguiente entorno.
Paso 2: acceda al entorno VBA (ALT+F11) e inserte un módulo dentro del proyecto.
Clic derecho sobre el Explorador de Proyectos.
Seleccione Insertar.
Seleccione .
En las propiedades asignarle el nombre de MoFunciones.
Fig. 6-24
Fig. 6-25
154 CAP. 6 FUNCIONES Y PROCEDIMIENTOS
2. Crear una Función pública que permita mostrar un número de 3 cifras al revés, por ejemplo: si
N=123 Revés=321
Análisis
Entrada Valor N
Salida Valor al Revés
Variables del N, valor del número
Proceso Revés, valor del número al revés
Solución
Paso 1: en la Hoja 2 de Excel prepare el siguiente entorno.
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 155
Paso 2: Acceda al entorno VBA (ALT+F11) e implemente la función revés dentro del módulo
moFunciones.
Pasos:
Ubicarse dentro del editor del módulo.
Seleccione el menú Insertar.
Seleccione Procedimiento.
Coloque el nombre de la Función.
Seleccione el tipo Función.
Seleccione el Ámbito de la función.
Seleccione Aceptar.
156 CAP. 6 FUNCIONES Y PROCEDIMIENTOS
• PROCEDIMIENTOS
Un procedimiento es un conjunto de instrucciones que tienen en común realizar un proceso sin devolver
ningún valor, allí la diferencia con las funciones que si tienen que devolver un valor.
Procedimientos generales.
Procedimientos de una aplicación UserForm.
Los procedimientos generales se implementan dentro de un módulo y son invocados desde Excel por
medio de una asignación macro. Los procedimientos de una aplicación UserForm se implementan dentro
de un evento de un determinado objeto.
En ambos casos la Fig. 6.26 muestra la ruta que toma un procedimiento cuando es invocado por medio
de la instrucción Call.
Fig. 6-26
• ESTRUCTURA DE PROCEDIMIENTO
La diferencia del procedimiento es que no tiene valor de retorno, es decir, el procedimiento puede
ejecutar instrucciones en VBA o mandar información a Excel. Todo dependerá del proceso que se
realice dentro del procedimiento, pero usted tiene que diferenciar cuando usar una función o un
procedimiento. Si su proceso necesita devolver un valor entonces es una función.
Donde:
Alcance: define el ámbito del procedimiento, puede ser público, privado o estático.
Sub: palabra reservada que define el procedimiento en VBA.
Parámetros: un parámetro representa un valor necesario para la implementación del procedimiento,
en caso de más de 2 parámetros separarlos por comas.
Formato:
Ejemplo:
• LLAMADA A UN PROCEDIMIENTO
Se presentan dos formas de llamar a un procedimiento.
Forma 1: Si se encuentra en una hoja de Excel, debe crear un botón desde los
Desde Excel controles de formulario de la ficha Programador y seleccionar de la lista un
procedimiento.
Si la llamada se realiza desde un procedimiento del mismo módulo,
entonces tiene dos opciones:
Tenga en cuenta que los parámetros deben ser la misma cantidad que se
definió en la implementación del mismo y en el mismo orden de envío.
• PARÁMETROS DE UN PROCEDIMIENTO
Tiene el mismo formato que presentaba la función.
Vea su formato:
Ahora, si usted necesita más de 2 parámetros entonces sólo sepárelos por comas, así como sigue:
• CASOS PROPUESTOS
1. Implementar 2 funciones públicas que permitan calcular el área y el volumen de una esfera,
teniendo como parámetro la radio, grabarlo como misFunciones de tipo Habilitado para macros.
Análisis:
2. Implementar 2 funciones públicas que permitan calcular el sueldo bruto y el sueldo neto de una
Planilla de trabajadores. El sueldo bruto proviene de las horas trabajadas por la tarifa asignada a cada
trabajador, además para determinar el sueldo neto deberá aplicarle un descuento del 10% por ley.
Análisis:
Entrada
Salida
Variables del
Proceso
Análisis:
Entrada
Salida
Variables del
Proceso
160 CAP. 6 FUNCIONES Y PROCEDIMIENTOS
• EVALUACIÓN DE LA CAPACIDAD
3. Liste 2 funciones de Excel y sus respectivos comandos en VBA por ejemplo =SUMA() con la función en
VBA =Sum().
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
7
GESTIÓN DE ERRORES
Gestión de Errores
Introducción a los errores en VBA
Control básico de errores con On Error Goto
La Clase Err
Listado de Errores reconocidos por VBA
Caso Desarrollado 1: Venta de Repuestos
Caso Desarrollado 2: División de Números
Casos Propuestos
Evaluación de la capacidad
• GESTIÓN DE ERRORES
VBA como lenguaje gestiona los errores que probablemente se ocasionen al compilar una aplicación, es
decir, detecta el error y lo gestiona de la mejor manera para el usuario. Le explico un caso ¿qué pasaría si
alguien desea ver el código que usted con tanto esfuerzo implementó en VBA? Lo primero que hará esta
persona ajena a usted es ingresar datos errados para probar si usted como programador se ha protegido
de posibles errores. Podría ser que en vez de ingresar un valor numérico ingresa uno textual o en vez de
una fecha ingresa un número, cuando VBA detecta este tipo de errores lo devuelve al código y le muestra
la línea donde se cometió el error para que usted lo pueda corregir, pero imagínese que no sea usted,
entonces estamos frente a una mala administración de los errores en VBA; para esto VBA ha preparado
una instrucción que puede controlar dichos errores y permite mostrarle al usuario en vez del código
fuente un mensaje indicándole que cometió un error y que lo corrija, esto es más saludable ya que
también podría ser el caso que el código sea mostrado a usuarios que no tengan idea de programación
y al manipular el código fuente malogren el código ingresando instrucciones que no son reconocidas
por el lenguaje VBA.
En el desarrollo de aplicaciones VBA se va a encontrar con diferentes tipos de errores, todos los errores
son controlados por VBA, es decir, cada tipo de error tiene un código asignado para su identificación por
medio de la función Err.Value.
¿Por qué debe controlar los errores?. Hay que tener en cuenta que al compilar una aplicación VBA se
ejecuta instrucciones internas que son interpretadas por el lenguaje VBA y que al encontrar un error este
lo devolverá al código fuente resaltando el error para que el usuario lo pueda corregir; ahora imagine
usted que una persona foránea pueda ver el código fuente y administrarlo como él crea conveniente,
no creo que le agrade esto, sino recuerde el refrán nadie sabe para quién trabaja, mejor administre
correctamente los errores en VBA.
Los errores de programación pertenecen a tres categorías: Errores de Compilación, Errores en Tiempo de
Ejecución y Errores Lógicos. Expliquemos cada una de ellos:
Errores de compilación
Estos tipos de errores son conocidos como error del compilador, recuerde que el compilador convierte
el código fuente en un código legible por la computadora, los errores de compilación son errores que
impiden que una aplicación se ejecute.
Cuando usted presiona F5 para ejecutar una aplicación, VBA compila el código en un lenguaje binario
que entiende el equipo. Si el compilador de Visual Basic se encuentra con un código que no entiende,
emite un error de compilador.
164 CAP. 7 GESTIÓN DE ERRORES
Por ejemplo:
La idea en esta etapa es que usted como programador en VBA de Excel pueda identificar estos errores
y poder corregirlos a la perfección, pero lo más importante es que sepa identificar cuál es el error y
detectar la forma de bloquearlo en las futuras aplicaciones en VBA.
Errores lógicos
Estos errores son detectados cuando la aplicación se encuentre en acción ya que no necesariamente
porque una aplicación ejecute bien, quiere decir que la aplicación sea correcta, hay que hacerle una
prueba final. A la pregunta ¿los datos resultantes son los datos esperados por el usuario? Si la respuesta
es afirmativa entonces quiere decir que la aplicación está totalmente terminada.
Por ejemplo, al calcular el valor del IVA(19%) el error lógico más común es interpretar dicho porcentaje de
la siguiente manera 0.019 o 1.9; para este caso siempre se recomienda usar una expresión que represente
al porcentaje de la siguiente manera 19/100.
Los errores lógicos son los más difíciles de detectar y corregir, ya que toda aplicación realizada en VBA
debe pasar por un control de calidad.
Sin la instrucción On Error, cualquier error en tiempo de ejecución sería incontrolable ya que aparecerá
un mensaje de error del propio lenguaje y se detendrá la ejecución mostrando el código fuente para
corregir.
Claro está que antes de caer en estos errores usted como programador debe evitar llegar al límite de
los errores, esto se puede prever si usted aplica métodos de validación de los datos ingresados por el
usuario de esta manera amortigua los errores en la aplicación.
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 165
GoTo line
Habilita la rutina de control de errores que empieza en la línea especificada en el argumento line
requerido. El argumento line es cualquier etiqueta de línea o número de línea. Si se produce un error en
tiempo de ejecución, el control se transfiere a la línea especificada, con lo que se activa el controlador
de errores. La línea especificada debe estar en el mismo procedimiento que la instrucción On Error; de lo
contrario, se producirá un error de compilación.
GoTo 0
Deshabilita un controlador de errores habilitado en el procedimiento actual y lo restablece en Nothing.
GoTo -1
Deshabilita una excepción habilitada en el procedimiento actual y restablece el objeto con el valor
Nothing.
Resume Next
Especifica que cuando se produce un error en tiempo de ejecución, el control se transfiere a la instrucción
inmediatamente posterior a la que produjo el error y la ejecución continúa desde ese punto. Utilice este
formato en lugar de On Error GoTo al tener acceso a los objetos.
• LA CLASE ERR
El objeto Err contiene la información del error encontrado en la aplicación VBA, este administra el error
con las siguientes propiedades:
PROPIEDAD DESCRIPCIÓN
Devuelve la descripción del error encontrado en la aplicación VBA.
Por ejemplo:
Description
MsgBox “La Descripción del Error es:>>” & _
Err.Description
NÚMERO
DESCRIPCIÓN DEL ERROR
DE ERROR
El sub-índice está fuera del intervalo, sólo sucede cuando se usa objetos que
9
contengan elementos matriciales.
11 Error de división por cero, sólo ocurre en el caso que divida un número entre cero.
Análisis
Fig. 7-1
Fig. 7-2
Para ejecutar la función debe colocar la siguiente instrucción en la celda C13 de la hoja de Excel:
=calculaPrecioVenta(C10;C11), para que pueda visualizar el error debe ingresar en la celda C13
el valor 0 (cero) o un valor textual.
168 CAP. 7 GESTIÓN DE ERRORES
Fig. 7-3
Análisis
Fig. 7-4
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 169
Fig. 7-5
Para ejecutar la función debe colocar la siguiente instrucción en la celda C12 de la hoja de Excel:
=calculaDivision(C9;C10), para que pueda visualizar el error debe ingresar en la celda C10 el
valor 0 (cero) o un valor textual.
• CASOS PROPUESTOS
1. Implemente una función que determine la edad de una persona para lo cual deberá ingresar el año
en que nació. A dicho año de nacimiento valídelo para que no permita ingresar valores que no sean
numéricos mostrando para esto un mensaje de “Error de ingreso de Datos”.
Análisis
Entrada
Salida
Variables del
Proceso
2. Implemente una función que permita calcular el promedio de notas de un determinado alumno, el
cual cuenta con 4 notas y aplicando la siguiente fórmula para dicho proceso:
Deberá validar el ingreso de las cuatro notas, en caso ocurriera un error mostrar un mensaje de error
“Error en el ingreso de datos”.
Análisis
Entrada
Salida
Variables del
Proceso
170 CAP. 7 GESTIÓN DE ERRORES
• EVALUACIÓN DE LA CAPACIDAD
1. ¿Por qué cree que es necesario implementar el código fuente con la instrucción On Error Goto?
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
2. ¿Cuál es la diferencia entre los errores típicos de Excel y los que controla VBA?
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
4. ¿Cuál es la diferencia entre controlar los errores de la aplicación y la validación de datos en una
aplicación VBA?
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
Err.Description
Err.Number
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
CAPÍTULO
8
ESTRUCTURA CONDICIONAL
A los cuarenta años, sus uñas se vuelven tan largas y flexibles que
no puede sujetar a las presas de las cuales se alimenta. El pico
alargado y puntiagudo se curva demasiado apuntando contra el
pecho y ya no le sirve. Sus alas están envejecidas y pesadas en
función del gran tamaño de sus plumas, y para entonces, volar se
le hace muy difícil.
En ese momento, sólo tiene dos alternativas: abandonarse y morir, o enfrentarse a un doloroso proceso
de renovación que le llevará aproximadamente 150 días (5 meses). Este proceso consiste en volar hacia
lo alto de una montaña y quedarse ahí, en un nido cercano a un paredón, donde no tenga la necesidad
de volar y sentirse segura. Entonces, una vez encontrado el lugar adecuado. El águila comienza a golpear
con su pico en la pared con mucha fuerza hasta conseguir arrancárselo. Después esperará el crecimiento
de un nuevo pico, con el que se desprenderá una a una sus viejas uñas. Cuando las nuevas garras
comienzan a nacer, comenzará a desgarrarse sus desgastadas plumas.
Y después de todos esos largos y dolorosos cinco meses de heridas, cicatrizaciones y crecimiento, logra
realizar su famoso vuelo de renovación, renacimiento y festejo para vivir otros treinta años más.
Como vio hay decisiones más difíciles en este mundo, las que nos esperan son un poco menos dolorosas, pero
no deja de ser importante o de vital importancia dentro de una organización, recuerde que tomar la decisión
correcta o la más inteligente implica tener en cuenta la lógica, la intuición y la razón en partes equitativas.
Fig. 8-1
174 CAP. 8 ESTRUCTURA CONDICIONAL
Formatos:
If Condición Then
Acción1
Cuando se tiene 2 o más Acciones que ejecutar por una
Acción2
condición Verdadera.
Acción3
End If
En este caso se ejecutará la Accion1 si la condición es
If Condición Then Acción1
Verdadera. La Accion2 se ejecuta sin necesidad de pasa
Acción2
por la Condición.
Los operadores relacionales: se utilizan para escribir condiciones que describan la relación entre dos
valores.
= Igualdad
>< Mayor que, Menor que
>= <= Mayor o igual que, Menor o igual que
<> Diferente
Mostrar el mensaje:
If Categoría = “A” Then Mensaje=”Categoría A”
Categoría B
Los operadores lógicos permiten relacionar varias expresiones lógicas en una sola condición, tenga en
cuenta la tabla de la verdad.
And Y Lógica (Es verdadero sólo cuando ambas condiciones son Verdad de lo
contrario es Falso).
Or O Lógica (Es verdadera cuando una de las condiciones es Verdad, sólo será falso
cuando ambas sean falsas).
Not Negación (Niega la Verdad o Falsedad)
P Q P And Q P Or Q Not P
V V V V F
V F F V F
F V F V V
F F F F V
Como oferta la tienda ofrece un porcentaje de descuento sobre el importe de la compra de acuerdo a
la siguiente tabla:
Fig. 8-2
Tenga en cuenta:
Al iniciar el UserForm debe mostrar los códigos de los productos para que en tiempo de ejecución el
usuario pueda seleccionar uno de ellos y así empezar con el proceso de compra de productos.
Fig. 8-4
Una vez que selecciona el código del producto y se registra la cantidad comprada se debe presionar el
botón Procesar para poder ver los resultados. Vea el código fuente del botón btnProcesar.
Fig. 8-5
Hasta ahora se está mostrando la información sólo en el UserForm agregue los siguientes códigos para
enviarlo a la hoja de Excel preparada anteriormente, tenga en cuenta que en este libro se hace uso de la
expresión Ufila que resulta bastante cómoda al ingresar un valor a la hoja de Excel.
Fig. 8-6
178 CAP. 8 ESTRUCTURA CONDICIONAL
Ahora, en la hoja de Excel se ha propuesto un botón llamado Limpiar Todo, ya que el usuario puede
optar por cancelar toda la venta y no seguir en el proceso. Por tanto, se debe crear un procedimiento de
limpieza de las celdas concernientes a los productos seleccionados, para esto debe crear en el proyecto
un Módulo (Module) y colocar el siguiente código:
Fig. 8-7
Finalmente, toca ver el código de invocación al Formulario VBA desde Excel para eso debe insertar un
botón de tipo formulario la hoja de Excel y seleccione la opción Nuevo de la ventana Asignar Macro y
coloque el siguiente código:
Sub Botón2_Haga_clic_en()
frmCompra.Show
End Sub
Fig. 8-8
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 179
Este formato
se usa cuando
se tiene 2
If Condición Then AccionVerdadera Else AccionFalsa
alternativas por
una condición
evaluada.
If Condición Then
Cuando se Accion1
tiene 2 o más …
AccionN
Acciones que
Else
ejecutar por Accion1
una condición …
Verdadera. AccionN
End If
Vea un ejemplo de este tipo condicional doble. Si tiene la variable Edad y quiere mostrar un mensaje
dependiendo de esta, entonces tiene el siguiente código:
If Edad>17 Then
Mensaje=”Mayor de Edad”
Else
Mostrar el Mensaje=”Menor de Edad”
End If
mensaje Mayor
o Menor de If Edad>=18 Then
Edad Mensaje=”Mayor de Edad”
Else
Mensaje=”Menor de Edad”
End If
Como podrá ver se pueden implementar varias formas de la misma condición, todo depende del
operador adecuado.
If Condición1 Then
Cuando se tiene 2 ‘Acciones Bloque 1
o más Alternativas ElseIf Condición2 Then
de Condición se ‘Acciones Bloque 2
optan por utilizar el Else
‘AccionesFalsas Bloque 3
siguiente formato. End If
180 CAP. 8 ESTRUCTURA CONDICIONAL
Fig. 8-9
Vea un ejemplo de la condicional doblemente encadenada, si se tiene la variable Categoría que varía
entre A, B y C y se necesita mostrar un mensaje, entonces tiene el siguiente código:
Fig. 8-10
Vea el código del botón Procesar que tiene por misión enviar las respuestas sólo a la caja de resultados
del UserForm, esta vez no lo hará a la hoja de Excel, pero eso lleva a un inconveniente, las variables
declaradas dentro de este botón se llaman locales; por lo tanto, cuando se necesita enviar la información
a la hoja de Excel no reconocerá los resultados para dar solución a esto, las variables deben ser declaradas
en forma global. Vea donde se declaran las variables globales.
Fig. 8-11
182 CAP. 8 ESTRUCTURA CONDICIONAL
Las variables globales en VBA tienen una sección llamada (General) (Declaraciones) para llegar aquí;
de doble clic sobre el formulario y coloque las declaraciones encima del Private Sub UserForm_Click().
Al iniciar el formulario se deberá mostrar las categorías dentro del cuadro combinado, para esto deberá
programar en el objeto UserForm en el evento Activate y colocar el siguiente código:
Fig. 8-12
El botón procesar tiene por misión devolver las respuestas del caso pero esta vez sólo al cuadro de texto
del UserForm. Aquí se muestra el código donde captura los datos registrados en el formulario, determina
cuánto se le pagará por hora dependiendo de la categoría seleccionada y determina si tiene o no horas
extras.
Fig. 8-13
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 183
Siga en el mismo botón Procesar y los códigos siguientes tienen por misión calcular el pago bruto, el
impuesto, el pago neto y la impresión de los resultados en la caja de texto.
Fig. 8-14
Finalmente, se muestra el código del botón enviar, que enviará los datos resultantes a la hoja de Excel
preparada en los pasos anteriores. Tenga en cuenta que estas variables tienen valor porque fueron
declaradas en forma global de otra manera no enviaría nada al Excel.
Fig. 8-15
• CASOS PROPUESTOS
En una tienda de descuento las personas que van a pagar el importe de su compra llegan a la caja y
sacan una bolita de color, que les dirá que descuento tendrán sobre el total de su compra. Determinar
la cantidad que pagará cada cliente, si se sabe que si el color de la bolita es rojo el cliente obtendrá un
40% de descuento, si es amarillo un 25% y si es blanca no obtendrá descuento. Deberá implementar
una aplicación en VBA que permite tener el control del descuento que se aplicará al cliente, en una
hoja de Excel deberá generar un reporte con los datos de la venta más el color de la bolita que obtuvo
el cliente.
184 CAP. 8 ESTRUCTURA CONDICIONAL
1. En un hospital existen tres áreas: Ginecología, Pediatría, Traumatología. El presupuesto anual del
hospital se reparte conforme a la siguiente tabla:
Implemente una aplicación VBA que permite mostrar la cantidad de dinero que recibirá cada área,
para cualquier monto presupuestal ingresado en la aplicación. Diseñe en una hoja de Excel el reporte
de la repartición entre las diferentes áreas.
2. Una persona desea determinar si es mayor o menor a la edad de su mejor amigo, para lo cual desea
implementar una aplicación en VBA y mostrarlo en una hoja de Excel con las siguientes opciones: si
es mayor que su amigo mostrar el mensaje Soy Mayor y calcular por cuántos años es mayor y si fuera
menor determinar cuántos años es la diferencia.
3. Un Restaurante ofrece un descuento del 10% para consumos de hasta S/. 30.00, un descuento de 20%
para consumos mayores y para ambos casos aplicar un impuesto del 15%. Implemente una aplicación
en VBA que determine el importe a pagar por lo consumido, mostrando los importes en una hoja de
Excel.
4. Implemente una aplicación en VBA que determine el Salario Bruto y Neto semanal de un trabajador
considerando que si trabaja más de 40 horas, el exceso será considerado como horas extras cuya
tarifa es el 50% más que la tarifa de una hora normal. Además, el trabajador se somete a un impuesto
del 10% sólo si su salario bruto sobrepasa los S/. 80.00. Mostrar Salario Bruto, Descuento y Salario
Neto. Prepare un reporte en una hoja de Excel y muestre todos los datos necesarios.
5. Implemente una aplicación VBA que permita determinar el importe a pagar de un cliente por lo
consumido en un Restaurante, este ofrece ofertas de acuerdo a la siguiente escala:
Consumo Descuento %
Mayor a 100 30
Mayor a 60 20
Mayor a 30 15
Hasta 30 10
Fig. 8-16
En la Fig. 8.16 se está enmarcado todos los objetos que son tipo Option Button (Botón de Opción).
Propiedades
Alignment
1 fmAligmentRight (El texto se alínea a la derecha)
186 CAP. 8 ESTRUCTURA CONDICIONAL
ControlTipText
Picture
• LA CLASE CHECKBOX
También llamado Botón de Opción o Radio Button, este control tiene por finalidad seleccionar una
opción de un grupo de opciones que se presenta dentro de una aplicación VBA. Vea:
Fig. 8-17
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 187
Fig. 8-18
En la Fig. 8.18 se está enmarcando todos los objetos que son tipo CheckBox (Casilla de Verificación).
Propiedades
Alignment
WordWrap Permite mostrar varias líneas de texto del objeto Casilla de Verificación.
Fig. 8-19
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 189
(name) frmAgenda
UserForm1 Caption Registro de Personal
Heihgt 327
Caption REGISTRO DE PERSONAL(AGENDA)
Label1
AutoSize True
Caption Apellidos
Label2
AutoSize True
Caption Nombres
Label3
AutoSize True
Caption Telefono
Label4
AutoSize True
Caption Email
Label5
AutoSize True
Frame1 Caption Preferencias
(Name) btnRegistrar
CommandButton1 Caption REGISTRAR
BackColor &H00FFC0C0&
(Name) btnCancelar
CommandButton2
Caption CANCELAR
(Name) btnSalir
CommandButton3 Caption SALIR
BackColor &H00C0C0FF&
TextBox1 (Name) txtProducto
TextBox2 (Name) txtCantidad
TextBox3 (Name) txtPrecio
(Name) chkPlay
Checkbox1 Caption Jugar Play Station
Value False
(Name) chkFutbol
Checkbox2 Caption Jugar Futbol
Value False
(Name) chkMusica
Checkbox3 Caption Escuchar Musica
Value False
Hoja de Excel propuesta, recuerde que el botón FORMULARIO DE REGISTRO debe ser el último en
colocarse en la hoja.
190 CAP. 8 ESTRUCTURA CONDICIONAL
Fig. 8-20
En la Fig. 8.20 se muestra la captura de los datos ingresados en el formulario y revisando las casillas de
verificación activas o no para asignarle un comentario de acuerdo a lo seleccionado. Observe que para
evaluar que la casilla se encuentre activa se usa la instrucción chkPlay.Value = Check, esto determina que
la casilla de verificación Juega Play Station está activa, Else determina que no fue activada esa casilla y
por tanto tiene un mensaje distinto. Veamos la 2da parte.
Fig. 8-21
En la Fig. 8.21 se muestra la segunda parte del código fuente del botón REGISTRAR y note que se
implementa nuevamente la variable Ufila que determina la última fila vacía para poder imprimir todos los
datos registrados en esa fila, también note que las preferencias están impresas en una sola celda pero una
debajo de la otra para esto se implementó la función CHR(10) que permite el cambio de línea en la misma
celda y al final se aplicó una alineación adecuada a los datos. Vea la última parte del código fuente.
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 191
Fig. 8-22
En Fig. 8.22 se muestra la última sección del código fuente del botón REGISTRAR, aquí se está considerando
la implementación de bordes sobre las celdas exclusivamente a los datos que viajan a la hoja desde el
formulario de registro.
Finalmente implemente el botón FORMULARIO DE REGISTRO en la hoja de Excel con el siguiente código.
Fig. 8-23
Fig. 8-24
192 CAP. 8 ESTRUCTURA CONDICIONAL
• LA CLASE COMBOBOX
También llamado Cuadro Combinado o simplemente Combo, este combina un cuadro de texto con una
lista de opciones en un solo objeto, es muy usado en aplicaciones VBA para poder seleccionar opciones
de un mismo tipo. Lo que tiene que tener en cuenta es que al iniciar el Userform el objeto combo ya
debería tener valores pre-establecidos.
Fig. 8-25
ForeColor
Permite configurar la forma de visualización de los datos del contenedor del objeto
Cuadro Combinado. Tenemos:
0 fmStyleDropDownCombo
Style 2 fmStyleDropDownList
Text
Luego de que seleccione una opción del cuadro combinado el texto desaparece y sólo
quedan las opciones programadas. La próxima vez que inicie el formulario aparecerá.
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 193
• LA CLASE LISTBOX
Permite añadir un elemento al Cuadro de Lista. Este objeto soporta todo tipo de
valores menos las imágenes, la forma de usar el AddItem sería:
lstNombre.AddItem “Elemento a Añadir”
lstNombre.AddItem Variable
Ejemplos:
Clear Borra por completo todos los elementos del Cuadro de lista.
194 CAP. 8 ESTRUCTURA CONDICIONAL
Fig. 8-27
(name) frmPais
UserForm1 Caption Ejemplo de List y Combo
Heihgt 190.5
Caption SELECCIONE UN PAIS
Label1
AutoSize True
Caption Total de Países enviados
Label2
AutoSize True
(Name) lblTotal
Label3 Caption
AutoSize False
ComboBox1 (Name) cboPais
ListBox1 (Name) lstPais
(Name) btnEnviar
CommandButton1
Caption ENVIAR>
Fig. 8-28
En la Fig. 8.28 los países son añadidos al objeto cboPais por medio de la propiedad AddItem, no debe
encerrar con paréntesis los valores, sea texto o número siempre tendrán que estar entre comillas.
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 195
Fig. 8-29
En la Fig. 8.29 antes de enviar el país seleccionado desde el objeto cboPais primero se debe comprobar
que realmente ha seleccionado a alguien de la lista, para esto se implementó la condicional If cboPais.
ListIndex = -1 then, el -1 no representa a ningún elemento; por lo tanto, quiere decir que el usuario
no selecciona un país de la lista de países, por eso se le envía un mensaje, caso contrario si el usuario
selecciona un país correctamente de la lista automáticamente es enviado a la lista en orden tipo cola.
Tenga en cuenta la siguiente instrucción:
LstPais.AddItem CboPais.Text
Aquí está capturando el contenido
Aquí se define la propiedad AddItem
textual del Cuadro Combinado, es decir,
para agregar un elemento a la Lista.
lo que el usuario seleccionó de la lista.
Lima
Arequipa
Perú
Trujillo
Cuzco
Antofagasta
Santiago
Chile
BioBio
Arica
Bogotá
Cali
Colombia
Barranquilla
Medellín
196 CAP. 8 ESTRUCTURA CONDICIONAL
UserForm propuesto:
Fig. 8-30
(name) frmPaisxCiudad
UserForm1 Caption Selección de País por Ciudad
Heihgt 101.25
Caption Seleccione Pais
Label1
AutoSize True
Caption Seleccione Ciudad
Label2
AutoSize True
ComboBox1 (Name) cboPais
ComboBox2 (Name) cboCiudad
Fig. 8-31
En la Fig. 8.31 se asigna los 3 países al objeto cuadro combinado dentro del UserForm en el evento
activate para que al iniciar el formulario muestre lleno el cuadro combinado.
Este tipo de estructura la encontramos en los cajeros automáticos que tienen una apariencia similar a la
imagen de la Fig. 8.33.
Fig. 8-33
Las cuales por lógica tendrá que seleccionar una de las opciones que ofrece el menú de la pantalla,
le pregunto ¿Qué sucede si selecciona la opción 2 del menú? Lógicamente el cajero automático le
presentará una nueva pantalla y comenzará el proceso de Retiro de Dinero, pero ahora suponga el caso
de seleccionar la opción 7, ¿Cuál es la reacción del cajero? Suponemos que le mostrará un mensaje
indicándole que seleccione otra opción o un mensaje de error de ingreso. Algo así debería suceder en el
código VBA cuando se implementa la estructura Select Case, se deberá tener un control de las opciones
y también de los datos errados.
Formato:
Operador Ejemplo
Case Valor Case 1
Case Valor1, Valor2 Case 1,2
Case ValorInicio To ValorFinal Case 1 To 5
Case Is>100
Case Is>Valor
Case Is<100
198 CAP. 8 ESTRUCTURA CONDICIONAL
Fig. 8-34
En la Fig. 8.34 se muestra los caminos que podría tomar según el valor de la expresión (numérico o
textual), en caso de no encontrar un camino se tomará como una expresión falsa pero en dicha expresión
también se podrá realizar una acción.
Fig. 8-35
(name) frmSoftware
UserForm1 Caption Control de Programas
Heihgt 232.5
Caption REGISTRO DE SOFTWARE
Label1
AutoSize True
Caption TIPO DE APLICACION
Label2
AutoSize True
Caption PROGRAMA
Label3
AutoSize True
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 199
(Name) btnMostrar
CommandButton1 Caption MOSTRAR
BackColor &H00FFC0C0&
ComboBox1 (Name) cboAplicacion
ComboBox2 (Name) cboPrograma
ListBox1 (Name) lstR
Hoja de Excel propuesto, recuerde que el botón FORMULARIO DE REGISTRO debe ser el último en
colocarse en la hoja.
Fig. 8-36
Fig. 8-37
Fig. 8-38
200 CAP. 8 ESTRUCTURA CONDICIONAL
La segunda parte del código del botón enviar tiene por misión aplicar un borde a los valores enviados a
la hoja de Excel.
Fig. 8-39
Fig. 8-40
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 201
(name) frmVentaPasajes
UserForm1 Caption Sistema de control de Viajes
Heihgt 325.5
Caption REGISTRO DE PASAJEROS
Label1
AutoSize True
Caption PASAJERO
Label2
AutoSize True
Caption DNI
Label3
AutoSize True
Caption Destino
Label4
AutoSize True
Frame1 Caption Hora de Salida
(Name) btnMostrar
CommandButton1 Caption MOSTRAR
BackColor &H00FFC0C0&
(Name) btnAnular
CommandButton2 Caption ANULAR REGISTRO
BackColor &H00FFC0C0&
(Name) btnEnviarExcel
CommandButton3 Caption ENVIAR A EXCEL
BackColor &H00FFC0C0&
(Name) btnSalir
CommandButton4 Caption SALIR
BackColor &H00FFC0C0&
ComboBox1 (Name) cboDestino
ListBox1 (Name) lstR
Hoja de Excel propuesta, recuerde que el botón FORMULARIO DE REGISTRO debe ser el último en
colocarse en la hoja.
Fig. 8-41
202 CAP. 8 ESTRUCTURA CONDICIONAL
Fig. 8-42
Fig. 8-43
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 203
Fig. 8-44
Fig. 8-45
204 CAP. 8 ESTRUCTURA CONDICIONAL
Fig. 8-46
Fig. 8-47
• INSTRUCCIÓN WITH
With permite realizar una serie de instrucciones sobre un mismo objeto sin volver a especificar el mismo,
la idea es reducir la línea de código al hacer referencia a un objeto y su propiedad.
Se verán dos casos particulares, en los capítulos anteriores se hizo referencia al objeto cuadro combinado,
este tenía que ser llenado al iniciar el formulario para que el usuario pueda seleccionar algún elemento
de la lista en el proceso.
Fig. 8-48
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 205
Haciendo uso de la instrucción With el mismo código sería implementado de la siguiente forma:
Fig. 8-49
With Objeto
.propiedad1 = Valor1
With Simple .propiedad2 = Valor2
End With
With Objeto1
.propiedad1.1 = Valor1
.propiedad1.2 = Valor2
With Objeto2
With Compuesto .propiedad2.1 = Valor3
.propiedad2.2 = Valor4
End With
End With
• VALIDACIONES
Hasta ahora las aplicaciones que ha desarrollado presentan muchas debilidades que a partir de este tema
tendrán que ser superadas. La validación en una aplicación conlleva muchas tareas, una de las principales
es tener el control de los datos que se ingresan en los cuadros de texto de un UserForm.
Validar que
un Cuadro
de texto no
esté vacío
Donde:
Empty: es una instrucción que determina si está vacío el objeto.
Len: es una función que determina la cantidad de caracteres incluido en el
cuadro de texto, cuando se iguala a cero se le estaba indicando que no está
lleno el cuadro de texto.
Validando
la selección
de un
elemento
del cuadro
combinado Donde:
ListIndex: es una propiedad del cuadro combinado que determina la posición
de un elemento seleccionado, al condicionar con -1 le indicamos que aún no
ha seleccionado ni un elemento del cuadro, tenga en cuenta que no le puede
colocar 0 (cero) porque el primer elemento de un Cuadro Combinado o Lista es
siempre 0 (cero).
La validación sería:
Validando
la elección
de una Si los 3 botones de opción están en False entonces mostrará el mensaje de error
opción siguiente:
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 207
Fig. 8-50
Valide los datos del cliente, hay que verificar que los datos del cliente y su RUC sean ingresados de
forma correcta.
Al eliminar un producto de la lista deberá comprobar que se haya seleccionado un producto, caso
contrario aparecerá un mensaje de error como el siguiente:
Solución al caso:
Aplique las siguientes propiedades a los objetos colocados en el UserForm:
(name) frmVentaCredito
UserForm1 Caption Sistema de Ventas
Heihgt 535.5
Caption VENTA DE PRODUCTOS (CREDITO)
Label1
AutoSize True
Frame1 Caption Datos del Cliente
Frame2 Caption Datos del Producto
Frame3 Caption Productos Seleccionados
Frame4 Caption Formas de Pago
Caption Cliente o Razón Social
Label2
AutoSize True
Caption RUC
Label3
AutoSize True
Caption Producto
Label4
AutoSize True
Caption Cantidad
Label5
AutoSize True
Caption Listado de Productos
Label6
AutoSize True
Caption Cantidad
Label7
AutoSize True
Caption SubTotal
Label8
AutoSize True
(Name) btnComprar
Caption
Picture C:\VentaCredito\Carrito.jpg
(Name) btnEliminar
Caption
Picture C:\VentaCredito\Eliminar.jpg
(Name) btnBorrar
Caption
Picture C:\VentaCredito\Borrar.jpg
210 CAP. 8 ESTRUCTURA CONDICIONAL
(Name) btnAnular
Caption ANULAR VENTA
Picture C:\VentaCredito\Anular.jpg
(Name) btnSalir
Caption SALIR
Picture C:\VentaCredito\Salir.jpg
(Name) btnEnviarExcel
Caption
Picture C:\VentaCredito\Excel.jpg
(Name) btnResumen
CommandButton7 Caption MOSTRAR RESUMEN
BackColor &H00C0E0FF&
TextBox1 (Name) txtCliente
TextBox2 (Name) txtRuc
TextBox3 (Name) txtCantidad
(Name) chkCredito
Checkbox1 Caption Credito
Value False
(Name) Opt6
Optionbutton1 Caption 6
Value False
(Name) Opt12
Optionbutton2 Caption 12
Value False
(Name) Opt24
Optionbutton3 Caption 24
Value False
ComboBox1 (Name) cboProducto
Una vez asignada las propiedades a los respectivos objetos pasamos a ver el código fuente de la
aplicación, recuerde que tenemos que usar las siguientes herramientas:
Funciones
Procedimientos
Validaciones
Variables Globales
Estructura Selectiva (If o Select Case)
Fig. 8-51
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 211
Fig. 8-52
Fig. 8-53
Fig. 8-54
Fig. 8-55
212 CAP. 8 ESTRUCTURA CONDICIONAL
Fig. 8-56
Fig. 8-57
Fig. 8-58
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 213
Fig. 8-59
Fig. 8-60
Fig. 8-61
Fig. 8-62
214 CAP. 8 ESTRUCTURA CONDICIONAL
Fig. 8-63
Fig. 8-64
Fig. 8-65
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 215
Fig. 8-66
Fig. 8-67
Fig. 8-68
216 CAP. 8 ESTRUCTURA CONDICIONAL
Fig. 8-69
Fig. 8-70
Fig. 8-71
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 217
Fig. 8-72
Tenga en cuenta que ahora tiene que agregar un botón de Formulario para poder invocar al
UserformfrmVentaCredito.
Fig. 8-73
• CASO PROPUESTO
Se desea realizar la Venta de un Producto para lo cual se deberá ingresar el nombre del producto, Precio
Unitario y la Cantidad comprada se debe calcular el Subtotal a pagar por el cliente, también se le debe
aplicar un descuento de acuerdo a la siguiente tabla:
SubTotal Descuento %
100 o 101 2
102 a 200 4
201 a 500 6
A partir de 501 10
Mostrar todos los resultados de la Venta como los datos del producto, Subtotal, Descuento aplicado y
Neto a Pagar (Subtotal-Descuento).
CAPÍTULO
9
ESTRUCTURA REPETITIVA
Introducción
Contadores
Acumuladores
Caso desarrollado 1: Control de Peaje
Sentencia For…Next, usos
Caso desarrollado 2: Tabla de Multiplicar
Caso desarrollado 3: Series Numéricas
Anidamiento de For
Caso desarrollado 4: Pirámide de Números
Casos propuestos
Sentencia While
Caso desarrollado 5: Tienda Comercial de Electrodomésticos
Control de datos desde Excel
Caso desarrollado 6: Consulta de Datos
Caso desarrollado 7: Filtrado de Alumnos
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 221
• INTRODUCCIÓN
La estructura repetitiva está asociada a los bucles o lazos, tienen por objetivo repetir las instrucciones
un número determinado de veces mientras se cumpla una condición. Imagine usted un niño rebelde de
más o menos 10 años, el cual es castigado por la profesora a escribir en la pizarra 100 veces el siguiente
texto "Así no, corrija y comience de nuevo" para lo cual el niño acepta su error y pasa a la pizarra,
pensemos hace unos años cómo sería la solución al castigo, ¿Sería como la imagen mostrada en la Fig. 9.1
¿Qué opina?
Fig. 9-1
Un niño de esta era hubiera diseñado una solución distinta a la propuesta anterior, recordemos que la
era digital los niños desde temprana edad tienen conocimientos mucho más prácticos y avanzados a la
época anterior, vea la imagen siguiente. ¿Se cumple con el castigo encomendado?
Fig. 9-2
La sentencia For es una estructura que permite realizar ciclos repetitivos según la configuración de la
misma, vea: la variable i tiene un inicio de 1 y una finalización de 100, el msgbox se imprimirá 100 veces
y el next es el cierre del ciclo For, en 3 líneas se puede especificar las 100 veces que repetiría el texto en
una pizarra.
222 CAP. 9 ESTRUCTURA REPETITIVA
• CONTADORES
Cuando se implementa una estructura repetitiva en una aplicación VBA se tiene que tener en cuenta
que las instrucciones incluidas dentro del ciclo no sólo se repiten sino también se pueden contar un
número determinado de ocurrencias o el número de veces que se cumple una determinada condición.
Por ejemplo, se necesita un contador para determinar:
Formato:
Contador = Contador + 1
Contador = Contador – 1
• ACUMULADORES
También llamado totalizador es una variable cuya misión es registrar las cantidades variables de sumas
sucesivas. Tiene la misma idea de los contadores con la diferencia de que almacena valores variables y no
constante como el contador. Por ejemplo, se necesita un acumulador para determinar:
Formato:
Ahora si se quiere más especificación entonces debería contar bajo una condición por cada tipo de
billete. Entonces tendría:
If Billete=10 Then
Código que mBilletes10 = mBilletes10 + 10
permite ElseIf Billete=20 Then
mBilletes20 = mBilletes20 + 20
acumular el
ElseIf Billete=50 Then
total de dinero mBilletes50 = mBilletes50 + 50
por cada tipo ElseIf Billete=100 Then
del mismo mBilletes100 = mBilletes100 + 100
End If
Tenga en cuenta que para un conteo o acumulación sea correcta deberá usar una estructura repetitiva
como For o While con sus variaciones.
Tipo de vehículo
Entrada
Cantidad de pasajeros
Total de autos
Total de camiones
Total de camionetas
Total de ómnibus
Total de otros
Salida
Total de pasajeros en autos
Total de pasajeros en camiones
Total de pasajeros en camionetas
Total de pasajeros en ómnibus
Total de pasajeros en otros autos
224 CAP. 9 ESTRUCTURA REPETITIVA
Formulario Propuesto:
Fig. 9-3
(name) frmPeaje
UserForm1 Caption Control de Peajes
Heihgt 169.5
Caption REGISTRO DE VEHICULOS Y
Label1
AutoSize True
Caption TIPO DE VEHICULO
Label2
AutoSize True
Caption CANTIDAD DE PASAJEROS
Label3
AutoSize True
(Name) btnRegistrar
CommandButton1 Caption REGISTRAR
BackColor &H00FFC0C0&
(Name) BtnAnular
CommandButton2
Caption ANULAR
ComboBox1 (Name) cboVehiculo
TextBox1 (Name) txtPasajeros
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 225
Fig. 9-4
Fig. 9-5
Una variable declarada dentro de la sección global, es una variable reconocida en toda la aplicación
vale decir que dicha variable tendrá un valor actualizado según las llamadas y asignaciones que se le
realice en donde sea llamado. En nuestro caso se ha declarado como variables globales a las variables de
conteos y acumulaciones.
Fig. 9-6
Al iniciar el formulario de la aplicación se debe mostrar el contenido de los vehículos del cuadro
combinado para poder ser seleccionados por el usuario que registrará los tipos de vehículos del peaje.
226 CAP. 9 ESTRUCTURA REPETITIVA
También deberá limpiar el contenido de la hoja de Excel para poder realizar los registros de los nuevos
vehículos en el peaje.
Fig. 9-7
En la Fig. 9.7 se crea un procedimiento llamado llenaVehiculos que permitirá mostrar los nombres
de los vehículos dentro del cuadro combinado, tenga en cuenta que este tema recibe el nombre de
implementación, de nada sirve implementar si usted no lo llama en algún evento del formulario, como
por ejemplo el Activate del formulario.
Se ha implementado la instrucción With para agregar dentro del cuadro combinado los nombres de
los tipos de vehículos, la idea del uso de esta instrucción es ahorrar espacio de código. Es análoga la
siguiente instrucción:
With cboVehiculo
.AddItem "Auto"
End With
cboVehiculo.AddItem "Auto"
Fig. 9-8
El procedimiento LimpiaListaExcel, tiene por misión limpiar las celdas de la hoja de Excel, ClearContents
limpia el contenido de las celdas especificadas dentro del objeto Range() de un determinado Sheets().
Fig. 9-9
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 227
El botón registrar tiene por misión capturar los valores seleccionados por el usuario de la aplicación, al
registrar el tipo de vehículo y la cantidad de pasajeros se deberá incrementar las variables de conteo y
de acumulación a través de la llamada al procedimiento ConteoyAcumulaciones que fueron declaradas
como variables globales de la aplicación, al mismo tiempo se enviará la información a la hoja de Excel por
medio del procedimiento EnviarExcel.
Fig. 9-10
La función ValidaDatos tiene por misión validar el ingreso correcto del tipo de vehículo y la cantidad
de pasajeros, como por ejemplo ingresar valores textuales en la caja de la cantidad de pasajeros o
no seleccionar ningún tipo de vehículo, esa representación en VBA es cboVehiculo.ListIndex=-1 la cual
indica que el usuario no ha seleccionado ningún tipo de vehículo, no puede ser asignada con 0 (cero)
porque dentro del contenedor de lista o cuadro combinado los elementos son controlados por una
matriz inicializada en cero al primer elemento.
Fig. 9-11
228 CAP. 9 ESTRUCTURA REPETITIVA
El procedimiento ConteoyAcumulaciones tiene por misión registrar por cada clic el vehículo y la cantidad
de pasajeros que pasan por el peaje, nótese que se implementó un procedimiento porque al invocarlo no
debe devolver respuesta ya que su trabajo sólo es registrar los conteos de acuerdo a una condición como
es el caso del tipo de vehículo, en donde se implementó un Select Case, para dicha condición también se
pudo implementar con una sentencia If y sería de la siguiente forma:
If Vehiculo="Auto" Then
tAuto = tAuto + 1
aAuto = aAuto + Pasajeros
ElseIf Vehiculo="Camion" Then
tCamion = tCamion + 1
aCamion = aCamion + Pasajeros
ElseIf Vehiculo="Camioneta" Then
tCamioneta = tCamioneta + 1
aCamioneta = aCamioneta + Pasajeros
ElseIf Vehiculo="Omnibus" Then
tOmnibus = tOmnibus + 1
aOmnibus = aOmnibus + Pasajeros
Else
tOtros = tOtros + 1
aOtros = aOtros + Pasajeros
End If
Fig. 9-12
El procedimiento EnviarExcel permite enviar las variables globales de los conteos - acumulaciones y
mostrarlos en la hoja de Excel. Se ha implementado la declaración de la variable local ufila que permite
posicionar en la última fila de los registros en la hoja de Excel y enviar a ese mismo lugar los nuevos
valores registrados.
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 229
Fig. 9-13
En la fig. 9.13 se implementa el botón anular para limpiar la lista y la caja de texto de los pasajeros. En el
caso de cboVehiculo.ListIndex=-1 permite ubicarse en un lugar vacío de la lista contenida en el
cuadro combinado.
La instrucción Empty permite limpiar o dejar vacía la caja de texto en donde se registra la cantidad de
pasajeros de un determinado tipo de auto.
Finalmente, no se olvide de colocar el botón de formulario en la hoja de Excel con el siguiente código:
Fig. 9-14
Fig. 9-15
Fig. 9-16
Formatos:
Note que en la implementación del For la i inicia en 10 y termina en 1, pero la tendencia del For siempre
es ir hacia delante, por eso se colocó la instrucción Step -1 que le indica a la estructura For que tiene que
ir en forma descendente de uno en uno.
Algo a resaltar es que la variable Vueltas en ambos casos obtiene el mismo resultado que es 10; no tiene
nada que ver el ciclo de repeticiones con el valor de la variable Vueltas, al final usted se dará cuenta que
en ambos casos siempre hubo 10 recorridos.
Caso Implementación
Imprimir en una Dim i%
For i = 1 To 10
lista los 10 primeros lstN.AddItem i
números. Next
Imprimir en una Dim i%
lista los 10 primeros For i = 10 To 1 Step -1
números en forma lstN.AddItem i
Next
descendente.
Imprimir los 10 Dim i%
For i = 2 To 20 Step +2
primeros números lstN.AddItem i
pares. Next
UserForm propuesto:
Fig. 9-17
Análisis
Fig. 9-18
(name) frmTabla
UserForm1 Caption Tabla de Multiplicar de N
Heihgt 249.75
Caption TABLA DE MULTIPLICAR
Label1
AutoSize True
Caption NUMERO
Label2
AutoSize True
(Name) BtnMostrar
CommandButton1 Caption REGISTRAR
BackColor &H00FFC0C0&
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 233
(Name) BtnEnviarExcel
CommandButton2 Caption ENVIAR A EXCEL
WordWrap True
(Name) BtnSalir
CommandButton3
Caption SALIR
ListBox1 (Name) lstTabla
Fig. 9-19
En la Fig. 9.19 a diferencia de las aplicaciones anteriores la validación se está realizando en el mismo
botón, cuando la aplicación es más extensa se recomienda usar funciones para la implementación de las
validaciones, por tratarse de una aplicación pequeña el código se encuentra dentro del mismo botón.
Fig. 9-20
En la Fig. 9.20 se está enviando a la celda C4 de Excel el valor ingresado en el cuadro de texto. Además, lo
captura en una sola línea de instrucción Dim N%: n=Val(txtN.Text) esto resume la tarea de declarar
y luego asignar la variable.
234 CAP. 9 ESTRUCTURA REPETITIVA
Observe el caso:
Dim N%
Dim N%: n=Val(txtN.Text)
n=Val(txtN.Text)
En el cuadro anterior los 2 bloques de instrucciones son válidos, VBA permite la declaración y asignación
en una misma línea sólo si se separa con dos puntos (:) como lo observa en ejemplo.
Fig. 9-21
El botón de salida de la aplicación VBA deberá darle la oportunidad al usuario de poder decidir si saldrá
o no del formulario, para esto se debe programar dentro del botón Salir, como notará la instrucción
MsgBox enviar una respuesta a la variable R de tipo entero, esto quiere decir que la selección que el
usuario realice será considerada como un valor entero. Sugiero revisar el capítulo donde se tratan los
mensajes y allí observará que cada botón que muestre el MsgBox tiene un código asignado por VBA y que
puede ser reconocido por cualquier estructura condicional. En este caso el número 6 es la representación
del VBYES que el usuario podría seleccionar, mientras que la instrucción Unload Me cierra el formulario.
Fig. 9-22
No se olvide que en la hoja de Excel debe preparar el entorno de la aplicación y asignar a un botón de
formulario el acceso a la aplicación.
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 235
Si N=5, entonces:
Serie 1: 1 2 3 4 5
Serie 2: 5 4 3 2 1
Serie 3: 2 4 6 8 10
Serie 4: 1/2 - 1/4 - 1/6 - 1/8 - 1/10
Serie 5: 2/4 - 4/8 - 6/12 - 8/16 - 10/20
Serie 6: 1 1 2 3 5 8
UserForm propuesto:
Fig. 9-23
(name) frmSerie
UserForm1 Caption Series Numericas
Heihgt 332.25
Caption SERIES NUMERICAS
Label1
AutoSize True
Caption NUMERO
Label2
AutoSize True
(Name) BtnSerie1
CommandButton1 Caption SERIE1
BackColor &H00FFC0C0&
236 CAP. 9 ESTRUCTURA REPETITIVA
(Name) BtnSerie2
CommandButton2 Caption SERIE2
WordWrap True
(Name) BtnSerie3
CommandButton3
Caption SERIE3
(Name) BtnSerie4
CommandButton4
Caption SERIE4
(Name) BtnSerie5
CommandButton5
Caption SERIE5
ListBox1 (Name) lstSerie
Fig. 9-24
En la Fig. 9.24 se captura el valor de N ingresado por el usuario, limpie la lista por cada vez que se
presiona en el botón Serie1, al final se aplica la serie numérica usando la estructura repetitiva For y se
muestra dentro del cuadro de lista.
Fig. 9-25
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 237
Fig. 9-26
Fig. 9-27
Fig. 9-28
238 CAP. 9 ESTRUCTURA REPETITIVA
Fig. 9-29
En la Fig. 9.29 aplica la serie numérica Fibonacci, que es una sucesión que fue descrita por el Sr. Fibonacci
como solución a un problema de la cría de conejos: "Cierto hombre tenía una pareja de conejos juntos
en un lugar cerrado y uno desea saber cuántos son creados a partir de este par en un año cuando es su
naturaleza parir otro par en un simple mes, y en el segundo mes los nacidos parir también…"
PAREJAS DE CONEJOS
NÚMERO DE MES EXPLICACIÓN DE LA GENEALOGÍA
TOTALES
Fin del mes 0 0 conejos vivos. 0 parejas en total
Comienzo del mes 1 Nace una pareja de conejos (pareja A). 1 pareja en total
La pareja A tiene un mes de edad. Se cruza la pareja
Fin del mes 1 1+0=1 pareja en total
A.
La pareja A da a luz a la pareja B. Se vuelve a cruzar
Fin del mes 2 1+1=2 parejas en total
la pareja A.
La pareja A da a luz a la pareja C. La pareja B cumple
Fin del mes 3 2+1=3 parejas en total
1 mes. Se cruzan las parejas A y B.
Las parejas A y B dan a luz a D y E. La pareja C
Fin del mes 4 3+2=5 parejas en total
cumple 1 mes. Se cruzan las parejas A, B y C.
A, B y C dan a luz a F, G y H. D y E cumplen un mes.
Fin del mes 5 5+3=8 parejas en total
Se cruzan A, B, C, D y E.
A, B, C, D y E dan a luz a I, J, K, L y M. F, G y H
Fin del mes 6 8+5=13 parejas en total
cumplen un mes. Se cruzan A, B, C, D, E, F, G y H.
… … …
Fin del mes 12 ... ...
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 239
• ANIDAMIENTO DE FOR
La sentencia repetitiva For tiene N niveles de anidamiento dentro de la programación VBA, lo que hay
que considerar al momento de implementar la sentencia es la forma de cerrar el ciclo de la estructura, ya
que al no cerrar correctamente estaría incurriendo en el tipo de error de lógica, para esto debe considerar
que al aperturar el ciclo de repeticiones del For este tiene que estar cerrado en el mismo instante de la
creación de la siguiente manera:
For i = 1 To 10
'Cuerpo del bucle
Next
Next es la instrucción que permite indicarle el límite del ciclo de repeticiones, entonces la forma de anidar
tendría el siguiente aspecto:
For i = 1 To 10
'Cuerpo del bucle
For i = 1 To 10
'Cuerpo del bucle
Next
Next
Fig. 9-30
Una vez implementado el diseño de la aplicación en un UserForm del VBA deberá colocar el siguiente
código dentro del botón Mostrar.
240 CAP. 9 ESTRUCTURA REPETITIVA
Fig. 9-31
En la Fig. 9.31 muestra el código implementado dentro del botón Mostrar, en la línea lstPiramide.Clear
limpie el cuadro de lista; ya que el usuario podría ingresar nuevamente un número entero y la lista estará
esperando limpia, se coloca al inicio para que cuando muestre un resultado el cuadro ya esté vacío.
El If Not IsNumeric(txtN.Text) Or Len(txtN.Text) = 0 Then, permite determinar si el
número no es numérico o su longitud es 0, aquí valide la entrada del número al no dejarlo vacío y que
sea un número válido.
La instrucción Dim N%: N = CInt(txtN.Text) permite capturar el valor de la caja de texto txtN.text
y almacenarlo dentro de la variable N.
La misión de For i = 1 To N es recorrer la cantidad de veces que indica el número capturado en la
instrucción anterior, tenga en cuenta que todas las instrucciones que están dentro de esta estructura
se repetirán la cantidad de veces que manda For. Por lo tanto, la instrucción Dim c$: c = "" permite
inicializar la variable C que tiene por trabajo acumular los valores a mostrar en la pantalla, el For J =
1 To i crea un ciclo de repeticiones dependiendo del valor i, es decir, debe cumplir la siguiente tabla
de valores, por ejemplo si fuera N=3 entonces i y j tendrían los siguiente valores:
Valor i Valor J
i=1
J=1
J=2
J=3
i=2
J=1
J=2
J=3
i=3
J=1
J=2
J=3
La instrucción c = c & vbTab & i permite acumular el valor emitido por i en el ciclo de repeticiones
y permitirá mostrarse en forma de pirámide, es decir, cuando i=1 c tendrá que mostrar 1, cuando i=2 c
tendrá que mostrar 1 2 y así sucesivamente dependiendo del valor asignado a N.
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 241
• CASOS PROPUESTOS
1. Diseñe una aplicación en VBA que permita ingresar, mediante un botón de uno en uno, números
enteros mayores o iguales que 100 y menores o iguales que 900 para determinar: cuántos números
pertenecen a cada uno de los siguientes intervalos:
100 a 300,
301 a 500,
501 a 700 y
701 a 900.
En una hoja de Excel modele de la mejor manera para mostrar los resultados de los conteos según los
intervalos mostrados.
2. Implemente una aplicación en VBA que permita ingresar un número entero y devuelva los divisores
de dicho número en forma descendente. Por ejemplo si N=8 los divisores son: 8 ,4, 2, 1. Tenga en
cuenta que en el ingreso sólo debe permitir el acceso de números caso contrario mostrar un mensaje
de error indicando que el valor no es válido.
3. Implemente una aplicación en VBA que muestre los 5 primeros números primos, sabiendo que un
número es primo sólo cuando es divisible con la unidad y consigo mismo. En un cuadro de lista
mostrar la siguiente serie: 2, 3, 5, 7, 11.
4. Implemente una aplicación en VBA que muestre los N primeros números primos. Por ejemplo, si
N=10 entonces en un cuadro de lista mostrar la siguiente serie: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29.
5. En una empresa se van a producir aumentos de sueldos a sus trabajadores en base a la siguiente
escala:
SUELDO(S/.) AUMENTO(%)
501 A MÁS 10
351-500 15
201-350 20
HASTA 200 25
La Empresa cuenta con N trabajadores y se desea calcular el total de personas que recibirán el 10, 15,
20 y 25% de aumento, así como el total a desembolsar por la Empresa. Implemente una aplicación en
VBA para determinar dichos cálculos.
6. Implemente una aplicación en VBA que permita ingresar un número entero y muestre la cantidad de
veces que representa dicho número. Eje: Si N=5 en un cuadro de lista o en cuadro de texto mostrar
la siguiente serie:
1
22
333
4444
55555
242 CAP. 9 ESTRUCTURA REPETITIVA
• ESTRUCTURA WHILE
La estructura while repite una acción o un conjunto de acciones mientras sea verdadera una determinada
condición, para lo cual primero verifica la condición y luego ejecuta la acción. La acción puede ser una
acción simple o una acción compuesta (bloque de acciones). En las figuras 9.32 se muestra el diagrama
de flujo de la estructura while.
Fig. 9-32
CASO IMPLEMENTACIÓN
Do While Condicion
accion1;
Hacer una determinada acción mientras la accion2;
condición sea verdadera. …
accion3;
Loop
Do Until Condicion
accion1;
Hacer una determinada acción hasta que la accion2;
condición sea verdadera. …
accion3;
Loop
Do
accion1;
Hacer una determinada acción mientras que accion2;
cumpla una condición. …
accion3;
Loop While Condicion
Do
accion1;
Hacer una determinada acción hasta que la accion2;
condición sea cierta. …
accion3;
Loop Until Condicion
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 243
Los precios propuestos para sus productos son los que se muestran en la siguiente tabla:
Fig. 9-33
Para registrar una venta, primero debe registrar el nombre del cliente y su número de RUC, luego
seleccionar los productos con su respectiva cantidad, para registrar dicho producto deberá seleccionar
el botón Comprar, en caso el cliente desea eliminar un producto deberá seleccionar dicho producto de
la lista y puede seleccionar el botón Eliminar, en caso ya no quiera comprar puede seleccionar el botón
Borrar que deja vacía las listas de productos, cantidad y Subtotal.
El botón Resumen permitirá mostrar el subtotal, descuento y el neto de la venta, al mismo tiempo
mostrará las fechas de pago y el monto mensual, hay que tener en cuenta que si el cliente no quiere la
venta al crédito deberá dejar de marca el check de crédito y al mostrar el resumen asumirá que la venta
se realiza en una sola letra.
244 CAP. 9 ESTRUCTURA REPETITIVA
El botón Enviar a Excel muestra los datos resultantes en la hoja de Excel hay que tener en cuenta que
debe haber registrado el nombre del cliente y su RUC sino este botón no enviará los datos al formulario
emitiendo para esto un mensaje de error.
Fig. 9-34
‘Determinar el Subtotal
Dim SubTotal@: SubTotal = Precio * cantidad
Sub ImprimirExcel()
Dim uFila%
uFila = Sheets(1).Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).Row
pos = pos + 1
Sheets(1).Cells(uFila, 2).Value = pos
Sheets(1).Cells(uFila, 3).Value = txtCliente.Text
Sheets(1).Cells(uFila, 4).Value = Date
Sheets(1).Cells(uFila, 5).Value = Neto
Sheets(1).Cells(uFila, 6).Value = determinaLetras
Sheets(1).Cells(uFila, 7).Value = Neto / determinaLetras
End Sub
Function ValidaCajas()
If Trim(txtCliente.Text) = Empty Then
ValidaCajas = “Nombre del Cliente”
ElseIf Trim(txtRuc.Text) = Empty Or Len(txtRuc.Text) > 11 Then
ValidaCajas = “Ruc del Cliente”
End If
End Function
Function determinaLetras()
If opt3.Value = True Then
determinaLetras = 3
ElseIf opt6.Value = True Then
determinaLetras = 6
ElseIf opt9.Value = True Then
determinaLetras = 9
Else
determinaLetras = 1
End If
End Function
Sub llenaProductos()
With cboProducto
.AddItem “Lavadora”
.AddItem “Refrigeradora”
.AddItem “Television”
.AddItem “RadioGrabadora”
.AddItem “Cocina”
.AddItem “Licuadora”
End With
End Sub
Function calculaSubTotal()
Dim s@: s = 0
For i = 0 To lstSubtotal.ListCount - 1
s = s + CCur(lstSubtotal.List(i))
Next
calculaSubTotal = s
End Function
El UserForm debe permitir consultar la procedencia de los alumnos de un colegio secundario de Lima.
La idea de aplicación es seleccionar la procedencia desde un cuadro combinado y en una lista deberá
mostrar los alumnos que pertenecen a dicha procedencia.
Fig. 9-35
Considere que la relación de alumnos en la lista debe tener el aspecto mostrado en la Fig. 9.35, es decir,
Apellido Paterno-Apellido Materno-Coma, y Nombres.
APELLIDO APELLIDO
CÓDIGO NOMBRES PROCEDENCIA NIVEL
PATERNO MATERNO
960004 ARAUCO BOCANEGRA VLADIMIR CIV S
960006 AGUILAR GARCIA VERONICA CIV P
960007 ALVAREZ BERTRAN MANUEL CIV P
960009 ALIAGA CORONEL ZOILA CIV P
960010 ALIAGA CORONEL LUIS CIV P
960011 BETT QUEA ITALO DAVID CIV P
960017 ALVA URRUNAGA GUILLERMO CIV S
960023 ATENCIO DIAZ JOSE CIV P
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 249
Al activar el formulario deberá mostrar el cuadro combinado lleno de las Procedencias registradas
en la hoja de Excel sin repetirse.
Al seleccionar una procedencia deberá mostrar los datos de los alumnos que cumplen con dicho
criterio, es decir, mostrará los alumnos de dicha procedencia.
Fig. 9-36
Fig. 9-37
En la Fig. 9.37 se filtrará los datos de los alumnos de acuerdo a su nivel de estudio, grado y sección, para
esto mostrar los datos de los alumnos y el total de los mismos. Tenga en cuenta que sólo será para verlo
dentro del formulario, si desea verlo en Excel tendrá que seleccionar el botón Enviar a Excel.
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 251
Al iniciar el formulario deberá mostrar lleno el cuadro combinado del nivel, grado y sección.
Al Presionar el botón consultar deberá filtrar a los alumnos según los criterios seleccionados.
LstAlumnos.Clear
‘Buscando Nivel
Sheets(2).Select
Range(“F6”).Activate
Do
If ActiveCell.Value = Nivel Then
If ActiveCell.Offset(0, 1).Value = Grado Then
If ActiveCell.Offset(0, 2).Value = Seccion Then
LstAlumnos.AddItem ActiveCell.Offset(0, -4).Value & “ “ & _
ActiveCell.Offset(0, -3).Value & “, “ & _
ActiveCell.Offset(0, -2).Value
Total = Total + 1
End If
End If
End If
ActiveCell.Offset(1, 0).Select
Loop While ActiveCell.Value <> “”
Sheets(2).Activate
Range(“F6”).Activate
lblTotal.Caption = Total
End Sub
LstAlumnos.Clear
‘Buscando Nivel
Sheets(2).Select
Range(“F6”).Activate
Do
If ActiveCell.Value = Nivel Then
If ActiveCell.Offset(0, 1).Value = Grado Then
If ActiveCell.Offset(0, 2).Value = Seccion Then
LstAlumnos.AddItem ActiveCell.Offset(0, -4).Value & “ “ & _
ActiveCell.Offset(0, -3).Value & “, “ & _
ActiveCell.Offset(0, -2).Value
Total = Total + 1
i = i + 1
Sheets(3).Cells(8+i, 2).Value = ActiveCell.Offset(0, -5).Value
Sheets(3).Cells(8+i, 3).Value = ActiveCell.Offset(0, -4).Value
Sheets(3).Cells(8+i, 4).Value = ActiveCell.Offset(0, -3).Value
Sheets(3).Cells(8+i, 5).Value = ActiveCell.Offset(0, -2).Value
Sheets(3).Cells(8+i, 6).Value = ActiveCell.Offset(0, -1).Value
Sheets(3).Cells(8+i, 7).Value = ActiveCell.Value
Sheets(3).Cells(8+i, 8).Value = ActiveCell.Offset(0, 1).Value
Sheets(3).Cells(8+i, 9).Value = ActiveCell.Offset(0, 2).Value
Sheets(3).Cells(8+i, 10).Value = ActiveCell.Offset(0, 3).Value
Sheets(3).Cells(8+i, 11).Value = ActiveCell.Offset(0, 4).Value
Sheets(3).Cells(8+i, 12).Value = ActiveCell.Offset(0, 5).Value
Sheets(3).Cells(8+i, 13).Value = ActiveCell.Offset(0, 6).Value
Sheets(3).Cells(8+i, 14).Value = ActiveCell.Offset(0, 7).Value
Sheets(3).Cells(8+i, 15).Value = ActiveCell.Offset(0, 8).Value
Sheets(3).Cells(8+i, 16).Value = ActiveCell.Offset(0, 9).Value
Sheets(3).Cells(8+i, 17).Value = ActiveCell.Offset(0, 10).Value
Sheets(3).Cells(8+i, 18).Value = ActiveCell.Offset(0, 11).Value
Sheets(3).Cells(8+i, 19).Value = ActiveCell.Offset(0, 12).Value
Sheets(3).Cells(8+i, 20).Value = ActiveCell.Offset(0, 13).Value
End If
End If
End If
ActiveCell.Offset(1, 0).Select
Loop While ActiveCell.Value <> “”
Sheets(3).Activate
lblTotal.Caption = Total
End Sub
CAPÍTULO
10
LOS FORMULARIOS
Manejo de Formularios
Manejo de cajas de entrada (InputBox)
Caso Desarrollado 1: Conversiones
Cuadros de Mensaje (Msgbox)
Tiempos en la Programación
Nomenclatura de nombres a objetos
Agregar un UserForm al proyecto
La Clase UserForm
La Clase Label
La Clase TextBox
La Clase Command Button
Los Eventos
Ventana de Código
Caso Desarrollado 2: Venta de Productos
Caso propuesto
• MANEJO DE FORMULARIOS
Los UserForm en VBA es el único medio en la cual un usuario externo puede participar en los procesos
automatizados por VBA, entonces como programador debe diseñar de la mejor manera posible los
UserForm creando un entorno visual profesional y a la vez sencillo para los usuarios finales del proyecto
en VBA. Vea algunos ejemplos:
Fig. 10-1
Fig. 10-2
1
2
Fig. 10-3
En el formato hay más opciones pero las necesarias son las presentadas de las cuales sólo la primera es
obligatoria, las demás son opcionales, se presentan algunos ejemplos:
Fig. 10-4
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 257
Fig. 10-5
– Ficha Programador.
– Seleccione Insertar.
Fig. 10-6
258 CAP. 10 LOS FORMULARIOS
Fig. 10-7
Solución:
Prepare la siguiente hoja:
Fig. 10-8
Fig. 10-9
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 259
Fig. 10-10
Sub Mensaje()
MsgBox "Mensaje común sin Iconos"
End Sub
La característica de este tipo de mensaje es que sólo presenta un botón y es meramente informativo, lo
único que puede realizar aquí es aceptar la ventana.
Luego tiene las ventas con opción a respuesta programada, es decir, de acuerdo a lo seleccionado por
el cliente se tomará una u otra opción para esto debe conocer el nombre de cada botón; por ejemplo, el
botón Aceptar es VBOkOnly.
Fig. 10-11
Sub Mensaje()
MsgBox "Se ha producido un error..!!",
vbAbortRetryIgnore + vbInformation,
"Sistema Informa"
End Sub
En el mensaje de la Fig. 10.11 se tiene que considerar que al seleccionar uno de los botones programados
en el mensaje debe ocurrir alguna acción. En este caso los botones ya están programados con los eventos
mostrados en cada botón.
Finalmente, tiene los mensajes controlados por el usuario, es decir, la acción que realice el usuario será
evaluada en una condición y mostrar al usuario una actividad luego de la selección del botón.
260 CAP. 10 LOS FORMULARIOS
Fig. 10-12
Sub Mensaje()
Dim r%
r = MsgBox("Esta seguro de salir de la Aplicación",
vbYesNo + vbExclamation,
"Sistema Informa")
End Sub
2 3
En la forma 1 está el modo simple de enviar un mensaje al usuario en la cual la respuesta que envié el
usuario por medio de los botones no será tomada en cuenta por VBA. En la forma 2 la respuesta que
el usuario tome por medio de los botones será asignada a una variable de tipo entero (integer). Aquí
hay que tener en cuenta 2 cosas, ¿Cuáles son los códigos de cada botón? y ¿Cuál es el valor entero que
asume cada botón? Empiece por la primera, aquí se presenta la lista de código asignado a cada botón
de un mensaje:
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 261
Ahora vea la lista de los valores enteros asignados a cada botón, es decir, este número será parte de la
programación al momento de verificar que botón seleccionó el cliente.
CONSTANTE VALOR
OK 1
Cancel 2
Abort 3
Retry 4
Ignore 5
Yes 6
No 7
Se presenta 2 ejemplos de cómo manejar los mensajes en forma simple y asumiendo un valor desde el
usuario.
Ejemplo 1:
Ejemplo 2:
If r = 6 Then
Application.Quit
End If
End Sub
En el punto 1 el mensaje es enviado al usuario dándole la bienvenida al Sistema, este tipo de mensaje se
le puede asignar al aperturar el libro que contiene el proyecto, para esto deberá programa el MsgBox
dentro del Objeto: WorkBook con el evento Open, esto se logra dando 2 clics en ThisWorkBook del
proyecto en VBA.
Fig. 10-13
En el punto 2 se tiene que crear un procedimiento dentro de un módulo para que desde una hoja de
Excel sea accesible, en este caso se desarrolló dentro del módulo MoProcedimientos, ahora asígnele a
un botón de formulario dicho procedimiento.
Fig. 10-14
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 263
Según la lista de valores numéricos asignados al botón Si es 6, presentamos una segunda opción de la
misma acción:
If r=VbYes Then
Application.Quit
End If
Fig. 10-15
• TIEMPOS EN LA PROGRAMACIÓN
Cada vez que usted implemente una aplicación en VBA observará 2 tiempos, los cuales deben ser
considerados por el programador ya que toda aplicación debe ser diseñada pensando en el usuario final
y no en la comodidad del programador.
Entonces se presentan 2 tiempos: el Tiempo de Diseño y el Tiempo de Ejecución.
Tiempo de Diseño
En este tiempo se pueden colocar los objetos dentro del contenedor UserForm, asignar valores a las
propiedades e implementar los códigos dentro de los objetos. En conclusión, en el tiempo de diseño
el programador dejará todo listo para que el usuario tenga un entorno de su aplicación amigable y
profesional.
264 CAP. 10 LOS FORMULARIOS
Fig. 10-16
Tiempo de Ejecución
En este tiempo el UserForm se vuelve una pantalla presentable como notará ya no se ve la grilla y está
listo para probar las opciones programadas, esto es lo que el usuario final necesita. ¿Cuál es la misión del
usuario dentro de este tiempo? Dependiendo de la aplicación el usuario deberá ingresar valores según
el proceso que desea realizar.
También hay que tener en cuenta que VBA antes de llegar a este tiempo verificó que todo este correcto
dentro del código, en caso hubiera error en la aplicación, VBA bloquea el tiempo de ejecución y lo
retorna al tiempo de diseño para que haga los cambios respectivos.
En caso usted quiera modificar el código fuente en plena ejecución de la aplicación, es decir, en el
tiempo
p de ejecución, VBA bloqueará dicha acción hasta que no corte los tiempos usando el botón
(Restablecer) de las herramientas estándar del entorno VBA.
Fig. 10-17
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 265
Es muy cómodo para el programador asignar un nombre a cada objeto, pero no por el tiempo que se
demora en asignarlos sino más bien cuando desarrolla el código, ya que no tiene que estar calculando
qué número de objeto es el que referencia.
La nomenclatura ofrece una lista de posibles prefijos de los objetos en VBA que usted puede o no seguir.
Debe tener en cuenta que usted no está obligado a asignar un prefijo, pero como se comentó al inicio
es más cómodo para usted y para el próximo programador de la empresa ya que de seguro el también
conoce esta nomenclatura y usted estará esperando lo mismo cuando se cambie de empresa.
Vea un caso ¿Que pasaría si su perrita en casa alumbra a cuatro cachorritos y casualmente todos son
parecidos, cómo le pondría usted de nombre apenas van naciendo cachorro1, cachorro2, cachorro3 y
cachorro4?, parece que la solución funcionará un tiempo pero no creo que le agrade mucho a un perrito
llamarse cachorro1; imagínese usted llamando a su perrito por la calle frente a otras personas.
Fig. 10-18
Observe que el nombre asignado por VBA es UserForm1, ya que como se explicó en los capítulos anteriores,
VBA trabaja su entorno basado en la tecnología orientada a objetos; por lo tanto, el UserForm1 es una
instancia o copia de la clase UserForm.
Fig. 10-19
Recomiendo que para un mejor desempeño de las aplicaciones en VBA distribuya de la mejor manera los
paneles que presenta VBA, guíese como en la Fig. 10.19 el Explorador de proyectos y las propiedades en
el lado izquierdo, el UserForm en el centro y el Cuadro de herramientas en el lado derecho.
• LA CLASE USERFORM
La clase UserForm fue pensada como contenedor de los demás objetos que las clases implementadas
en VBA proveen; así como los cuadros de textos, botones, etc. Un UserForm es la única forma en que el
usuario pueda tener un contacto directo con el proyecto desarrollado ya sea dando respuesta a eventos
o ingresando valores al proyecto.
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 267
Fig. 10-20
Propiedades: estas propiedades son totalmente modificables, es decir, usted podrá personalizar su
UserForm por medio de estas, los valores que encontrará son asignados por VBA en forma estándar,
es decir, si se inserta varios objetos del mismo tipo las propiedades serán las mismas, usted los podrá
modificar de la mejor manera.
(Name) Nombre del objeto tipo UserForm, se debe seguir la nomenclatura de los
objetos. Es importante el nombre del objeto UserForm ya que así se podrá
determinar con exactitud a que UserForm hace referencia VBA.
1 2
La ficha Paleta presenta 48 colores de tipo RGB mientras que Sistema muestra
los colores propios del sistema operativo.
BorderColor Define el color del borde del formulario siempre y cuando el BorderStyle sea
fmBorderStyleSingle.
BorderStyle Activa el estilo de borde de un UserForm.
Caption Define el título de un UserForm.
Picture
Para suprimir la imagen de fondo del UserForm tendrá que presionar la tecla
Suprimir sobre el texto (Mapa de Bits) de la propiedad Picture.
Propiedad que define la ubicación de una imagen de fondo del UserForm
PictureAlignment
siempre y cuando dicha imagen sea más pequeña que el mismo UserForm.
Propiedad que determina la forma en que la imagen se adaptará al UserForm.
Están:
fmPictureSizeModeClip: imagen en modo normal.
PictureSizeMode fmPictureSizeModeStretch: imagen controlada por el tamaño del
UserForm.
fmPictureSizeModeZoom: imagen expandida en alto y ancho sobre el
UserForm.
StartUpPosition Define la posición del UserForm frente a la pantalla.
Width Define el ancho en pixeles del UserForm.
Zoom Permite realizar un Zoom sobre los objetos del UserForm.
• LA CLASE LABEL
También llamado Etiqueta o Texto Estático, este control tiene por finalidad mostrar textos de apoyo
dentro de la Interfaz del usuario. Vea:
Fig. 10-21
En la Fig. 10.21 se está enmarcando todos los objetos que son tipo Etiqueta (Label).
270 CAP. 10 LOS FORMULARIOS
Propiedades
ControlTipText Propiedad que determina que texto se mostrará al posicionar el mouse encima
del label, dicho mensaje aparecerá en un marco amarillo.
Enabled
Permite inhabilitar el objeto Label pero seguirá siendo visible.
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 271
Determina el tipo de fuente, estilo y tamaño del texto contenido dentro del label.
Fig. 10-22
Font
TextAlign
WordWrap
• LA CLASE TEXTBOX
También llamado Caja de Texto o Cuadro de Texto, el cual permite ingresar un valor de tipo texto,
entiéndase que se refiere a una caja exclusivamente de texto eso quiere decir que al ingresar otro tipo de
valor como números, fechas u otro tipo deberá convertir dicho valor para que pueda usarlo en el código
fuente, en otros lenguajes se conoce como parseo.
272 CAP. 10 LOS FORMULARIOS
Vea:
Fig. 10-23
Propiedades
MultiLine Permite la activación de varias líneas dentro del objeto TextBox, tener en
cuenta que para el cambio de línea deberá usar la instrucción VbNewLine,
normalmente usado para la impresión de resultados.
Fig. 10-24
PasswordChar Esta propiedad define el tipo de símbolo que se mostrará al digitar dentro de la
caja de texto es similar a las claves de un correo electrónico. Para esto deberá
asignar un * a la propiedad PassWordChar.
Fig. 10-25
Text Permite asignar un valor al Cuadro de Texto, si el usuario debe llenar los
Cuadros de Texto es recomendado dejar vacía esta propiedad.
TextAlign Permite alinear el texto en tiempo de ejecución. Tenemos las siguientes
opciones:
1 fmTextAlignLeft
2 fmTextAlignCenter
3 fmTextAlignRight
Width Define el ancho del objeto TextBox.
WordWrap Permite mostrar el texto en 2 o más líneas sin necesidad de activar MultiLine,
todo depende del ancho del Cuadro de Texto.
Fig. 10-26
En la Fig. 10.26 se está enmarcando todos los objetos que son tipo Etiqueta (Label).
Propiedades
(Name) Es el nombre que se le asignará al objeto de tipo Command Button, según
la nomenclatura de nombres deberá empezar con btn. Ejm: btnRegistrar,
btnCalcular.
BackColor Asigna un color de fondo al botón.
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 275
La imagen asignada puede tener diferentes posiciones dentro del mismo botón
con la propiedad PicturePosition.
PicturePosition Permite asignar una posición a la imagen colocada dentro del botón de
comando.
WordWrap Permite la escritura de 2 a más líneas dentro del mismo botón de comando,
usted deberá ingresar el texto en la propiedad Caption sin dar Enter.
• LOS EVENTOS
El término evento se refiere a cualquier acontecimiento, circunstancia, suceso o caso posible. Así, se dice
eventualmente o ante todo evento en previsión de algo que, conjetural o previsiblemente, podría ocurrir
en una circunstancia determinada y es generalmente un hecho imprevisto o indeterminado pero puede
ser controlado.
276 CAP. 10 LOS FORMULARIOS
Fig. 10-27
Ahora suponga que ya ingresó el usuario y la contraseña asignada ¿Qué acción tomaría?, veamos:
Presionar ENTER.
Presionar ESC.
Hacer un clic en Acceder.
Hacer un clic en Cancelar.
Salir de la Ventana con ALT+F4.
EVENTO DESCRIPCIÓN
Activate El código fuente implementando en este evento ocurrirá cuando se active el
formulario.
Fig. 10-28
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 277
Click El código fuente que se implemente dentro del evento Click se ejecutará cuando
se presione un Clic en el objeto. Normalmente ocurre cuando se tiene un objeto
de tipo button.
DblClick El código fuente colocado dentro del evento DblClick se ejecutará cuando se realice
2 clics en el objeto. Se puede aplicar al fondo del Formulario o un Cuadro de texto.
Terminate El código fuente colocado dentro del evento Terminate ocurrirá cuando se
cierre un formulario.
• VENTANA DE CÓDIGO
Esta ventana tiene por misión implementar el código dependiendo del tipo de objeto y un determinado
evento.
1 2
Fig. 10-29
3
1 Lista de Objetos: aquí se listan los objetos colocados dentro del formulario inclusive el mismo
UserForm, además de la sección General para las declaraciones globales.
2 Lista de Eventos: aquí se listan los eventos por cada tipo de objeto, al seleccionar un evento
automáticamente se implementará el código de un procedimiento con el objeto y evento seleccionado.
3 Este bloque de código se autogeneró por la selección de un objeto y un evento, para generar más
códigos de implementación deberá seleccionar otro evento. Vea las partes del código:
2 3
5 End Sub
PPermite visualizar el código fuente completo, es decir, muestra el código de todos los objetos
ccon sus respectivos eventos, esto podría ser de ayuda en determinado momento pero a veces es
incómodo ver tanto código, usted decide.
Una tienda comercial de electrodomésticos controla sus ventas por medio de hojas de Excel, pero desean
implementar una interfaz más amigable para poder realizar una venta, para esto deberá implementar un
formulario que permita ingresar el nombre del producto, la cantidad y el precio unitario. La aplicación
deberá calcular el subtotal (precio x cantidad), un descuento del 10% en base al Subtotal y el Neto a
pagar por la compra de un determinado producto.
Solución:
1. Acceda al entorno VBA (ALT+F11) desde un libro nuevo de Excel.
2. Agregue un UserForm al proyecto.
3. Diseñe el siguiente entorno (en tiempo de diseño).
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 279
Fig. 10-30
(name) frmVenta
UserForm1 Caption Sistema de Ventas
Heihgt 292.5
Caption CONTROL DE VENTA DE PRODUCTOS
Label1
AutoSize True
Caption Producto
Label2
AutoSize True
Caption Cantidad
Label3
AutoSize True
Caption Precio
Label4
AutoSize True
Frame1 Caption Datos del Producto
(Name) btnRegistrar
CommandButton1 Caption REGISTRAR
BackColor &H00FFC0C0&
(Name) btnCancelar
CommandButton2
Caption CANCELAR
(Name) btnSalir
CommandButton3 Caption SALIR
BackColor &H00C0C0FF&
TextBox1 (Name) txtProducto
TextBox2 (Name) txtCantidad
TextBox3 (Name) txtPrecio
(Name) txtR
TextBox4 MultiLine True
ScrollBars 2-fmScrollBarsVertical
280 CAP. 10 LOS FORMULARIOS
Hay que tener en cuenta que las propiedades se pueden aplicar en conjunto dependiendo del tipo de
objeto; por ejemplo, se puede aplicar la propiedad Font a todos los objetos ya que todos los objetos
cuentan con esta propiedad, apliquémoslo entonces:
Fig. 10-31
5. Terminada la parte del diseño pase al código fuente, para esto debe presionar 2 clics sobre el botón
btnRegistrar ya que este es el botón que determina los resultados de la aplicación:
Fig. 10-32
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 281
Tener en cuenta:
Se activó el requerimiento de declaración de variables con Option Explicit. (Ver Las Variables y su
declaración en VBA).
La declaración de las variables en VBA se pueden implementar en cualquier parte del código, claro
está, antes de usar la variable.
En la sección de captura de valores note que al capturar el nombre del producto no se realizó
ninguna conversión ya que la variable Producto fue declarada como String (Cadena de Texto).
En el caso Cantidad se aplicó la función de conversión Cint que permite convertir un Texto en
Número y finalmente CCur permite convertir un texto en Moneda.
En la sección de imprimir resultados se usó la función VbNewLine para el cambio de línea dentro
del objeto TextBox, esto sólo funcionará si tiene aplicada la propiedad MultiLine=True.
Se estará preguntando el porqué del siguiente código txtR.Text = txtR.Text & "PRODUCTO
" & Producto & vbNewLine, la explicación es muy sencilla: para poder imprimir varias líneas
dentro del TextBox con propiedad MultiLine se tiene que concatenar todo el bloque de texto,
porque de otra manera solo se imprimirá en Neto en una sola línea a pesar de realizar VbNewLine
sobre la impresión.
La función Format permite asignar ceros a la derecha de una variable numérica para tener un
formato de dinero.
Código del botón CANCELAR, que tiene por misión limpiar los controles de tipo Cuadros de Textos
y enviar el cursor al cuadro Producto para un nuevo ingreso.
Fig. 10-33
Código del botón SALIR, que tiene por misión salir de la aplicación VBA, previa respuesta del usuario.
Fig. 10-34
282 CAP. 10 LOS FORMULARIOS
6. Para probar la aplicación debe presionar F5 e ingresar los valores como se muestra a continuación.
Recuerde que esta es la etapa de ejecución de la aplicación.
Fig. 10-35
7. Hasta aquí observe que los datos resultantes dentro del userForm no son visibles por la hoja de Excel,
sólo se muestra en la caja de texto, en los siguientes pasos se hará que el resultado sea enviado a una
hoja de Excel. Para dicho efecto prepare el siguiente entorno en una hoja de cálculo.
Fig. 10-36
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 283
Fig. 10-37
Se ha implementado una expresión Ufila que permite capturar la última celda vacía y llenarla con los
datos del nuevo producto desde el formulario de venta.
9. No se olvide que en la Hoja de cálculo deberá asignar la macro a un botón de tipo Formulario y
coloque el siguiente código:
Fig. 10-38
284 CAP. 10 LOS FORMULARIOS
• CASO PROPUESTO
Una tienda comercial de ventas al por mayor vende sólo tres tipos de productos cuyos códigos son
PRO001, PRO002 y PRO003 a los precios unitarios dados en la siguiente tabla:
Dicha empresa ofrece a sus clientes un descuento por el valor total de sus compras por cierta cantidad de
productos de un mismo tipo, dichos porcentajes de descuentos se muestran a continuación:
Diseñar una aplicación en VBA que dado un producto y su cantidad determine el valor total de la compra,
el monto de descuento según su valor total de compra y el neto a cancelar por el usuario.
Formulario propuesto:
Fig. 10-39
CAPÍTULO
11
BASE DE DATOS CON VBA Y ACCESS
Base de Datos
Objetivos de los sistemas de base de datos
Representación de la Información
Caso Desarrollado 1: Delivery
Caso Propuesto
Recuperación de Datos: Instrucción Select
Consultas
Manejo de INNER JOIN
Conexión a una base de datos con Access y VBA
Conexión ADO
Conectando a una base de datos: Access
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 287
• BASE DE DATOS
Las bases de datos tiene muchos conceptos pero el más adecuado es como
su nombre lo dice; es un conjunto de datos, al mismo estilo de la Agenda de
un teléfono móvil o un catálogo de precios de productos.
La necesidad de una base de datos surge en los años 60, como respuesta
a la anarquía que planteaban las organizaciones al tener cada vez mayor
cantidad de archivos inclusive con información redundante entre ellos, la
propuesta de una base de datos como concepto tecnológico es:
Registrar los datos que son importantes para una organización y deberán decidir el nivel de prioridad
de los mismos.
Organizarlos de manera correcta.
Colocarlos en un repositorio único, es decir, asignarle un nombre como Base de Datos.
Impedir que las aplicaciones externas accedan a los datos directamente, sólo podrán ser accesibles
por medio de una conexión hacia dicha base, para esto SQL como gestor de base de datos pondrá
las reglas de juego para dicho acceso.
Fig. 11-1
D. Integridad de los datos: consiste en garantizar la no contradicción entre los datos almacenados,
de modo que, en cualquier momento del tiempo, sean correctos, es decir, que no se detecte
inconsistencia entre los mismos. Está relacionada con la minimización de la redundancia, ya que es
más fácil garantizar la integridad si se elimina esta.
F. Facilidad de manipulación de la información: los usuarios de una base de datos pueden acceder a
ella con solicitudes para resolver muchos problemas diferentes. El SBD debe contar con la capacidad
de una búsqueda rápida por diferentes criterios, debe permitir que los usuarios planteen sus
demandas de una forma simple, aislándolo de las complejidades del tratamiento de los archivos y
del direccionamiento de los datos. Los SBD actuales brindan lenguajes de alto nivel, con diferentes
grados de facilidad para el usuario no programador, que garantizan este objetivo, los llamados sub-
lenguajes de datos.
• REPRESENTACIÓN DE LA INFORMACIÓN
En toda organización existe información no necesariamente ordenada y esto demanda tiempo cuando
deseamos administrar o simplemente consultar, ahora la forma de representación es adecuar dicha
información y organizarla de forma lógica para esto se necesitan ciertas etapas que se detallan a
continuación:
Niveles de Abstracción:
Entonces están:
Dominio de ideas: en este nivel se define las entidades u objetos que serán realmente usados
en una base de datos, con esto se hará una separación entre el mundo real y el de los objetos
lógicamente relacionados en una base de datos.
Para poder realizar dicha separación se necesitan conocer 3 conceptos:
1. Campo o atributo: tiene una analogía a los encabezados que se asigna en Excel cuando se
quiere almacenar registros de datos. Normalmente representa una característica o propiedad de
un objeto. Por ejemplo:
2. Dominio: si se considera que en el planeta existen diferentes aparatos móviles, entonces hay
conciencia de que pueden tener características similares pero con diferente valor; por ejemplo:
Marca: LG
Modelo: IPhone
Precio de Compra: 2300.00
Stock: 10
Marca: HTC
Modelo: 3G
Precio de Compra: 1500.00
Stock: 200
Nivel de datos: en este nivel se hace referencia a la especificación de los datos encontrados en el
nivel anterior, es decir, se debe aplicar un estereotipo de datos para que al registrarlos en una tabla
de base de datos tenga la seguridad de cumplir con los requerimientos del dominio de ideas; por
ejemplo:
ENTIDAD: PERSONA
Relaciones de correspondencia: ahora que ya reconoce los elementos que componen una entidad
de una base de datos, debe tener la capacidad de poder asociar estas entidades como ocurre en el
nivel del mundo real donde todas las cosas existen porque alguien lo requiere.
Caso: Asocie la entidad PERSONA a una entidad CELULAR, ahora pregúntese ¿cuántos celulares
puede tener una persona a lo largo de su vida?, usted mismo analice si desea tener la cuenta de
cuántos celulares tiene ahora y cuántos los tuvo. Si sigue podría proponer cuestiones como: ¿Cuántos
celulares de la misma marca tuvo?, ¿Cuánto de dinero invirtió en la compra de dichos celulares? o
¿Cuáles son las fechas de compra de cada celular adquirido o por lo menos en qué año?
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 291
En el cuadro que presenta las imágenes coloque según corresponda: Uno a Uno, Uno a muchos, Muchos
a Muchos.
292 CAP. 11 BASE DE DATOS CON VBA Y ACCESS
Solución:
A. Lista de Entidades:
Cliente
Recepción
Factura
Despachador
Venta
CLIENTE
IDCLIENTE APELLIDOS NOMBRES DIRECCIÓN
CL0001 Zamora Mejía María Av. Marañón Nº 564
CL0002 Acosta Ferrer Guadalupe Av. Carlos Izaguirre Nº 985
CL0003 Calle de la Cruz Maruja Jr. 7 Agosto Mz. A Lote 16
RECEPCIÓN
IDRECEPCION APELLIDOS NOMBRES CORREO
RE001 Rengifo Reátegui Heidi [email protected]
RE002 Vílchez Cruz Jeaneth [email protected]
RE003 Zelada Yáñez Katherine [email protected]
FACTURA
NUMFACTURA FECHA MONTOTOTAL IDRECEPCION IDCLIENTE
1 10/08/2011 50.00 RE002 CL0002
2 11/08/2011 80.00 RE001 CL0003
3 12/08/2011 30.00 RE002 CL0003
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 293
DESPACHADOR
IDDESPACHADOR APELLIDOS NOMBRES CORREO MÓVIL
Ferrero Marcos
DE0001 [email protected] 955420151
Manrique Luis
Martínez
DE0002 Martin [email protected] 993216524
Gonzales
García Carlos
DE0003 [email protected] 982132412
Kzafra Alfredo
VENTA
NUMVENTA NUMFACTURA IDDESPACHADOR ESTADO
1000 1 DE0002 CANCELADO
1001 2 DE0001 CANCELADO
1002 3 DE0001 DESPACHANDO
• CASO PROPUESTO
Lo contratan para hacer una BD que permita apoyar la gestión de un sistema de ventas. La empresa
necesita llevar un control de proveedores, clientes, productos y ventas.
Un proveedor tiene un Identificador único, RUC, nombre, dirección, teléfono y página web. Un cliente
también tiene un identificador único, RUC, nombre, dirección, pero puede tener varios teléfonos de
contacto.
Un producto tiene un identificador, descripción, precio actual, stock y nombre del proveedor. Por razones
de contabilidad, se debe registrar la información de cada venta con un identificador, fecha, cliente,
descuento y monto final. Además se debe guardar el identificador, la cantidad vendida y el monto total
por el producto.
Formato
SELECT ListaCampos
[ FROM Tablas ]
[ WHERE Condiciones ]
[ GROUP BY ExpresionGrupo ]
[ HAVING CondicionBusqeuda ]
[ ORDER BY [ASC|DESC]]
294 CAP. 11 BASE DE DATOS CON VBA Y ACCESS
Observaciones
LISTA DE CAMPOS: aquí se especifica los campos de la tabla a mostrar sus registros.
FROM: aquí se especifica la tabla de donde se obtendrán los registros de la consulta.
WHERE: aquí se define las restricciones de consulta de los registros.
GROUP BY: aquí se especifica los campos para una determinada agrupación de datos.
HAVING: aquí se define las restricciones de consulta después de una agrupación.
ORDER BY: aquí se definen los campos que mostrarán sus registros en un determinado orden.
• CONSULTAS
B. LISTA DE SELECCIÓN
Se puede especificar las columnas de la Tabla que desea consultar, este tipo de consulta resulta
controlada por el usuario ya que este determina qué mostrar.
D. TOP
Devuelve solamente las primeras filas del conjunto resultado. Si se especifica PERCENT devolverá el
porcentaje de las primeras filas entre 0% y 100%.
F. DISTINCT
Permite mostrar datos únicos de un campo específico.
Formato
ELECT ListaCampos
[ FROM Tablas ]
[ WHERE Condiciones ]
296 CAP. 11 BASE DE DATOS CON VBA Y ACCESS
Fig. 11-2
En la Fig. 11.2 se muestra las relaciones entre las tablas de una base de datos llamada Ventas realizada
en Access. Como notará existe un enlace entre ellas lo cual podría interpretarse de la siguiente manera:
Un vendedor registra muchas ventas, cada una de las ventas registradas tienen un conjunto de detalles
propios de la venta, en cada detalle se hace referencia a un determinado producto. En conclusión se
tiene:
Este juego de relaciones sólo lo puede realizar en programas catalogados como SGBD, es decir, un
Sistema de Gestión de Base de Datos como lo es Access, SQL Server u Oracle.
Fig. 11-3
En la Fig. 11.3 se muestra los registros de la tabla Vendedor, note que el signo + que aparece en el lado
derecho del registro indica que dicho registro tiene un enlace con otra tabla al aperturar dicho ícono (+)
mostrará los datos encontrados en el enlace.
300 CAP. 11 BASE DE DATOS CON VBA Y ACCESS
Fig. 11-4
En la Fig. 11.4 se muestra los registros de la tabla Productos al igual que en la tabla anterior tiene un
símbolo + en cada registros porque todo los productos han participado por lo menos en una venta.
Fig. 11-5
En la Fig. 11.5 se muestra los registros de la tabla Ventas, note que existe un campo llamado Cod_
Vendedor que muestra el código del vendedor que realizó el registro de la venta, esto se debe a que
tiene una unión tipo Join con la tabla Vendedor.
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 301
Fig. 11-6
En la Fig. 11.6 muestra los registros de la tabla Detalle_Venta donde existe una unión con la tabla Venta
es por eso que los campos de la columna nVenta se repiten, es decir, note el código 2 que se repite en el
primer y segundo registro eso quiere decir que dicha venta tuvo dos productos registrados en esa venta.
• CONEXIÓN ADO
Cuando VBA quiere tener el control de los registros por medio de consultas hacia la base de datos Ventas,
esta lo tiene que hacer por medio de una clase llamada ADO (ActiveX Data Object), esta tecnología
provee un conjunto de objetos que permite tener acceso a la base de datos y a sus tablas respectivas.
La idea de ADO es poder acceder a cualquier base de datos de cualquier proveedor y poder visualizar la
data en una hoja de Excel o en algún elemento contenedor del UserForm.
Es comúnmente usado por los programadores para acceder y para modificar los datos almacenados
en un Sistema Gestor de Bases de Datos Relacionales (SGBD), aunque también puede ser usado para
acceder a datos en fuentes no relacionales.
ADO incorpora varios proveedores de datos que permiten conectar con SQL Server y Oracle, así como
otros que facilitan el uso de controladores ODBC y OLE DB para acceder a aquellos provenientes de
Excel, Access, MySQL, etc. Además incorpora el nuevo modelo de factorías que hace posible un acceso
genérico a orígenes de datos, la obtención de información de esquema, las características específicas
para SQL Server o las nuevas capacidades del objeto Datatable.
Existen varios niveles o interfaces para lograr la comunicación o acceso a la base de datos a través de la
aplicación. El siguiente esquema muestra 2 de los principales niveles, dentro de los cuales se encuentra
ADO.
302 CAP. 11 BASE DE DATOS CON VBA Y ACCESS
Fig. 11-7
ADO está compuesto de siete objetos, algunos de alto nivel como Connection, Command y Recordset,
que pueden ser creados y eliminados por el usuario y otros con distintas funcionalidades como designar
propiedades de conexión, definir sentencias y ejecutarlas, optimización de consultas, etc. Estos elementos
se representan:
Fig. 11-8
En la Fig. 11.8 se muestran los elementos contenidos dentro de ADO por cada conexión que realice sobre
una base de datos, observe que el objeto RecordSet y Command dependen directamente del objeto
Connection.
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 303
Fig. 11-9
En la Fig. 11.9 el archivo ConsultaVentas.xlsm es un archivo de Excel con habilitación de macros que
tiene por misión realizar reportes de los datos registrados en el archivo Ventas.mdb de Access 2003.
Fig. 11-10
304 CAP. 11 BASE DE DATOS CON VBA Y ACCESS
Fig. 11-11
Fig. 11-12
En la Fig. 11.12 se debe colocar el título Listado de Vendedores y la cabecera de los datos a mostrar
es decir: Código, Vendedor, Sueldo Básico y Categoría.
5. Crear una función dentro del módulo moBaseDatos que permita configurar la conexión a la
base de datos Ventas del Access.
Option Explicit
Dim cn As New ADODB.Connection
Function getConecta()
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ThisWorkbook.Path & "\" & "Ventas.mdb"
getConecta = cn
End Function
Sub LimpiaCeldas()
Sheets(1).Range("B7:E100").ClearContents
End Sub
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 305
Tener en cuenta:
cn.connectionString: permite definir el proveedor de la base de datos y con qué base de datos
trabajará, sus componentes son:
- Provider: aquí se define el tipo de proveedor de base de datos, hay que tener en cuenta que
cada base de datos tiene un proveedor asignado mostraremos algunos proveedores de base
de datos:
Access 2003
Access 2007
SQL Server
MySQL
- Data Source: se refiere a la base de datos de donde provienen los datos a listar, tenga en
cuenta que si define de manera incorrecta el provider automáticamente Data Source generaría
un error y no podría conectarse a la base de datos.
getConecta=cn: permite asignar la conexión realizada a la función, es decir, cuando algún objeto
necesite conectarse a la base de datos Ventas.mdb sólo invocará a la función por medio de un
objeto de tipo ConnectionString.
306 CAP. 11 BASE DE DATOS CON VBA Y ACCESS
6. Ahora debe declarar la siguiente variable global, ya que debe usar a cada momento la conexión
a la base de datos; entonces será necesaria la siguiente instrucción.
Esto debe ser declarado en el inicio de la programación, antes que todas las funciones del módulo.
Fig. 11-13
Sub formatoListado1()
Range("B4").Select
ActiveCell.FormulaR1C1 = "LISTADO DE VENDEDORES"
Range("B6").Select
ActiveCell.FormulaR1C1 = "CÓDIGO"
Range("C6").Select
ActiveCell.FormulaR1C1 = "VENDEDOR"
Range("D6").Select
ActiveCell.FormulaR1C1 = "SUELDO BASICO"
Range("E6").Select
ActiveCell.FormulaR1C1 = "CATEGORIA"
Range("F6").Select
Columns("C:C").ColumnWidth = 33.86
Columns("D:D").ColumnWidth = 17.57
Columns("E:E").ColumnWidth = 14
Columns("B:B").HorizontalAlignment = xlCenter
Columns("E:E").HorizontalAlignment = xlCenter
Range("B4:E4").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
End With
Selection.Merge
Cells.Select
With Selection.Font
.Name = "Trebuchet MS"
End With
Range("C6").Select
Columns("C:C").ColumnWidth = 44
Range("B6:E6").Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlCenter
End With
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
Selection.Font.Bold = True
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 307
.ThemeColor = xlThemeColorDark1
.TintAndShade = -0.249977111117893
.PatternTintAndShade = 0
End With
Range("B7:E100").Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
Selection.Borders(xlEdgeLeft).LineStyle = xlNone
Selection.Borders(xlEdgeTop).LineStyle = xlNone
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
Selection.Borders(xlEdgeRight).LineStyle = xlNone
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
8. Prepare la primera consulta, esta deberá mostrar a todos los vendedores registrados en la tabla
del mismo nombre de la base de datos Ventas de Access.
Sub ListadoVendedores1()
Call LimpiaCeldas
cn = getConecta()
cn.Open
rs.Close
cn.Close
End Sub
Liste a todos los vendedores cuya categoría sea A.
Sub ListadoVendedoresCatA()
Call LimpiaCeldas
cn = getConecta()
cn.Open
Worksheets(1).Cells(7, 2).CopyFromRecordset rs
Call formatoListado1
rs.Close
cn.Close
End Sub
Liste a todos los vendedores cuyo nombre inicie con la letra P.
Sub ListadoVendedoresApellidoP()
Call LimpiaCeldas
cn = getConecta()
cn.Open
Worksheets(1).Cells(7, 2).CopyFromRecordset rs
Call formatoListado1
rs.Close
cn.Close
End Sub
Liste a todos los vendedores cuyo sueldo sea menor a 1000.
Sub ListadoVendedoresSueldoMenor1000()
Call LimpiaCeldas
cn = getConecta()
cn.Open
Worksheets(1).Cells(7, 2).CopyFromRecordset rs
Call formatoListado1
rs.Close
cn.Close
End Sub
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 309
9. Ahora en otra hoja llamada Listado de Productos genere las siguientes consultas con el siguiente
formato:
Fig. 11-14
Sub formatoListadoArticulos()
Range("B4").Select
ActiveCell.FormulaR1C1 = "LISTADO DE ARTICULOS"
Range("B6").Select
ActiveCell.FormulaR1C1 = "CÓDIGO"
Range("C6").Select
ActiveCell.FormulaR1C1 = "PRODUCTO"
Range("D6").Select
ActiveCell.FormulaR1C1 = "PRECIO"
Range("E6").Select
ActiveCell.FormulaR1C1 = "STOCK"
Range("F6").Select
Columns("C:C").ColumnWidth = 33.86
Columns("D:D").ColumnWidth = 17.57
Columns("E:E").ColumnWidth = 14
Columns("B:B").HorizontalAlignment = xlCenter
Columns("E:E").HorizontalAlignment = xlCenter
Range("B4:E4").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
End With
Selection.Merge
Cells.Select
With Selection.Font
.Name = "Trebuchet MS"
End With
Range("C6").Select
Columns("C:C").ColumnWidth = 44
Range("B6:E6").Select
310 CAP. 11 BASE DE DATOS CON VBA Y ACCESS
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlCenter
End With
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
Selection.Font.Bold = True
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorDark1
.TintAndShade = -0.249977111117893
.PatternTintAndShade = 0
End With
Range("B7:E100").Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
Selection.Borders(xlEdgeLeft).LineStyle = xlNone
Selection.Borders(xlEdgeTop).LineStyle = xlNone
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
Selection.Borders(xlEdgeRight).LineStyle = xlNone
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
Columns("G:G").Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.EntireColumn.Hidden = True
ActiveWindow.SmallScroll ToRight:=-2
ActiveWindow.SmallScroll Down:=18
Rows("36:36").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.EntireRow.Hidden = True
ActiveWindow.SmallScroll Down:=-45
ActiveWindow.DisplayGridlines = False
Range("B4:E4").Select
Selection.Font.Size = 28
Range("A1").Select
End Sub
Sub ListadoProductos()
Call LimpiaCeldas
cn = getConecta()
cn.Open
Worksheets(2).Cells(7, 2).CopyFromRecordset rs
Call formatoListadoArticulos
rs.Close
cn.Close
End Sub
Liste a todos los productos de la tabla del mismo nombre.
Sub TresProductosMasCaros()
Call LimpiaCeldas
cn = getConecta()
cn.Open
Worksheets(2).Cells(7, 2).CopyFromRecordset rs
Call formatoListadoArticulos
rs.Close
cn.Close
End Sub
Impreso en los Talleres Gráficos de
Surquillo
7199700
- 7199701
Mayo 2012