Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 313

Programación

VBA
con
Excel
PROGRAMACIÓN VBA CON EXCEL
Autor: Manuel Ángel Torres Remon

© Derecho de autor reservado


Empresa Editora Macro E.I.R.L.

© Derecho de edición, arte gráfico y diagramación reservados


Empresa Editora Macro E.I.R.L.

Edición a cargo de:


Empresa Editora Macro E.I.R.L.
Av. Paseo de la República 5613 – Miraflores
Lima - Perú
 (511) 719-9700
[email protected]
http://www.editorialmacro.com

Primera edición: Mayo 2012 - 1000 ejemplares

Impreso en los Talleres Gráficos de


Empresa Editora Macro E.I.R.L.
Lima - Perú

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.

Se inicio en la docencia en el año 2000 dictando el curso de Técnicas de Programación y Estructura de


Datos a estudiantes del III ciclo de la carrera profesional de Computación e Informática del Instituto de
Educación Superior Manuel Arévalo Cáceres en donde también fue estudiante y egreso en el año 1996
donde todavía se programaba en C++ y Pascal.

También dicta cursos de programación en el centro de computo UNIMASTER de la Universidad Nacional


de Ingeniería como Programador Java, Programador Net, Programador PHP y Programación VBA con Excel.

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

Introducción al Visual Basic Aplicaciones (VBA) ...............................................................................51


Lenguaje Basic ....................................................................................................................................53
Fundamentos de Visual Basic Aplicaciones para Excel .......................................................................53
La ficha Programador de Excel 2010 ..................................................................................................54
Configurar la seguridad de Macros en un libro de Excel ....................................................................56
Modos de acceso al VBA ....................................................................................................................56
Descripción del editor VBA ................................................................................................................57
Descripción de la barra de herramientas Estándar .....................................................................57
El Explorador de Proyectos ..........................................................................................................59
La Ventana de Propiedades........................................................................................................63
La Ventana de Código ................................................................................................................64
Personalizar del entorno VBA.............................................................................................................65
Asignar derechos sobre el proyecto VBA....................................................................................65
Asignar una clave al código VBA ................................................................................................66
Activar el requerimiento de declaración obligatoria de variables .............................................67
Aplicar formato al editor de código VBA ....................................................................................67
El objeto ThisWorkBook .....................................................................................................................68
El objeto WorkSheets .........................................................................................................................69
Evaluación de la capacidad ................................................................................................................72

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

El Modelo de Objetos ........................................................................................................................93


Introducción al modelo de objetos ....................................................................................................95
Clase Application ................................................................................................................................95
ActiveCell ...................................................................................................................................96
ActiveSheets ...............................................................................................................................96
ActiveWindow ............................................................................................................................97
Selection.....................................................................................................................................98
Caso Desarrollado 1: Datos del Sistema .............................................................................................99
Clase Range ........................................................................................................................................101
Métodos del objeto Range ..........................................................................................................101
Propiedades del objeto Range ....................................................................................................103
Método Offset ....................................................................................................................................104
Caso Desarrollado 2: Búsqueda de Documentos ...............................................................................105
Evaluación de la capacidad ................................................................................................................106

Capítulo 5

Fundamentos de Programación ........................................................................................................107


Introducción a la Programación con VBA ...........................................................................................109
Comentarios .......................................................................................................................................109
Concatenación ...................................................................................................................................110
Operadores usados en VBA ................................................................................................................111
Las variables y su declaración en VBA ................................................................................................113
Tipos de datos y su operador de referencia .......................................................................................114
Las Constantes ...................................................................................................................................116
Expresiones algorítmicas vs algebraicas .............................................................................................116
Asignación de valores.........................................................................................................................117
Estructura secuencial .........................................................................................................................117
Caso Desarrollado 1: Sueldo de Trabajadores ....................................................................................118
Caso desarrollado 2: Ejercicios Secuenciales .....................................................................................120
Casos Propuestos ...............................................................................................................................124
Evaluación de la capacidad ................................................................................................................126

Capítulo 6

Funciones y Procedimientos .............................................................................................................127


Funciones -Introducción a las funciones ............................................................................................129
Funciones para cadenas de caracteres...............................................................................................129
Caso desarrollado 1: Funciones de Texto ...........................................................................................133
Funciones Numéricas .........................................................................................................................134
Caso desarrollado 2: Números Aleatorios ..........................................................................................136
Funciones de fecha ............................................................................................................................138
Caso desarrollado 3: Funciones de Fechas.........................................................................................141
Caso desarrollado 4: Cálculo de Edad ................................................................................................142
Caso desarrollado 5: Venta al Crédito ................................................................................................142
Caso desarrollado 6: Cálculo de Días .................................................................................................143
Funciones de conversión de tipo........................................................................................................145
Funciones de comprobación de valor ................................................................................................147
Funciones definidas por el usuario ....................................................................................................149
Estructura de una función ...........................................................................................................149
Ámbito de una función ................................................................................................................150
Tipo de dato de retorno ..............................................................................................................151
Llamada a una función................................................................................................................152
Parámetros de una función .........................................................................................................152
Crear funciones definidas por el usuario .....................................................................................153
Opciones de las funciones ...........................................................................................................155
Procedimientos ..................................................................................................................................156
Estructura de procedimiento .......................................................................................................156
Llamada a un procedimiento ......................................................................................................158
Parámetros de un procedimiento................................................................................................158
Casos propuestos ...............................................................................................................................158
Evaluación de la capacidad ................................................................................................................160

Capítulo 7

Gestión de Errores .............................................................................................................................161


Gestión de Errores..............................................................................................................................163
Introducción a los errores en VBA ......................................................................................................163
Control básico de errores con On Error Goto .....................................................................................164
La Clase Err .........................................................................................................................................165
Listado de Errores reconocidos por VBA ............................................................................................166
Caso Desarrollado 1: Venta de Repuestos..........................................................................................166
Caso Desarrollado 2: División de Números ........................................................................................168
Casos Propuestos ...............................................................................................................................169
Evaluación de la capacidad ................................................................................................................170
Capítulo 8

Estructura Condicional ......................................................................................................................171


Estructura Condicional - Introducción................................................................................................173
Estructura de selección simple If…Then .............................................................................................173
Operadores Lógicos y Relacionales ....................................................................................................174
Caso Desarrollado 1: Venta de Productos ..........................................................................................175
Estructura de selección doble If…Then…Else .....................................................................................178
Estructura de selección doblemente encadenada If…Then…ElseIf ....................................................179
Caso Desarrollado 2: Salario de Trabajadores ....................................................................................180
Casos Propuestos ...............................................................................................................................183
La Clase Option Button ......................................................................................................................185
La Clase CheckBox ..............................................................................................................................186
Caso desarrollado 3: Agenda Básica...................................................................................................188
La Clase ComboBox ...........................................................................................................................192
La Clase ListBox .................................................................................................................................193
Caso desarrollado 4: Selección de Países ...........................................................................................194
Caso desarrollado 5: Ciudad-País .......................................................................................................195
Estructura de selección múltiple Select-Case .....................................................................................197
Caso Desarrollado 6: Registro de Software ........................................................................................198
Caso Desarrollado 7: Registro de Pasajeros .......................................................................................200
Instrucción With .................................................................................................................................204
Validaciones .......................................................................................................................................205
Caso desarrollado 8: Tienda Comercial ..............................................................................................207
Caso Propuesto ..................................................................................................................................217

Capítulo 9

Estructura Repetitiva .........................................................................................................................219


Introducción .......................................................................................................................................221
Contadores .........................................................................................................................................222
Acumuladores ....................................................................................................................................222
Caso Desarrollado 1: Control de Peaje ...............................................................................................223
Sentencia For…Next, usos ..................................................................................................................230
Caso desarrollado 2: Tabla de Multiplicar ..........................................................................................231
Caso desarrollado 3: Series Numéricas ..............................................................................................235
Anidamiento de For ...........................................................................................................................239
Caso desarrollado 4: Pirámide de Números .......................................................................................239
Casos propuestos ...............................................................................................................................241
Estructura while .................................................................................................................................242
Caso desarrollado 5: Tienda Comercial de Electrodomésticos...........................................................243
Caso desarrollado 6: Consulta de Datos.............................................................................................248
Caso Desarrollado 7: Filtrado de Alumnos .........................................................................................250

Capítulo 10

Los Formularios .................................................................................................................................253


Manejo de Formularios ......................................................................................................................255
Manejo de cajas de entrada (InputBox) .............................................................................................255
Caso desarrollado 1: Conversiones ....................................................................................................256
Cuadros de Mensaje (MsgBox)...........................................................................................................259
Tiempos en la programación ..............................................................................................................263
Nomenclatura de nombres a objetos.................................................................................................265
Agregar un UserForm al proyecto ......................................................................................................266
La Clase UserForm..............................................................................................................................266
La Clase Label ...................................................................................................................................269
La Clase TextBox ...............................................................................................................................271
La Clase Command Button ..............................................................................................................274
Los Eventos.........................................................................................................................................275
Ventana de Código .............................................................................................................................277
Caso desarrollado 2: Venta de Productos ..........................................................................................278
Caso propuesto ..................................................................................................................................284
Capítulo 11

Base de datos con VBA y Access .......................................................................................................285


Base de datos .....................................................................................................................................287
Objetivos de los Sistema de base de datos ........................................................................................287
Representación de la Información .....................................................................................................288
Caso Desarrollado 1: Delivery ............................................................................................................292
Caso Propuesto ..................................................................................................................................293
Recuperación de Datos: Instrucción Select ........................................................................................293
Consultas ............................................................................................................................................294
Manejo de INNER JOIN.......................................................................................................................298
Conexión a Base de Datos con Access y VBA ..................................................................................... 299
Conexión ADO ....................................................................................................................................301
Conectando a una base de datos Access ...........................................................................................303
CAPÍTULO

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

CAPACIDAD DEL CAPÍTULO

 Reconoce conceptos básicos de programación.


 Identifica la diferencia entre un objeto y una clase.
 Reconoce los comandos de Excel en inglés.
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 19

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

Visual Basic para aplicaciones (VBA) está dirigido a usuarios operadores


que quieren entrar al mundo de la programación, no se necesita tener
conocimientos de programación ya que este material tiene por objetivo
dar los conocimientos necesarios para crear, manipular y administrar el
código desde el fundamento de la programación hasta la conexión a la
base de datos con Access.

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.

¿QUÉ ES UN PROGRAMA DE APLICACIÓN?


Es un tipo de programa diseñado para usuarios que no
necesitan tener conocimientos de programación. Estos
programas resultan ser bastante cómodos por lo sencillo
y rápido de sus comandos, específicamente está diseñado
para tareas inmediatas. Tenemos:

¿QUÉ SON LOS SISTEMAS OPERATIVOS?


Es un tipo de programa que permite tener en funcionamiento
una computadora, todos los programas de aplicación tienen
como plataforma de trabajo un sistema operativo. Tenemos:

¿QUÉ ES UN LENGUAJE DE PROGRAMACIÓN?


Es un tipo de programa que desarrolla programas de
aplicación, ahora entienda la idea principal de VBA es crear
aplicaciones para agilizar las tareas que se realiza en un
programa de aplicación. Tenemos:

Entonces a la pregunta de ¿Qué es un programa? La respuesta sería la siguiente: representa un conjunto


de instrucciones que tiene por objetivo dar un resultado de calidad siguiendo un patrón de reglas propias
del lenguaje.
También es conocido como Programa Fuente o Código Fuente y cuando se encuentra en marcha se le
conoce como ejecución del programa y cuando está en ese estado sólo se muestran resultados; claro
está los resultados esperados por el usuario.

Public Function Celsius(ByVal Fahrenheit)


Celsius = Round((Fahrenheit - 32) * 5 / 9, 2)
End Function

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

• ¿QUÉ SON LOS LENGUAJES DE PROGRAMACIÓN?


VBA debe ser escrito en un lenguaje de programación que sea entendible por la computadora, así
tenemos el caso en que se quiere mostrar un mensaje desde VBA a Excel; entonces, el lenguaje interpreta
el comando de envío de mensajes y lo ejecuta, esto quiere decir que cada instrucción colocada en VBA
debe ser interpretada por un lenguaje; en VBA el lenguaje es BASIC por eso usted encontrará mucha
similitud entre las instrucciones Visual Basic y VBA.

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

¿QUÉ FUNCIÓN TIENEN LOS INTÉRPRETES EN LA PROGRAMACIÓN?


Un intérprete efectúa la traducción y ejecución simultánea de cada una de las instrucciones
del código fuente realizado VBA, es decir, es el encargado de revisar línea por línea y
traducirlo en un código entendible por la computadora.

• INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS


Excel, como muchas otras aplicaciones, ha sido diseñado basándose en la teoría de los objetos. La
programación orientada a objetos o también llamada POO es un paradigma de la programación, el cual
usa objetos y sus interacciones, con el objetivo de implementar aplicaciones y programas de alta calidad.

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

LISTA DE LISTA DE ACCIONES


CARACTERÍSTICAS QUE PUEDE REALIZAR

 Alto  Escribir
 Diámetro  Sobrescribir
 Color  Garabatear
 Marca

Como notará las características de un simple lápiz es universal


ya que todo lápiz cumple con la función de escribir y todos
tienen un color por ejemplo. Ahora para poder diferenciar las
características de lo que puede realizar es muy sencillo, las
acciones a realizar normalmente son verbos mientras que las
características no.

Ahora vea con un ejemplo tipo VBA, tenemos un UserForm


o formulario, el cual también se le denomina objeto, y por lo
tanto tiene características que ahora se llamarán propiedades
Fig. 1-7
y tiene acciones que realizar a lo que se llamará eventos.

Se definen las propiedades y eventos de un UserForm:

PROPIEDADES EVENTOS

 Nombre del formulario  Activado


 Alto en pixeles  Cerrado
 Ancho en pixeles  Cliqueado
 Color de fondo

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

En la Fig. 1.8 se muestra la lista de propiedades del objeto


UserForm, debe tener en cuenta que las propiedades varían
en un porcentaje no determinado entre un objeto u otro, es
decir, hay propiedades comunes y propiedades propiamente
del 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.

• ¿EL OFFICE Y SU RELACIÓN CON VBA?


¿Desea limpiar 1000 filas en Excel? ¿Desea crear un informe por cada cliente que compró productos en
su tienda y al final imprimir el monto total vendido? ¿Quiere exportar los registros de su tabla en Word
a Excel?

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.

• ¿POR QUÉ DEBEMOS APRENDER VBA?


Se puede nombrar 3 razones:

• 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

• MAYOR INTERACCIÓN CON EL USUARIO


VBA ofrece mecanismos para poder interactuar con el usuario y ofrecer una experiencia sencilla y
profesional a la vez. Por ejemplo, si se tiene un archivo de Excel importante para una empresa la forma
de protegerlo es asignarle una contraseña de apertura del archivo, pero es bien conocido que existen
aplicaciones que rompen dicha contraseña, en VBA se puede preparar un formulario de logeo donde
los usuarios se encuentren registrados en una base de datos alojada en el servidor por ejemplo Access
o SQL Server.

• INTERACCIÓN ENTRE APLICACIONES DE OFFICE


En la actualidad VBA está tomando muchos seguidores por la facilidad de uso y por la forma en que
interactúa con las demás aplicaciones de Office, y como lo comenté anteriormente, por interactuar con
aplicaciones de ingeniería.

• ¿CUÁL ES EL FUTURO DE VBA?


El siguiente paso natural en la evolución de VBA es dejar de ser un subconjunto de Visual Basic y pasar
a ser una plataforma .NET. Microsoft no planea hacer mejoras significativas a VBA en el futuro, aunque
continuará dando soporte a las licencias de VBA que se han ido ofreciendo, VBA está siendo sustituido
por las Herramientas para Aplicaciones de Microsoft Visual Studio (VSTA: Visual Studio Tools for
Applications) y las Herramientas para Office de Microsoft Visual Studio (VSTO: Visual Studio Tools for
Office). Estas herramientas funcionan bajo la plataforma .NET.

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.

• HERRAMIENTAS PARA OFFICE DE MICROSOFT VISUAL STUDIO


El VSTO no es VBA, es una plataforma integrada para el desarrollo de aplicaciones dentro del entorno
Office con dos lenguajes el Basic y C, la diferencia con la plataforma Net es que en vez de aparecer un
Windows Form en VSTO aparece una hoja de Excel o un documento de Word para implementarle código
personalizado. Microsoft en su página oficial habla sobre el tema de VSTO de la siguiente manera:

“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

• CONVENCIONES DEL LIBRO


Con la idea de sacar el máximo provecho y lograr una mejor comunicación entre el lector y el libro, es
que se explicarán algunas convenciones usadas en este material.

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

En la Fig. 1.11 se muestra la barra de


herramientas de la versión Office 2003, podía
resultar un poco incómodo para el trabajo en
Excel pero uno se acostumbra a los cambios,
como sucedió con la versión 2007 y 2010.
Fig. 1-11

En la Fig. 1.12 se muestra la versión mejorada de la barra; en este


material se llamarán Fichas o Pestañas. Una de las particularidades de
las fichas es que presionando la tecla ALT le aparecen los métodos
abreviados para acceder a un elemento determinado.

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:

¿QUÉ ES UN LENGUAJE DE PROGRAMACIÓN DE ALTO NIVEL?


Un lenguaje de programación de alto nivel se caracteriza por expresar un algoritmo de una
manera más cercana a la capacidad cognitiva humana, es decir, a un lenguaje simple pero
en nuestro quehacer lo encontraremos en inglés que no es tan complicado, en lugar de la
capacidad ejecutora de las máquinas.

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

• LISTADO DE COMANDOS DE EXCEL EN INGLÉS Y ESPAÑOL


A continuación se mostrará una lista de comandos de Excel expresados en español e inglés, que le servirá
como base para su futuro código, ya que siempre tendrá la necesidad de usar una función en Excel en el
código VBA, todas las funciones de Excel tienen un equivalente en VBA sólo tiene que respetar el formato
de cada función.

GRUPO ENGLISH ESPAÑOL


Math ABS ABS
Financial ACCRINT INT.ACUM
Financial ACCRINTM INT.ACUM.V
Math ACOS ACOS
Math ACOSH ACOSH
Lookup ADDRESS DIRECCION
Financial AMORDEGRC AMORTIZ.PROGRE
Financial AMORLINC AMORTIZ.LIN
Logical AND Y
Lookup AREAS AREAS
Text ASC ASC
Math ASIN ASENO
Math ASINH ASENOH
Math ATAN ATAN
Math ATAN2 ATAN2
Math ATANH ATANH
Statistical AVEDEV DESVPROM
Statistical AVERAGE PROMEDIO
Statistical AVERAGEA fnNA:AVERAGEA
Text BAHTTEXT fnNA:BAHTTEXT
Engineering BESSELI BESSELI
Engineering BESSELJ BESSELJ
Engineering BESSELK BESSELK
Engineering BESSELY BESSELY
Statistical BETADIST DISTR.BETA
Statistical BETAINV DISTR.BETA.INV
Engineering BIN2DEC BIN.A.DEC
Engineering BIN2HEX BIN.A.HEX
Engineering BIN2OCT BIN.A.OCT
Statistical BINOMDIST DISTR.BINOM
Math CEILING MULTIPLO.SUPERIOR
Information CELL CELDA
Text CHAR CARACTER
Statistical CHIDIST DISTR.CHI
Statistical CHIINV PRUEBA.CHI.INV
Statistical CHITEST PRUEBA.CHI
Lookup CHOOSE ELEGIR
28 CAP. 1 INTRODUCCIÓN

Text CLEAN LIMPIAR


Text CODE CODIGO
Lookup COLUMN COLUMNA
Lookup COLUMNS COLUMNAS
Math COMBIN COMBINAT
Engineering COMPLEX COMPLEJO
Text CONCATENATE CONCATENAR
Statistical CONFIDENCE INTERVALO.CONFIANZA
Engineering CONVERT CONVERTIR
Statistical CORREL COEF.DE.CORREL
Math COS COS
Math COSH COSH
Statistical COUNT CONTAR
Statistical COUNTA CONTARA
Information COUNTBLANK CONTAR.BLANCO
Math COUNTIF CONTAR.SI
Financial COUPDAYBS CUPON.DIAS.L1
Financial COUPDAYS CUPON.DIAS
Financial COUPDAYSNC CUPON.DIAS.L2
Financial COUPNCD CUPON.FECHA.L2
Financial COUPNUM CUPON.NUM
Financial COUPPCD CUPON.FECHA.L1
Statistical COVAR COVAR
Statistical CRITBINOM BINOM.CRIT
Financial CUMIPMT PAGO.INT.ENTRE
Financial CUMPRINC PAGO.PRINC.ENTRE
Date DATE FECHA
Undocumented DATEDIF SIFECHA
Undocumented DATESTRING CADENA.FECHA
Date DATEVALUE FECHANUMERO
Database DAVERAGE BDPROMEDIO
Date DAY DIA
Date DAYS360 DIAS360
Financial DB DB
Text-DoubleByte DBCS DBCS
Database DCOUNT BDCONTAR
Database DCOUNTA BDCONTARA
Financial DDB DDB
Engineering DEC2BIN DEC.A.BIN
Engineering DEC2HEX DEC.A.HEX
Engineering DEC2OCT DEC.A.OCT
Math DEGREES GRADOS
Engineering DELTA DELTA
Statistical DEVSQ DESVIA2
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 29

Database DGET BDEXTRAER


Financial DISC TASA.DESC
Database DMAX BDMAX
Database DMIN BDMIN
Text DOLLAR MONEDA
Financial DOLLARDE MONEDA.DEC
Financial DOLLARFR MONEDA.FRAC
Database DPRODUCT BDPRODUCTO
Database DSTDEV BDDESVEST
Database DSTDEVP BDDESVESTP
Database DSUM BDSUMA
Financial DURATION DURACION
Database DVAR BDVAR
Database DVARP BDVARP
Date EDATE FECHA.MES
Financial EFFECT INT.EFECTIVO
Date EOMONTH FIN.MES
Engineering ERF FUN.ERROR
Engineering ERFC FUN.ERROR.COMPL
Information ERROR.TYPE TIPO.DE.ERROR
External EUROCONVERT EUROCONVERT
Math EVEN REDONDEA.PAR
Text EXACT IGUAL
Math EXP EXP
Statistical EXPONDIST DISTR.EXP
Math FACT FACT
Math FACTDOUBLE FACT.DOBLE
Logical FALSE FALSO
Statistical FDIST DISTR.F
Text FIND ENCONTRAR
Text DoubleByte FINDB ENCONTRARB
Statistical FINV DISTR.F.INV
Statistical FISHER FISHER
Statistical FISHERINV PRUEBA.FISHER.INV
Text FIXED DECIMAL
Math FLOOR MULTIPLO.INFERIOR
Statistical FORECAST PRONOSTICO
Statistical FREQUENCY FRECUENCIA
Statistical FTEST PRUEBA.F
Financial FV VF
Financial FVSCHEDULE VF.PLAN
Statistical GAMMADIST DISTR.GAMMA
Statistical GAMMAINV DISTR.GAMMA.INV
30 CAP. 1 INTRODUCCIÓN

Statistical GAMMALN GAMMA.LN


Math GCD M.C.D
Statistical GEOMEAN MEDIA.GEOM
Engineering GESTEP MAYOR.O.IGUAL
Database GETPIVOTDATA fnNA:GETPIVOTDATA
Statistical GROWTH CRECIMIENTO
Statistical HARMEAN MEDIA.ARMO
Engineering HEX2BIN HEX.A.BIN
Engineering HEX2DEC HEX.A.DEC
Engineering HEX2OCT HEX.A.OCT
Lookup HLOOKUP BUSCARH
Date HOUR HORA
Lookup HYPERLINK fnNA:HYPERLINK
Statistical HYPGEOMDIST DISTR.HIPERGEOM
Logical IF SI
Engineering IMABS IM.ABS
Engineering IMAGINARY IMAGINARIO
Engineering IMARGUMENT IM.ANGULO
Engineering IMCONJUGATE IM.CONJUGADA
Engineering IMCOS IM.COS
Engineering IMDIV IM.DIV
Engineering IMEXP IM.EXP
Engineering IMLN IM.LN
Engineering IMLOG10 IM.LOG10
Engineering IMLOG2 IM.LOG2
Engineering IMPOWER IM.POT
Engineering IMPRODUCT IM.PRODUCT
Engineering IMREAL IM.REAL
Engineering IMSIN IM.SENO
Engineering IMSQRT IM.RAIZ2
Engineering IMSUB IM.SUSTR
Engineering IMSUM IM.SUM
Lookup INDEX INDICE
Lookup INDIRECT INDIRECTO
Information INFO INFO
Math INT ENTERO
Statistical INTERCEPT INTERSECCION
Financial INTRATE TASA.INT
Financial IPMT PAGOINT
Financial IRR TIR
Information ISBLANK ESBLANCO
Information ISERR ESERR
Information ISERROR ESERROR
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 31

Information ISEVEN ES.PAR


Information ISLOGICAL ESLOGICO
Information ISNA ESNOD
Information ISNONTEXT ESNOTEXTO
Information ISNUMBER ESNUMERO
Information ISODD ES.IMPAR
Financial ISPMT INT.PAGO.DIR
Information ISREF ESREF
Information ISTEXT ESTEXTO
Text DoubleByte JIS fnNA:JIS
Statistical KURT CURTOSIS
Statistical LARGE K.ESIMO.MAYOR
Math LCM M.C.M
Text LEFT IZQUIERDA
Text DoubleByte LEFTB IZQUIERDAB
Text LEN LARGO
Text DoubleByte LENB LARGOB
Statistical LINEST ESTIMACION.LINEAL
Math LN LN
Math LOG LOG
Math LOG10 LOG10
Statistical LOGEST ESTIMACION.
LOGARITMICA
Statistical LOGINV DISTR.LOG.INV
Statistical LOGNORMDIST DISTR.LOG.NORM
Lookup LOOKUP BUSCAR
Text LOWER MINUSC
Lookup MATCH COINCIDIR
Statistical MAX MAX
Statistical MAXA fnNA:MAXA
Math MDETERM MDETERM
Financial MDURATION DURACION.MODIF
Statistical MEDIAN MEDIANA
Text MID EXTRAE
Text DoubleByte MIDB EXTRAE
Statistical MIN MIN
Statistical MINA fnNA:MINA
Date MINUTE MINUTO
Math MINVERSE MINVERSA
Financial MIRR TIRM
Math MMULT MMULT
Math MOD RESIDUO
Statistical MODE MODA
32 CAP. 1 INTRODUCCIÓN

Date MONTH MES


Math MROUND REDOND.MULT
Math MULTINOMIAL MULTINOMIAL
Information N N
Information NA NOD
Statistical NEGBINOMDIST NEGBINOMDIST
Date NETWORKDAYS DIAS.LAB
Financial NOMINAL TASA.NOMINAL
Statistical NORMDIST DISTR.NORM
Statistical NORMINV DISTR.NORM.INV
Statistical NORMSDIST DISTR.NORM.ESTAND
Statistical NORMSINV DISTR.NORM.ESTAND.INV
Logical NOT NO
Date NOW AHORA
Financial NPER NPER
Financial NPV VNA
Undocumented NUMBERSTRING CADENA.NUMERO
Engineering OCT2BIN OCT.A.BIN
Engineering OCT2DEC OCT.A.DEC
Engineering OCT2HEX OCT.A.HEX
Math ODD REDONDEA.IMPAR
Financial ODDFPRICE PRECIO.PER.IRREGULAR.1
Financial ODDFYIELD RENDTO.PER.IRREGULAR.1
Financial ODDLPRICE PRECIO.PER.IRREGULAR.2
Financial ODDLYIELD RENDTO.PER.IRREGULAR.2
Lookup OFFSET DESREF
Logical OR O
Statistical PEARSON PEARSON
Statistical PERCENTILE PERCENTIL
Statistical PERCENTRANK RANGO.PERCENTIL
Statistical PERMUT PERMUTACIONES
Text PHONETIC fnNA:PHONETIC
Math PI PI
Financial PMT PAGO
Statistical POISSON POISSON
Math POWER POTENCIA
Financial PPMT PAGOPRIN
Financial PRICE PRECIO
Financial PRICEDISC PRECIO.DESCUENTO
Financial PRICEMAT PRECIO.VENCIMIENTO
Statistical PROB PROBABILIDAD
Math PRODUCT PRODUCTO
Text PROPER NOMPROPIO
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 33

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

Math SUBTOTAL SUBTOTALES


Math SUM SUMA
Math SUMIF SUMAR.SI
Math SUMPRODUCT SUMAPRODUCTO
Math SUMSQ SUMA.CUADRADOS
Math SUMX2MY2 SUMAX2MENOSY2
Math SUMX2PY2 SUMAX2MASY2
Math SUMXMY2 SUMAXMENOSY2
Financial SYD SYD
Text T T
Math TAN TAN
Math TANH TANH
Financial TBILLEQ LETRA.DE.TES.EQV.A.BONO
Financial TBILLPRICE LETRA.DE.TES.PRECIO
Financial TBILLYIELD LETRA.DE.TES.RENDTO
Statistical TDIST DISTR.T
Text TEXT TEXTO
Date TIME NSHORA
Date TIMEVALUE HORANUMERO
Statistical TINV DISTR.T.INV
Date TODAY HOY
Lookup TRANSPOSE TRANSPONER
Statistical TREND TENDENCIA
Text TRIM ESPACIOS
Statistical TRIMMEAN MEDIA.ACOTADA
Logical TRUE VERDADERO
Math TRUNC TRUNCAR
Statistical TTEST PRUEBA.T
Information TYPE TIPO
Text UPPER MAYUSC
Undocumented USDOLLAR USDOLLAR
Text VALUE VALOR
Statistical VAR VAR
Statistical VARA fnNA:VARA
Statistical VARP VARP
Statistical VARPA fnNA:VARPA
Financial VDB DVS
Lookup VLOOKUP BUSCARV
Date WEEKDAY DIASEM
Date WEEKNUM NUM.DE.SEMANA
Statistical WEIBULL DIST.WEIBULL
Date WORKDAY DIA.LAB
Financial XIRR TIR.NO.PER
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 35

Financial XNPV VNA.NO.PER


Date YEAR AÑO
Date YEARFRAC FRAC.AÑO
Financial YIELD RENDTO
Financial YIELDDISC RENDTO.DESC
Financial YIELDMAT RENDTO.VENCTO
Statistical ZTEST PRUEBA.Z
Command A1.R1C1 A1.L1C1
Command ABSREF REFABS
Command ACTIVATE ACTIVAR
Command ACTIVATE.NEXT ACTIVAR.SIGUIENTE
Command ACTIVATE.PREV ACTIVAR.ANTERIOR
Command ACTIVE.CELL CELDA.ACTIVA
Command ACTIVE.CELL.FONT FUENTE.CELDA.ACTIVA
Command ADD.ARROW AGREGAR.FLECHA
Command ADD.BAR AGREGAR.BARRA
Command ADD.CHART.AUTOFORMAT AGREGAR.AUTOFMTO.
GRAF
Command ADD.COMMAND AGREGAR.COMANDO
Command ADD.LIST.ITEM AGREGAR.A.LISTA
Command ADD.MENU AGREGAR.MENU
Command ADD.OVERLAY AGREGAR.GRAFICO.
SUPERPUESTO
Command ADD.TOOL AGREGAR.HERRAMIENTA
Command ADD.TOOLBAR AGREGAR.BARRA.
HERRAMIENTAS
Command ADDIN.MANAGER ADMIN.MACROS.
AUTOMATICAS
Command ALERT ALERTA
Command ALIGNMENT ALINEACION
Command ANOVA1 AN.VAR1
Command ANOVA1? AN.VAR1?
Command ANOVA2 AN.VAR2
Command ANOVA2? AN.VAR2?
Command ANOVA3 AN.VAR3
Command ANOVA3? AN.VAR3?
Command APP.ACTIVATE APL.ACTIVAR
Command APP.ACTIVATE.MICROSOFT APL.ACTIVAR.MICROSOFT
Command APP.MAXIMIZE APL.MAXIMIZAR
Command APP.MINIMIZE APL.MINIMIZAR
Command APP.MOVE APL.MOVER
Command APP.RESTORE APL.RESTABLECER
Command APP.SIZE APL.TAMAÑO
Command APP.TITLE APL.TITULO
36 CAP. 1 INTRODUCCIÓN

Command APPLY.NAMES APLICAR.NOMBRES


Command APPLY.STYLE APLICAR.MODELO
Command ARGUMENT ARGUMENTO
Command ARRANGE.ALL ORGANIZAR.TODO
Command ASSIGN.TO.OBJECT ASIGNAR.A.OBJETO
Command ASSIGN.TO.TOOL ASIGNAR.A.HERRAMIENTA
Command ATTACH.TEXT ADHERIR.TEXTO
Command ATTACH.TOOLBARS ADJUNTAR.BARRA.
HERRAMIENTAS
Command ATTRIBUTES ATRIBUTOS
Command AUTO.OUTLINE CREAR.ESQUEMA
Command AUTOCORRECT AUTOCORRECCIÓN
Command AXES EJES
Command BEEP BIP
Command BORDER BORDES
Command BREAK INTERRUMPIR
Command BRING.TO.FRONT HACIA.ADELANTE
Command CALCULATE.DOCUMENT CALCULAR.DOCUMENTO
Command CALCULATE.NOW CALCULAR.AHORA
Command CALCULATION CALCULAR
Command CALL LLAMAR
Command CALLER LLAMADOR
Command CANCEL.COPY CANCELAR.COPIAR
Command CANCEL.KEY CANCELAR.TECLA
Command CELL.PROTECTION PROTEGER.CELDA
Command CHANGE.LINK CAMBIAR.VINCULO
Command CHART.ADD.DATA GRAFICO.AGREGAR.DATOS
Command CHART.TREND GRAFICO.TENDENCIA
Command CHART.WIZARD ASISTENTE.PARA.GRAFICOS
Command CHECK.COMMAND MARCAR.COMANDO
Command CHECKBOX.PROPERTIES FORMATO.OBJETO.
CASILLA.DE.VERIFICACION
Command CLEAR BORRAR
Command CLEAR.OUTLINE BORRAR.ESQUEMA
Command CLEAR.PRINT.AREA BORRAR.AREA.
DE.IMPRESION
Command CLEAR.ROUTING.SLIP ANULAR.DISTRIBUIR
Command CLOSE CERRAR
Command CLOSE.ALL CERRAR.TODO
Command COLOR.PALETTE PALETA.COLORES
Command COLUMN.WIDTH ANCHO.COLUMNA
Command COMBINATION COMBINADO
Command CONSOLIDATE CONSOLIDAR
Command CONSTRAIN.NUMERIC RESTRICCION.NUMERICA
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 37

Command COPY COPIAR


Command COPY.CHART COPIAR.GRAFICO
Command COPY.PICTURE COPIAR.IMAGEN
Command COPY.TOOL COPIAR.HERRAMIENTA
Command CREATE.NAMES CREAR.NOMBRES
Command CREATE.OBJECT CREAR.OBJETO
Command CREATE.PUBLISHER CREATE.PUBLISHER
Command CUSTOM.REPEAT PERSONALIZAR.REPETIR
Command CUSTOM.UNDO PERSONALIZAR.DESHACER
Command CUSTOMIZE.TOOLBAR PERSONALIZAR.BARRA
Command CUT CORTAR
Command DATA.DELETE DATOS.ELIMINAR
Command DATA.FIND DATOS.BUSCAR
Command DATA.FIND.NEXT DATOS.BUSCAR.SIGUIENTE
Command DATA.FIND.PREV DATOS.BUSCAR.ANTERIOR
Command DATA.FORM FICHA
Command DATA.LABEL ROTULOS.DATOS
Command DATA.SERIES DATOS.SERIES
Command DEFINE.NAME DEFINIR.NOMBRE
Command DEFINE.STYLE DEFINIR.MODELO
Command DELETE.ARROW ELIMINAR.FLECHA
Command DELETE.BAR ELIMINAR.BARRA
Command DELETE.CHART. ELIMINAR.AUTOFMTO.
AUTOFORMAT GRAF
Command DELETE.COMMAND ELIMINAR.COMANDO
Command DELETE.FORMAT ELIMINAR.FORMATO
Command DELETE.MENU ELIMINAR.MENU
Command DELETE.NAME ELIMINAR.NOMBRE
Command DELETE.OVERLAY ELIMINAR.GRAFICO.
SUPERPUESTO
Command DELETE.STYLE ELIMINAR.MODELO
Command DELETE.TOOL ELIMINAR.HERRAMIENTA
Command DELETE.TOOLBAR ELIMINAR.BARRA.
HERRAMIENTAS
Command DEMOTE DISMINUIR.NIVEL
Command DEREF VALREF
Command DESCR DESCRIPTIVA
Command DESCR? DESCRIPTIVA?
Command DIALOG.BOX CUADRO.DE.DIALOGO
Command DIRECTORY DIRECTORIO
Command DISABLE.INPUT INHABILITAR.ENTRADA
Command DISPLAY PRESENTAR
Command DOCUMENTS DOCUMENTOS
Command DUPLICATE DUPLICAR
38 CAP. 1 INTRODUCCIÓN

Command ECHO ECO


Command EDIT.COLOR EDICION.COLOR
Command EDIT.DELETE EDICION.ELIMINAR
Command EDIT.OBJECT EDITAR.OBJETO
Command EDIT.REPEAT EDICION.REPETIR
Command EDIT.SERIES EDICION.SERIES
Command EDIT.TOOL EDICION.HERRAMIENTA
Command EDITBOX.PROPERTIES FORMATO.OBJETO.
CUADRO.EDICION
Command EDITION.OPTIONS EDICION.OPCIONES
Command ELSE SI.NO
Command ELSE.IF SI.NO.SI
Command ENABLE.COMMAND HABILITAR.COMANDO
Command ENABLE.OBJECT HABILITAR.OBJETO
Command ENABLE.TIPWIZARD HABILITAR.ASISTENTE.
IDEAS
Command ENABLE.TOOL HABILITAR.HERRAMIENTA
Command END.IF FIN.SI
Command ENTER.DATA INTRODUCIR.DATOS
Command ERROR ERROR
Command ERRORBAR.X BARRA.ERROR.X
Command ERRORBAR.Y BARRA.ERROR.Y
Command EVALUATE EVALUAR
Command EXEC EJEC
Command EXECUTE EJECUTA
Command EXPON SUAVIZ.EXPON
Command EXPON? SUAVIZ.EXPON?
Command EXTEND.POLYGON EXTENDER.POLIGONO
Command EXTRACT EXTRAER
Command FCLOSE CERRARA
Command FILE.CLOSE ARCHIVO.CERRAR
Command FILE.DELETE ARCHIVO.ELIMINAR
Command FILES ARCHIVOS
Command FILL.AUTO AUTO.LLENAR
Command FILL.DOWN LLENAR.HACIA.ABAJO
Command FILL.GROUP LLENAR.GRUPO
Command FILL.LEFT LLENAR.HACIA.
LA.IZQUIERDA
Command FILL.RIGHT LLENAR.HACIA.
LA.DERECHA
Command FILL.UP LLENAR.HACIA.ARRIBA
Command FILL.WORKGROUP LLENAR.GRUPO.
DE.TRABAJO
Command FILTER FILTROS
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 39

Command FILTER.ADVANCED FILTRO.AVANZADO


Command FILTER.SHOW.ALL FILTROS.MOSTRAR.TODO
Command FIND.FILE BUSCAR.ARCHIVO
Command FONT FUENTES
Command FONT.PROPERTIES PROPIEDADES.FUENTE
Command FOPEN ABRIRA
Command FOR PARA
Command FOR.CELL PARA.CELDA
Command FORMAT.AUTO AUTOFORMATO
Command FORMAT.CHART FORMATO.GRAFICO
Command FORMAT.CHARTTYPE FORMATO.TIPO.GRAFICO
Command FORMAT.FONT FORMATO.FUENTES
Command FORMAT.LEGEND FORMATO.LEYENDA
Command FORMAT.MAIN FORMATO.PRINCIPAL
Command FORMAT.MOVE FORMATO.MOVER
Command FORMAT.NUMBER FORMATO.NUMERO
Command FORMAT.OVERLAY FORMATO.SUPERPUESTO
Command FORMAT.SHAPE FORMATO.FIGURA
Command FORMAT.SIZE FORMATO.TAMAÑO
Command FORMAT.TEXT FORMATO.TEXTO
Command FORMULA FORMULA
Command FORMULA.ARRAY FORMULA.MATRICIAL
Command FORMULA.CONVERT FORMULA.CONVERTIR
Command FORMULA.FILL FORMULA.LLENAR
Command FORMULA.FIND FORMULA.BUSCAR
Command FORMULA.FIND.NEXT FORMULA.BUSCAR.
SIGUIENTE
Command FORMULA.FIND.PREV FORMULA.BUSCAR.
ANTERIOR
Command FORMULA.GOTO FORMULA.IR.A
Command FORMULA.REPLACE FORMULA.REEMPLAZAR
Command FOURIER FOURIER
Command FOURIER? FOURIER?
Command FPOS POSICIONA
Command FREAD LEERA
Command FREADLN LEERALN
Command FREEZE.PANES INMOVILIZAR.SECCIONES
Command FSIZE TAMAÑOA
Command FTESTV PRUEBA.F.VAR
Command FTESTV? PRUEBA.F.VAR?
Command FULL PANTALLA.COMPLETA
Command FULL.SCREEN VISTA.PANTALLA.
COMPLETA
40 CAP. 1 INTRODUCCIÓN

Command FUNCTION.WIZARD ASISTENTE.PARA.


FUNCIONES
Command FWRITE ESCRIBIRA
Command FWRITELN ESCRIBIRALN
Command GALLERY.3D.AREA GALERIA.AREAS.3D
Command GALLERY.3D.BAR GALERIA.BARRAS.3D
Command GALLERY.3D.COLUMN GALERIA.COLUMNAS.3D
Command GALLERY.3D.LINE GALERIA.LINEAS.3D
Command GALLERY.3D.PIE GALERIA.CIRCULAR.3D
Command GALLERY.3D.SURFACE GALERIA.SUPERFICIE.3D
Command GALLERY.AREA GALERIA.AREAS
Command GALLERY.BAR GALERIA.BARRAS
Command GALLERY.COLUMN GALERIA.COLUMNAS
Command GALLERY.CUSTOM GALERIA.PERZONALIZADA
Command GALLERY.DOUGHNUT GALERIA.ANILLOS
Command GALLERY.LINE GALERIA.LINEAS
Command GALLERY.PIE GALERIA.CIRCULAR
Command GALLERY.RADAR GALERIA.RADAR
Command GALLERY.SCATTER GALERIA.DISPERSION
Command GET.BAR INDICAR.BARRA
Command GET.CELL INDICAR.CELDA
Command GET.CHART.ITEM INDICAR.ELEMENTO.
GRAFICO
Command GET.DEF INDICAR.DEF
Command GET.DOCUMENT INDICAR.DOCUMENTO
Command GET.FORMULA INDICAR.FORMULA
Command GET.LINK.INFO INDICAR.INFO.VINCULO
Command GET.MOVIE GET.MOVIE
Command GET.NAME INDICAR.NOMBRE
Command GET.NOTE INDICAR.NOTAS
Command GET.OBJECT INDICAR.OBJETO
Command GET.PIVOT.FIELD INDICAR.CAMPO.TABLA.DI
Command GET.PIVOT.ITEM INDICAR.ELEMENTO.TABLA.
DI
Command GET.PIVOT.TABLE INDICAR.TABLA.DINAMICA
Command GET.TOOL INDICAR.HERRAMIENTA
Command GET.TOOLBAR INDICAR.BARRA.
HERRAMIENTAS
Command GET.WINDOW INDICAR.VENTANA
Command GET.WORKBOOK INDICAR.LIBRO
Command GET.WORKSPACE INDICAR.AREA.DE.TRABAJO
Command GOAL.SEEK BUSCAR.OBJETIVO
Command GOTO IR.A
Command GRIDLINES LINEAS.DE.DIVISION
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 41

Command GROUP AGRUPAR


Command HALT DETENER
Command HELP AYUDA
Command HIDE OCULTAR
Command HIDE.DIALOG OCULTAR.DIALOGO
Command HIDE.OBJECT OCULTAR.OBJETO
Command HISTOGRAM HISTOGRAMA
Command HISTOGRAM? HISTOGRAMA?
Command HLINE LINEAH
Command HPAGE PAGINAH
Command HSCROLL DESPLAZARH
Command INITIATE INICIAR
Command INPUT INTRODUCIR
Command INSERT INSERTAR
Command INSERT.MAP.OBJECT INSERTAR.MAPA.OBJETO
Command INSERT.OBJECT INSERTAR.OBJETO
Command INSERT.PICTURE INSERTAR.IMAGEN
Command INSERT.TITLE INSERTAR.TITULO
Command JUSTIFY JUSTIFICAR
Command LABEL.PROPERTIES FORMATO.OBJ.ROTULO
Command LAST.ERROR ULTIMO.ERROR
Command LEGEND LEYENDA
Command LINE.PRINT IMPRIMIR.EN.LINEA
Command LINK.COMBO VINCULAR.COMBINADO
Command LINK.FORMAT VINCULAR.FORMATO
Command LINKS VINCULOS
Command LIST.NAMES LISTAR.NOMBRES
Command LISTBOX.PROPERTIES FORMATO.OBJ.CUADRO.
LISTA
Command MACRO.OPTIONS OPCIONES.MACRO
Command MAIL.ADD.MAILER CORREO.AGREGAR.
FORMULARIO
Command MAIL.DELETE.MAILER CORREO.ELIMINAR.
FORMULARIO
Command MAIL.EDIT.MAILER CORREO.EDICION.
FORMULARIO
Command MAIL.FORWARD REENVIAR.CORREO
Command MAIL.LOGOFF CERRAR.CORREO
Command MAIL.LOGON INICIAR.CORREO
Command MAIL.NEXT.LETTER CORREO.SIGUIENTE.
MENSAJE
Command MAIL.REPLY CORREO.RESPONDER
Command MAIL.REPLY.ALL CORREO.
REPONDER.A.TODOS
42 CAP. 1 INTRODUCCIÓN

Command MAIL.SEND.MAILER ENVIAR.FORMULARIO


Command MAIN.CHART GRAFICO.PRINCIPAL
Command MAIN.CHART.TYPE GRAFICO.PRINCIPAL.TIPO
Command MCORREL MCORREL
Command MCORREL? MCORREL?
Command MCOVAR MCOVAR
Command MCOVAR? MCOVAR?
Command MENU.EDITOR MENU.EDITOR
Command MERGE.STYLES COMBINAR.MODELOS
Command MESSAGE MENSAJE
Command MOVE MOVER
Command MOVE.TOOL MOVER.HERRAMIENTA
Command MOVEAVG MEDIA.MOV
Command MOVEAVG? MEDIA.MOV?
Command MOVIE.COMMAND MOVIE.COMMAND
Command NAMES NOMBRES
Command NEW NUEVO
Command NEW.WINDOW NUEVA.VENTANA
Command NEXT SALIR.BUCLE
Command NOTE NOTA
Command OBJECT.PROPERTIES PROPIEDADES.OBJETO
Command OBJECT.PROTECTION PROTEGER.OBJETO
Command ON.DATA LLAMAR.POR.DATOS
Command ON.DOUBLECLICK LLAMAR.POR.DOBLE.CLIC
Command ON.ENTRY LLAMAR.POR.ENTRADA
Command ON.KEY LLAMAR.POR.TECLA
Command ON.RECALC LLAMAR.POR.RECALCULO
Command ON.SHEET LLAMAR.POR.HOJA
Command ON.TIME LLAMAR.POR.HORA
Command ON.WINDOW LLAMAR.POR.VENTANA
Command OPEN ABRIR
Command OPEN.DIALOG ABRIR.ARCHIVO
Command OPEN.LINKS ABRIR.VINCULOS
Command OPEN.MAIL OPEN.MAIL
Command OPEN.TEXT ABRIR.ARCHIVO.TEXTO
Command OPTIONS.CALCULATION OPCIONES.CALCULAR
Command OPTIONS.CHART OPCIONES.GRAFICO
Command OPTIONS.EDIT OPCIONES.EDICION
Command OPTIONS.GENERAL OPCIONES.GENERAL
Command OPTIONS.LISTS.ADD AGREGAR.LISTA.PERS
Command OPTIONS.LISTS.DELETE ELIMINAR.LISTAS
Command OPTIONS.LISTS.GET OPCIONES.INDICAR.LISTAS
Command OPTIONS.TRANSITION OPCIONES.TRANSICION
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 43

Command OPTIONS.VIEW OPCIONES.VER


Command OUTLINE ESQUEMA
Command OVERLAY SUPERPUESTO
Command OVERLAY.CHART.TYPE TIPO.GRAFICO.
SUPERPUESTO
Command PAGE.SETUP AJUSTAR.PAGINA
Command PARSE REDISTRIBUIR
Command PASTE PEGAR
Command PASTE.LINK PEGAR.VINCULOS
Command PASTE.PICTURE PEGAR.IMAGEN
Command PASTE.PICTURE.LINK PEGAR.VINCULOS.IMAGEN
Command PASTE.SPECIAL PEGADO.ESPECIAL
Command PASTE.TOOL PEGAR.HERRAMIENTA
Command PATTERNS DISEÑO
Command PAUSE PAUSA
Command PICKLIST LISTA.ELECCIÓN
Command PIVOT.ADD.DATA TABLA.DI.ADICIONAR.
DATOS
Command PIVOT.ADD.FIELDS TABLA.DI.AGREGAR.
CAMPO
Command PIVOT.FIELD TABLA.DI.CAMPO
Command PIVOT.FIELD.GROUP AGRUPAR.CAMPOS.
DINAMICOS
Command PIVOT.FIELD.PROPERTIES TABLA.DI.PROPIEDADES.
CAMPO
Command PIVOT.FIELD.UNGROUP DESAGRUPAR.CAMPOS.
DINAMICOS
Command PIVOT.ITEM TABLA.DI.ELEMENTO
Command PIVOT.ITEM.PROPERTIES TABLA.DI.PROPIEDADES.
ELEMENTO
Command PIVOT.REFRESH TABLA.DI.RENOVAR
Command PIVOT.SHOW.PAGES TABLA.DI.MOSTRAR.
PAGINAS
Command PIVOT.TABLE.WIZARD ASISTENTE.TABLAS.
DINAMICAS
Command PLACEMENT COLOCAR
Command POKE TRANSFERIR
Command POST.DOCUMENT EXPEDIR.DOCUMENTO
Command PRECISION PRECISION
Command PREFERRED PREFERIDO
Command PRESS.TOOL PRESIONAR.HERRAMIENTA
Command PRINT IMPRIMIR
Command PRINT.PREVIEW PRESENTACION.
PRELIMINAR
Command PRINTER.SETUP ESPECIFICAR.IMPRESORA
44 CAP. 1 INTRODUCCIÓN

Command PROMOTE AUMENTAR.NIVEL


Command PROTECT.DOCUMENT PROTEGER.DOCUMENTO
Command PTTESTM PRUEBA.T.EMPAREJADAS
Command PTTESTM? PRUEBA.T.EMPAREJADAS?
Command PTTESTV PRUEBA.T.DIF.VAR
Command PTTESTV? PRUEBA.T.DIF.VAR?
Command PUSHBUTTON.PROPERTIES FORMATO.OBJ.BOTON
Command QUIT SALIR
Command RANDOM ALEATORIO2
Command RANDOM? ALEATORIO2?
Command RANKPERC JERARQUIA.PERCENTIL
Command RANKPERC? JERARQUIA.PERCENTIL?
Command REFTEXT REFTEXTO
Command REGISTER REGISTRAR
Command REGISTER.ID ID.REGISTRO
Command REGRESS REGRESION
Command REGRESS? REGRESION?
Command RELREF REFREL
Command REMOVE.LIST.ITEM ELIMINAR.ELEMENTO.LISTA
Command REMOVE.PAGE.BREAK ANULAR.SALTO.DE.PAGINA
Command RENAME.COMMAND CAMBIAR.NOMBRE.
COMANDO
Command RENAME.OBJECT CAMBIAR.NOMBRE.OBJETO
Command REPLACE.FONT REEMPLAZAR.TIPO
Command REQUEST SOLICITAR
Command RESET.TOOL RESTABLECER.
HERRAMIENTA
Command RESET.TOOLBAR RESTABLECER.BARRA
Command RESTART REINICIAR
Command RESULT RESULTADO
Command RESUME REANUDAR
Command RETURN VOLVER
Command ROUTE.DOCUMENT RUTA.DOCUMENTO
Command ROUTING.SLIP LISTA.DE.DISTRIBUCION
Command ROW.HEIGHT ALTO.FILA
Command RUN EJECUTAR
Command SAMPLE MUESTRA
Command SAMPLE? MUESTRA?
Command SAVE GUARDAR
Command SAVE.AS GUARDAR.COMO
Command SAVE.COPY.AS GUARDAR.COPIA.COMO
Command SAVE.DIALOG GUARDAR.ARCHIVO
Command SAVE.NEW.OBJECT GUARDAR.NUEVO.OBJETO
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 45

Command SAVE.TOOLBAR GUARDAR.BARRA.


HERRAMIENTAS
Command SAVE.WORKBOOK GUARDAR.LIBRO
Command SAVE.WORKSPACE GUARDAR.AREA.
DE.TRABAJO
Command SCALE ESCALA
Command SCENARIO.ADD AGREGAR.ESCENARIO
Command SCENARIO.CELLS ESCENARIO.CELDAS
Command SCENARIO.DELETE ESCENARIO.ELIMINAR
Command SCENARIO.EDIT ESCENARIO.EDITAR
Command SCENARIO.GET ESCENARIO.INDICAR
Command SCENARIO.MERGE ESCENARIO.COMBINAR
Command SCENARIO.SHOW ESCENARIO.MOSTRAR
Command SCENARIO.SHOW.NEXT ESCENARIO.MOSTRAR.
PROXIMO
Command SCENARIO.SUMMARY ESCENARIO.RESUMEN
Command SCROLLBAR.PROPERTIES FORMATO.OBJ.BARRA.
DESPLAZ
Command SELECT SELECCIONAR
Command SELECT.ALL SELECCIONAR.TODO
Command SELECT.CHART SELECCIONAR.GRAFICO
Command SELECT.END SELECCIONAR.FIN
Command SELECT.LAST.CELL SELECCIONAR.ULTIMA.
CELDA
Command SELECT.LIST.ITEM SELECCIONAR.ELEMENTO.
LISTA
Command SELECT.PLOT.AREA SELECCIONAR.AREA.
DE.TRAZADO
Command SELECT.SPECIAL SELECCION.ESPECIAL
Command SELECTION SELECCION
Command SEND.KEYS ENVIAR.TECLAS
Command SEND.MAIL ENVIAR.DOCUMENTO.POR.
MAIL
Command SEND.TO.BACK HACIA.ATRAS
Command SERIES SERIES
Command SERIES.AXES EJES.SERIES
Command SERIES.ORDER ORDEN.SERIES
Command SERIES.X SERIES.X
Command SERIES.Y SERIES.Y
Command SET.CONTROL.VALUE ESTABLECER.VALOR.
DE.CONTROL
Command SET.CRITERIA ESTABLECER.CRITERIOS
Command SET.DATABASE ESTABLECER.BASE.
DE.DATOS
46 CAP. 1 INTRODUCCIÓN

Command SET.DIALOG.DEFAULT ESTABLECER.DIALOGO.


ESTANDAR
Command SET.DIALOG.FOCUS ESTABLECER.ENFOQUE.
DIALOGO
Command SET.EXTRACT ESTABLECER.EXTRACCION
Command SET.LIST.ITEM ESTABLECER.ELEMENTO.
LISTA
Command SET.NAME ESTABLECER.NOMBRE
Command SET.PAGE.BREAK ESTABLECER.SALTO.
DE.PAGINA
Command SET.PREFERRED ESTABLECER.GRAFICO.
PREFERIDO
Command SET.PRINT.AREA ESTABLECER.AREA.
DE.IMPRESION
Command SET.PRINT.TITLES ESTABLECER.
TITULOS.A.IMPRIMIR
Command SET.UPDATE.STATUS ESTADO.ACTUALIZACION
Command SET.VALUE ESTABLECER.VALOR
Command SHARE COMPARTIR
Command SHARE.NAME COMPARTIR.NOMBRE
Command SHEET.BACKGROUND HOJA.FONDO
Command SHORT.MENUS MENUS.CORTOS
Command SHOW.ACTIVE.CELL MOSTRAR.CELDA.ACTIVA
Command SHOW.BAR MOSTRAR.BARRA
Command SHOW.CLIPBOARD MOSTRAR.PORTAPAPELES
Command SHOW.DETAIL MOSTRAR.DETALLE
Command SHOW.DIALOG MOSTRAR.DIALOGO
Command SHOW.INFO MOSTRAR.INFORMACION
Command SHOW.LEVELS MOSTRAR.NIVELES
Command SHOW.TOOLBAR MOSTRAR.BARRA.
DE.HERRAMIENTAS
Command SIZE TAMAÑO
Command SORT ORDENAR
Command SORT.SPECIAL SORT.SPECIAL
Command SOUND.NOTE NOTA.SONORA
Command SOUND.PLAY REPRODUCIR.SONIDO
Command SPELLING ORTOGRAFIA
Command SPELLING.CHECK REVISION.ORTOGRAFICA
Command SPLIT DIVIDIR
Command STANDARD.FONT TIPO.ESTANDAR
Command STANDARD.WIDTH ANCHO.ESTANDAR
Command START COMENZAR
Command STEP PASO.A.PASO
Command STYLE ESTILO
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 47

Command SUBSCRIBE.TO SUBSCRIBE.TO


Command SUBTOTAL.CREATE CREAR.SUBTOTAL
Command SUBTOTAL.REMOVE ELIMINAR.SUBTOTAL
Command SUMMARY.INFO RESUMEN
Command TAB.ORDER ORDEN.DE.TAB
Command TABLE TABLA
Command TERMINATE TERMINAR
Command TEXT.BOX CUADRO.DE.TEXTO
Command TEXT.TO.COLUMNS TEXTO.EN.COLUMNAS
Command TEXTREF TEXTOREF
Command TRACER.CLEAR QUITAR.RASTREADOR
Command TRACER.DISPLAY MOSTRAR.RASTREADOR
Command TRACER.ERROR RASTREAR.ERROR
Command TRACER.NAVIGATE DESPLAZAR.PTOS.RASTREO
Command TTESTM PRUEBA.T.VAR.IGUAL
Command TTESTM? PRUEBA.T.VAR.IGUAL?
Command UNDO DESHACER
Command UNGROUP DESAGRUPAR
Command UNGROUP.SHEETS DESAGRUPAR.HOJAS
Command UNHIDE MOSTRAR
Command UNLOCKED.NEXT DESBLOQUEADA.
SIGUIENTE
Command UNLOCKED.PREV DESBLOQUEADA.
ANTERIOR
Command UNREGISTER DESREGISTRAR
Command UPDATE.LINK ACTUALIZAR.VINCULO
Command VBA.ADD.WATCH VBA.AGREGAR.INSPECCION
Command VBA.CLEAR.BREAKPOINTS VBA.BORRAR.PTOS.
INTERRUPCION
Command VBA.DEBUG.WINDOW VBA.VENTANA.
DE.DEPURACION
Command VBA.EDIT.WATCH VBA.EDICION.INSPECCION
Command VBA.END VBA.FINALIZAR
Command VBA.INSERT.FILE VBA.INSERTAR.ARCHIVO
Command VBA.INSTANT.WATCH VBA.INSPECCION.
INSTANTANEA
Command VBA.MAKE.ADDIN VBA.CREAR.MACRO.
AUTOM
Command VBA.OBJECT.BROWSER VBA.EXAMINAR.OBJETO
Command VBA.PROCEDURE.DEFINITION VBA.DEFINIR.
PROCEDIMIENTO
Command VBA.REFERENCES OB.REFERENCIAS
Command VBA.RESET VBA.RESTABLECER
Command VBA.STEP.INTO VBA.RECORRER.TODO
48 CAP. 1 INTRODUCCIÓN

Command VBA.STEP.OVER VBA.RECORRER.PRINCIPAL


Command VBA.TOGGLE.BREAKPOINT VBA.ALTERNAR.PTO.
DE.INTERRUPCION
Command VIEW.3D PRESENTACION.3D
Command VLINE LINEAV
Command VOLATILE VOLATIL
Command VPAGE PAGINAV
Command VSCROLL DESPLAZARV
Command WAIT ESPERAR
Command WHILE MIENTRAS
Command WINDOW.MAXIMIZE VENTANA.MAXIMIZAR
Command WINDOW.MINIMIZE VENTANA.MINIMIZAR
Command WINDOW.MOVE VENTANA.MOVER
Command WINDOW.RESTORE VENTANA.RESTAURAR
Command WINDOW.SIZE VENTANA.TAMAÑO
Command WINDOW.TITLE VENTANA.TITULO
Command WINDOWS VENTANAS
Command WORKBOOK.ACTIVATE LIBRO.ACTIVAR
Command WORKBOOK.ADD LIBRO.AGREGAR
Command WORKBOOK.COPY LIBRO.COPIAR
Command WORKBOOK.DELETE ELIMINAR.LIBRO
Command WORKBOOK.HIDE OCULTAR.LIBRO
Command WORKBOOK.INSERT INSERTAR.LIBRO
Command WORKBOOK.MOVE LIBRO.MOVER
Command WORKBOOK.NAME NOMBRE.LIBRO
Command WORKBOOK.NEW LIBRO.DE.TRABAJO.NUEVO
Command WORKBOOK.NEXT LIBRO.SIGUIENTE
Command WORKBOOK.OPTIONS LIBRO.OPCIONES
Command WORKBOOK.PREV LIBRO.ANTERIOR
Command WORKBOOK.PROTECT PROTEGER.LIBRO
Command WORKBOOK.SCROLL LIBRO.PASAR.A.HOJA
Command WORKBOOK.SELECT LIBRO.SELECCIONAR
Command WORKBOOK.TAB.SPLIT LIBRO.BAR.DE.DIV.
HORIZONTAL
Command WORKBOOK.UNHIDE MOSTRAR.LIBRO
Command WORKGROUP GRUPO.DE.TRABAJO
Command WORKGROUP.OPTIONS GRUPOTRABAJO.
OPCIONES
Command WORKSPACE AREA.DE.TRABAJO
Command ZOOM ZOOM
Command ZTESTM PRUEBA.Z.MEDIAS
Command ZTESTM? PRUEBA.Z.MEDIAS?
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 49

• EVALUACIÓN DE LA CAPACIDAD
1. ¿Qué concepto tiene de un programa y nombre tres programas de tipo lenguajes de programación?
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________

2. ¿Cuál es la diferencia entre una clase y un objeto?


___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________

3. Mencione 5 propiedades y 5 eventos del objeto ListBox del VBA.


___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________

4. ¿Cuál es la diferencia entre VBA y VSTO?


___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________

5. ¿Cuál es el equivalente de las siguientes funciones de Excel en VBA?


 BuscarV
 Promedio
 Suma
 MediaGeom
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
CAPÍTULO

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

CAPACIDAD DEL CAPÍTULO

 Reconoce conceptos básicos de programación y objetos VBA.


GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 53

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

Basic presenta ocho principios que rigen su diseño:

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.

• FUNDAMENTOS DE VISUAL BASIC APLICACIONES PARA EXCEL


Microsoft VBA (Visual Basic for Applications) es un lenguaje de macros bajo la plataforma Visual Basic,
aquí es donde se desarrollará aplicaciones a medida para el sistema operativo Windows, VBA está incluido
en varias aplicaciones Microsoft es por eso que no necesita instalación ni mucho menos descargarla de
internet.

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)

• LA FICHA PROGRAMADOR DE EXCEL 2010


1
Esta ficha tiene entre sus herramientas el acceso al entorno VBA,
formularios y varias opciones más pertenecientes al entorno
avanzado de Excel. En la actualidad la mayoría de software de
ingeniería cuentan con un acceso al VBA, Excel lo realiza por medio
de esta ficha.

Excel inicialmente no muestra la ficha Programador, se debe habilitar


para lo cual usted deberá seguir los siguientes pasos:

Seleccione el menú Archivo (1) desde Excel, aquí es la diferencia en


Excel 2007 y 2010, este último implementó en su entorno el menú de
opción Archivo y es desde allí donde se debe seleccionar Opciones (2)
con esta usted obtendrá una ventana de opciones dentro de las cuales
podrá activar la ficha programador que se encuentra hasta el momento
inhabilitada. 2

De la ventana Opciones de Excel, seleccione Personalizar cinta de opciones.

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

Las herramientas presentadas por la ficha Programador son:

Fig. 2-2

Se definirán las principales herramientas que tiene la ficha Programador:

COMBINACIÓN DE
HERRAMIENTA DESCRIPCIÓN
TECLAS

Botón que permite acceder al entorno VBA. Alt+F11

Botón que permite mostrar el entorno de control


de macros públicas para Excel, es decir, podrá editar,
ejecutar o eliminar las macros. Desde este entorno no
Alt+F8
solamente visualiza macros creadas desde Excel sino
también las implementadas en VBA como funciones o
procedimientos públicos.

Permite iniciar la grabación de una nueva macro que


posteriormente usted la podrá administrar desde la No presenta
herramienta Macros.

Botón de personalización de seguridad de la macro


frente a un archivo de Excel.
Seguramente que a usted alguna vez le apareció un
mensaje así:

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.

Los controles de los Formularios presentan una lista


de objetos que pueden asociarse a una macro para la No presenta
ejecución de una aplicación VBA.
56 CAP. 2 INTRODUCCIÓN AL VISUAL BASIC APLICACIONES (VBA)

• CONFIGURAR LA SEGURIDAD DE MACROS EN UN LIBRO DE EXCEL


Toda implementación de macros en Excel necesita ser habilitada al momento de acceder a ella esto
es porque un libro de Excel grabado en forma genérica no tiene una macro asignada, entonces al
implementarle una macro el tipo de archivo debe ser Libro de Excel habilitado para macros.

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.

• MODOS DE ACCESO AL VBA


Se cuenta con 2 formas de acceder a VBA, se nombrarán sin orden de prioridad.

COMBINACIÓN DE
DESCRIPCIÓN
TECLAS

Esta combinación presenta 2 efectos, el primero es de acceder a VBA si


Alt + F11 usted se encuentra en Excel y devolverlo a Excel si se encuentra en el
entorno VBA.

Botón de acceso al entorno VBA.


GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 57

• DESCRIPCIÓN DEL EDITOR VBA


El editor VBA tiene una apariencia amigable y muy parecida a Visual Basic, si usted es usuario de Visual
Basic le será familiar muchas de las herramientas que aparecen en este entorno, la única diferencia es
que VBA construye aplicaciones para Office, pero no genera aplicaciones de plataforma ni web ni mucho
menos móviles.

Fig. 2-4

1 Barra de herramientas Estándar


(VerBarra de HerramientasEstándar)
2 Ventana Explorador de Proyectos (CTRL+R)
3 Ventana de Propiedades (F4)
4 Entorno de edición de código y desarrollo

• DESCRIPCIÓN DE LA BARRA DE HERRAMIENTAS ESTÁNDAR


La barra de herramientas estándar ha sido muy usada en las versiones anteriores al Excel 2007, sus
características siguen siendo las mismas.

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

Volver al Entorno de Excel ALT+F11

Grabar Macro básico, tener en cuenta que Grabar desde


el editor o Grabar desde Excel es la misma tarea sólo debe CTRL+S
asignar como tipo Libro de Excel habilitado para macros.

Ejecutar el código VBA F5

Interrumpir, permite detener la ejecución de la macro y poder


CTRL+Pause
continuar al presionar F5.

Restablecer, permite detener y salir del modo de ejecución


de la macro.

Permite mostrar las propiedades de un objeto seleccionado. F4

Permite mostrar las herramientas sólo en el entorno de


desarrollo de un UserForm.

Para un trabajo más fluido en el código VBA se recomienda también habilitar la barra de herramientas
Edición (VerBarra de HerramientasEdició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.

Información rápida, muestra el formato que tiene el objeto


CTRL+I
en referencia.

Sangría derecha-izquierda, permite tabular el código VBA Tab


para poder visualizarlo ordenadamente. Shift + Tab

Bloque de comentarios, esto permite añadir el símbolo de


comentario al inicio de la línea de código y no se tomará
en cuenta cuando se realice la depuración de la aplicación.
Toda línea de instrucción de color verde es tomada como
No registrada
comentario por VBA.

‘Declaración de Variables (Comentario)


Dim N as Integer (Instrucción 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

1 En esta sección se tiene el control de visualización de los objetos de Excel.

Permite visualizar el código fuente VBA.

Permite visualizar el Formulario y sus objetos ocultando


momentáneamente el código fuente.
Permite mostrar y/o ocultar en Jerarquía de Carpetas de los
objetos contenidos en el Proyecto VBA.
60 CAP. 2 INTRODUCCIÓN AL VISUAL BASIC APLICACIONES (VBA)

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ú InsertarMó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.

Cambiar el nombre al módulo


Una vez agregado el módulo al proyecto notará que VBA le asigna el nombre Módulo1 por la tendencia
de los objetos, así es que imagine si inserta 10 Módulos, será complicado saber que contiene cada
módulo, por lo tanto se hace necesario colocar un nombre a cada módulo ya que fueron creados con
una tarea específica.
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 61

Pasos para el cambio de nombre:


 Seleccione el módulo desde el Explorador de Proyectos.

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.

Pasos para la eliminación:


 Presione clic derecho sobre la función desde el Explorador de Proyectos.
 Seleccione Quitar nombreModulo.
 A la ventana siguiente, se sugiere que seleccione la opción No, ya que si lo va a eliminar es porque
no lo necesitará, pero dependerá de usted.

Fig. 2-11

Implementar una función dentro de un módulo


Veamos un caso de implementación de una función dentro del Módulo moFunciones.

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ú InsertarUserForm

Segunda Forma:
 Presione clic derecho en el Explorador de Proyectos.
 Seleccione Insertar.
 Seleccione UserForm.

Cambiar el nombre al formulario


Pasos para cambiar de nombre al formulario:
 Seleccione el UserForm desde el Explorador de Proyectos.
 Modifique la propiedad (Name) por un nombre adecuado al UserForm, por ejemplo frmPago.

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

Pasos para la eliminación:


 Presione clic derecho sobre el UserForm desde el Explorador de Proyectos.
 Seleccione Quitar nombreUserForm.
 A la ventana siguiente, se sugiere que seleccione la opción No, ya que si lo va a eliminar es porque
no lo necesitará, pero dependerá de usted.

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

A continuación se muestra el código fuente del caso:

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

• PERSONALIZAR DEL ENTORNO VBA


• ASIGNAR DERECHOS SOBRE EL PROYECTO VBA
Cuando se desarrolla una aplicación en VBA es necesario proteger el código autogenerado
o implementado por el usuario, ya que es totalmente distinto proteger un libro o una hoja a una
protección del código VBA.
Para acceder a las propiedades del proyecto debe realizar lo siguiente:
 Haga clic derecho sobre el Proyecto de la ventana Exploradora de Proyectos.
 Seleccione Propiedades de VBAProject.

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:

Asignar un nombre al proyecto y una descripción


Dentro de la ventana propiedades del proyecto, asigne sobre los cuadros de texto, por ahora, sólo el
Nombre del Proyecto y la Descripción del mismo.
Ahora tenga en cuenta que cuando defina el Nombre del Proyecto no debe considerar espacios en
blanco, la asignación inicial era VBAProject. Así debe definir el nombre del objeto.

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

• ASIGNAR UNA CLAVE AL CÓDIGO VBA


La versión 2010 no tiene hacker conocido con respecto al código VBA, pero si presenta debilidades en
su archivo xlsx, el código VBA puede protegerse de agentes extraños al entorno pero esto no quiere
decir que VBA no ejecutará la instrucción en Excel, van a funcionar en forma normal lo que no podrá
visualizar es el código implementado.

Asignar una contraseña al proyecto VBA y no permitir la visualización del código


Para la asignación de contraseñas se cambiará de ficha, ahora seleccione la ficha Protección y se
mostrará la siguiente ventana:

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.

Cómo quitar la contraseña al Proyecto VBA


Para quitar la contraseña al proyecto debe seguir los pasos anteriormente mencionados, lo único que
debe realizar es dejar vacíos los cuadros de texto de la contraseña y confirmar contraseña.

Lo mismo sucederá si pretende realizar un cambio en la contraseña asignada.


GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 67

• ACTIVAR EL REQUERIMIENTO DE DECLARACIÓN OBLIGATORIA DE VARIABLES


Esta propuesta de VBA es opcional ya que al momento de programar también lo puede asignar, tenga
en cuenta que al momento de activar esta opción deberá grabar y volver a ingresar para ver los
cambios. El acceso es:
 En VBA seleccione Herramientas  Opciones.
 Active el check de Requerir declaración de variables (Fig. 2.24).

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

• APLICAR FORMATO AL EDITOR DE CÓDIGO VBA


Muchas veces cuando nos encontramos con editores de código, estos presentan una determinada
fuente, la cual presenta un tamaño y un estilo predeterminado, ahora usted podrá modificar la fuente
a voluntad propia. Se recomienda usar la fuente Consolas para poder diferenciar el cero de la letra O.
El acceso a la configuración de la fuente es:
 En VBA seleccione Herramientas  Opciones.
 Ficha: Formato del Editor.

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.

Apertura de un libro con VBA


Workbooks.OpenFilename:=rutaDelArchivo

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.

Mensaje de apertura de un libro


Cada ThisWorkBook presenta una serie de eventos, para este caso se conocerá el evento open que
ejecutará la acción programada sólo cuando se aperture el libro de Excel.

Caso. Implementar un saludo al usuario al abrir un libro de Excel.

Fig. 2-28
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 69

Para llegar al evento Open debe realizar los siguientes pasos:


 Desde la ventana Explorador de Proyectos, de 2 clics a ThisWorkBook.
 Seleccione el objeto Workbook.
 Seleccione el evento Open.
 Coloque el código mostrado en la Fig. 2.28.

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.

Referencia a la hoja activa


ActiveSheet

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.

Referencia a la Hoja1 de Excel


WorkSheets("Hoja1")

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.

Caso. Determinar el total de hojas de un libro y mostrarlo en la celda A1 de la Hoja1.

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?
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________

2. ¿Cuál es el objetivo de programar en un Módulo de programación?


___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________

3. Mencione 5 propiedades del objeto UserForm.


___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________

4. ¿Cuál cree que es el beneficio de colocar una clave al código VBA dentro de un libro de excel?
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________

5. Menciona los conceptos de los siguientes objetos VBA


 WorkSheets
 WorkBook
 UserForm
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
CAPÍTULO

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

CAPACIDAD DEL CAPÍTULO

 Implementa una Macro desde Excel.


GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 75

• 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

• IMPLEMENTACIÓN DE UNA MACRO


Implementar una macro tiene dos ámbitos: el primero, se podría realizar desde Excel con los objetos
que este ofrece en su entorno y el segundo, el editor de VBA. La diferencia radica en la forma de su
elaboración, mientras que en Excel para crear una macro usted sólo realiza los pasos y él grabará todo
generando automáticamente código VBA; en cambio dentro del entorno VBA primero debe crear un
Módulo y dentro implementar una macro como una función o procedimiento de otra forma no lo podrá
realizar, claro está que usted debe conocer los comandos propios de VBA respetando los patrones de
cada uno de ellos.

Veamos la implementación de una MACRO DESDE EXCEL:

 Ficha Programador

También se puede invocar la grabación de una macro desde la barra de estado:

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

Veamos la implementación de una MACRO DESDE VBA:

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

Para cambiar el nombre de Módulo1 a moMacros seleccione el Módulo1 y cambiar la propiedad


(Name) de las propiedades del objeto, esta vez coloque el nombre moMacros (no debe tener espacios
en blanco).
80 CAP. 3 LA MACRO

 Coloque el siguiente código dentro del Módulo moMacros:

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

• EJECUTAR UNA MACRO


Para la ejecución de la macro se tienen varias opciones, mencionaremos algunas:

Desde la herramienta de la Ficha Programador.

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.

• ADMINISTRAR UNA MACRO (CREAR, MODIFICAR Y ELIMINAR)


La administración de la macro permite tener el control de las macros implementadas en un determinado libro.
Acceso:
 Ficha Programador.

 Seleccione o presione ALT+F8.

Fig. 3-8
82 CAP. 3 LA MACRO

A continuación se describe cada uno de los botones de la ventana administradora de Macros.

Permite ejecutar una macro previamente seleccionada desde la lista de Macros


asignada a un determinado libro.

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.

Permite modificar el código de la macro seleccionada desde la lista de macros.

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.

Permite eliminar una macro desde la lista de macros.

Permite modificar el juego de teclas y la descripción asignada a una macro


seleccionada desde la lista de macros.

Fig. 3-10
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 83

• ASIGNAR UNA MACRO A UN CONTROL DE FORMULARIO, ACTIVEX, IMAGEN O


FORMA
Una vez creada y administrada la macro, se necesita tener un acceso visual en los libros. La Asignación
de una macro a un objeto visual se puede realizar a un control de formulario, un control activeX, una
imagen o una forma.

Ya se tiene una macro llamada AsignaFecha a la cual se le implementará un control a dicha macro.

Primero. Control de Formulario


 Ubicarse en la celda A2 de la Hoja1.
 Ficha Programador.
 Seleccione Insertar.

Fig. 3-11

 Seleccione el Botón de Control de formulario.


 Dibuje el botón en cualquier celda de la hoja de Excel, al soltar el mouse aparecerá la ventana de
asignación de macros.

Fig. 3-12

 Seleccione la macro AsignaFecha.


 Seleccione Aceptar.
 Ahora debe colocar un título al botón para tener el siguiente aspecto:

Fig. 3-13

 Finalmente, pruebe la macro dando un clic en el botón Asigna Fecha.


84 CAP. 3 LA MACRO

Segundo: Control ActiveX


 Ubicarse en la celda A3 de la Hoja1.
 Ficha Programador.
 Seleccione Insertar.

Fig. 3-14

 Seleccione el Botón de Controles ActiveX.


 Dibuje el botón en cualquier celda de la hoja de Excel, a diferencia del botón de Controles de
formulario, no muestra la ventana de asignación de macro.
 Seleccione .
 Y coloque el código de llamada a la macro con la instrucción Call como se muestra en la Fig. 3.15.

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

• CASO DESARROLLADO 1: ENCABEZADO DE INFORME


Supongamos que todos los días debemos crear un informe de los productos adquiridos, para lo cual
implementará una macro desde la Grabadora de Macros, la cual cuenta con las siguientes características:

 Nombre de la macro: EncabezadoInforme.


 Definir el siguiente encabezado para el informe:

Fig. 3-19

 Aplicar un sombreado a los textos.


 Centrar los textos.
 Aplicar negrita y tipo de letra Trebuchet MS.
 Ocultar desde la columna G hasta la última columna de Excel.
 Inhabilitar las líneas de cuadrícula de la hoja de Excel.
86 CAP. 3 LA MACRO

Solución. Implementación de la Macro


1. Ubíquese en la Hoja1 del libro.
2. Seleccione la ficha Programador.
3. Seleccione el botón Grabar Macro y configure la macro como en la Fig. 3.20.

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.

Solución. Prueba de la Macro


1. Ubíquese en una hoja del mismo libro por ejemplo la Hoja2.
2. Presione CTRL+Shift+E.

Código generado por la MacroEncabezadoInforme

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

• CASO DESARROLLADO 2: NAVEGADOR WEB


Implemente una macro que permita mostrar el Navegador Web dentro de la Hoja de Excel de la siguiente
forma:

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

 Luego de Aceptar, presione clic en la celda B2 y coloque el texto Mi Explorador Web.


 Seleccione desde la celda B2 hasta N2 y presione el botón Combinar y Centrar.
 Cambie el tamaño del texto Mi Explorador Web a 20 puntos, con un tipo de letra Trebuchet MS y
aplique un color de relleno a las celdas.
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 89

 Ubíquese en la celda B4.


 En la Ficha Programador  Insertar  Más Controles de la ventana Más Controles, seleccione
Microsoft Web Browser.

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.

Private Sub CommandButton1_Click()


URL = ActiveSheet.Range("D19").Value
Call ActiveSheet.WebBrowser1.Navigate(URL)
End Sub
92 CAP. 3 LA MACRO

• 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

 Introducción al modelo de objetos


 Clase Application
– ActiveCell
– ActiveSheets
– ActiveWindow
– Selection
 Caso Desarrollado 1: Datos del Sistema
 Clase Range
– Métodos del objeto Range
– Propiedades del objeto Range
 Método Offset
 Caso Desarrollado 2: Búsqueda de Documentos
 Evaluación de la capacidad

CAPACIDAD DEL CAPÍTULO

 Reconoce las propiedades y métodos de los modelos de objetos.


GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 95

• INTRODUCCIÓN AL MODELO DE OBJETOS


Como se había mencionado en los capítulos anteriores, Excel trabaja bajo un modelo de objetos
estratégicamente jerarquizados. La idea principal es tener el control de todos los objetos por medio de
VBA desde un libro (WorkBook) hasta la celda (Cell).

Vea una representación gráfica de jerarquía de los objetos en VBA:

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 provee:


 Una lista de propiedades relativas en referencia a los elementos que tiene Excel.
 Una lista de propiedades que permiten devolver las colecciones de las clases y los objetos referidos
al modelo de objetos de Excel como WorkBooks, Range, Charts, etc.
 Una lista de propiedades específicas referidas a objetos como el ActivelCell, ActiveSheets, etc.

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.

Vea un ejemplo de ActiveSheets en la cual permite controlar la cantidad de copias de la hoja1 de 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

A continuación se explican las instrucciones del procedimiento CopiaHoja:

Dim n% es la declaración de la variable N de tipo cadena, usted estará pensando si se va a ingresar la


cantidad de elementos porque se declara como cadena, la explicación viene en las siguientes líneas ya
que primero debe hacer que el usuario ingrese siempre un valor y no se permita datos vacíos o nulos.

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.

ActiveWorkBook.ActiveSheet.Copy permite copiar todo el contenido de la hoja activa a la hoja de


la instrucción After:=ActiveWorkbook.Sheets(Sheets.Count) el cual indica que la copia se
realice al final de todas las hojas del libro.

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

A continuación se explican las instrucciones del procedimiento ImprimirHoja:

Sheets(n).Select permite hacer activa la hoja que ingresó el usuario.


ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True permite imprimir
la hoja activa; la opción Copies determina la cantidad de copias de una determinada hoja.
98 CAP. 4 EL MODELO DE OBJETOS

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

Para probar el procedimiento deberá seguir los siguientes pasos:


 En la hoja1 de Excel coloque valores en las celdas:
 A1  10, A2  ABC y A3=20.
 Ahora seleccione desde A1 hasta A3.
 Diríjase a la Ficha Programador Macros.
 Seleccione el procedimiento ValidaIngreso y seleccione ejecutar.
 Se mostrarán los siguientes mensajes:

Fig. 4-2 Fig. 4-3 Fig. 4-4

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

• CASO DESARROLLADO 1: DATOS DEL SISTEMA


Implemente una aplicación en VBA que permita mostrar los datos referenciales del sistema en una hoja
de Excel.

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

‘Asignar los títulos del listado


Range(“B3”).Select
ActiveCell.Value = “LISTADO DE PROPIEDADES DE LA APLICACIÓN “
Range(“B5”).Select
ActiveCell.Value = “NOMBRE DE USUARIO”
Range(“B6”).Select
ActiveCell.Value = “NOMBRE DE LA ORGANIZACIÓN “
Range(“B7”).Select
ActiveCell.Value = “SISTEMA OPERATIVO”
Range(“B8”).Select
ActiveCell.Value = “VERSION DE EXCEL “
Range(“B9”).Select
ActiveCell.Value = “CODIGO DEL PRODUCTO “
Range(“B10”).Select
ActiveCell.Value = “FUENTE PREDETERMINADA”
Range(“B11”).Select
ActiveCell.Value = “TAMAÑO PREDETERMINADA”
Range(“B12”).Select
ActiveCell.Value = “SEPARADOR DE DECIMALES”
Range(“B13”).Select
ActiveCell.Value = “IMPRESORA ACTIVA”
Range(“B14”).Select
ActiveCell.Value = “RUTA PREDEFINIDA DE GRABACION”
100 CAP. 4 EL MODELO DE OBJETOS

‘Definiendo el Ancho de la columna B y C


Columns(“B:B”).ColumnWidth = 35.14
Columns(“C:C”).ColumnWidth = 37
‘Ocultando desde la columna E hasta el Final de las columnas
Columns(“E:E”).Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.EntireColumn.Hidden = True
‘Ocultando desde la fila 17 hasta el Final de las filas
Rows(“17:17”).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.EntireRow.Hidden = True
‘Combinar las Celdas para el Título
Range(“B3:C3”).Select
Selection.Merge
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.MergeCells = True
End With
‘Asignarle un tamaño al Título
Selection.Font.Size = 18
Selection.Font.Bold = True
‘Definir el ancho de la columna C
Columns(“C:C”).ColumnWidth = 41
With Selection.Interior
.Pattern = xlSolid
.Color = 65535
End With
‘Aplicar un color de relleno a las celdas
Range(“C5:C14”).Select
With Selection.Font
.Color = -16776961
End With
‘Desactivar las líneas de la cuadrícula de Excel
ActiveWindow.DisplayGridlines = False

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

• MÉTODOS DEL OBJETO RANGE


Activate
El método Active permite activar una celda simple de una hoja activa, tenga en cuenta que sólo podrá
ser a una celda no a un conjunto de celdas, ya que el objeto Range también puede hacer referencia a
un matriz de celdas.

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

El procedimiento AgregaComentario permite agregar un comentario a una celda activa, la idea es


que el procedimiento busque dentro de las celdas la palabra Vacaciones y agregue un comentario a
dicha celda.

La Función Cells.Find permite definir la búsqueda de un determinado valor en un conjunto de


celdas, la terminación con Activate activa que al encontrar el elemento buscado activa la celda donde
lo encontró.

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

El procedimiento limpiaComentarios permite eliminar los comentarios realizados en la hoja de trabajo


1, este procedimiento no distingue la forma en que se creó el comentario sobre las celdas.

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.

• PROPIEDADES DEL OBJETO RANGE


VBA propone el objeto Range para poder acceder y enviar información directamente a una determinada
celda de la hoja de Excel, hay que tener en cuenta que para aplicar las propiedades, primero se debe
especificar la hoja de dónde provienen los datos.

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:

Una celda sólo:

Range(“A1”).Select

Un conjunto de celdas contiguas dentro de la misma hoja:

Range(“A1:G5”).Select

Para seleccionar celdas no contiguas:

Range(“A1,A5,B4”).Select

Para seleccionar celdas no contiguas más un conjunto contiguo:

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

Filas de la uno a la cinco:

Range(“1:5”)

Filas uno, tres y ocho:

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:

OffSet (Fila, Columna)

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

• CASO DESARROLLADO 2: BÚSQUEDA DE DOCUMENTOS

Fig. 4-6

Solución:

Formulario Propuesto:

Fig. 4-7

Declaración de las variables globales de la aplicación:

Dim I As Integer

Programar dentro del botón Mostrar del Formulario:

Private Sub btnMostrar_Click()


Sheets(2).Range(“B3:L100”).ClearContents
Dim numero%
numero = Val(txtNumero.Text)

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

Sheets(2).Cells(3 + I, 7).Value = ActiveCell.Offset(0, 1).Value


Sheets(2).Cells(3 + I, 8).Value = ActiveCell.Offset(0, 2).Value
Sheets(2).Cells(3 + I, 9).Value = ActiveCell.Offset(0, 3).Value
Sheets(2).Cells(3 + I, 10).Value = ActiveCell.Offset(0, 4).Value
Sheets(2).Cells(3 + I, 11).Value = ActiveCell.Offset(0, 5).Value
Sheets(2).Cells(3 + I, 12).Value = ActiveCell.Offset(0, 6).Value
I = I + 1
End If
ActiveCell.Offset(1, 0).Select
Loop While ActiveCell.Value <> “”
I = 0
Sheets(2).Activate
Range(“A1”).Activate
End If
End Sub

Programación que activa una determinada hoja al finalizar el formulario:

Private Sub UserForm_Terminate()


Sheets(1).Select
Range("F3").Activate
End Sub

• EVALUACIÓN DE LA CAPACIDAD
1. Liste las propiedades de los siguientes objetos:
 Application
 Range
 Cells
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________

2. Del siguiente código implemente el color de el texto contenido y color de la celda.

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

CAPACIDAD DEL CAPÍTULO

 Reconoce e implementa códigos básicos VBA.


GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 109

• INTRODUCCIÓN A LA PROGRAMACIÓN CON VBA


Usted se ha preguntado alguna vez cómo es que Excel, Word u otras aplicaciones responden a eventos
que vistos desde el ángulo del usuario son muy cómodos; por ejemplo, asignar negrita a un texto en
Word o aplicar formato de moneda a un número en Excel, todas esas actividades y más son parte de la
programación que está asignada dentro de cada aplicación.

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.

REM Declaración y Asignación de una variable


Función REM
Dim IVA As Single: IVA = 0.19
Comilla simple ‘ ‘Declaración y Asignación de una variable
(Alt+39) Dim IVA As Single: IVA = 0.19

Primera forma: usar comilla simple'

Fig. 5-1
110 CAP. 5 FUNDAMENTOS DE PROGRAMACIÓN

Segunda forma: usar la función REM

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.

Formato: use el símbolo &

Valor1 & Valor2

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.

Solución 1. Se cuenta con el siguiente formato en una hoja de Excel:

Fig. 5-3
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 111

En la celda B7 coloque la siguiente fórmula:

=MAYUSC(IZQUIERDA(E7,1) & C7 & DERECHA(AÑO(F7),2))

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

Esta vez en la celda B7 coloque la siguiente fórmula:

=miCodigo(E7,C7,F7)

• OPERADORES USADOS EN VBA


Dentro del código fuente de VBA se tendrá que usar operadores de todo tipo, usted siendo usuario de
Excel seguramente que ya los ha implementado en alguna ocasión, VBA no tiene mucha diferencia en su
manejo. Tenemos:

Operadores Aritméticos:

OPERADOR USO
+ (Suma) Dim suma As Integer: suma = 10 + 15

- (Resta) Dim restaAs Integer: resta = 15 – 10

* (Producto) Dim producto As Integer: producto = 10 * 15

Dim divisionReal As Single: divisionReal = 15 / 10


/ (División Real)
Observe que el resultado en este caso sería: 1.5.

Dim divisionEnt As Integer: divisionEnt = 15 \ 10


\ (División Entera)
Observe que el resultado en este caso sería: 1 obviando la parte decimal.

Dim alCuadrado As Integer: alCuadrado = 3^ 2


Observemos que el resultado en este caso sería: 9.
^ (Potencia)
Dim raizCua as Single: raizCua = 2 ^ (1/2)
Observe que el resultado en este caso sería: 1.41421356.
112 CAP. 5 FUNDAMENTOS DE PROGRAMACIÓN

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

Comparando si es menor a 20 años.


<= (Menor o igual)
IF Edad <=20 Then

Verificando que la fecha ingresada sea diferente a la actual.


<> (Diferente)
If Fecha <>ToDay() The

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

Vea algunos ejemplos de los operadores según la tabla de la verdad:

OPERADOR USO

Validar la edad de una persona, la cual se debe encontrar en el rango de 18


a 65.
If Edad>17 AND Edad<66 Then

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.

Validar si la categoría de un trabajador es A o C.

If Categoria=”A” OR Categoria=”C” Then


OR (o Lógica)

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

• LAS VARIABLES Y SU DECLARACIÓN EN VBA


En VBA la declaración de variables tiene 2 ámbitos. Primero, no declarar las variables usadas, VBA
automáticamente les asigna el tipo Variant. Segundo, este tipo también fue trabajado en Visual Basic 6
y tiene por característica declarar una variable dependiendo del tipo de valor que reciba, es decir, si una
variable es declarada con Variant y usted ingresa un valor textual, dicha variable será asignada como un
String y así sucederá con los demás tipos de datos.

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.

Requerir la declaración obligatoria: esta propuesta de VBA es opcional ya que al momento de


programar también lo puede asignar, tenga en cuenta que al momento de activar esta opción deberá
grabar y volver a ingresar para ver los cambios. El acceso es:

 En VBA seleccione Herramientas.


 Seleccione Opciones…
 Active el check de Requerir declaración de variables (Fig. 5.5).

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.

Formato para la declaración de variables:

Forma 1 Dim Variable as Tipo de Datos


Forma 2 Dim Variable [Operador]

• TIPOS DE DATOS Y SU OPERADOR DE REFERENCIA


Es necesario tener una descripción de cada tipo de datos, tenga en cuenta que todos los lenguajes
de programación representan lo mismo, sólo varían en la capacidad de almacenamiento que puede
presentar cada tipo pero es mínima la diferencia.

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.

TIPO DE DATOS OPERADOR INTERVALO DE VALORES


Boolean True o False
Byte 0 a 255 (sin signo)
Char 0 a 65535 (sin signo)
0:00:00 (medianoche) del 1 de enero del año 100 a 11:59:59
Date
p.m. del 31 de diciembre del 9999.
-1,79769313486231570E+308 a
Double (punto -4,94065645841246544E-324 para los valores negativos;
flotante de precisión #
doble) 4,94065645841246544E-324 a
1,79769313486231570E+308 para los valores positivos
Integer % -2.147.483.648 a 2.147.483.647 (con signo)
-9.223.372.036.854.775.808 a
Long (entero largo) &
9.223.372.036.854.775.807 (9,2...E+18) (con signo)
Single (punto -3,4028235E+38 a -1,401298E-45 para los valores negativos;
flotante de precisión !
simple) 1,401298E-45 a 3,4028235E+38 para los valores positivos
String (longitud
$ 0 a 2.000 billones de caracteres Unicode aprox.
variable)
Currency @ Tipo Moneda

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:

CASO TRADICIONAL OPERADOR DE TIPO


Declare una variable
Dim n as Integer Dim n%
N de tipo entero.
Dim A%,B%,C%
Dim A as integer, B as Como nota en la declaración las
Declare 3 variables integer, C as Integer tres variables son declaradas con
de tipo entero para Tenga en cuenta que si va a declarar el operador %, es válido realizar
A, B y C. varias variables en una sola línea, la siguiente declaración pero no
debe tener un solo Dim. recomendada.
Dim A%,B As Integer, C%
Dim X As Integer Dim X%
X=0 X=0
Declare una variable
X de tipo entero con Dim X as Integer: X=0 Dim X%: X=0
un valor inicial de 0. En los casos desarrollados se hace uso del tipo declaración/asignación para
ahorrar líneas de código.
116 CAP. 5 FUNDAMENTOS DE PROGRAMACIÓ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:

Const Pi as Double = 3.1415

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

• EXPRESIONES ALGORÍTMICAS VS ALGEBRAICAS


Se le denomina expresión algebraica a una combinación de letras y números unidas por símbolos
matemáticos no legibles por la computadora. Por ejemplo:

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.

Formato para la asignación de valores:

Forma 1 Variable = Valor


Forma 2 Variable = Expresión

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

Declarar la variable Dim IVA As Single


Asignar el Valor IVA = 0.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.

En la Fig. 5.10 se logra observar las imágenes secuenciales realizadas


desde una cámara fotográfica que capta escena por escena logrando
una secuencialidad de imágenes, imagine que de las imágenes
borremos la tercera de la izquierda, si usted vuelve a repasar las
imágenes notará al instante que falta una escena. Lo mismo le sucede
a un código en VBA y en todos los lenguajes de programación una
instrucción de código sigue a otra en forma de secuencia, con esto
se logra entender que la entrada a una nueva instrucción es la salida
de una anterior. Fig. 5-10
118 CAP. 5 FUNDAMENTOS DE PROGRAMACIÓN

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

Formato de la estructura secuencial

Public Sub NombreProcedimiento(Parámetros)


Intruccion1
Intruccion2
Intruccion3

IntruccionN
End Sub
PublicFunctionNombreFuncion(Parámetros) as Tipo
Intruccion1
Intruccion2
Intruccion3

IntruccionN
EndFunction

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.

• CASO DESARROLLADO 1: SUELDO DE TRABAJADORES


Una empresa cuenta con 100 empleados de los cuales el área de planilla sólo controla los pagos a través
de una hoja de Excel bien diseñada pero se tiene que implementar funciones de Excel para un buen
reporte del mismo, lo que se desea es implementar una función en VBA que permita determinar el sueldo
neto de un trabajador de acuerdo a sus horas de trabajo (ht) y un pago por hora (ph). Además, deberá
aplicarle un descuento del 8% en base a su sueldo.
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 119

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

Para poder entender un problema sugiero contestar las siguientes interrogantes:

¿Qué datos necesita para dar solución al problema? ENTRADA


¿Qué fórmulas va a usar en la solución? PROCESO
¿Cuál es el resultado del proceso? SALIDA

Además, propongo una plantilla que deberá usar de aquí en adelante con mucha lógica al definir la
secuencialidad de los procesos.

ENTRADA 1 Lista de actividades relacionados a la Entrada.


PROCESO 2 Lista de actividades relacionadas con el Proceso del problema.
SALIDA 3 Lista de actividades relacionadas con la Salida del problema.

• CASO DESARROLLADO 2: EJERCICIOS SECUENCIALES


Implemente las siguientes funciones usando todo lo aprendido hasta este capítulo, considere lo siguiente:

 Defina un Módulo por cada caso.


 Declare las variables a usar en las funciones.
 Use las constantes cuando sea necesario.
 Aplique de manera correcta los operadores.

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

Entrada  Longitud de la soga.


 El valor en centímetros.
Salida  El valor en pulgadas.
 El valor en pies.
 longitud de tipo real.
Variables del  cm, representa los centímetros de la conversión.
Proceso  pulgadas, representa las pulgadas de la conversión.
 pies, representa los pies de la conversión.
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 121

Código Fuente de la solución:

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:

pies = (( longitud * 100 ) / 2.54 ) / 12

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

En Excel se debe preparar una hoja de cálculo con el siguiente aspecto:

Fig. 5-15

En la celda C6 digitar: =fPies(C4)


En la celda C7 digitar: =fYardas(C4)

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

Salida  El valor en euros

 Soles: que representa el valor en soles de una sucursal.


 Dólares: que representa el valor en dólares de una sucursal.
Variables del
 Marcos: que representa el valor en marcos de una sucursal.
Proceso
 Euros: que representa el valor resultante del acumulado entre los
valores de soles, dólares y marcos.
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 123

Código Fuente de la solución:

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.

En una hoja de Excel tendrá:

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:

1 pie cúbico = 0.0283 metros cúbicos


1 galón = 3.79 litros
1 metro cúbico = 1000 litros
1 yarda cúbica = 27 pies cúbicos

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:

1 kilobyte = 1024 bytes


1 megabyte = 1024 kilobytes
1 gigabyte = 1024 megabytes

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:

1 dólar = 3.51 soles


1 dólar = 1.09 euros
1 dólar = 2.12 marcos

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?
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________

3. ¿Qué entiende por Entrada, Proceso y Salida?


___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________

4. ¿Cuándo se deberá declarar del tipo Variante en una aplicación VBA, explique brevemente?
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________

5. Represente la siguiente expresión Algebraica en expresión Algorítmica.

___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
CAPÍTULO

6
FUNCIONES Y PROCEDIMIENTOS

 Funciones - Introducción a las funciones


 Funciones para cadenas de caracteres
 Caso Desarrollado 1: Funciones de Texto
 Funciones numéricas
 Caso Desarrollado 2: Números Aleatorios
 Funciones de Fecha
 Caso Desarrollado 3: Funciones de Fecha
 Caso Desarrollado 4: Cálculo de la Edad
 Caso Desarrollado 5: Venta al Crédito
 Caso Desarrollado 6: Cálculo de Días
 Funciones de conversión de tipo
 Funciones de comprobación de valor
 Funciones definidas por el usuario
– Estructura de una función
– Ámbito de la función
– Tipo de dato de retorno
– Llamada a una función
– Parámetros de una función
– Crear funciones definidas por el usuario
– Opciones de las Funciones
 Los Procedimientos
– Estructura de un Procedimiento
– Llamada a un procedimiento
– Parámetros de un procedimiento
 Casos propuestos
 Evaluación de la capacidad

CAPACIDAD DEL CAPÍTULO

 Incorpora funciones VBA dentro de una aplicación.


 Implementa funciones definidas por el usuario.
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 129

• FUNCIONES -INTRODUCCIÓN A LAS FUNCIONES


Excel tiene como una de sus potencias el uso de las funciones para agilizar las fórmulas dentro de una
hoja de cálculo, cada función tiene un trabajo específico, es decir, una tarea asignada pero cumpliendo
ciertos parámetros que debe asignarle al momento de usarlas. VBA tiene una biblioteca de Funciones
predefinidas y da la opción de poder programar las que usted necesite.

• FUNCIONES PARA CADENAS DE CARACTERES


FUNCIÓN DESCRIPCIÓN
ASC Devuelve el código ASCII de un determinado carácter. ASCII es el acrónimo en inglés
de American Standard Code for Information Interchange, es decir, Código Estándar
Estadounidense para el Intercambio de Información, es un código de caracteres
basado en el alfabeto latino.

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

‘La Respuesta serie 66 según la tabla de código ASCII

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)

‘La Respuesta serie Ñ según la tabla de código ASCII


Format En este se hace uso de la función format para todo de impresión monetaria. Format
aplica un modelado a un valor según su tipo de datos.

Por ejemplo, si necesita imprimir un valor monetario sería de la siguiente forma:

txtR.Text = “El Monto es: $” &Format(monto, “0.00”)


lstR.AddItem “El Monto es: $” &Format(monto, “0.00”)
130 CAP. 6 FUNCIONES Y PROCEDIMIENTOS

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:

MsgBox Format(monto, “Currency”)

Standard
Usada para valores simples no necesariamente monetarios a 2 decimales.

MsgBox Format(monto, “Standard”)

Percent
Usada para valores de tipo porcentaje.

MsgBox Format(IVA, “Percent”)

Long Date
Formatea una fecha completa.

MsgBox Format(d, “Long Date”)


GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 131

Medium Date
Formatea una fecha del tipo día, mes en texto y año.

MsgBox Format(d, “Medium Date”)

Short Date
Formatea una fecha en el formato corto.

MsgBox Format(d, “Short Date”)

Lcase Función que permite convertir una cadena de caracteres en minúsculas.

Por ejemplo:

Dim Texto$: Texto=”VBA”


Msgbox “El texto en minusculas es: “ & LCase(Texto)

‘El Resultado sería: vba

Ucase Función que permite convertir una cadena de caracteres en mayúsculas.

Por ejemplo:

Dim Texto$: Texto=”vba”


Msgbox “El texto en Mayusculas es: “ & UCase(Texto)

‘El Resultado sería: VBA

Len Función que permite determinar el número de caracteres contenido en una cadena,
el resultado esperado es numérico.

Por ejemplo:

Dim Texto$: Texto=”VBA para Excel”


Msgbox “La Cantidad de Caracteres es: “ & Len(Texto)

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

‘El Resultado sería: VBA


Right Función que permite capturar las letras contenidas desde el lado derecho de una
cadena de caracteres.
Por ejemplo:
Dim Texto$: Texto=”VBA para Excel”
Msgbox “Los 2 ultimos caracteres son: “ & Right(Texto,2)

‘El Resultado sería: el


Ltrim Función que permite eliminar los espacios en blanco que se encuentren en el lado
izquierdo de una cadena de caracteres.
Por ejemplo:
Dim Texto$: Texto=” VBA para Excel”
Msgbox “El texto sin espacio izquierdo es: ” & LTrim(Texto)

‘El Resultado sería: VBA para Excel


RTrim Función que permite eliminar los espacios en blanco del lado derecho de una
determinada cadena de caracteres.
Por ejemplo:
Dim Texto$: Texto=” VBA para Excel”
Msgbox “El texto sin espacios derecha es: “ & RTrim(Texto)

‘El Resultado sería: __VBA para Excel


Trim Función que permite eliminar los espacios en blanco de ambos lados de la cadena
de caracteres.
Por ejemplo:
Dim Texto$: Texto=” VBA para Excel “
Msgbox “El texto sin espacios es: “ & Trim(Texto)

‘El Resultado sería: VBA para Excel


Space Función que permite añadir una cantidad determinada de espacios en blanco dentro
de una cadena de caracteres.
Por ejemplo:
Dim Texto1$: Texto1=”VBA”
Dim Texto2$: Texto2=”para Excel”

Msgbox “El texto completo es: “ & Texto1 & Texto2

‘El Resultado sería: VBApara Excel lo cual necesitaría de un


espacio que separa los 2 textos unidos. Lo cambiaríamos por:

Msgbox “El texto completo es: “ & _


Texto1 &Space(1) & Texto2
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 133

• CASO DESARROLLADO 1: FUNCIONES DE TEXTO


Implemente un procedimiento que permita mostrar las estadísticas de las funciones de texto para una
cadena ingresada por el usuario.

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)

‘El Resultado sería: 10.9


Sin Función que permite devolver el seno de un número entero o real.
Por ejemplo:
Dim N#: n = 10.90
Msgbox “El Seno es: “ & Sin(n)

‘El Resultado sería: -0.30


Cos Función que permite devolver el coseno de un número entero o real.
Por ejemplo:
Dim N#: n = 4.7
Msgbox “El Coseno es: “ & Cos(n)

‘El Resultado sería: -0.95


Tan Función que permite devolver la tangente de un número entero o real.
Por ejemplo:
Dim N%: n = 60
Msgbox “La Tangente es: “ & Tan(n)

‘El Resultado sería: 0.32


GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 135

Sqr Función que permite devolver la raíz cuadrada de un número entero.


Por ejemplo:
Dim N%: n = 2
Msgbox “La raiz cuadrada es: “ & Sqr(n)

‘El Resultado sería: 1.4142


Fix Función que permite devolver el valor entero redondeando al exceso a un número real.
Por ejemplo:
Dim N#: n = 10.9
Msgbox “El Valor es: “ & Fix(n)

‘El Resultado sería: 11


Hex Función que permite devolver un valor entero en un valor hexadecimal.
Por ejemplo:
Dim N%: n = 10
Msgbox “El Valor hexadecimal es: “ & Hex(n)

‘El Resultado sería: A


Int Función que permite devolver sólo la parte entera de una operación, expresión o número.
Tenga en cuenta que esta función no redondea el valor sólo captura la parte entera.
Por ejemplo:
Dim N#: n = 10.9
Msgbox “El Valor entero es: “ & Int(n)

‘El Resultado sería: 10


Log Función que permite devolver el logaritmo natural de un número entero en base e.
Por ejemplo:
Dim N%: n = 9
Msgbox “El Logaritmo Natural es: : “ & Log(n)

‘El Resultado sería: 0.9542


Rnd Función que permite devolver un número aleatorio entre 0 y 1, pero usted puede
modificar para que le devuelva números diferentes, para eso necesita una estructura
repetitiva que se verá en los capítulos posteriores, pero se adelantará un poco el tema:
Por ejemplo: se necesita imprimir por medio de mensajes al usuario 10 números
aleatorios entre 20 y 40.
Sub Aleatorio()
Dim inicio%: inicio = 20
Dim tope%: tope = 40
For i = 1 To 10
MsgBox Int((tope - inicio + 1) * Rnd + inicio)
Next
End Sub
Val Función que permite representar un valor textual en un valor numérico. Si usted
ingresa un valor por un Cuadro de texto o por la función InputBox, VBA entenderá
que usted ingresó un texto a pesar de ingresar un número, Val convierte ese valor
numérico ingresado como texto por el teclado a un número operable.
Por ejemplo:
Dim N%: n = InputBox(“Ingrese un numero entero: “)
Dim suma%: suma = Val(n) + 100
Msgbox “El Resultado es: “ & suma|
136 CAP. 6 FUNCIONES Y PROCEDIMIENTOS

• CASO DESARROLLADO 2: NÚMEROS ALEATORIOS


Crear un procedimiento que permita mostrar los números aleatorios de los siguientes rangos:

 Del 1 al 10.
 Del 11 al 20.
 Del 21 al 30.

Al final implementar un procedimiento que permita limpiar la lista.

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

La instrucción Sheets(1).Cells(4 + I, 2).Value = I; permite imprimir los valores que puede


tener I en este caso imprimirá del 1 al 20.

La instrucción Sheets(1).Cells(4 + I, 3).Value = Int((tope - inicio + 1) * Rnd +


inicio) imprime los números aleatorios comprendidos entre el valor de inicio y el tope declarado al
inicio con valores iniciales de 1 y 10 respectivamente.

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

‘El Resultado sería: 20/03/2012

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)

‘El Resultado sería: 20/04/2012 si la fecha actual sería


20/03/2012.

A continuación se muestra la tabla de Intervalos que pueden ser


usados en la función DateAdd y en otras funciones.

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

Msgbox “La Fecha actual es: “ & Date


Msgbox “La días transcurridos es: “ & _
DateDiff(“m”,FechaAnterior,Date)

‘El Resultado sería:


‘La Fecha actual es: 20/03/2012
‘Los días transcurridos son:02
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 139

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)

‘El Resultado sería:


‘La Fecha actual es: 20/03/2012
‘El mes es: 03
Year Función que permite devolver el año de una determinada fecha.
Por ejemplo:
Msgbox “La Fecha actual es: “ & Date
Msgbox “El Año es: “ & Year(Date)

‘El Resultado sería:


‘La Fecha actual es: 20/03/2012
‘El Año es: 2012
Month Función que permite devolver el mes de una determinada fecha.
Por ejemplo:
Msgbox “La Fecha actual es: “ & Date
Msgbox “La Mes es: “ & Month(Date)

‘El Resultado sería:


‘La Fecha actual es: 20/03/2012
‘El mes es: 03
Day Función que permite devolver el día de una determinada fecha.
Por ejemplo:
Msgbox “La Fecha actual es: “ & Date
Msgbox “El Día es: “ & Day(Date)

‘El Resultado sería:


‘La Fecha actual es: 20/03/2012
‘El día es: 20
Hour Función que permite devolver la hora de un determinado tiempo.
Por ejemplo:
Msgbox “La Hora actual es: “ & Time
Msgbox “La Hora es: “ & Hour(Time)

‘El Resultado sería:


‘La Fecha actual es: 12:22:10am
‘El Hora es: 12
Minute Función que permite devolver los minutos de un determinado tiempo.
Por ejemplo:
Msgbox “La Hora actual es: “ & Time
Msgbox “La Minutos son: “ & Minute(Time)

‘El Resultado sería:


‘La Fecha actual es: 12:22:10am
‘Los minutos son: 22
140 CAP. 6 FUNCIONES Y PROCEDIMIENTOS

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)

‘El Resultado sería:


‘La Fecha actual es: 12:22:10am
‘Los segundos son: 10

Now Función que permite devolver la fecha actual del sistema.


Por ejemplo:
Msgbox “La Fecha actual es: “ & Now

‘El Resultado sería:


‘La Fecha actual es: 20 de Marzo 2012

Time
Función que permite devolver la hora actual del sistema.
Por ejemplo:
Msgbox “La Hora actual es: “ & Time

‘El Resultado sería:


‘La Hora actual es: 12:22:10am

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)

‘El Resultado sería:


‘La Fecha actual es: 20/03/2012
‘El día es:3

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

• CASO DESARROLLADO 3: FUNCIONES DE FECHAS


Implemente un procedimiento que permita mostrar las funciones principales de las fechas.

Solución al caso: en la hoja1 prepare el siguiente entorno.

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

No se olvide de crear el botón de controles de formulario para enlazarlo al procedimiento


implementado.
142 CAP. 6 FUNCIONES Y PROCEDIMIENTOS

• CASO DESARROLLADO 4: CÁLCULO DE EDAD


Implemente un procedimiento que permita mostrar la edad de una persona la cual sólo debe ingresar su
fecha de nacimiento. La aplicación debe solicitar la fecha de nacimiento de la siguiente forma:

Fig. 6-12

Solución al caso:
En la hoja2 de Excel implemente el siguiente entorno:

Fig. 6-13

En el mismo módulo del caso anterior implementar el siguiente código:

Fig. 6-14

No se olvide de colocar un botón desde los controles de formulario para llamar al procedimiento
implementado.

• CASO DESARROLLADO 5: VENTA AL CRÉDITO


Una persona compra un producto al crédito en 4 letras, la venta se registró el día de hoy, por lo tanto las
4 letras deben regir a partir de la fecha de la venta. Debe implementar un procedimiento que calcule las
4 fechas que el cliente debe hacer su pago por concepto del crédito adquirido.
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 143

Solución al caso:
En la hoja3 de Excel implemente la siguiente ventana:

Fig. 6-15

En el mismo módulo del caso anterior implementar el siguiente código:

Fig. 6-16

• CASO DESARROLLADO 6: CÁLCULO DE DÍAS


Una empresa de reparto de mercaderías quiere realizar una estadística de los días que se está tomando
en enviar el pedido, para lo cual se necesita registrar la fecha de pedido y la fecha de entrega de
cierta cantidad de productos. La fecha de pedido ya se encuentra registrada en Excel. Implemente un
procedimiento que permita solicitar el registro de la fecha de pedido y muestre la diferencia entre días
con respecto a la fecha actual.

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.

En el mismo módulo del caso anterior implementar el siguiente código:

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

Al final en la hoja4 de Excel no se olvide de enlazar un botón de control de formulario al procedimiento


implementado en el módulo, como se ve a continuación:

Fig. 6-20

• FUNCIONES DE CONVERSIÓN DE TIPO


Estas funciones tienen por misión convertir de un tipo a otro dependiendo de la necesidad de la variable,
tenga en cuenta que hay variables que no necesitan ser convertidas por encontrarse dentro del ámbito
del tipo de datos como son los enteros dentro de los de simple precisión o doble precisión.

cInt Función que permite convertir un valor en el tipo Integer.


Por ejemplo: suponga que se ingresa un valor número por el teclado por medio de
un objeto textual llamado cuadro de texto.
Dim N%
N = CInt(txtN.text)

O también sería válido expresarlo de la siguiente manera:

Dim N%
N = Val(txtN.text)

Val es una función que representa la conversión a todo tipo de


valor numérico, es decir,a Integer, Single, Double, Long, etc.

CCur Función que permite convertir un valor en el tipo Currency.


Por ejemplo: suponga que se ingresa un valor monetario por el teclado por medio
de un objeto textual llamado cuadro de texto.
Dim Monto@
Monto@ = CCur(txtMonto.text)

O también sería válido expresarlo de la siguiente manera:

Dim N@
N = Val(txtMonto.text)
146 CAP. 6 FUNCIONES Y PROCEDIMIENTOS

CBool Función que permite convertir un valor en el tipo Boolean.


Por ejemplo: suponga que se ingresa un valor verdadero o falso por un cuadro de
texto.
Dim Opcion as Boolean
Opcion = CBool(txtOpcion.text)

CDate Función que permite convertir un valor en el tipo Date.


Por ejemplo: suponga que se ingresa un valor tipo fecha, como la fecha de
nacimiento, por el teclado por medio de un objeto textual llamado cuadro de texto.
Dim FechaNac as Date
FechaNac = CDate(txtFechaNac.text)

CDbl Función que permite convertir un valor en el tipo Double.


Por ejemplo: suponga que se ingresa un valor por el teclado usando un cuadro de
texto.
Dim Numero#
Numero = CDbl(txtNumero.text)

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)

CStr Función que permite convertir un valor numérico en el tipo String.


Por ejemplo: suponga que declara un valor como numérico pero lo quiere usar como
valor textual.
Dim Numero%, TextoNumerico$
Numero = CInt(txtNumero.text)

‘Convertirlo a cadena
TextoNumerico = CStr(Numero)
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 147

• FUNCIONES DE COMPROBACIÓN DE VALOR


Estas funciones tienen por misión verificar si el tipo de valor ingresado por algún medio a la aplicación
cumple con los requisitos necesarios para el objeto. Suponga que ingresa valores en una caja de texto y
quiere detectar que no esté vacía o que el valor sea exclusivamente numérico, entonces pondrá atención
a las siguientes funciones que le servirán como validación de cada objeto contenido en el UserForm.

Isnumeric Función que permite determinar si un valor es numérico, su valor de respuesta es


booleano.
Por ejemplo: suponga que quiere validar si el ingreso de un valor es numérico o no,
sería:
If IsNumeric(txtN.text) Then
Dim N%
N = CInt(txtN.text)

Else
Msgbox “El valor ingresado no es Numerico”
End IF

En el código anterior se compara si es numérico para poder capturarlo; caso contrario


se muestra un mensaje de error indicando que ese valor no es número.
Ahora si quiere bloquear desde el ingreso los valores textuales podría digitar los
siguiente:

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

En la segunda forma se aplica la negación sobre la condición que pregunta si la caja


está vacía, caso contrario envía un mensaje de error.

Tercera Forma:
If Trim(txtFrase.text) = Empty Then
Msgbox “Debe ingresar un valor en el Cuadro”
Else
Dim Frase$
Frase = txtFrase.text

End IF

En la tercera forma de evaluación si la cadena está vacía en la condición ocurre en


forma contraria a la segunda forma.

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

En la cuarta forma está comparando si la longitud de la cadena txtFrase es mayor


a 0, es decir, por lo menos hay uno, entonces captura los datos y los proceso, de lo
contrario envía un mensaje de error.
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 149

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

En el código anterior se compara si es de tipo fecha para poder capturarlo; caso


contrario se muestra un mensaje de error indicando que ese valor no es una fecha
válida.

• FUNCIONES DEFINIDAS POR EL USUARIO


Una función definida por uno mismo implica que podrá crear
funciones de acuerdo a criterio propio y no al criterio que Excel
propone con sus funciones establecidas. Imagine que usted ahora
tendrá la oportunidad de crear funciones que ayuden a reducir
las extensas fórmulas en la hoja de Excel, hay que tener en cuenta
que estas funciones nuevas deben también funcionar en las hojas
de Excel como lo hace cualquier función usada hasta el momento,
para que esto suceda debe respetar ciertos patrones de diseño
que se detallarán más adelante en este mismo capítulo.

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.

• ESTRUCTURA DE UNA FUNCIÓN


Una función teóricamente es un conjunto de instrucciones que tienen por misión devolver algún valor
como respuesta a quien lo invoque.

Formato de Alcance Function Nombre (Parametros) as TipoDato


Creación de ‘Cuerpo de la Función
una Función Nombre = Valor de Respuesta
End Function
Implementación Public Function miIVA() As Single
en VBA miIVA = Round(19 / 100, 2)
End Function
Uso en Excel - Ubicarse en una celda
- Colocar =miIVA()
150 CAP. 6 FUNCIONES Y PROCEDIMIENTOS

Donde:

 Alcance: define el ámbito de la función. Puede ser pública, privada o estática.


 Función: palabra reservada para la definición de una función en VBA.
 Parámetros: un parámetro representa un valor necesario para la implementación de la función, en
caso de más de 2 parámetros separarlos por comas.

Formato:
Forma 1 Public Function nombre(ByVal NombreParametro)
Forma 2 Public Function nombre(ByVal NombreParametro as TipoDato)

Ejemplo:

Ejemplo 1 Public Function miRaiz2 (ByVal n)


Ejemplo 2 Public Function miRaiz2(ByVal n as Integer)

 As TipoDato: en la definición de la función se mencionó que el objetivo de una función es devolver


un resultado a quien lo invoque; por lo tanto, esa salida también se puede definir de qué forma será
enviado al exterior de VBA.

Public Function miIVA() As Double


miIVA = Round(19 / 100 , 2)
End Function

La función miIVA tiene por resultado 0.19 este valor resultante tiene que ser declarado como salida
de tipo Double.

 End Function: determina la finalización de la Función.

• ÁMBITO DE UNA FUNCIÓN


El ámbito o alcance de una función define hasta donde se podrá usar dicha función, se evaluará cada
uno de los ámbitos.

Modificador de Elementos que se


Nivel de acceso concedido
Acceso puede declarar
Módulos
No tiene restricciones.
Procedimientos
Public Cualquier código que puede ver un
Variables
elemento público podrá tener acceso a él.
Funciones
Módulos
Sólo puede ser accesible desde el mismo Procedimientos
Private
lugar donde se declaró. Variables
Funciones
Sólo puede ser accesible desde el mismo Módulo de Clase
Protected lugar de su declaración y las clases Clase
derivadas de él. Variables de Clase
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 151

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.

• TIPO DE DATO DE RETORNO


Una función tiene por característica devolver un valor a quien lo invoca, dicho valor puede tener
asignado un tipo de datos, dicho de otra manera el tipo de dato de retorno es el tipo que devolverá a
quien lo invoque y este a su vez lo tiene que recibir con el mismo tipo para poder trabajarlo.

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.

• LLAMADA A UNA FUNCIÓN


La llamada a una función tiene varios ámbitos, vea el formato:

Forma 1: Desde Si la función se implementó dentro de un módulo y se asigna la visibilidad


Excel pública, entonces podrá ser accesible desde cualquier hoja de cálculo de
Excel de la siguiente forma:

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

• PARÁMETROS DE UNA FUNCIÓN


Una función puede o no tener parámetros, eso dependerá de la naturaleza del problema, es decir, para
determinar si debo o no colocar parámetros es necesario preguntarse ¿Para qué la función cumpla con
la tarea encomendada necesita de algún valor? Si la respuesta es sí, entonces tendrá que implementar
parámetros.

Vea su formato:

Forma 1 (ByVal NombreParametro as TipoDatos)


Forma 2 (ByRef NombreParametro as TipoDatos)

Ahora, si usted necesita más de 2 parámetros entonces sólo sepárelos por comas, así como sigue:

(ByVal P1 as Tipo, ByVal P2 as Tipo)

(ByRef P1 as Tipo, ByRef P2 as Tipo)

¿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

• CREAR FUNCIONES DEFINIDAS POR EL USUARIO


1. Implemente una Función pública que permita determinar el volumen de una esfera de radio R,
dado por la siguiente formula: 4/3 πr3

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

El explorador de proyectos deberá tener el siguiente aspecto:

Fig. 6-25
154 CAP. 6 FUNCIONES Y PROCEDIMIENTOS

Paso 3: implemente la Función volumenEsfera con un parámetro llamada radio.

Public Function volumenEsfera(ByVal radio) As Double


'VE tiene por misión devolver el volumen de la esfera
Dim VE As Double

'Asignando el valor de la fórmula a la variable VE


VE = 4 / 3 * 3.1415 * radio ^ 3

'Asignando el resultado a la función


'redondeado a 2 decimales
volumenEsfera = Round(VE , 2)
End Function

Paso 4: pruebe la función en Excel, escribiendo en la celda C5 la función =volumenEsfera(C4).

Paso 5: grabar el libro.


 Presione F12.
 Seleccione la ubicación donde se guardará el archivo.
 Asigne un nombre y el tipo de archivo: Habilitado para macros.

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.

Public Function reves3Cifras(ByVal N) As Integer


'Declaración de variables
Dim Reves As Integer, A As Integer, B As Integer
Dim C As Integer

'Operaciones para descomponer un número entero de 3 cifras


C = N Mod 10
B = (N \ 10) Mod 10
A = (N \ 10) \ 10

'Componer el número de 3 cifras al revés


reves = C * 100 + B * 10 + A

'Enviando la respuesta a la función


reves3Cifras = reves
End Function

Paso 3: Pruebe la función en Excel.

Paso 4: Grabe el libro.

• OPCIONES DE LAS FUNCIONES


Agregar una función al módulo
Se vio que para implementar una segunda función dentro del mismo módulo se deberá colocar el
código dentro del mismo, pero a través del menú de opciones también podrá agregar un procedimiento
de tipo función al módulo.

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

Modificar una función


Para modificar una función sólo tendrá que acceder al módulo y alterar el código fuente de la función,
en el caso de Excel realizar 2 clics sobre la celda donde se aplicó la función personalizada.

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

VBA cuenta con 2 tipos de procedimientos:

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

Formato de Alcance Sub Nombre (Parámetros)


Creación de un ‘Cuerpo del procedimiento
procedimiento End Sub

Implementación Public Sub miIVA()


en VBA Dim miIVA@ = Round(19 / 100, 2)
End Sub
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 157

Uso en Excel  Seleccione la Ficha Programador.


 Inserte en la hoja de Excel un botón de Controles de Formulario.
 Al soltar el mouse automáticamente se mostrará la ventana
de selección de macros, desde aquí se debe seleccionar el
procedimiento.

 Finalmente cambie el nombre del botó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:

Forma 1 Public Sub nombre(ByVal NombreParametro)


Forma 2 Public Sub nombre(ByVal NombreParametro as TipoDato)

Ejemplo:

Ejemplo 1 Public Sub miRaiz2 (ByVal n)


Ejemplo 2 Public Sub miRaiz2(ByVal n as Integer)
158 CAP. 6 FUNCIONES Y PROCEDIMIENTOS

• 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:

Forma 2: Call nombreProcedimiento()


Dentro del Call nombreProcedimiento(Parametros)
Mismo Módulo nombreProcedimiento()

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:

Forma 1 (ByVal NombreParametro as TipoDatos)


Forma 2 (ByRef NombreParametro as TipoDatos)

Ahora, si usted necesita más de 2 parámetros entonces sólo sepárelos por comas, así como sigue:

(ByVal P1 as Tipo, ByVal P2 as Tipo)

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

Área de la Esfera 4πr2


Volumen de la Esfera (4πr3)/3

Análisis:

Entrada  Radio de la esfera


 Área de la Esfera
Salida
 Volumen de la esfera
 Radio
Variables del
 Área
Proceso
 Volumen
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 159

Hoja de Trabajo propuesta:

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

3. En una competencia atlética el tiempo se mide en minutos, segundos y centésimas de segundo y


el espacio recorrido se mide en metros. Implemente una función en VBA que permita determinar la
velocidad promedio de un atleta en km/hr, sabiendo que: velocidad = espacio / tiempo y que:
1 hora = 60 minutos
1 minuto = 60 segundos
1 segundo = 100 centésimas de segundo
1 kilómetro = 1000 metros

Análisis:
Entrada
Salida
Variables del
Proceso
160 CAP. 6 FUNCIONES Y PROCEDIMIENTOS

• EVALUACIÓN DE LA CAPACIDAD

1. ¿Cuál es la diferencia entre una función y un procedimiento?


___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________

2. ¿Qué papel representa un módulo dentro del proyecto VBA?


___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________

3. Liste 2 funciones de Excel y sus respectivos comandos en VBA por ejemplo =SUMA() con la función en
VBA =Sum().
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________

4. ¿Qué función cumplen los parámetros en una función o procedimiento?


___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________

5. Describa brevemente las siguientes funciones:


 Call
 Sqr(N)
 Now()
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
CAPÍTULO

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

CAPACIDAD DEL CAPÍTULO

 Implementa de manera correcta el control de errores en una aplicación VBA.


GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 163

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

• INTRODUCCIÓN A LOS ERRORES EN VBA


En programación se conoce 3 tipos de errores que pueden aparecer al escribir una aplicación en VBA.
Incluso los programadores con más experiencia cometen errores y conocer cómo depurar una aplicación
y encontrar esos errores es una parte importante de la programación. No obstante, antes de obtener
información sobre el proceso de depuración, conviene conocer los tipos de errores que deberá buscar
y corregir.

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:

 Implementar una palabra reservada del lenguaje mal escrita.


 Omitir alguna parte del formato de una instrucción; por ejemplo, la falta de una comilla doble en una
asignación de tipo String.
 Olvidarse cerrar una estructura; por ejemplo, aplicar un if y no finalizarlo con End If.

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 en tiempo de ejecución


Estos tipos de errores se muestran cuando se ejecuta su aplicación VBA. Estos aparecen normalmente
cuando su programa intenta una operación que es imposible que se lleve a cabo. Un ejemplo de esto es
la división por cero. Observe la siguiente expresión X=3/0, la pregunta sería ¿Qué numero multiplicado
por cero da como resultado 3? La respuesta es clara, no tiene valor ya que no hay ningún número que
multiplicado por cero de 3. Pero si lo colocamos X=0/3, si tendría una respuesta adecuada, le pregunto
¿Que número multiplicado por 3 me da como resultado cero? Pues la respuesta es cero.

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.

• CONTROL BÁSICO DE ERRORES CON ON ERROR GOTO


La instrucción On Error Goto habilita una rutina de control de errores y especifica la ubicación de la rutina
dentro de un módulo de la aplicación en VBA; hay que tener en cuenta que el error podría ocurrir en
cualquier línea del código fuente o podría ocurrir todo lo contrario que en el aplicación no ocurra ningún
error.

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

Vea el formato de la instrucción On Error Goto

On Error { GoTo [ line | 0 | -1 ] | Resume Next }

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

Devuelve el número de error cometido, este es administrado por el mismo


lenguaje VBA, en el futuro este número puede ser parte de una condicional.
Number Por ejemplo:

MsgBox “El Numero del Error es: >>” & Err.Number

Source Devuelve el nombre del objeto de dónde provino el error.


166 CAP. 7 GESTIÓN DE ERRORES

• LISTADO DE ERRORES RECONOCIDOS POR VBA


VBA como se comentaba anteriormente tiene una biblioteca de errores donde se almacena los errores
por un número y una descripción, mostraremos algunos de ellos:

NÚMERO
DESCRIPCIÓN DEL ERROR
DE ERROR

5 La llamada al procedimiento Sub no es válida.

Error de desbordamiento de datos, esto ocurre cuando la variable es declarada de


6
un tipo de datos inferior al resultado.

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.

Error de coincidencia de tipos, ocurre cuando una variable es declarada de un tipo


13
y el valor asignado a dicha variable es de otro.

• CASO DESARROLLADO 1: VENTA DE REPUESTOS


Una empresa automotriz desea calcular el precio de venta de sus repuestos adquiridos, para lo cual debe
ingresar el precio de compra del repuesto y el valor del porcentaje de ganancia del producto. Cree una
función en VBA que permita determinar el precio de ganancia de dicho repuesto.

Análisis

 Precio de compra del repuesto


Entrada
 Valor numérico de ganancia sobre el producto

Salida  El precio de venta del repuesto

 precioCompra es el precio con el que se adquirió el repuesto.


Variables  ganancia es el valor de ganancia sobre el precio de compra del
del Proceso repuesto.
 precioVenta es el precio de venta al usuario.
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 167

Hoja de Excel propuesta:

Fig. 7-1

Código Fuente de la solución:

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

• CASO DESARROLLADO 2: DIVISIÓN DE NÚMEROS


Se necesita implementar una función que permita calcular la división entre 2 números enteros. Debe
validar la división por cero controlada con un mensaje de error desde la aplicación.

Fig. 7-3

Análisis

 Valor del cociente.


Entrada
 Valor del divisor.

Salida  La división de los números.

 Cociente es el valor numérico de la división.


Variables
 Divisor es el valor numérico de la división.
del Proceso
 División es el resultado de la división entre el cociente y el divisor.

Hoja de Excel propuesta:

Fig. 7-4
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 169

Código Fuente de la solución:

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?
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________

3. Mencione 2 errores típicos de programación y asígnele un ejemplo.


___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________

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?
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________

5. Describa brevemente a su concepto las siguientes instrucciones:

 Err.Description
 Err.Number
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
CAPÍTULO

8
ESTRUCTURA CONDICIONAL

 Estructura condicional - Introducción


 Estructura de selección simple If…Then
 Operadores lógicos y Relacionales
 Caso Desarrollado 1: Venta de Productos
 Estructura de selección doble If…Then…Else
 Estructura de selección doblemente encadenada If…Then…ElseIf
 Caso Desarrollado 2: Salario de Trabajadores
 Casos Propuestos
 La clase Option Button
 La clase Check Box
 Caso Desarrollado 3: Agenda Básica
 La clase ComboBox
 La clase ListBox
 Caso desarrollado 4: Selección de Países
 Caso desarrollado 5: Ciudad-País
 Estructura de selección múltiple Select-Case
 Caso desarrollado 6: Registro de Software
 Caso desarrollado 7: Registro de Pasajeros
 Instrucción With
 Validaciones
 Caso desarrollado 8: Tienda Comercial
 Caso propuesto

CAPACIDAD DEL CAPÍTULO

 Implementa de manera correcta la estructura selectiva en una aplicación VBA.


GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 173

• ESTRUCTURA CONDICIONAL - INTRODUCCIÓN


¿Qué es una condición? Está vinculada a la propiedad o naturaleza de las cosas. El concepto puede
usarse para nombrar al estado o situación en que se halla algo. Se podría decir que al encontrarse en una
condición específica debe pensar en las diferentes acciones que tomaría en una determinada situación.

El caso de la Renovación del Águila. Veamos un caso para poder


entender la idea de la condicional en el mundo real, el águila es
una de las aves de mayor longevidad. Llega a vivir setenta años.
Pero para llegar a esa edad, en su cuarta década tiene que tomar
una seria y difícil decisión.

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.

• ESTRUCTURA DE SELECCIÓN SIMPLE IF…THEN


La estructura de selección simple if evalúa una condición lógica y en caso resulte verdadera efectúa la
acción. En caso que la condición resulte falsa, continúa con la siguiente instrucción del programa. La
acción puede ser simple (una sola acción) o compuesta (bloque de acciones).

Fig. 8-1
174 CAP. 8 ESTRUCTURA CONDICIONAL

Formatos:

Este formato se usa cuando se tiene una sola acción que


ejecutar en una condición verdadera. If Condición Then Accion

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.

• OPERADORES LÓGICOS Y RELACIONALES


Son operadores que se utilizan para crear condiciones lógicas. Una condición lógica es una expresión que
puede ser verdadera (true) o falsa (false) y puede incluir operadores aritméticos.

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

Ejemplo de Condicionales en formato If Simple:

Si tiene la variable Edad

Mostrar el mensaje: If Edad>17 Then Mensaje=”Mayor de Edad”


Mayor de Edad If Edad>=18 Then Mensaje=”Mayor de Edad”

Si tiene la variable Categoría que varía entre A, B y C

Mostrar el mensaje:
If Categoría = “A” Then Mensaje=”Categoría A”
Categoría B

Si tiene la variable Fecha de Nacimiento

Mostrar el mensaje: If FechaNac = #04/05/1990# Then


Nacido el 4 de Mayo Mensaje=”Nacido el 4 de Mayo de 1990”
de 1990 End If
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 175

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)

Vea la tabla de la verdad lógica

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

Ejemplo de Condicionales en formato If Simple con Operadores Lógicos:

Si tiene la variable Edad


Mostrar el mensaje: If Edad>=15 AND Edad<=20 Then
entre las Edades Mensaje=”Su edad esta entre 15 y 20”
de 15 a 20 End If

Si tiene la variable Categoría que varía entre A, B y C

Mostrar el mensaje: If Categoría = “A” OR Categoría=”C” Then


Categoría A o C Mensaje=”Su Categoría puede ser A o C”
End If

Si tiene la variable Fecha de Nacimiento

Mostrar el mensaje: If FechaNac>#31/12/1989# AND FechaNac<#01/01/1991# Then


Nacido en el 1990 Mensaje=”Nacido en el Año 90”
End If

• CASO DESARROLLADO 1: VENTA DE PRODUCTOS


Una tienda vende 4 tipos de productos cuyos códigos son 201, 202, 203 y 204 a los precios unitarios
dados en la siguiente tabla:

Código Precio Unitario


201 21.50
202 17.00
203 32.90
204 18.50
176 CAP. 8 ESTRUCTURA CONDICIONAL

Como oferta la tienda ofrece un porcentaje de descuento sobre el importe de la compra de acuerdo a
la siguiente tabla:

Importe Compra Descuento


>=700 16%
>=500 pero <700 14%
>=200 pero <500 12%
<200 10%

En Excel deberá mostrar la siguiente pantalla, prepárelo en la Hoja 1:

Fig. 8-2

Tenga en cuenta:

 El Botón Formulario de Compra debe


mostrar el Formulario creado en VBA, el
Botón Limpiar Todo deberá limpiar los
productos registrados hasta el momento.
 Los bordes por cada producto deberán
aparecer sólo cuando se registre dicho
producto, caso contrario debe estar vacío.
 El cálculo del Subtotal, Descuento y el
Neto a pagar se debe realizar desde VBA.

Solución. Formulario VBA Propuesto.


Fig. 8-3
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 177

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

• ESTRUCTURA DE SELECCIÓN DOBLE IF…THEN…ELSE


La estructura de selección doble if...else (si…sino) evalúa una condición lógica y en caso que resulte
verdadera efectúa la acción del Bloque1; de lo contrario, efectúa la acción del Bloque2. Tanto Bloque1
como Bloque2 pueden ser acciones simples (una sola acción) o acciones compuestas (un bloque de
acciones).

Fig. 8-8
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 179

Aquí se presentan 2 formatos, vea:

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.

• ESTRUCTURA DE SELECCIÓN DOBLEMENTE ENCADENADA IF…THEN…ELSEIF


Esta estructura tiene la misma característica de la función Si de Excel en la cual se podría implementar
otra, si dentro de la misma función formada así un anidamiento de condiciones, VBA lo presenta de la
siguiente manera:

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:

If Categoría = “A” Then


Mensaje=”Categoría A”
Mostrar el mensaje A o B o C Else If Categoría =”B” Then
dependiendo de la categoría Mensaje=”Categoría B”
del Trabajador Else
Mensaje=”Categoría C”
End If

• CASO DESARROLLADO 2: SALARIO DE TRABAJADORES


Aplicación que determine el Salario Bruto y Neto Mensual 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/. 700.00. Mostrar salario Bruto, Impuesto y Salario Neto. El Costo por hora varía de
acuerdo a su categoría, como se muestra a continuación:

Categoría Precio por Hora


A 40
B 30
C 20
D 10
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 181

Hoja de Excel. Pago de Trabajadores

Formulario VBA Propuesto

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:

Área Porcentaje del presupuesto


Ginecología 40%
Traumatología 30%
Pediatría 30%

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

En una hoja de Excel mostrar todos los importes.


GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 185

• LA CLASE OPTION BUTTON


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

En la Fig. 8.16 se está enmarcado todos los objetos que son tipo Option Button (Botón de Opción).

Propiedades

(Name) Es el nombre que se le asignará al objeto de tipo Option Button, según la


nomenclatura de nombres deberá empezar con opt. Ejm: optOpcion1, opt6
Permite determinar la ubicación del texto con respecto al diseño de la opción.
 0 fmAligmentLeft (El texto se alínea a la izquierda)

Alignment
 1 fmAligmentRight (El texto se alínea a la derecha)
186 CAP. 8 ESTRUCTURA CONDICIONAL

Caption Determina el contenido del Botón de Opción.


Muestra un mensaje al colocar el botón del mouse encima del objeto Botón de
Opción.

ControlTipText

ForeColor Determina el color del texto contenido en el Botón de Opción.


Bloquea en tiempo de diseño y no permite su manipulación del objeto Botón
Locked
de Opción.
Permite asignar una imagen al Botón de Opción.

Picture

WordWrap Permite mostrar varias líneas de texto del Botón de Opción.

• 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

Es el nombre que se le asignará al objeto de tipo CheckBox, según la nomenclatura


(Name)
de nombres deberá empezar con chk. Ejm: chkEstado, chkFutbol
Permite determinar la ubicación del texto con respecto al diseño de la casilla de
verificación.
 0 fmAligmentLeft (El texto se alinea a la izquierda)

Alignment

 1 fmAligmentRight (El texto se alinea a la derecha)

Caption Determina el contenido de la casilla de verificación.


Muestra un mensaje de ayuda al colocar el mouse encima del objeto Casilla de
ControlTipText
Verificación.
Permite determinar el tipo de letra, estilo y tamaño del texto contenido en la
Font
casilla de verificación.
ForeColor Determina el color del texto contenido en la casilla de verificación.
188 CAP. 8 ESTRUCTURA CONDICIONAL

Bloquea en tiempo de diseño y no permite la manipulación del objeto Casilla


Locked
de Verificación.
Picture Permite asignar una imagen en el objeto Casilla de Verificación.
La determinación de un valor en tiempo de diseño permite activar o desactivar
el objeto Casilla de Verificación. Eso dependerá del programador ya que en
tiempo de ejecución se observará marcado o no; dependiendo de lo que le
asigne en la propiedad. Para modificar esta propiedad deberá digitar True o
False.
Value

WordWrap Permite mostrar varias líneas de texto del objeto Casilla de Verificación.

• CASO DESARROLLADO 3: AGENDA BÁSICA


Implemente una aplicación que permita tener un control de una Agenda Básica, la cual cuenta con las
siguientes características:

 Registrar apellidos, nombres, teléfono, email.


 Registrar sus preferencias mostrando un mensaje dependiendo de las casillas que active, para este
caso sólo 3:

Jugar Play Station "Si Juega Play Station"


“No Juega Play Station”
Jugar Futbol "Si Juega FutBol, muy bien...!!"
“Creo que le gusta otro deporte..!!”
Escuchar Música "Tiene una buena Colección de MP3"
“Creo que le gusta leerr....!!!”

Formulario Propuesto: Agenda Básica

Fig. 8-19
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 189

Aplique las siguientes propiedades a los objetos colocados en el UserForm:

(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

Código fuente del botón REGISTRAR del UserFormfrmAgenda

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

Registro Personal (Agenda Básica) presentación final en la hoja de Excel:

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

En la Fig. 8.25 se está enmarcando el objeto de tipo Cuadro Combinado (ComboBox)

Propiedades del objeto:

Es el nombre que se le asignará al objeto de tipo Cuadro Combinado, según la


(Name)
nomenclatura de nombres deberá empezar con cbo. Ejm: cboDestino, cboProducto.
Enabled Establece como activo o inactivo al objeto de tipo Cuadro Combinado.
Font Determina el tipo de letra, estilo y tamaño de un objeto de tipo Cuadro Combinado.
Determina el color del texto contenido en el objeto de tipo Cuadro Combinado.

ForeColor

Permite configurar la forma de visualización de los datos del contenedor del objeto
Cuadro Combinado. Tenemos:

 0 fmStyleDropDownCombo
Style  2 fmStyleDropDownList

La diferencia entre 0 y 2 es que el fmStyleDropDownCombo permite colocar un texto


en el cuadro combinado, en cambio el fmStyleDropDownList sólo permite seleccionar
una de las opciones de la lista sin permitir el digitado de textos.
Permite asignar un texto sobre el objeto de tipo Cuadro Combinado, no es muy
habitual asignar un texto pero se le podría implementar para indicarle al usuario que
debe seleccionar algún elemento del combo.

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

También llamado Cuadro de Lista o Lista, este objeto


permite mostrar una lista de ítems que podrían
ser valores de respuesta a algún evento o permitir
la selección para realizar alguna acción con este
elemento seleccionado.

En la Fig. 8.26 se está enmarcado el objeto de tipo


cuadro de Lista (ListBox).
Fig. 8-26

Propiedades del objeto:

Es el nombre que se le asignará al objeto de tipo Cuadro de Lista, según la nomenclatura


(Name)
de nombres deberá empezar con lst. Ejm: lstR, lstProductos
Enabled Establece como activo o inactivo al objeto de tipo Cuadro de lista.
Font Determina el tipo de letra, estilo y tamaño de un objeto de tipo Cuadro de lista.
ForeColor Determina el color del texto contenido en el objeto de tipo Cuadro de lista.
TextAlign Permite configurar la alineación de los datos contenidos en el objeto Cuadro de lista.

Métodos del objeto Cuadro de Lista:

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:

 Enviar un valor directamente al Cuadro de Lista:


AddItem
lstPais.AddItem “Perú”
 Enviar un valor por medio de una variable al Cuadro de Lista:
Dim Pais$ : Pais “Peru”
lstPais.AddItem Pais
 Enviar un valor con un texto alternativo:
Dim Pais$ : Pais “Peru”
lstPais.AddItem “El País es: “ & Pais
Permite eliminar un elemento del Cuadro de Lista, los demás elementos subirán
RemoveItem una posición. Pongamos el eliminar un elemento de la lista País lstPais.
RemoveItem(1), donde el valor 1 representa la posición del elemento a eliminar.

Clear Borra por completo todos los elementos del Cuadro de lista.
194 CAP. 8 ESTRUCTURA CONDICIONAL

• CASO DESARROLLADO 4: SELECCIÓN DE PAÍSES


Implemente un UserForm en VBA que mostrado una lista de Países en un cuadro combinado, permita
listar dicha selección, además de poder imprimir el total de países enviados a la lista.

Fig. 8-27

Aplique las siguientes propiedades a los objetos colocados en el UserForm:

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

Código fuente del UserForm en el evento Activate

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

Código fuente del botón Enviar:

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.

• CASO DESARROLLADO 5: CIUDAD-PAÍS


Implemente un UserForm que permita seleccionar un país de un cuadro combinado y muestre en otro
cuadro combinado las ciudades por cada tipo de país seleccionado. Para este ejercicio trabaje con 3
países y sus principales ciudades:

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

Aplique las siguientes propiedades a los objetos colocados en el UserForm:

(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

Código fuente del UserForm en el evento activate:

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.

Código fuente del cboPais en el evento Change:

En la Fig. 8.32 se tiene que programar en el objeto


objPais ya que desde aquí se seleccionará un
determinado país, note que el evento debe ser
Change, eso quiere decir que por cada cambio de
país se muestran la lista de ciudades llena en el
cboCiudad.

Hay que tener en cuenta donde colocar la


instrucción cboCiudad.clear ya que por
cada país seleccionado el combo de ciudad sólo
debe mostrar las ciudades concernientes al país
seleccionado.
Fig. 8-32
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 197

• ESTRUCTURA DE SELECCIÓN MÚLTIPLE SELECT-CASE


La estructura de Selección Múltiple evaluará una expresión que podrá tomar N valores distintos, 1,2,3…N,
según que elija uno de estos valores en la condición, se realizará una de las N acciones, o lo que es igual,
el flujo del código seguirá un determinado camino entre N posibilidades.

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.

Pasos que se sigue en la estructura Select Case:


 Se evalúa una Expresión.
 Si encuentra una alternativa que contenga el valor de la Expresión, ejecuta la acción correspondiente
y termina la estructura.
 En caso de que no cumpla con ningún valor la Expresión se tomará como Falsa.

Formato:

Select Case Expresión


Case Valor1: Acción1
Según la Expresión se Case Valor2: Acción2
determina qué caso se ……………….
ejecutará. El valor de los casos Case ValorN:AccionN
Else
puede ser Numérico o Textual
AccionFalsa
End Select

Operadores válidos en los case:

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

Representación Gráfica de la estructura Select Case

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.

• CASO DESARROLLADO 6: REGISTRO DE SOFTWARE


Implementar una aplicación en VBA que permita seleccionar un tipo de aplicación y de acuerdo a esa
selección mostrar los programas según el tipo en otro cuadro combinado, al final con el botón mostrar
listará la aplicación y el programa seleccionado.

Solución al caso propuesto:

Fig. 8-35

Aplique las siguientes propiedades a los objetos colocados en el UserForm:

(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

Código fuente del botón Mostrar:

Fig. 8-37

Código fuente del botón Enviar a Excel:

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

• CASO DESARROLLADO 7: REGISTRO DE PASAJEROS

Fig. 8-40
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 201

Aplique las siguientes propiedades a los objetos colocados en el UserForm:

(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

Código fuente del botón Mostrar Resumen:

Fig. 8-42

Código fuente del botón Anular Registro:

Fig. 8-43
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 203

Código fuente del botón Enviar a Excel:

Fig. 8-44

Como en los casos anteriores debe enviar a Excel con un recuadro:

Fig. 8-45
204 CAP. 8 ESTRUCTURA CONDICIONAL

En Excel quedaría de la siguiente manera, no se olvide de implementar el botón de formulario en la hoja


de Excel, con el siguiente código:

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

Formato de la instrucción With:

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.

Para una validación efectiva necesita de las siguientes herramientas:

 01 Estructura Selectiva (If o Select Case)


 01 Funcion (Function)
 01 Mensaje (MsgBox)
206 CAP. 8 ESTRUCTURA CONDICIONAL

Vea una lista de validaciones sobre los objetos 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).

Tiene 3 opciones al escoger:

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

• CASO DESARROLLADO 8: TIENDA COMERCIAL


Una Tienda Comercial de Electrodomésticos ofrece un financiamiento por la compra de sus productos
de la siguiente forma:

Nº Letras Porcentaje de Interés


6 5
12 10
24 15

El UserForm deberá tener el siguiente formato:

Fig. 8-50

Deberá contar con los siguientes criterios:


 Validar los datos del producto, es decir, verifique que se seleccionó un producto y que la cantidad
ingresada sea numérica y no se encuentre vacío. Mostrando los siguientes mensaje según el error:
208 CAP. 8 ESTRUCTURA CONDICIONAL

 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:

 Al eliminar un producto en forma correcta deberá mostrar un mensaje como el siguiente:


GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 209

 Al salir de la aplicación le deberá mostrar un mensaje 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)

Código fuente del Objeto: UserForm, Evento: Activate.

Fig. 8-51
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 211

Fig. 8-52

Fig. 8-53

Fig. 8-54

Código fuente del Objeto: btnComprar, Evento: Click.

Fig. 8-55
212 CAP. 8 ESTRUCTURA CONDICIONAL

Fig. 8-56

Fig. 8-57

Código fuente del Objeto: btnEliminar, Evento: Click.

Fig. 8-58
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 213

Fig. 8-59

Fig. 8-60

Código fuente del Objeto: chkCredito, Evento: ClicK.

Fig. 8-61

Fig. 8-62
214 CAP. 8 ESTRUCTURA CONDICIONAL

Código fuente del Objeto: btnResumen, Evento: ClicK.

Fig. 8-63

Fig. 8-64

Fig. 8-65
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 215

Fig. 8-66

Código fuente del Objeto: btnAnular, Evento: Click.

Fig. 8-67

Código fuente del Objeto: chkCredito, Evento: Click.

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

Finalmente la hoja de Excel tendría el siguiente aspecto:

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:

 El número de veces que se hizo clic en un botón.


 El número de vendedores que superan los $10000.00 mensuales.
 El número de empleados que realizaron horas extras en el último mes.

Un contador puede ser positivo cuando el incremento es +1 o negativo si el incremento es -1.

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:

 El acumulado de sueldos de los empleados de una empresa.


 La edad promedio de un conjunto de personas.
 La suma de las notas de un alumno.
 El acumulado de pagos realizados por un determinado cliente.

Formato:

Acumulador = Acumulador + ValorVariable

Suponga un caso, imagine usted tener a lo largo del día un total de $


1260.00 producto de las ventas realizadas. Para lo cual si se revisa el
total de billetes tendría por ejemplo: 9 billetes de $100.00, 4 billetes
de $50.00, 5 billetes de $20.00 y 6 billetes de $10.00; entonces:

 Total de Billetes: 24 billetes


 Monto total acumulado: $1260.00

Ahora si se quiere más especificación entonces debería contar bajo una condición por cada tipo de
billete. Entonces tendría:

 Total de billetes de $10 : 06 billetes


 Total de billetes de $20 : 05 billetes
 Total de billetes de $50 : 04 billetes
 Total de billetes de $100 : 09 billetes
Total : 24 billetes
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 223

 Monto total acumulado por billetes de $10 : 60.00


 Monto total acumulado por billetes de $20 : 100.00
 Monto total acumulado por billetes de $50 : 200.00
 Monto total acumulado por billetes de $100 : 900.00
Total acumulado : 1260.00

Ahora vea toda la representación en VBA:

Código que If Billete=10 Then


tBilletes10 = tBilletes10 + 1
permite ElseIf Billete=20 Then
contabilizar tBilletes20 = tBilletes20 + 1
los billetes ElseIf Billete=50 Then
dependiendo tBilletes50 = tBilletes50 + 1
ElseIf Billete=100 Then
del tipo del tBilletes100 = tBilletes100 + 1
mismo End If

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.

• CASO DESARROLLADO 1: CONTROL DE PEAJE


Implementar una aplicación en VBA que permita tener el control de los diferentes vehículos que cruzan por
un peaje, la idea es controlar la cantidad de vehículos y la cantidad de pasajeros por cada tipo de auto, tener
en cuenta que los tipos de automóviles permitidos son: auto, camión, camioneta, ómnibus, otros.
Análisis:

 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

 Vehículo: es el tipo de vehículo seleccionado por el usuario.


 Pasajeros: es el número total de pasajeros por tipo de vehículo.
 tAutos: es el número total de autos que pasaron por el peaje.
 tCamion: es el número total de camiones que pasaron por el peaje.
 tCamioneta: es el número total de camionetas que pasaron por el peaje.
Variables del  tOmnibus: es el número total de ómnibus que pasaron por el peaje.
Proceso  tOtros: es el número total de otros autos que pasaron por el peaje.
 aAuto: es el número total acumulado de pasajeros por Auto.
 aCamion: es el número total acumulado de pasajeros por camión.
 aCamioneta: es el número total acumulado de pasajeros por camioneta.
 aOmnibus: es el número total acumulado de pasajeros por ómnibus.
 aOtros: es el número total acumulado de pasajeros por otros autos.

Formulario Propuesto:

Fig. 9-3

Aplique las siguientes propiedades a los objetos colocados en el UserForm:

(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

Hoja de Excel propuesta para el caso:

Fig. 9-4

Código fuente del caso:

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

Al seleccionar el botón FORMULARIO DE REGISTRO deberá mostrar el formulario de registro de peaje y


desde el formulario por cada clic en el botón REGISTRAR enviará los datos a la hoja de Excel y actualizando
la estadística por autos y pasajeros.
230 CAP. 9 ESTRUCTURA REPETITIVA

• SENTENCIA FOR…NEXT, USOS


Al implementar una estructura repetitiva puede contar con la estructura FOR que permite hacer ciclos
repetidos un número determinado de veces, eso quiere decir que debe tener de antemano el valor
inicial y el valor tope de ciclos. La estructura For ejecuta las acciones del cuerpo de un bucle un número
específico de veces y de modo automático, es decir, se controla sólo hasta que alcance el valor tope.

Fig. 9-16

Formatos:

For Variable = ValorInicio TO ValorTope [Step +Valor]


'Cuerpo del Bucle
Next

For Variable = ValorInicio TO ValorTope [Step -Valor]


'Cuerpo del Bucle
Next

Suponga el caso de un corredor que recorre 10 vueltas una pista


atlética, él tiene dos posibilidades apenas empiece a correr la pista,
primero comenzar a contar en forma positiva es decir de uno en
uno hacia delante de la siguiente forma:

Dim i%, Vueltas%: Vueltas=0


For i = 1 To 10
Vueltas = Vueltas + 1
Next

Ahora vea que pasaría si contara al revés, es decir, de uno en uno


pero en forma descendente, el código sería el siguiente:

Dim i%, Vueltas%: Vueltas=0


For i = 10 To 1 Step -1
Vueltas = Vueltas + 1
Next
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 231

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.

Vea algunos casos de la estructura For:

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

Imprimir los 10 Dim i%


For i = 1 To 10
primeros números lstN.AddItem i*2
pares. Next

Imprimir los 10 Dim i%


For i = 1 To 10
primeros números lstN.AddItem i*2-1
impares. Next
Dim i%,n%
Imprimir dentro de una N=Inputbox(“Ingrese Valor para N:”)
lista N veces la palabra For i = 1 To N
VBA Macros. lstN.AddItem “VBA Macros”
Next

• CASO DESARROLLADO 2: TABLA DE MULTIPLICAR


Implementar una aplicación VBA que permita ingresar un número entero y muestre la tabla de multiplicar
de dicho número. Tener en cuenta que sólo debe permitir el ingreso de un número entero, no permitir
el ingreso de textos o dejar vacío, si sucediera así enviar un mensaje al usuario indicándole que hay un
error en el ingreso de datos.
232 CAP. 9 ESTRUCTURA REPETITIVA

UserForm propuesto:

Fig. 9-17

Análisis

Entrada  Número Entero


Salida  Tabla de Multiplicar
Variables del  N representa el número entero de la tabla
Proceso  i que representa el ciclo de repeticiones

Hoja de Excel propuesta:

Fig. 9-18

Aplique las siguientes propiedades a los objetos colocados en el UserForm:

(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

Código fuente del botón Mostrar

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

• CASO DESARROLLADO 3: SERIES NUMÉRICAS


Implementar una aplicación VBA que permita ingresar un número entero y muestre las siguientes series
en una lista.

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

Aplique las siguientes propiedades a los objetos colocados en el UserForm:

(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

Código fuente del botón Serie1:

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.

Código fuente del botón Serie2:

Fig. 9-25
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 237

Código fuente del botón Serie3:

Fig. 9-26

Código fuente del botón Serie4:

Fig. 9-27

Código fuente del botón Serie5:

Fig. 9-28
238 CAP. 9 ESTRUCTURA REPETITIVA

Código fuente del botón Serie6:

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

• CASO DESARROLLADO 4: PIRÁMIDE DE NÚMEROS


Implemente una aplicación en VBA que permita mostrar la pirámide de un número entero ingresado por
el usuario, la idea principal es ingresar el número y la aplicación deberá repetir el número en sucesión
incremental de la siguiente forma:

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

Los formatos que presenta la estructura while son:

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

• CASO DESARROLLADO 5: TIENDA COMERCIAL DE ELECTRODOMÉSTICOS


Una tienda Comercial de Electrodomésticos desea controlar sus ventas realizadas tanto al contado como
al crédito, se debe controlar el cliente, la fecha de la venta, el monto neto, el número de letras y el monto
mensual a pagar por el cliente.

Los precios propuestos para sus productos son los que se muestran en la siguiente tabla:

PRODUCTO PRECIO EN DÓLARES


Lavadora 1500.00
Refrigeradora 3500.00
Televisión 1600.00
Radio-Grabadora 500.00
Cocina 1000.00
Licuadora 300.00

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.

Hoja propuesta en Excel:

Fig. 9-34

Código fuente de la aplicación:

Variables Globales del proyecto

Dim Neto As Currency, pos As Integer

Código del botón Comprar

Private Sub btnComprar_Click()


‘Validar la compra de un producto
If cboProducto.ListIndex = -1 Or _
txtCantidad.Text = Empty Or _
Not IsNumeric(txtCantidad.Text) Then
MsgBox “Error no puede Comprar”
Else
‘Capturar la cantidad de productos
Dim cantidad%: cantidad = Val(txtCantidad.Text)

‘Asignando el Precio a un producto


Dim Precio@: Precio = asignaPrecio(cboProducto.Text)

‘Determinar el Subtotal
Dim SubTotal@: SubTotal = Precio * cantidad

‘Enviar los datos a las listas


lstProductos.AddItem cboProducto.Text
lstCantidad.AddItem txtCantidad.Text
lstSubtotal.AddItem SubTotal

‘Limpiar los elementos


cboProducto.ListIndex = -1
txtCantidad.Text = Empty
End If
End Sub
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 245

Código del botón Eliminar

Private Sub btnEliminar_Click()


If lstProductos.ListIndex = -1 Then
MsgBox “Debe seleccionar un producto a eliminar”, vbCritical
Else
‘Capturamos el indice del producto a eliminar
Dim Indice%
Indice = lstProductos.ListIndex

‘Eliminar los elementos de las listas


Call EliminaListas(Indice)
End If
End Sub

Código del botón enviar a Excel

Private Sub btnEnviar_Click()


Dim Validar$: Validar = ValidaCajas()
If Validar = “” Then
Call ImprimirExcel
Else
MsgBox “Debe registrar el “ & Validar, vbCritical
End If
End Sub

Código del botón Resumen


Private Sub btnResumen_Click()
Dim Letras%: Letras = determinaLetras()
Dim SubTotal@: SubTotal = calculaSubTotal
Call imprimirResumen(SubTotal)
Call ImprimePagos(Letras, Neto)
End Sub

Código del objeto Check

Private Sub chkcredito_Click()


If chkcredito.Value = True Then
Call HabilitaOpciones(True)
Else
Call HabilitaOpciones(False)
End If
End Sub

Código del evento activate del formulario

Private Sub UserForm_Activate()


Call llenaProductos

'Mostrar la fecha actual


lblFecha.Caption = Date

'Inhabilita las Opciones


HabilitaOpciones (False)
End Sub
246 CAP. 9 ESTRUCTURA REPETITIVA

Código del botón borrar los elementos de las listas

Private Sub btnBorrar_Click()


lstProductos.Clear
lstCantidad.Clear
lstSubtotal.Clear
End Sub

Funciones y Procedimientos de la aplicación

Function asignaPrecio(ByVal producto As String) As Currency


If producto = “Lavadora” Then
Precio = 1500
ElseIf producto = “Refrigeradora” Then
Precio = 3500
ElseIf producto = “Television” Then
Precio = 1600
ElseIf producto = “RadioGrabadora” Then
Precio = 500
ElseIf producto = “Cocina” Then
Precio = 1000
ElseIf producto = “Licuadora” Then
Precio = 300
End If
asignaPrecio = Precio
End Function

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

Sub ImprimePagos(ByVal Letras%, Neto@)


lstFechas.Clear
lstMontos.Clear
‘Determinar el Monto por Mes
Dim Monto@: Monto = Neto / Letras

‘Determinar las fechas de pago


For i = 0 To Letras - 1
lstFechas.AddItem DateAdd(“M”, i, Date)
lstMontos.AddItem Format(Monto, “0.00”)
Next
End Sub
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 247

Sub HabilitaOpciones(ByVal Opcion As Boolean)


opt3.Enabled = Opcion
opt6.Enabled = Opcion
opt9.Enabled = Opcion
End Sub

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

Private Sub chkcredito_Click()


If chkcredito.Value = True Then
Call HabilitaOpciones(True)
Else
Call HabilitaOpciones(False)
End If
End Sub

Sub llenaProductos()
With cboProducto
.AddItem “Lavadora”
.AddItem “Refrigeradora”
.AddItem “Television”
.AddItem “RadioGrabadora”
.AddItem “Cocina”
.AddItem “Licuadora”
End With
End Sub

Sub EliminaListas(ByVal Indice As Integer)


lstProductos.RemoveItem (Indice)
lstCantidad.RemoveItem (Indice)
lstSubtotal.RemoveItem (Indice)
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

Sub imprimirResumen(ByVal SubTotal As Currency)


lstR.Clear
‘Calcular el Descuento
Dim Descuento@: Descuento = SubTotal * 0.06
‘Calcular el Neto
Neto = SubTotal - Descuento
‘Imprimir Resumen
lstR.AddItem “El SubTotal es: $” & Format(SubTotal, “0.00”)
lstR.AddItem “El Descuento es: $” & Format(Descuento, “0.00”)
lstR.AddItem “El Neto es: $” & Format(Neto, “0.00”)
End Sub
248 CAP. 9 ESTRUCTURA REPETITIVA

• CASO DESARROLLADO 6: CONSULTA DE DATOS


Crear una aplicación que permita tener el control de los registros de los datos que se encuentran en una
hoja de Excel, hay que tener en cuenta que esta aplicación integrará las estructuras estudiadas hasta el
momento.

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.

El formulario deberá tener el siguiente aspecto:

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.

Si cuenta con la siguiente tabla de datos en Excel:

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

Código fuente de la aplicación:

Al activar el formulario deberá mostrar el cuadro combinado lleno de las Procedencias registradas
en la hoja de Excel sin repetirse.

Private Sub UserForm_Activate()


Sheets(2).Activate
Range(“E6”).Select
E = “” ‘Este es el Primer Elemento
Do
If ActiveCell.Value <> E Then
cboProcedencia.AddItem ActiveCell.Value
End If
E = ActiveCell.Value
ActiveCell.Offset(1, 0).Select
Loop While ActiveCell.Value <> “”
Range(“A1”).Activate
End Sub

Al seleccionar una procedencia deberá mostrar los datos de los alumnos que cumplen con dicho
criterio, es decir, mostrará los alumnos de dicha procedencia.

Private Sub cboProcedencia_Click()


Dim Total%
Sheets(2).Activate
Range(“E6”).Select
lstAlumnos.Clear
Do
If ActiveCell.Value = cboProcedencia.Text Then
lstAlumnos.AddItem ActiveCell.Offset(0, -3).Value & “ “
& ActiveCell.Offset(0, -2).Value & “,”
& ActiveCell.Offset(0, -1).Value
Total = Total + 1
End If
ActiveCell.Offset(1, 0).Select
Loop While ActiveCell.Value <> “”
lblTotal.Caption = Total
End Sub
250 CAP. 9 ESTRUCTURA REPETITIVA

• CASO DESARROLLADO 7: FILTRADO DE ALUMNOS


En esta aplicación usará los mismos datos de los alumnos del caso desarrollado 6, la única variación es
que ahora controlará los datos de los alumnos por medio de un formulario llamado desde el botón Filtro
de Búsqueda.

Fig. 9-36

Formulario propuesta para la aplicación:

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

Código fuente de la aplicación:

Al iniciar el formulario deberá mostrar lleno el cuadro combinado del nivel, grado y sección.

Private Sub UserForm_Activate()


‘Llenando el combo de Nivel
cboNivel.AddItem “P”
cboNivel.AddItem “S”

‘Llenando el combo de Grado


cboGrado.AddItem 1
cboGrado.AddItem 2
cboGrado.AddItem 3
cboGrado.AddItem 4
cboGrado.AddItem 5
cboGrado.AddItem 6

‘Llenando el combo de Sección


cboSeccion.AddItem “A”
cboSeccion.AddItem “B”
cboSeccion.AddItem “C”
cboSeccion.AddItem “D”
End Sub

Al Presionar el botón consultar deberá filtrar a los alumnos según los criterios seleccionados.

Private Sub btnConsultar_Click()


‘Capturando los datos del Filtro
Nivel = cboNivel.Text
Grado = Val(cboGrado.Text)
Seccion = cboSeccion.Text

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

Private Sub cmdExcel_Click()


Dim i%
‘Limpiando el Contenido de las Celdas
Sheets(3).Range(“B9:R100”).ClearContents
252 CAP. 9 ESTRUCTURA REPETITIVA

‘Capturando los datos del Filtro


Nivel = cboNivel.Text
Grado = Val(cboGrado.Text)
Seccion = cboSeccion.Text

‘Enviando los Datos del Filtro


Sheets(3).Range(“D4”).Value = Nivel
Sheets(3).Range(“D5”).Value = Grado
Sheets(3).Range(“D6”).Value = Seccion

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

CAPACIDAD DEL CAPÍTULO

 Reconoce los objetos visuales de VBA.


 Identifica las propiedades de los principales objetos visuales de VBA.
 Implementa una aplicación de integración de todos los objetos visuales en un solo
UserForm.
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 255

• 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

• MANEJO DE CAJAS DE ENTRADA (INPUTBOX)


En muchas ocasiones usted tendrá la necesidad de asignar un valor directamente al código fuente como
por ejemplo:
 Si está en un reporte de productos y necesita solicitar la fecha a reportar.
 Si se encuentra en busca de un cliente entonces solicitar el nombre del mismo.
256 CAP. 10 LOS FORMULARIOS

Las partes que componen un cuadro de entrada son:

1
2
Fig. 10-3

1 Título del cuadro de entrada.


2 Mensaje al usuario, aquí debe considerar que el mensaje debe ser lo más legible posible, recuerde es
un mensaje al usuario.
3 Valor de entrada al cuadro, debe tener en cuenta como fue declarada la variable.

Formato de la función InputBox

InputBox ("Mensaje a Mostrar",


"Titulo del cuadro",
"Valor por defecto")

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:

Ingresar un valor de tipo entero Dim N as Integer


de forma simple. N = InputBox(“Ingrese un valor para N:”)
Dim Nombre as String
Nombre = InputBox(“Ingrese su Nombre:”,
“Entrada”,
“Sin Nombre”)
Ingresar un valor tipo String con
un título de ventana y un valor Donde:
por defecto.  Mensaje a Mostrar: Ingrese su Nombre
 Título del cuadro: Entrada
 Valor por defecto: Sin Nombre

• CASO DESARROLLADO 1: CONVERSIONES


1. Dado un tiempo en segundos, implemente un procedimiento en VBA que exprese dicho tiempo en
el formato HH:MM:SS.
Por ejemplo, si el tiempo es 14600 segundos, el procedimiento deberá mostrar 4:3:20.

En Excel deberá diseñar el siguiente formato:

Fig. 10-4
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 257

Crear un Módulo llamada moProcedimientos y crear el procedimiento pHora()

Fig. 10-5

Tener en cuenta que:


 En la celda C4 y C5 no ingrese valor alguno.
 ¿Cómo colocar el botón Calcula Hora? Ya se ha tratado este tema pero no hay problema en volver
a recordar:

– Ficha Programador.
– Seleccione Insertar.

– Seleccione Botón de los Control de formulario.


– Dibujar el botón en cualquier celda de la hoja de Excel, al soltar el arrastre aparecerá la ventana
de asignación de macros.

Fig. 10-6
258 CAP. 10 LOS FORMULARIOS

– Seleccione el macro pHora.


– Seleccione Aceptar.
– Ahora deberá colocar un título al botón para tener el siguiente aspecto:

Fig. 10-7

– Finalmente probar la macro dando un clic en el botón Calcula Hora.

2. Dado un número entero de 3 cifras, implemente un procedimiento en VBA que determine:


 La suma de sus dígitos.
 El producto de sus dígitos.
 Lo imprima al revés.

Solución:
Prepare la siguiente hoja:

Fig. 10-8

En el módulo moProcedimientos prepare el procedimiento pDigitos

Fig. 10-9
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 259

• CUADROS DE MENSAJE (MSGBOX)


Los mensajes en programación tiene 2 formatos el primero se basa en un mensaje informativo o de
advertencia como los que se muestran a continuación:

Fig. 10-10

El código que acompaña al mensaje mostrado es:

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

El código usado en la Fig. 10.11. es el siguiente:

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

El código aplicado en el mensaje de la Fig. 10.12 es como sigue:

Sub Mensaje()
Dim r%
r = MsgBox("Esta seguro de salir de la Aplicación",
vbYesNo + vbExclamation,
"Sistema Informa")
End Sub

Partes de un Cuadro de Mensaje

2 3

1 Título del cuadro de mensaje.


2 Ícono del cuadro.
3 Mensaje al usuario.
4 Botones del cuadro de mensaje.

Formato de la función MsgBox: como se mencionó, hay 2 formas y aquí se muestra:

MsgBox “Mensaje informativo”,Botón+Icono,


Forma 1 “Titulo de la Ventana”
Variable=MsgBox(“Mensaje informativo”,Botón+Icono,
Forma 2 “Titulo de la ventana”)

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

MIEMBRO VALOR DESCRIPCIÓN


OKOnly 0 Muestra sólo el botón Aceptar.
OKCancel 1 Muestra los botones Aceptar y Cancelar.
AbortRetryIgnore 2 Muestra los botones Anular, Reintentar y Omitir.
YesNoCancel 3 Muestra los botones Sí, No y Cancelar.
YesNo 4 Muestra los botones Sí y No.
RetryCancel 5 Muestra los botones Reintentar y Cancelar.
Critical 16 Muestra el ícono Mensaje crítico.
Question 32 Muestra el ícono Consulta de advertencia.
Exclamation 48 Muestra el ícono Mensaje de advertencia.
Information 64 Muestra el ícono Mensaje de información.

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:

Public Sub muestraMensaje()


MsgBox "Bienvenido al Sistema de Control de Ventas", _
vbInformation, "Sistema"
End Sub
262 CAP. 10 LOS FORMULARIOS

Ejemplo 2:

Public Sub confirmaSalida()


Dim r As Integer
r = MsgBox("Esta seguro de abandonar la sesión?", _
vbYesNo + vbExclamation, "Sistema")

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

MODELO DE PANTALLA INICIAL DE UN SISTEMA DE CONTROL DE VENTA

Fig. 10-15

Se deberá asignar el procedimiento confirmaSalida por medio de Macros al botón de la pantalla de


presentación del Sistema. No se olvide que todo este código funcionará si el archivo de Excel es grabado
Habilitado para macros.

• 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

Aquí se muestra el UserForm en pleno proceso de construcción, es decir, se encuentra en el Tiempo de


Diseño.

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

• NOMENCLATURA DE NOMBRES A OBJETOS


Todo objeto dentro de VBA tiene un nombre asignado desde el arrastre hacia el contenedor, por lógica
se le asigna el nombre de clase más una numeración correlativa según la cantidad de objetos. Tenemos
entonces UserForm1 que significa que es el primer objeto de la clase UserForm.

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

A continuación la nomenclatura de los objetos en VBA:

CLASE PREFIJO EJEMPLO


UserForm frm frmVenta–frmCompra–frmPlanilla
Etiqueta (Label) lbl lblTotal – lblN
Cuadro de Texto (TextBox) txt txtNombre – txtFecha
Botón de Comando btn btnCalcular – btnSalir
(CommandButton) cmd cmCalcular – cmdSalir
Cuadro de Lista (ListBox) lst lstPaises – lstR
Cuadro combinado (ComboBox) cbo cboProductos – cboCategoria
Casilla de Verificación
chk chkEstado – chkImprimir
(CheckBox)
Botón de opción (OptionButton) opt optCasado – optNegrita
Imagen (Image) img imgFoto – imgProducto
Marco (Frame) fra fraEstadisticas - FraOpciones
266 CAP. 10 LOS FORMULARIOS

• AGREGAR UN USERFORM AL PROYECTO


VBA construye sus aplicaciones en base a objetos que unidos componen una solución a un determinado
proceso de negocio, para esto se debe tener una plataforma de soporte de objetos, para eso está la clase
UserForm, para agregar un UserForm al proyecto que tiene:

 Clic derecho sobre el explorador de proyectos


Forma 1  Seleccione Insertar
 Seleccione UserForm
 Desde el menú seleccione Insertar
Forma 2
 Seleccione UserForm

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

Al insertar un formulario al proyecto debe tener en cuenta:


 Tiene un nombre asignado como objeto: UserForm1.
 Tiene un alto y ancho asignado de forma estándar.
 Presenta una grilla que es invisible al ejecutarlo, esta grilla sólo es visible en el tiempo de diseño del
Userform y su misión es ayudar a modelar los objetos contenidos dentro de él.

Fig. 10-20

Opciones de configuración del UserForm

La modificación del alto o ancho de un UserForm depende de la


interfaz que diseñará para la solución de un proceso de negocio
Modificar ancho y alto del
en VBA, su modificación es como controlar el ancho y alto de una
UserForm
ventana de Windows, arrastrando los tiradores del contorno del
UserForm.

 Desde el menú seleccione Herramientas.


 Seleccione Opciones.
 Seleccione la ficha General.
 Modifique Ancho y Alto de Opciones de la Cuadrícula.

Controlar el ancho y alto de la


rejilla

Observación: al modificar el ancho se recomienda que sea igual


al valor alto ya que una cuadrícula se asemeja a un cuaderno
cuadriculado.
La Opción Forzar controles a cuadrícula obliga a los objetos a
posicionarse exactamente sobre los puntos de la rejilla, podría ser
una ventaja para que el diseño no resulte un poco desalineado,
pero si le resulta incómodo desactívelo.
268 CAP. 10 LOS FORMULARIOS

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.

Ejm: frmVenta – frmPlanilla

1 2

1. Nombre del Objeto


2. Nombre de la Clase
BackColor Define el color de fondo del UserForm, tenga en cuenta que si coloca una
imagen de fondo el color quedaría detrás de él.

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.

Enabled Propiedad que define si el UserForm está habilitado o no.


Propiedad que define el tipo de letra, tamaño y estilo de los textos contenidos
Font
en los objetos a colocar dentro del UserForm.
ForeColor Define el color de los objetos tipo Label al colocar dentro del UserForm.
Height Define la altura en pixeles del UserForm.
Define un archivo de imagen tipo ícono (.ico) que puede ser vista sólo si la
MouseIcon
propiedad MousePointer es 99-fmMousePinterCustom.
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 269

Define una imagen tipo JPG o PNG en el fondo del 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

(Name) Es el nombre que se le asignará al objeto de tipo Label, según la nomenclatura de


nombres deberá empezar con lbl. Ejm: lblTitulo, lblPension, etc.

AutoSize Cambia el tamaño del marco al contenido del texto de un label.

BackColor Asigna un color de fondo al marco del label.

BackStyle Define el estilo de fondo del label, están:


 fmBackStyleOpaque: muestra el color de fondo asignado en el BackColor.
 fmBackStyleTransparent: define un fondo transparente al label,
visualizando la imagen o color de fondo asignado al UserForm.

BorderColor Define un color de borde al marco de un label siempre y cuando el BorderStyle se


encuentre en fmBorderStyleSingle.

BorderStyle Define si se va a visualizar el marco del label en caso de seleccionar


fmBorderStyleNone no podrá visualizar el color del borde del label.

Caption Contenido del label.

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

En la Fig. 10.22 se puede modificar el tipo de fuente, estilo y tamaño de las


Etiquetas (Label).
ForeColor Determina el color del texto del objeto label.
Determina la alineación del texto con respecto al marco del objeto label.

TextAlign

Visible Determina si el objeto label es visible o no en tiempo de ejecución.


Permite visualizar el texto en más de 2 líneas del objeto label.

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

(Name) Es el nombre que se le asignará al objeto de tipo TextBox, según la convención


de nombres deberá empezar con txt. Ejm: txtNumero, txtResumen, etc.
BackColor Define el color de fondo del objeto TextBox siempre y cuando el BackStyle sea
fmBackColorOpaque.
BackStyle Define el estilo del objeto TextBox podría ser transparente u opaco.
BorderColor Define un color de borde al objeto TextBox siempre y cuando el BorderStyle sea
fmBorderStyleSingle.
BorderStyle Define el estilo de borde del objeto TextBox.
ControlTipText Asigna un texto informativo para el usuario desde el objeto TextBox,
normalmente enmarcado en un color amarillo.
Enabled Permite habilitar o inhabilitar el acceso al objeto TextBox.
Font Define el tipo de letra, estilo y tamaño del texto contenido dentro del objeto
TextBox.
ForeColor Define un color para el texto contenido dentro del objeto TextBox.
Height Define la altura del marco del objeto TextBox.
Locked Permite bloquear y desbloquear el acceso al texto del objeto TextBox.
MaxLength Define una longitud de caracteres permitidos dentro del objeto TextBox. Por
ejemplo:
 Si tiene que ingresar la edad de un empleado, el máximo de longitud
sería 2 para permitir el acceso desde 0 a 99 años.
 Si fuera un código de vendedor, el cual tiene 5 caracteres asignados
dentro de una organización, definiría el MaxLenght como 5.
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 273

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.

txtSalida.Text=”RESUMEN DE VENTA” & vbNewLine


txtSalida.Text = txtSalida.Text &
“PRODUCTO: “ & Producto & vbNewLine
txtSalida.Text = txtSalida.Text &
“CANTIDAD: “ & Cantidad & vbNewLine
txtSalida.Text = txtSalida.Text &
“PRECIO: $ “ & Precio & vbNewLine
txtSalida.Text = txtSalida.Text &
“SUBTOTAL: $ “ & Subtotal

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

ScrollBars Permite asignar las barras de desplazamiento sobre la caja de texto, es


recomendado activarlo cuando el cuadro de texto sea MultiLine. Tenemos las
siguientes opciones:
 0 fmScrollBarsNone (Sin barras)
 1 fmScrollBarsHorizontal (Solo barra Horizontal)
 2 fmScrollBarsVertical (Solo barra Vertical)
 3 fmScrollBarsBoth (Ambas barras)
274 CAP. 10 LOS FORMULARIOS

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.

• LA CLASE COMMAND BUTTON


También llamado Botón de Comando o simplemente Botón, este control tiene por finalidad interactuar
con el usuario. Internamente contiene código que es ejecutado sólo por una interacción del usuario
llamado evento CLICK, vea:

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

Cancel  True: permite que la tecla ESC active el botón de comando.


 False: inhabilita la asignación de la tecla ESC al botón de comando.
Caption Permite modificar el contenido textual del botón, es decir, el título que mostrará
dicho botón.
ControlTipText Permite asignar un texto de apoyo al botón, es decir, al ubicar el puntero del
mouse encima del botón aparecerá el mensaje asignado.
Default  True: habilita que la tecla ENTER active el botón de comando, por lógica
sólo un botón podrá tener esta habilitación, pero trate de evitarlo ya que
en UserForm la tecla está habilitado para saltar de un objeto a otro.
 False: inhabilita la tecla ENTER sobre el botón de comando.
Font Permite definir el tipo de fuente, estilo y tamaño del texto mostrado en el botón
de comando.
ForeColor Permite asignar un color de texto al texto mostrado dentro del botón de
comando.
Picture Permite asignar una imagen de tipo JPG o GIF al botón de comando.

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

Ponga el caso que usted tiene al frente el siguiente formulario:

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.

Vea una lista de eventos ocasionados por las actividades mencionadas:


ACTIVIDAD EVENTO
Presionar Enter
KeyPress
Presionar Esc
Hacer clic Clic
Salir de la ventana Terminate

Presentamos una lista de algunos eventos y sus características:

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.

Private Sub UserForm_Click()


'Implementación del Procedimiento
End Sub
278 CAP. 10 LOS FORMULARIOS

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

1 Private Sub UserForm_Click() 4

‘Implementación del Procedimiento

5 End Sub

1. Visibilidad del procedimiento (Busque el tema Alcance de una variable).


2. Es el indicador del inicio del procedimiento.
3. Aquí hace referencia al objeto seleccionado.
4. Aquí hace referencia al evento seleccionado.
5. Indicador de la finalización del procedimiento.

4 Estos botones presentan dos formas de poder visualizar el código fuente.

Permite visualizar el código fuente del procedimiento activo.

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.

• CASO DESARROLLADO 2: VENTA DE PRODUCTOS

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

4. Aplique las siguientes propiedades a los objetos del entorno.

(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:

Aplicando Tipo de Fuente, Tamaño y Estilo a todos los textos:


- Presione en conjunto CTRL+A.
- En las propiedades seleccione Font y hágale 2 clics.
- En la siguiente ventana cambie lo necesario.

Fig. 10-31

- Realizado los cambios, clic en Aceptar.

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

8. El código fuente del botón Registrar tendría el siguiente cambio:

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:

 En Excel, seleccione la ficha Programador.


 Seleccione Insertar de la ficha programador.
 Seleccione Botón (Control de Formulario) y dibújelo en la hoja.
 Al soltarlo aparece la ventana de selección de macros, aquí seleccione el botón Nuevo.
 Y aparecerá 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:

CÓDIGO DE PRODUCTO PRECIO POR UNIDAD


PRO001 $ 100.50
PRO002 $ 80.00
PRO003 $ 70.00

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:

VALOR TOTAL DE COMPRA % DESCUENTO


Hasta 200.00 10%
Entre 200.01 a 500.00 15%
Entre 500.01 a 700.00 18%
Superior a 700.00 22%

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

• OBJETIVOS DE LOS SISTEMA DE BASE DE DATOS


Existen muchas formas de organizar las bases de datos, pero hay un conjunto de objetivos generales que
deben cumplir todos los SGBD, de modo que faciliten el proceso de diseño de aplicaciones y que los
tratamientos sean más eficientes y rápidos, dando la mayor flexibilidad a los usuarios.

Los objetivos fundamentales de los SGBD son los siguientes:

A. Independencia de los datos y los programas de aplicación: La independencia de los datos se


define como la inmunidad de las aplicaciones a los cambios en la estructura de almacenamiento y
en la estrategia de acceso. Entonces esto quiere decir que cualquier aplicación puede tener acceso
a la base de datos de SQL Server pero siempre y cuando se tenga el código de proveedor (provider)
correcto de acceso que Microsoft provee a sus usuarios.
288 CAP. 11 BASE DE DATOS CON VBA Y ACCESS

B. Minimización de la redundancia: se ha comprobado cómo, con los archivos tradicionales, se


produce redundancia de la información. Uno de los objetivos de los SBD es minimizar la redundancia
de los datos. Se dice disminuirla, no eliminarla, pues, aunque se definen las bases de datos como no
redundantes, en realidad sí existe, pero en un grado no significativo que servirá para disminuir el
tiempo de acceso a los datos o para simplificar el método de direccionamiento. Lo que se trata de
lograr es la eliminación de la redundancia superflua.

C. Integración y sincronización de las bases de datos: la integración consiste en garantizar una


respuesta a los requerimientos de diferentes aspectos de los mismos datos por diferentes usuarios,
de forma que, aunque el sistema almacene la información con cierta estructura y cierto tipo de
representación, debe garantizar entregar al programa de aplicación los datos que solicita y en la
forma en que lo solicita.

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.

E. Seguridad y recuperación: seguridad (también llamada protección) garantiza el acceso autorizado


a los datos, la forma de interrumpir cualquier intento de acceso no autorizado, ya sea por error del
usuario o por mala intención.
Recuperación: permite que el sistema de bases de datos disponga de métodos que garanticen la
restauración de las bases de datos al producirse alguna falla técnica, interrupción de la energía
eléctrica, etc.

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:

 El mundo real: es la representación de entidades u objetos dentro de la descripción de un problema


real, sabemos que nuestro mundo está rodeado de información, nuestra tarea es darle una prioridad
y así encontrar los elementos necesarios que compondrán nuestra base de datos. Se tiene que hacer
un espacio para elementos no tangibles que podría ser el caso de una venta o un incendio que
de por sí no son objetos, pero existen en el mundo real nosotros lo representamos como sucesos.
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 289

Entonces están:

Un celular es un objeto real que Un auto es un objeto real que podría


podría tener una relación con venta o tener una relación con venta, compra
compra en el mundo real. o alquiler en el mundo real.

 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:

Si se toma como una entidad al objeto celular encontrará


características que son similares en todos los celulares por
ejemplo: Marca, Modelo, Precio de Compra, Stock, etc.

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: HTC – LG - SANSUMG


Modelo: 3G - IPHONE
Precio de Compra: 1200.00 – 2300.00 - 1500.00
Stock: 100 – 200 – 140 - 10
290 CAP. 11 BASE DE DATOS CON VBA Y ACCESS

3. Ocurrencia: un valor de un atributo determinado o definido en el dominio dado, en un cierto


momento del tiempo, se le denomina ocurrencia del atributo, 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

Campo Ocurrencia Tipo de Dato Tamaño


APELLIDOS : Zamora Mejía Cadena 30
NOMBRES : Martín Cadena 30
DNI : 11205458 Cadena 8
FECHA DE NACIMIENTO : 05/01/1970 Fecha
TALLA : 1.75 Decimal 3,2
SEXO : Masculino Lógico
NUMERO DE HIJOS :3 Número

 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

• CASO DESARROLLADO 1: DELIVERY


En un Restaurante que ofrece el servicio de Delivery (Servicio a Domicilio) a sus clientes, el cliente hace
una llamada telefónica al Restaurant el cual es recibido por la Encargada de Recepción, esta registrará
los datos del Cliente en el sistema para buscarlo en su Base de Datos como la Validación de Cliente con
la intención de obtener su Dirección Exacta. Su orden pasa al sistema para facturar la Venta en la cual
emitirá lo que el cliente deberá cancelar, el nombre del Despachador que irá a su domicilio. Luego de
realizado el pago por el Cliente, el despachador registrará la Venta en el Sistema como Cancelado.

Se debe realizar: lista de entidades, atributos por entidad y el dominio.

Solución:
A. Lista de Entidades:
Cliente
Recepción
Factura
Despachador
Venta

B. Atributos por Entidad:


Cliente : IdCLiente, Apellidos, Nombres, Dirección.
Recepción : IdRecepcion, Apellidos, Nombres, Correo.
Factura : NumFactura, Fecha, MontoTotal, IdRecepcion, IdCliente.
Despachador : IdDespachador, Apellidos, Nombres, Correo, Móvil.
Venta : NumVenta, NumFactura, IdDespachador, Estado.

C. Valores que tendrá cada atributo de una Entidad (Dominio):

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.

Se debe realizar: Lista de Entidades, Atributos por Entidad y el Dominio.

• RECUPERACIÓN DE DATOS: INSTRUCCIÓN SELECT


Recupera filas de la base de datos y permite seleccionar una o varias filas o columnas de una o varias
tablas. Esta es la construcción principal de SQL usada para expresar consultas. SELECT no modifica, inserta
ni elimina ningún dato.

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

A. LISTADO DE TODOS LOS REGISTROS


Utilizar el comodín * o ALL que representa a todos los campos de la tabla.

Mostrar todos los Registros de la


Select * From Producto
Tabla Producto.
Mostrar todos los Registros de la
Select ALL * From Vendedor
Tabla Vendedor.
Mostrar todos los registros de la
Select P.* From Proveedor P
tabla Proveedor usando ALIAS.

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.

Mostrar los Códigos, Descripción,


Select idProd,Descripcion,UnidadMedida,PrecioU
Unidad de Medida y el Precio From Producto
Unitario de los Productos.
Mostrar los Códigos, Nombre,
Select idProv,Nombre,Direccion,Fono,Email
Dirección, Teléfono y Correo From Proveedor
Electrónico de los Proveedores.
Mostrar el Código, Descripción,
Select
Unidad de Medida y el Precio
P.idProd,P.Descripcion,P.UnidadMedida,P.PrecioU
Unitario de los Productos usando From Producto P
ALIAS.

C. ORDEN DE LOS REGISTROS


Se puede especificar el orden de los registros en forma ascendente ASC y descendente DESC.

Mostrar los productos ordenados Select *


por su descripción en forma From Producto
ascendente. Order By Descripcion

Mostrar la lista de productos


Select *
ordenados en descendente por su
From Producto
PrecioUnitario y ascendente por su Order By precioUnitario ASC, descripcion
descripción.
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 295

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

Mostrar los 5 primeros registros de Select TOP 5 Código_Prov,Nombre,Direccion,Fono,


la Tabla Proveedor. Email From Proveedor

Mostrar el 50% de los primeros Select TOP 50 Percent Codigo_Prod,


Registros de la Tabla Productos. Descripcion,PrecioU From Producto

E. USANDO ALIAS DE COLUMNA


Permite usar la cabecera de las columnas a mostrar en la consulta.

Select Código_Prod as Código,


Mostrar los Productos registrados Descripción as Producto,
de la Forma siguiente: Código, UnidadMedida as Medida,
Producto, Medida y Stock. Stock,
From Producto
Mostrar la lista de Proveedores Select Nombre,
Dirección,
con los siguientes datos: Nombre,
Fono as Teléfono,
Dirección, Teléfono, Correo Email as [Correo Electronico]
Electrónico. From Proveedor

Mostrar la lista de Productos con los Select Codigo=Código_Prod,


siguientes campos Código, Producto Producto=Descripción,
y Medida. Utilizar el operador = para Medida=UnidadMedida
From Producto
asignar un Alias.
Mostrar la lista de Productos con los Select Código_Prod Codigo,
siguientes campos Código, Producto Descripción Producto,
y Medida. Utilizar espacio como UnidadMedida ‘Unidad de Medida’
From Producto
operador de asignacion de Alias.

F. DISTINCT
Permite mostrar datos únicos de un campo específico.

Mostrar los código de los


Select Distinct Código_Prov
proveedores que están asociados a From Producto
por lo menos un Producto.

G. DEFINIR FILTROS CON WHERE


Where es una expresión lógica que establece la condición para mostrar cierta cantidad de registros
que cumplan estrictamente con la condición.

Formato

ELECT ListaCampos
[ FROM Tablas ]
[ WHERE Condiciones ]
296 CAP. 11 BASE DE DATOS CON VBA Y ACCESS

Lista de Operadores Válidos para Where

Mostrar los datos de la Guía Select * From Guia


Número 2. Where nGuia=2
Select * From Proveedor
Where Ciudad<>’Lima’
Mostrar todos los
Select * From Proveedor
proveedores excluyendo a Where Ciudad!=’Lima’
los de Lima.
Select * From Proveedor
Where NOT Ciudad=’Lima’
Mostrar los Productos Select * From Producto
menores a 50 en el Stock. Where Stock<50

Mostrar los productos cuyo precio es Select * From Producto


superior a S/. 10. Where Precio>10

Mostrar las guías cuya Fecha de salida Select * From Guia


sea del mes de Marzo hasta hoy. Where FechaSalida>’01/03/2010’

H. MANEJO DE LIKE COMO OPERADOR VALIDO PARA TEXTOS:


Permite controlar la búsqueda de cadenas de texto.
Mostrar todos los productos cuya Select * From Producto
descripción empiecen con “L”. Where Descripción LIKE ‘L%’

Mostrar a todos los proveedores que vivan


en algún distrito cuyo contenido sea Juan. Select * From Proveedor
Por ejemplo: San Juan Miraflores, San Juan Where Distrito LIKE ‘%Juan%’
de Lurigancho.
Mostrar a todos los proveedores de los Select * From Proveedor
distritos que inicien con “SAN”. Where Distrito LIKE ‘San%’

Mostrar todos los productos cuyo segunda Select * From Producto


letra sea A. Where Descripción LIKE ‘_A%’

Mostrar los productos cuya descripción Select * From Producto


empiece con A, D o J. Where Descripción LIKE ‘[adj]%’

Mostrar todos los productos cuya Select * From Producto


descripción este en el rango de la A hasta J. Where Descripción LIKE ‘[a-j]%’
Mostrar los productos cuya descripción sea Select * From Producto
de K hasta Z. Where Descripción LIKE ‘[^a-j]%’

I. MANEJO DE BETWEEN COMO OPERADOR VÁLIDO PARA RANGOS:


Permite controlar rangos entre caracteres y números, no está permitido para textos.

Mostrar todos los productos cuyo precio Select * From Producto


esté en el rango de 1 a 3 soles. Where PrecioU BETWEEN 1.00 and 3.00

Mostrar los Proveedores cuyo distrito inicie Select * From Proveedor


en el rango de A hasta J. Where Distrito BETWEEN ‘A’ and ‘J’
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 297

set dateformat DMY


Select * From Guia
Mostrar las Guías del mes de Mayo 2010. Where FechaSalida
BETWEEN ‘01/05/2010’ and ‘31/05/2010’
Select * From Guia
Mostrar las guías cuyos números son 1,4,8. Where nGuia IN (1,4,8)

J. FUNCIONES DE FECHA PARA SELECT

Mostrar la Fecha y Hora del Sistema. Select GETDATE()


Mostrar el mes actual en Número. Select DATEPART(month,getDate())
Mostrar el mes actual el Letras. Select DATENAME(month,getDate())
Mostrar el día actual del sistema. Select DAY(getDate())
Mostrar el mes actual. Select MONTH(getDate())
Mostrar el año actual. Select YEAR(getDate())
Select DAY(getDate()) AS DIA,
Mostrar el siguiente Formato:
MONTH(getDate()) AS MES,
Dia, Mes, Año. YEAR(getDate()) AS AÑO
Select DAY(getDate()) AS DIA,
Mostrar el siguiente Formato: DATENAME(month,getDate()) as
Dia, Mes en Letras, Año. [MES EN LETRAS],
YEAR(getDate()) AS AÑO
Listar los pedidos y la cantidad de
Select DATEDIFF(month, fechapedido,
meses de diferencia entre la fecha de getdate()) From pedidos
pedido y la fecha actual.

Parámetro para las Funciones DateDiff, DatePart, DateName

PARTE DE LA FECHA ABREVIATURAS


year yy, yyyy
quarter qq, q
month mm, m
dayofyear dy, y
day dd, d
week wk, ww
weekday dw
hour hh
minute mi, n
second ss, s
millisecond ms
298 CAP. 11 BASE DE DATOS CON VBA Y ACCESS

• MANEJO DE INNER JOIN


Inner Join es una instrucción que permite unir 2 o más tablas por algún campo de en común, el objetivo
principal de unir 2 o más tablas es tener control de los campos de ambas tablas.

Mostrar todos los Select P.Codigo_Prod,P.Descripcion,P.Precio


From Producto P
productos vendidos que se
INNER JOIN Detalle_Guia D
encuentren registrados en ON P.Codigo_Prod=D.Codigo_Prod
Detalle_Guia. Order by P.Codigo_Prod,P.Descripcion
Select D.nGuia,P.Descripcion,D.PrecioVenta
Mostrar el detalle de Guía From Detalle_Guia D
con la descripción del INNER JOIN Producto P
Producto. ON P.Codigo_Prod=D.Codigo_Prod
Order by P.nGuia
Select
P.Descripcion,
D.nGuia,
Mostrar el Monto de la D.PrecioVenta*D.Cantidad as [Monto Venta]
Venta por cada Producto. From Detalle_Guia D
INNER JOIN Producto P
ON D.Codigo_Prod=P.Codigo_Prod
Group By P.Descripcion,D.nGuia
Select
P.Descripcion,
D.nGuia,
D.PrecioVenta*D.Cantidad as [Monto Venta]
Mostrar el Monto de la
From Detalle_Guia D
Venta del Producto Pro02. INNER JOIN Producto P
ON D.Codigo_Prod=P.Codigo_Prod
Group By P.Descripcion,D.nGuia
Having D.Codigo_Prod=’Pro02’

K. Funciones de Cadena para Select

Mostrar las 3 Primeras Letras


Select LEFT(Descripción,3) From Producto
del Nombre del Producto.
Mostrar la longitud en cadena de
caracteres de la Descripción Select LEN(Descripción) From Producto
de los Productos.
Mostrar los datos de la Dirección de los
Select LOWER(Direccion) From Proveedor
Proveedores en estricto Minúscula.
Mostrar al revés los códigos registrados a
Select REVERSE(Código_Prov) From Proveedor
los Proveedores.
Mostrar las 4 Últimas Letras
Select RIGTH(Descripción,4) From Producto
del Nombre del Producto.
Mostrar una lista de los proveedores de Select Nombre,
Dirección,
forma que la Ciudad y el Departamento
Ciudad+’,’+Space(1)+Departamento,
aparezcan concatenados pero separados Fono as Teléfono
por comas. From Proveedor
Mostrar los datos de la Dirección de los
Select UPPER(Direccion) From Proveedor
Proveedores en estricto Mayúsculas.
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 299

• CONEXIÓN A BASE DE DATOS CON ACCESS Y VBA


Una base de datos es una colección de datos organizados y estructurados según un determinado modelo
de información que refleja no sólo los datos en sí mismos, sino también las relaciones que existen entre
ellos.

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:

 1 Vendedor registra muchas ventas.


 1 Venta tiene un conjunto de detalles.
 1 Detalle de Venta tiene o está asociado a un determinado producto.

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.

A continuación se muestra el contenido de las tablas de a base de datos Ventas.

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

Los objetos que componen la tecnología ADO son:

OBJETO DESCRIPCIÓN DEL OBJETO


Permite establecer las conexiones entre el cliente y el origen de datos ADO, no
Connection
distingue el tipo de proveedor, es decir, se puede conectar a cualquier base de datos.
Permite realizar consultas SQL o las actualizaciones de una base de datos de una
Command
conexión activa.
Recordset Permite ver y manipular los resultados de una consulta.
Es utilizada cuando la consulta del objeto Command necesita parámetros de entrada
Parameters
claro está dependiendo de la consulta.
La colección Errors y el objeto Error se acceden a través del objeto Connection, a no
ser que se produzca un error de proveedor. El objeto Error es diferente del objeto
Errors
Err de VB, en la medida en que no contiene los errores generados y definidos por el
proveedor, por lo tanto, permite obtener información precisa sobre la causa del error.
La colección Fields y el objeto Field se utilizan a través del objeto Recordset, una vez
Fields
que este contiene los datos.

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

• CONECTANDO A UNA BASE DE DATOS ACCESS


Para lograr mostrar los registros de una base de datos de Access hay que tener en cuenta los siguientes pasos:

1. Definir la estructura de archivos


Para un mejor desarrollo de la aplicación se tiene que tener en una carpeta el archivo de base de
datos previamente grabado y el archivo de Excel habilitado para macros, se preguntará el porqué,
puesto que la base de datos podría estar en cualquier parte del disco duro se recomienda que ambos
archivos se encuentren cerca para que se busquen rápidamente. Entonces tendría una estructura de
archivos de la siguiente forma:

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.

2. Activar la Librería de Conexión ADO desde el entorno VBA


Se debe activar la librería Microsoft ActiveX Data Objects 2.7 Library ya que esto permitirá usar los
objetos de conexión ADO en la aplicación VBA esto sólo se realiza una vez por aplicación.
Pasos:
 En el entorno VBA seleccione: HerramientasReferencias.
 Active el Check de Microsoft ActiveX Data Objects 2.7 Library.

En la Fig. 11.10 note que hay varias versiones


del Microsoft ActiveX Data Objects, las cuales
pertenecen a las versiones anteriores de ADO, se
debe seleccionar la versión 2.7 ya que es la más
estable de las versiones revisadas.

Fig. 11-10
304 CAP. 11 BASE DE DATOS CON VBA Y ACCESS

3. Crear un módulo en el Proyecto y llamarlo moBaseDatos como se muestra a continuación:

Fig. 11-11

4. Antes de comenzar a programar asegúrese de preparar el entorno de solución en la hoja de


Excel, es decir, modele donde se mostrará las consultas, como trabajará con la base de datos
Ventas empiece por mostrar las consultas de la tabla vendedores.

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

cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _


"Data Source=" &
App.Path & "\ventas.mdb" & ";" & _
"User Id=admin;Password="
cn.Open "driver={Microsoft Access Driver (*.mdb)};" & _
"dbq=C:\ventas.mdb;uid=admin;pwd="
cn.open "Driver={Microsoft Access Driver (*.mdb)};" & _
"Dbq=C:\Ventas.mdb;Exclusive=1;Uid=admin;Pwd=;"

Access 2007

cn="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _


App.Path & "\base\db.accdb"& "; _
Persist Security Info=False;"
cn="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _
App.Path & "\base\db.accdb" & "; _
Jet OLEDB:Database Password=contraseña;"

SQL Server

cn.Open "Provider=sqloledb;" & _


"Data Source=.;" & _
"Initial Catalog=Nombre_de_la_base;" & _
"User Id=sa;Password=root"
cn.Open "driver={SQL Server};" & _
"server=.; " & _
"database=ventas; " & _
"uid=sa;pwd=root"

MySQL

cnn.Open "Provider=MySQLProv;" & "Data Source=ventas;" & _


"User Id=sa;Password=root"
cn.Open "Driver={MySQL ODBC 3.51 Driver};Server=localhost;" & _
"Database=ventas;" & _
"User=sa;Password=root;Option=3;"

- 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

7. Dentro del mismo módulo prepare el entorno de la consulta.

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

Dim uFila%: uFila = Sheets(1).Cells(Rows.Count, 2).End(xlUp).Row


Range("B7:E" & uFila).Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.Weight = xlThin
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.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
308 CAP. 11 BASE DE DATOS CON VBA Y ACCESS

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.

Liste a todos los vendedores de la tabla del mismo nombre.

Sub ListadoVendedores1()
Call LimpiaCeldas
cn = getConecta()
cn.Open

Dim rs As New ADODB.Recordset


rs.Open "Select * from Vendedor", cn
Worksheets(1).Cells(7, 2).CopyFromRecordset rs
Call formatoListado1

rs.Close
cn.Close
End Sub
Liste a todos los vendedores cuya categoría sea A.

Sub ListadoVendedoresCatA()
Call LimpiaCeldas
cn = getConecta()
cn.Open

Dim rs As New ADODB.Recordset


rs.Open "Select * from Vendedor Where Categoria='A'", cn

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

Dim rs As New ADODB.Recordset


rs.Open "Select * from Vendedor
Where vendedor like 'P%'", cn

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

Dim rs As New ADODB.Recordset


rs.Open "Select * from Vendedor Where sueldo<1000", cn

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

Dim uFila%: uFila = Sheets(2).Cells(Rows.Count,


2).End(xlUp).Row
Range("B7:E" & uFila).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
GESTIÓN Y METODOLOGÍA PROGRAMACIÓN VBA CON EXCEL 311

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

Liste a todos los productos de la tabla del mismo nombre.

Sub ListadoProductos()
Call LimpiaCeldas
cn = getConecta()
cn.Open

Dim rs As New ADODB.Recordset


rs.Open "Select * from Productos", cn

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

Dim rs As New ADODB.Recordset


rs.Open "Select top 3 * from Productos
order by precio DESC", cn

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

También podría gustarte