You are on page 1of 116

Programación con Visual Basic para Aplicaciones de Excel 2010

Visual Basic para Aplicaciones (VBA) combinado con Microsoft Excel es probablemente
una de las herramientas más poderosas con las que puede contar con su trabajo. Este
curso tiene el propósito de guiarle paso a paso en la creación de aplicaciones y macros
con Excel 2010 y está dirigido a usuarios de Excel que deseen crear aplicaciones en
plantillas amigables, confiables y poderosas. Con este curso adquirirá la experiencia
necesaria para automatizar numerosas tareas y conseguir resultados óptimos, además
de reducir tediosas horas de trabajo.

Aprenderá por medio de Programación Orientada a Objetos a:

 Trabajar en forma eficaz con los objetos libros, hojas y rangos.


 Utilizar las funciones de la hoja de cálculo y crear sus propias funciones.
 Crear aplicaciones extremadamente rápidas con matrices.
 Personalizar Excel 2010 para ejecutar sus macros.
 Crear cuadros de diálogo personalizados para obtener información de sus
usuarios.

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 1 -


CONTENIDO

Tema Página
CAPÍTULO 1. INTRODUCCIÓN A LA PROGRAMACIÓN CON EXCEL. 5
Qué es Visual Basic para Aplicaciones. 5
Lo que se puede realizar con una macro. 6
Estructuración del lenguaje de programación. 7
Cómo empezar a realizar una macro. 7
Grabar una macro simple. 9
Cómo ejecutar una macro. 10
Vista del código grabado. 11
Cómo modificar el código. 13
Las limitaciones del grabador de macros. 14
Como grabar el archivo. 15

CAPÍTULO 2. EMPEZANDO A PROGRAMAR. 16


Cómo crear un procedimiento. 17
Cómo ejecutar un procedimiento. 19
Cómo guardar los cambios en el módulo. 19
¿Qué son las variables? 19
Tipo de datos de las variables. 20
Como crear variables por medio de la instrucción Dim. 21
La importancia que tiene declarar las variables. 22
Cómo trabajar con matrices. 23
Cómo asignar valores a las variables. 25
Uso de las constantes. 25
Alcance de una variable. 26

CAPÍTULO 3. EL EDITOR DE VISUAL BASIC. 28


Uso de las barras de herramientas del Editor de Visual Basic. 28
Cómo examinar el código. 30
Cómo emplear el Examinador de objetos. 31
Cómo establecer opciones. 32

CAPÍTULO 4. ENTRADA DE DATOS DEL USUARIO. 33


Función InputBox. 37
Método InputBox. 39
Argumentos con nombre. 41
Concatenación de cadenas de texto. 42

CAPÍTULO 5. LÓGICA CONDICIONAL Y BUCLES. 43


Cómo controlar el flujo de su aplicación. 43
Cómo utilizar la instrucción If. 44
Cómo utilizar la instrucción Select Case. 50
Cómo desplegar cuadros de diálogo integrados de Excel. 52
Bucles a través del código. 53
Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 2 -
Instrucción For. . .Next. 53
Bucles Do. 56

CAPÍTULO 6. COMO TRABAJAR CON CONTROLES. 61


Tipos de controles. 61
Cómo agregar controles a su hoja de cálculo. 64
Cómo aplicar formato a los controles. 66
Cómo nombrar controles. 67
Cómo trabajar con formularios. 68

CAPÍTULO 7. INTRODUCCIÓN A LOS OBJETOS. 71


¿Qué son los objetos? 71
Los objetos, las propiedades y los métodos de VBA. 71
El modelo de objetos de Excel. 72
Los cinco objetos más utilizados. 72
¿Qué significa jerarquía de objetos? 73
Cómo hacer referencia a los objetos en el código. 73
Cómo trabajar con los objetos en el código. 74
Cómo trabajar con las propiedades. 74
Uso de los métodos. 75
Cómo obtener información sobre las propiedades y los métodos. 75
Cómo utilizar las variables del objeto. 77
Colecciones. 78
Método Add. 78
Propiedad Count. 79
Objetos comúnmente usados. 79
El objeto Application. 79
Cómo emplear las funciones integradas de Excel. 80
Propiedades y métodos del objeto Application. 81
El objeto Workbook. 81
El objeto Worksheet. 83
El objeto Range. 85
Propiedades del objeto Range. 85
Métodos del objeto Range. 87
Cómo utilizar la instrucción With. 88
Cómo utilizar la instrucción For Each. 89
Ejemplos de código del objeto Range. 90

CAPÍTULO 8. FORMULARIOS DE USUARIO. 93


Cómo agregar un formulario a su aplicación. 93
Cómo establecer las propiedades de un formulario. 93
Ejecución del formulario. 95
Cómo agregar controles a su formulario. 95
Cómo establecer propiedades adicionales. 97
Propiedades Default y Cancel de los botones de comando. 97
Establecimiento de la propiedad Value. 98
Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 3 -
Desactivación de controles. 99
Cómo asignar orden de tabulación a los controles. 99
Cómo asignar teclas de aceleración a los controles. 99
Cómo automatizar formularios. 100
Valores de inicialización en formularios. 100
Cómo desplegar formularios. 102
Cómo controlar el comportamiento de un formulario. 103
Validación de datos. 106
Uso de los valores del formulario. 109

Formatos de Impresión 111


Bibliografía básica y complementaria 116

ANEXOS
MANUAL DE BOLSILLO (Archivo de Word)
RELACION DE FUNCIONES Y SENTENCIAS (Archivo de Excel)

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 4 -


CAPÍTULO 1 INTRODUCCIÓN A LA PROGRAMACIÓN CON EXCEL

Bienvenido al desarrollo de aplicaciones mediante el uso de Excel y Visual Basic para


Aplicaciones (VBA). Como usuario experimentado de Excel, se siente a gusto con la
funcionalidad nata de Excel. Ahora está listo para subir al siguiente nivel: automatización
en Excel. Aunque no tenga experiencia en la programación, será capaz de desarrollar
soluciones empleando Visual Basic para Aplicaciones (VBA). VBA es uno de los
lenguajes de automatización de aplicaciones (que antes se conocían como lenguajes de
macros) más fáciles de aprender y usar, a pesar de ser el más refinado de todos los
lenguajes actualmente disponibles.

Qué es Visual Basic para Aplicaciones

Hasta el comienzo de los años 90, automatizar aplicaciones era un prospecto desafiante.
Para cada aplicación que necesitara automatizar, tenía que aprender otro lenguaje de
automatización. Por ejemplo, usaba el lenguaje de macros de Excel para automatizar
Excel, WordBasic para automatizar Microsoft Word, y así sucesivamente. Microsoft
decidió que en vez de que cada aplicación de su línea de productos tuviera un lenguaje
de automatización diferente, las aplicaciones deberían compartir un lenguaje común de
automatización. Visual Basic para Aplicaciones se considera un subconjunto del muy
popular lenguaje de desarrollo de aplicaciones, Visual Basic. Además, es realmente una
aplicación desprendida de la versión de Visual Basic. VBA difiere de Visual Basic de
muchas maneras, siendo las más importantes las siguientes:

1. Visual Basic se diseñó para crear aplicaciones autosuficientes. VBA se emplea


para automatizar una aplicación existente.

2. Visual Basic cuenta con su propio entorno de desarrollo. VBA requiere de una
aplicación para su ejecución.

3. Para ejecutar una aplicación desarrollada en Visual Basic, el usuario no necesita


tener acceso a Visual Basic desde su sistema porque la aplicación desarrollada es
ejecutable. Debido a que las aplicaciones de VBA son supeditadas, el usuario
requiere tener acceso a la aplicación madre, como es el caso de Excel.

Con todo y sus diferencias, el lenguaje de Visual Basic y el de VBA son muy similares en
estructura. Un factor importante es el hecho de que si ya conoce Visual Basic, su
aprendizaje de VBA será muy rápido. A la inversa, si no sabe Visual Basic y aprende
VBA, tendrá grandes bases para aprender Visual Basic. Además, después de que
aprenda a crear soluciones utilizando VBA en Excel, poseerá muchos de los

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 5 -


conocimientos que se necesitan para crear soluciones empleando VBA en Word, Project,
Access, Outlook, FoxPro y PowerPoint.

Una característica clave de VBA es que el conocimiento que usted adquiere de VBA en
un producto de Microsoft o en Visual Basic lo puede aprovechar en los demás productos
de Microsoft.

Más específicamente, VBA es el lenguaje de automatización que empleará para


automatizar procedimientos y procesos comúnmente empleados, generar soluciones
personalizadas y si lo desea, implementar aplicaciones usando Excel como una
plataforma de desarrollo.

A la persona que por primera vez se adentra en el campo de las macros de Excel puede
parecerle un tanto complicado entender para qué sirven.

Si esta persona ya es un usuario avanzado de la hoja de cálculo y además conoce la


existencia de ellas, empezar a programarlas y hacer que funcionen le resultará
fascinante. Pero tanto una como otra, en el momento que comprueben su utilidad para
poder automatizar de forma simple procesos repetitivos, la fascinación hará que las
conviertan en una herramienta habitual de trabajo.

Al desarrollar una solución en Excel, también tiene acceso a la extensa biblioteca de


funciones de Excel. Todas las funciones (aproximadamente 350) con las que está
familiarizado como usuario de Excel, como SUMA, TIR, MAX, VF y PROMEDIO, están
disponibles para usted como desarrollador de Excel.

Uno de los beneficios para el usuario final de sus soluciones es que dichos usuarios
obtienen la facilidad de trabajar con una aplicación que ya saben emplear. Están
familiarizados con el sistema de menús, la barra de herramientas y las áreas que
corresponden a las hojas de cálculo de Excel. Con esto inmediatamente se sentirán a
gusto con su solución automatizada.

Lo que se puede realizar con una macro.

Una macro se puede definir como un programa dentro de la propia hoja que automatiza
una serie de trabajos: una macro podrá por ejemplo, hacer una impresión de forma
automática, sin tener que definir cada vez una base de datos, si ésta se modifica
periódicamente. No se debe definir cada vez rangos, ni gráficos cuando varíen. La macro
lo hará por nosotros. Y así otros trabajos que se irán viendo a lo largo de los siguientes
capítulos.

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 6 -


Como quiera que la teoría de ir viendo una a una la gran cantidad de instrucciones de
Visual Basic adaptadas a la hoja Excel puede ser pesada, la mejor forma de entenderlas
es con ejemplos prácticos. La explicación de éstos se ha realizado en todos los capítulos
a partir de ejemplos ilustrativos para ver para qué sirve una determinada instrucción y
cómo se debe construir para que funcione correctamente. De esta forma, el usuario
aplica los conocimientos de forma práctica y gradual.

No debe tener la impresión que puede ser complicado y que se han de perder muchas
horas para llegar a programar y utilizar las macros. En el trabajo normal convendrá
utilizarlas y así, irse introduciendo en el terreno de las macros de forma gradual.
Tampoco se emplean todas, ya que muchas sirven para trabajos de programación
avanzada y no se utilizan en las tareas más habituales.

Estructuración del lenguaje de programación

Todas las palabras que se van a utilizar en la programación se pueden agrupar en los
siguientes grupos:

FUNCIONES: Al igual que las utilizadas en la hoja de cálculo, devuelven una serie
de características de variables, datos, hora, texto, etc.

MÉTODOS: Palabras que se utilizan para indicar a la hoja cómo debe realizar
determinados trabajos, como abrir hojas, cálculos, etc.

OBJETOS: Son las que se utilizan para estructurar objetos de la hoja, como
gráficos, tablas dinámicas, barras de menús, etc.

PROPIEDADES: Se utilizan para definir las de un determinado objeto, hoja, botón,


color.

ENUNCIADOS: Instrucciones de programación propiamente dichas.

Cómo empezar a realizar una macro

El usuario deberá comprobar antes de iniciar una grabación de una macro si tiene la
pestaña Programador en la cinta de opciones. En la figura siguiente podrá comprobar
donde está ubicada esta pestaña:

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 7 -


Si el usuario comprueba que esta pestaña no le aparece, habrá que ir a la pestaña
Archivo y seleccionar Opciones, lo que hará que se abra una ventana. En ésta habrá que
seleccionar Personalizar cinta de opciones y en el cuadro de la derecha señalar
Programador y aceptar la modificación. Este proceso se indica a continuación.

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 8 -


Grabar una macro simple.

Antes de pasar a escribir código en VBA, deberá tomar unos minutos y experimentar con
la grabación de una macro. El grabador de macros de Excel le permite grabar una serie
de acciones, a las que convierte en código de VBA. Aunque se convierta en un experto
para escribir código de VBA, continúe utilizando el grabador de macros en su trabajo.
Como desarrollador de VBA, hay dos razones para usarlo. Una razón es que el grabador
de macros le ahorrará trabajo. Los desarrolladores lo emplean a menudo para construir
las partes fundamentales de una aplicación. La otra razón es que el grabador de macros
puede actuar como herramienta de enseñanza. Si no está seguro de cómo escribir una
serie de pasos, grábelos y mire el código.

Una macro es una serie de comandos guardados con un nombre que Excel puede
ejecutar.

La macro que está próximo a grabar es muy simple; dicha macro cambia la fuente y el
color de la celda seleccionada. Aunque existen otras formas de realizar este tipo de tarea
(por ejemplo, estilos, autoformas, etc.), esta serie de pasos provee una buena
demostración del grabador de macros. Dé los siguientes pasos:

1. Abra un libro nuevo.

2. En la celda A1, introduzca su nombre; en la B1 su apellido; en la C1 su edad y en


la D1 la empresa donde trabaja.

3. Seleccione la celda A1

4. Haga clic en el botón de grabación de la macro que se encuentra en la parte


inferior izquierda de la hoja. (Una vez que se haya pulsado la opción de grabar,
todas las operaciones que se hagan se grabarán hasta que se pulse el botón de
finalización de la grabación de la macro). Después de hacer clic se abre la ventana
de grabación de macro, solicitando el nombre de la macro (el nombre de una
macro puede ser de hasta 255 caracteres de longitud y debe empezar con una
letra. Otros caracteres en el nombre pueden ser letras, números o el guión bajo.
Los espacios no están permitidos).

No se está grabando ninguna macro en este momento. Haga clic para empezar a grabar una nueva macro

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 9 -


5. En el cuadro Nombre de la macro escriba Mi_primer_Macro y oprima Entrar.

6. Presione clic derecho, seleccione formato de celdas del menú contextual y


seleccione la ficha Fuente

7. Establezca a 16 el tamaño de la fuente y el color a rojo. Haga clic en Aceptar.

8. Haga clic en el botón Detener grabación de la parte inferior izquierda de la hoja.

Se está grabando una macro en este momento. Haga clic para detener grabación

Después que haya grabado la macro, podrá ejecutarla.

Cómo ejecutar una macro.

Cuando se ejecuta una macro, ésta lleva a cabo los mismos pasos que usted realizó
durante su grabación. Para ejecutar la macro, dé los siguientes pasos.

1. Seleccione la celda B1.

2. Presione el Botón Macros de la Pestaña Programador o también oprimiendo las


teclas Alt+F8

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 10 -


3. Seleccione Mi_primer_macro y después Ejecutar. La fuente para la celda B1
adquirirá un tamaño de 16 puntos y color rojo.

4. Seleccione de la celda C1 a la D1. Ejecute otra vez la macro Mi_primer_macro.


Observe que las fuentes de estas celdas ahora son de 16 puntos y rojas, a pesar
de que cuando se grabó la macro original sólo cambió una celda.

Vista del código grabado.

Conforme llevó a cabo los pasos necesarios para grabar su macro, Excel convirtió estos
pasos a código de VBA. Para ver el código generado, dé los pasos que se muestran a
continuación:

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 11 -


1. Seleccione el botón Visual Basic, que se encuentra en la pestaña del
Programador.

2. Seleccione Mi_primer_macro y haga clic en Modificar. Con esto se abrirá la


ventana del Editor de Visual Basic de Microsoft.

Si se ha empezado grabando una macro, aparecerán ya los módulos creados. Si aún no


estuviesen presentes, se deberán crear. El proceso es muy simple: Insertar, Módulo.

Los módulos son carpetas donde se irán colocando las diferentes macros a medida que
se vayan confeccionando. Se puede tener un módulo inmenso donde se ubiquen todas, o
Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 12 -
crear los que sean necesarios para estructurar las macros. Es conveniente realizar esto
último ya que, si se quiere buscar posteriormente alguna para modificarla, es fácil
encontrarla.

Antes de continuar vale la pena hacer mención a dos sinónimos que utiliza Excel. A la
macros, tanto se les llama así, como también procedimientos o subrutinas. Por tanto,
tanto una palabra como otra se refieren a la misma cosa.

La estructura básica de un procedimiento creado de forma automática por la propia hoja


es la siguiente:

Sub Mi_primer_Macro()
‘ Mi_primer_Macro Macro
‘ Macro grabada el 01 de Abril de 2013
End Sub

El procedimiento debe tener un nombre, en este caso Mi_primer_Macro, con apertura y


cierre de paréntesis. La instrucción de apertura es Sub y la de fin es End Sub. Entre ellas
estarán todas las instrucciones necesarias para realizar el trabajo que se pretenda que
haga la macro. Se pueden poner seguidos tantos procedimientos como se desee, a los
que se llamará por el nombre que se le haya puesto, pero siempre con las condiciones
siguientes: Los nombres no se pueden repetir dentro del módulo ni en otros módulos de
la hoja y antes de abrir un nuevo procedimiento se deberá cerrar el anterior.

Todas las líneas que empiecen con el apóstrofe, Excel entenderá que son comentarios,
por lo tanto, las primeras líneas sólo son informativas. En la cabecera aparece el nombre
de la macro, la fecha de creación, mismos que fueron capturados en el cuadro de diálogo
Grabar macro. La parte que realmente trabaja comienza con la palabra With. Ponga
mucha atención en la palabra Selection, pues es la palabra que VBA utiliza para referirse
a las celdas que estén seleccionadas en la hoja de cálculo. Esta es la razón por la cual la
macro trabaja, ya sea que seleccione una o múltiples celdas. La otra cosa que
probablemente también observe es que se han grabado muchas más acciones de las
que usted ejecutó. Sólo cambió el tamaño y color de la fuente, pero se ha grabado toda la
información de la fuente contenida en la ficha Fuente del cuadro de diálogo Formato de
celdas.

Cómo modificar el código.

La modificación del código se hace directamente en el Editor de Visual Basic. Puede


agregar, suprimir y modificar líneas. Vaya al Editor y borre las líneas necesarias del tal
forma que el código quede de la siguiente manera:

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 13 -


Sub Mi_primer_macro()
‘ Mi primer macro
‘ Macro grabada el 01 de Abril de 2013
With Selection.Font
.Size = 16
.Color = 255
End With
End Sub

Seleccione la celda A2. Ejecute la macro Mi_primer_macro y verá que el resultado es el


mismo. Acaba de ver que tal fácil es crear una macro y modificar su código. En los
capítulos posteriores aprenderá a crear macros más robustas conforme vayamos
avanzando en el código de programación.

Las limitaciones del grabador de macros.

Muchos de los procesos de Excel que usted necesita automatizar, pueden lograrse
mediante la grabación de sus acciones. Pero el grabador de macros tiene sus
limitaciones. Entre las cosas que no puede realizar mediante el grabador de macros se
encuentran:

1. Pedir información a un usuario mientras se está ejecutando la macro.

2. Ejecutar diferentes acciones basadas en los datos proporcionados por el usuario o


en el valor de las celdas.

3. Desplegar cuadros de diálogo de Excel, por ejemplo el cuadro de diálogo Guardar


como.

4. Desplegar y emplear formularios personalizados.

Estas limitaciones son solo algunas de las razones por las que necesitará crear su propio
código de VBA.

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 14 -


Como grabar el archivo.

Excel 2010 ofrece soporte para cuatro tipos de archivo. Las macros no pueden guardarse
en el tipo de archivo predeterminado por lo que habrá que usar la opción Guardar como
para todos los libros con macros.

Las distintas formas que tiene Excel 2010 de guardar los libros.

1. Libro de Excel (.xlsx): Guarda en el formato predeterminado de archivo.


2. Libro de Excel habilitado para macros (.xlsm): De esta forma debemos guardar
los archivos que posean macros.
3. Libro binario de Excel (.xlsb): Se trata de un formato binario diseñado para
manejar el tamaño grande de 1.1 millón de filas de Excel 2010.
4. Libro de Excel 97-2003 (.xls): Este formato produce archivos que se puedan leer
en cualquier versión de Excel heredada.

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 15 -


CAPÍTULO 2 EMPEZANDO A PROGRAMAR

El código de VBA debe residir en algún lugar, y ese lugar es un módulo. Existen dos tipos
básicos de módulos: módulos estándar y módulos de clase. Los procedimientos pueden
ser de dos tipos: Sub y Function. Más adelante veremos la diferencia entre estos dos
tipos de procedimientos.

De manera formal, un módulo se define como una colección de procedimientos y


declaraciones de VBA que se almacenan juntos formando una unidad. VBA le permite
construir sus propios objetos. Un módulo de clase contiene la definición de un objeto.

La mayor parte del trabajo que realice se lleva a cabo en un módulo estándar (o
simplemente módulo). Cuando grabe una macro, automáticamente se creará un módulo,
si es que no existe alguno. Si lo desea también puede agregar módulos adicionales. A
Excel y VBA les tiene sin cuidado en dónde se ubique su procedimiento o
procedimientos, en tanto que se ubiquen dentro de un libro abierto.

Un procedimiento se define como una unidad de código de VBA. La serie de


instrucciones encontradas en un procedimiento actúa para llevar a cabo una tarea o
calcular un valor. Cada procedimiento en un libro tendrá un nombre único que lo
identificará.

Como dijimos anteriormente, existen dos clases de procedimientos: Sub y Function. Los
procedimientos Sub llevan a cabo una o más operaciones y no devuelven ningún valor.
Vió un ejemplo de un procedimiento Sub cuando grabó una macro y observó el código.
Las macros solamente pueden grabar procedimientos Sub, no pueden grabar funciones.
El siguiente listado muestra un ejemplo de un procedimiento Sub.

Sub Fuente_Click()
With Selection.Font
.Name = Arial
.FontStyle = Normal
.Size = 16
End With
End Sub

El procedimiento listado realmente es un procedimiento de evento. Por su nombre se


puede decir que éste es un procedimiento de evento. El nombre del procedimiento se
compone del nombre de un objeto, Fuente, y el evento Click, el cual está separado del
nombre del objeto por medio de un guión bajo. En este caso, Fuente es el nombre de un

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 16 -


botón de comando. Eso le indica que éste es el procedimiento de evento que se ejecuta
cuando hace clic en el botón de comando llamado Fuente.

Los procedimientos Function, conocidos simplemente como funciones, devuelven un


valor. A menudo este valor es el resultado de un cálculo o de una prueba, por ejemplo,
verdadero o falso. Como ya se ha dicho, puede utilizar VBA para crear sus propias
funciones personalizadas. También puede utilizar las funciones en las celdas de sus
hojas de cálculo. El siguiente listado contiene una función simple que calcula el precio de
un producto con IVA del 16% del precio.

Public Function Importe_Con_Iva(Precio)


Importe_Con_Iva = Precio * 1.16
End Function

Observe que esta función emplea el argumento Precio. Tanto los procedimientos Sub
como los Function pueden aceptar argumentos. Cualquiera que sea el valor de Precio, se
usa para determinar la cantidad del Importe_Con_Iva. Precio puede ser un número o una
referencia de celda. La función devuelve el precio con IVA.

Cómo crear un procedimiento.

Para crear su primer procedimiento necesita dos pasos básicos. Primero, agregue un
módulo a su libro. Después agregue un procedimiento al módulo. Por cada aplicación que
cree, sólo necesita agregar un módulo. Puede tener múltiples módulos, pero no es
necesario. A algunos desarrolladores les gusta tener múltiples módulos para poder
organizar sus procedimientos por propósito, formulario, etcétera. El procedimiento que
creará en este ejercicio solamente va a desplegar un cuadro de mensaje. Aunque todavía
no conoce la instrucción MsgBox, va a usarla aquí, debido a que proporciona un ejemplo
visual. Para crear el procedimiento, siga las instrucciones que se muestran a
continuación:

1. Abra un libro nuevo.

2. De clic al botón Visual Basic de la Pestaña Programador. Se abrirá el Editor de


Visual Basic.

3. En la parte izquierda del Editor de Visual Basic, debe ver la ventana del Explorador
de proyectos. Haga clic con el botón derecho del ratón en ThisWorkbook.
Seleccione Insertar | Módulo y un módulo se agregará a su aplicación.

4. Seleccione Insertar | Procedimiento. Se desplegará el cuadro de diálogo Agregar


procedimiento, como se muestra en la siguiente figura.

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 17 -


5. Introduzca Mi_primer_procedimiento, como nombre del procedimiento. En el área
Tipo, asegúrese que esté seleccionado el botón de opción Procedimiento. Haga
clic en Aceptar. Un procedimiento nuevo se agregará al módulo, como se muestra
en la siguiente figura.

6. El punto de inserción debe estar en la línea blanca que se encuentra en el


procedimiento. Oprima la tecla Tab y teclee lo siguiente: MsgBox “Este es mi
primer procedimiento….”. Cuando teclee MsgBox aparecerá un cuadro de diálogo
para darle información acerca de ese comando. Esta característica se denomina
Información rápida automática. Nota: La sangría que se obtiene al oprimir la tecla
Tab no es un requisito de VBA. La sangría se utiliza para hacer más legible el
código.

7. Oprima Entrar. El procedimiento terminado se muestra a continuación:

Public Sub Mi_primer_procedimiento()


MsgBox “Este es mi primer procedimiento….”
End Sub

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 18 -


VBA tiene reglas acerca de la nomenclatura de procedimientos Sub y Function. Estas
reglas son:

1. El primer carácter debe ser una letra.


2. Los nombres pueden contener letras, números y guiones bajos.
3. Los nombres no pueden contener espacios, puntos, o los caracteres @, &, $, #, ¡.
4. El número máximo de caracteres es de 255.

Cómo ejecutar un procedimiento.

Después de crear su procedimiento puede ejecutarlo inmediatamente. Hay varias


maneras para que pueda ejecutar un procedimiento. Puede utilizar el menú Ejecutar |
Ejecutar Sub/UserForm F5 o el botón de la barra de herramientas u oprimir F5. De
esta manera aparecerá el cuadro de mensaje en la hoja de cálculo, por lo que deberá
oprimir Enter.

Cómo guardar los cambios en el módulo.

Para guardar su nuevo procedimiento, necesita guardar el libro donde éste reside. Puede
guardar el libro desde el Editor de Visual Basic. Realice los siguientes pasos para
guardar el libro:

1. Seleccione el botón de Office | Guardar como | Libro de Excel habilitado para


macros. Debido a que el libro no ha sido guardado antes, necesita nombrarlo.

2. Introduzca Primero como nombre del archivo y oprima Entrar. Se guardarán el


libro, el módulo y el procedimiento.

¿Qué son las variables?

Las variables son lugares de almacenamiento temporal para los valores. Éstas contienen
datos que podrían ser diferentes cada vez que se ejecute la aplicación o pueden cambiar
mientras se esté ejecutando la aplicación. Para demostrar la necesidad de las variables,
realice el siguiente procedimiento simple:

Public Sub Uso_Variables()


suma=0 ‘Se asigna 0 a la variable suma
For i = 1 To 100 ‘para La variable i=0 hasta 100
suma=suma+i ‘realiza la suma de la variable i a la variable suma

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 19 -


Next i ‘siguiente i
cells(1,1)=suma ‘imprime en la celda A1 de la hoja activa
End Sub

Tipo de datos de las variables.

El primer paso para utilizar las variables es conocer los tipos de datos. El tipo de datos de
una variable controla el tipo de datos que puede almacenarse en dicha variable. La tabla
siguiente lista los tipos de datos que soporta VBA. Esta tabla también contiene
información acerca de qué cantidad de almacenamiento requiere una variable con base
en el tipo de datos que se le ha asignado.

Tamaño de
Tipo de datos Rango
almacenamiento
Byte 1 byte 0 hasta 255
Booleam 2 bytes Verdadero o falso
Integer 2 bytes -32768 hasta 32767
Long 4 bytes
-2147483648 hasta 2147483647
(entero largo)
Single 4 bytes -3.402823E38 hasta -1.401298E-45 para valores
(fraccionario negativos; 1.401298E-45 hasta 3.402823E38 para
/precisión valores positivos
simple)
Double 8 bytes -1.79769313486232E308 hasta -4.94065645841247E-
(fraccionario 324 para valores negativos; 4.94065645841247E-324
/precisión hasta 1.79769313486232E308 para valores positivos
doble)
Currency 8 bytes -922,337,203,685,477.5808 hasta
(entero a 922,337,203,685,477.5807
moneda)
Decimal 14 bytes +/- 79,228,162,514,264,337,593,543,950,335 Sin
punto decimal;
+/- 7.9228162514264337593543950335 Con 28
posiciones a la derecha del punto decimal
Date 8 bytes 1 de enero de 100 a 31 de diciembre de 9999
Object 4 bytes Cualquier referencia de objeto
String 10 bytes 0 hasta aproximadamente 2 mil millones
(longitud + 1 byte/char
variable)
String Longitud de 1 hasta aproximadamente 65,400
(longitud fija) cadena
Variant 16 bytes Cualquier valor numérico hasta el rango de un Double
(con números)
Variant 22 bytes + Igual que el rango de la longitud de variable String
Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 20 -
(con 1 byte/char
caracteres)

Empleo de un caracter para declarar las variables

Se puede agregar uno de los siguientes caracteres al nombre de la variable.

Caracter Tipo de Datos


% Integer
& Long
! Single
# Double
@ Currency
$ String

Una de las metas como programador de VBA es seleccionar el tipo de datos más
pequeño posible para los datos que va a almacenar. Ésta es la razón por la que se
proporcionó la columna Tamaño de almacenamiento en la tabla. Por ejemplo, si va a
almacenar un número pequeño, tal como el número máximo de estudiantes de un salón
de clases, solamente necesitará una variable con un tipo de datos de Byte. ¿Por qué
desperdiciar memoria de la computadora utilizando un tipo de datos tal como Single en
esta situación?

Como crear variables por medio de la instrucción Dim.

Ahora que está familiarizado con los tipos de datos disponibles para las variables, está
listo para crearlas. Para crear las variables debe utilizar la instrucción Dim. La creación
de variables se llama declaración de variables.

La sintaxis básica para la instrucción Dim es la siguiente:

Dim Nombrevar As tipo_de_datos

Nombrevar representa el nombre de la variable que esté creando. Las reglas para
nombrar una variable son las mismas que para nombrar un procedimiento. La porción de
tipo de datos de esta instrucción se refiere a los tipos de datos listados en la tabla
anterior.

Los nombres de las variables deben empezar con una letra y pueden contener letras,
números y ciertos caracteres especiales. No puede usar espacios, punto (.), signos de
exclamación o los caracteres &, #, $. Además los nombres no pueden tener más de 255
caracteres de longitud.

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 21 -


El siguiente ejercicio mostrará cómo se utilizan las variables en la programación con
VBA. Va a crear un procedimiento que pregunte el nombre al usuario y luego despliegue
el nombre en un cuadro de mensaje. Abra un nuevo libro que se sugiere le llame
Despliega Nombre y el nombre del procedimiento Introduce_Nombre y capture las
siguientes líneas de código:

Public Sub Introduce_Nombre()


Dim Nombre As String
Nombre = InputBox(“Introduzca su nombre: “)
MsgBox “Hola “ & Nombre
End Sub

La sangría y las líneas en blanco que se encuentran en un procedimiento no se


requieren. La sangría y el espaciado de líneas se recomiendan ampliamente porque
facilitan la lectura de su código.

Coloque el puntero del ratón en cualquier parte del procedimiento y oprima F5 para
ejecutar el procedimiento. Aparecerá un cuadro de entrada de datos. Teclee su nombre y
oprima Entrar. Se desplegará su nombre como parte del texto del cuadro de mensaje.

La importancia que tiene declarar las variables.

No tiene que proporcionar el tipo de datos de la variable en la instrucción Dim. Si no lo


proporciona, se asignará el tipo de datos Variant, porque es el tipo de datos
predeterminado de VBA. Su primera reacción a esto podría ser, dejaré que VBA haga
todo el trabajo y no me preocuparé por los tipos de datos. En el ejemplo que se presenta
a continuación verá la necesidad de asignar los tipos de datos. La primera razón por la
que debe asignarlos es por la cantidad de memoria que consumen las variables Variant.
La segunda razón por la que debe asignar los tipos de datos es que las Variant pueden
afectar la ejecución de su aplicación. VBA tiene que investigar qué clase de tipo de datos
se va a almacenar en la variable, en vez de tener que confiarle la tarea a usted. El
siguiente ejercicio se utiliza para mostrar el porqué no deben emplear el tipo de datos
Variant.

Cree un procedimiento nuevo que se llame Sin_Declarar_Variables, e introduzca el


siguiente código para el procedimiento:

Public Sub Sin_Declarar_Variables ()


TInicio = Timer

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 22 -


For i = 1 To 5000000
j=i+1
Next i
TFinal = Timer
MsgBox "Tiempo de Proceso: " & Tfinal - Tinicio
End Sub

Debido a que no se declararon las variables, automáticamente se asignó el tipo de datos


Variant.

Oprima F5 para ejecutar el procedimiento. En la computadora que corrí este


procedimiento se tardó un tiempo de 0.5547 segundos. Haga clic en Aceptar para quitar
el cuadro de mensaje y copie el código del procedimiento y llámele
Declarando_Variables(), para que sea similar al siguiente:

Public Sub Declarando_Variables()


Dim TInicio As Double, TFinal As Double
Dim i As Long, j As Long
TInicio = Timer
For i = 1 To 5000000
j=i+1
Next i
TFinal = Timer
MsgBox "Tiempo de Proceso: " & Tfinal - Tinicio
End Sub

Oprima F5 para ejecutar nuevamente el procedimiento y observe que se ejecuta


aproximadamente a la mitad del tiempo que en el procedimiento anterior en el que no se
declararon las variables. En conclusión es recomendable declarar todas las variables que
serán utilizadas en cualquier parte del programa.

Cómo trabajar con matrices.

Si ha trabajado con otros lenguajes de programación probablemente esté familiarizado


con las matrices. Una matriz es un grupo de variables que tienen el mismo tipo de datos

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 23 -


que comparten un nombre en común. Los elementos de la matriz se identifican por un
número de índice. La sintaxis para definir una matriz es:

Dim nombre_matriz(n) As tipo de datos

Donde n es el número de elementos en la matriz.

Por ejemplo, si quisiera crear una matriz que pudiera contener 15 nombres de
estudiantes, debería emplear la siguiente instrucción.

Dim Estudiantes(14) As String

Observe que el número dentro del paréntesis es 14, no 15. Esto se debe a que, de
manera predeterminada, el primer número de índice es 0. Las matrices son útiles para
trabajar con información similar. Digamos que necesita procesar 20 calificaciones. Podría
crear 20 variables independientes, lo que significa que también necesitaría 20
instrucciones Dim. O podría crear una matriz para almacenar las calificaciones
empleando la siguiente instrucción:

Dim Calificaciones (19) As Integer

La mayor parte del tiempo trabajará con matrices de una dimensión como en el ejemplo
anterior. Sin embargo VBA soporta matrices multidimensionales. Por ejemplo, una matriz
bidimensional se podría pensar que es similar en estructura a una hoja de cálculo o a una
tabla. Para crear una matriz de cinco por cinco, utilice la siguiente instrucción:

Dim Tabla(4, 4) As Integer

Otra opción al declarar una matriz, es no darle tamaño. Esto le da la flexibilidad de definir
el tamaño de la matriz después que se empiece a ejecutar el programa. Por ejemplo, su
aplicación permite al usuario crear una tabla. Usted pregunta al usuario cuántas filas y
columnas desea en la tabla. Puede hacer esto al crear una matriz dinámica, y más aún,
permitir al usuario agregar o eliminar filas o columnas después que se cree la tabla (la
cuál es realmente una matriz). Si se declara una matriz sin darle tamaño, se crea una
matriz dinámica. La sintaxis para crear una matriz dinámica es:

Dim matriz_dinámica() As tipo_de_datos

Después de declarar la matriz, puede darle tamaño en tiempo de ejecución por medio de
Redim:

ReDim matriz_dinámica(tamaño_matriz)

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 24 -


El argumento tamaño_matriz representa las nuevas dimensiones de la matriz. Para
conservar los valores almacenados en la matriz cada vez que modifique su tamaño,
asegúrese de incluir la palabra reservada Preserve después de la instrucción Redim,
como se muestra en la siguiente sintaxis:

ReDim Preserve matriz_dinámica(tamaño matriz)

Cómo asignar valores a las variables.

Después que haya declarado la variable, le puede asignar un valor. El siguiente


procedimiento muestra una serie de instrucciones de asignación para las variables.
Observe el uso de los números de índice cuando asigna valores a los elementos la
matriz.

Public Sub Matrices()


Dim Numero As Integer, i As Integer
Dim Calificacion() As Integer
Numero = InputBox(“Introduzca el número de estudiantes: “)
ReDim Preserve Calificacion(Numero)
For i = 1 To Numero
Calificacion(i)= InputBox(“Introduzca las calificaciones “ & i)
Next i
For i = 1 To Numero
MsgBox “Calificación “ & i & “ = “ & Calificacion(i)
Next i
End Sub

Uso de las constantes.

Ahora sabe que las variables actúan como lugares de almacenamiento para información
no estática. Cuando necesite almacenar información estática, cree una constante. Las
constantes se utilizan por dos razones. La primera es guardar un valor al que se haga
referencia un sin número de veces y que no cambie durante la ejecución del programa,
pero que pudiera cambiar en un futuro. Un buen ejemplo de esto es una tasa de
impuestos.
Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 25 -
Para declarar una constante y establecer su valor, utilice la instrucción Const. Después
de que la constante haya sido declarada, no se le podrá asignar un nuevo valor. Por
ejemplo, si quisiera declarar una constante para almacenar el valor del IVA, debe usar la
siguiente instrucción:

Const IVA As Single = 0.16

Debido a que ya sabe el valor de una constante, puede especificar el tipo de datos en
una instrucción Const. Las constantes se pueden declarar como uno de los siguientes
tipos de datos: Boolean, Byte, Integer, Long, Currency, Single, Double, Date, String o
Variant. Una convención de uso frecuente para nombrar constantes es escribir su nombre
utilizando únicamente letras mayúsculas. Esto facilita la diferenciación entre variables y
constantes en su código.

Alcance de una variable.

Hasta este punto ha aprendido cómo definir variables o constantes, pero no donde
definirlas. Las variables se pueden definir en dos ubicaciones. Se pueden definir dentro
de un procedimiento y también en la parte superior de un módulo en una sección llamada
área General de declaraciones. La ubicación de una declaración de variable determina su
alcance. Cuando cree una variable dentro de un procedimiento, sólo ese procedimiento lo
sabrá. Ningún otro procedimiento podrá usar esa variable y ese valor. Se conoce como
variable de nivel de procedimiento o variable local debido a que se ubica dentro del
procedimiento que la define.

Qué pasaría si deseara establecer una variable o una constante a un valor y luego
emplear esa variable o constante en otro procedimiento en el modulo. Necesitaría que la
variable o la constante tuviera un nivel de alcance diferente. Si definiera la variable o la
constante en el área General de declaraciones del módulo, todos los procedimientos
definidos en el módulo podrían emplear esa variable y su valor. Ésta se llama variable de
nivel módulo. El concepto de alcance también se aplica a los procedimientos.

Existe otro nivel de alcance llamado Public. Las variables de nivel público se pueden
utilizar en cualquier procedimiento de su aplicación, ya sea que ese procedimiento esté o
no en el mismo módulo dónde se definió la variable o la constante. Esto hace que las
variables de nivel público sean muy flexibles, pero también significa que se cargarán en
la memoria todo el tiempo que se esté ejecutando su aplicación; por lo tanto, utilice
recursos del sistema. Para crear una variable de nivel público, emplee la instrucción
Public. Para crear una variable pública, utilice la siguiente sintaxis:

Public nombre_de_variable As tipo_de datos


Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 26 -
Para crear una constante pública, utilice la siguiente sintaxis:

Public Const NOMBRE_CONSTANTE tipo_de_datos = valor

Las variables y constantes públicas necesitan ser definidas en el área General de


declaraciones ubicada en la parte superior del módulo.

El alcance de una variable determina cuales procedimientos pueden utilizarla

Public Variable_A, Variable_B

Modulo 1 Modulo 2

Private Variable_C Private Variable_D

Public Sub Proc_A Private Sub Proc_C


Dim Variable_E Dim Variable_G

Private Sub Proc_B


Public Function Func_A
Dim Variable_F Dim Variable_H

Entorno de la aplicación

La Variable_A y Variable_B pueden verla todos los procedimientos de los módulos 1 y 2,


pués son públicas. Ahora bien la Variable_C sólo pueden verla los procedimientos
Proc_A y Proc_B que se encuentran en el módulo 1. De forma similar, la Variable_D sólo
pueden verla Proc_C y Func_A, debido que es privada para el módulo 2. Por último, la
Variable E sólo puede ver Proc_A, dado que es local a ese procedimiento del módulo 1.
Lo mismo ocurre con Variable_F, Variable_G y Variable_H en los diferentes
procedimientos donde se han declarado.

En cuanto al alcance de los procedimientos, Proc_A y Func_A pueden ejecutarse desde


cualquier procedimiento de cualquiera de los 2 módulos, ya que se han declarado como
públicos. Como contraparte, Proc_B y Proc_C sólo pueden ejecutarlos el módulo donde
se encuentran. Todos los procedimientos de evento son privados.

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 27 -


CAPÍTULO 3 EL EDITOR DE VISUAL BASIC

Hay características abundantes del Editor de Visual Basic, que están diseñadas para
facilitar y hacer más rápida la escritura del código. En esta parte trabajará con esas
características, así como con barras de herramientas, la Ayuda en línea y el Examinador
de objetos.

Uso de las barras de herramientas del Editor de Visual Basic.

Hasta este punto, ha usado sólo un poco los botones que se encuentran en la barra de
herramientas Estándar del Editor de Visual Basic. Esta barra de herramientas contiene
botones para ejecutar los comandos más frecuentemente utilizados. Tal vez a primera
vista no se dé cuenta, pero esta barra de herramientas está dividida en tipos de
comandos.

La primera sección de botones se relaciona con los libros; por medio de los botones
puede regresar a Excel, agregar elementos al proyecto actual y guardar su trabajo.

La siguiente sección de botones se relaciona con las funciones de edición. Estos botones
se utilizan para cortar, copiar y pegar texto. En esta sección también hay un botón para
buscar texto.

La tercera sección de la barra de herramientas tiene dos botones, Deshacer y Rehacer.

Después están los “botones de prueba y diseño”. Los primeros tres botones de esta
sección le permiten ejecutar, interrumpir y restablecer la ejecución de un procedimiento.
El último botón de esta sección pone al formulario en modo de diseño.

La siguiente sección de la barra de herramientas Estándar se emplea para ver las


diferentes secciones del Editor de Visual Basic. Estos botones le permiten desplegar el

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 28 -


Explorador de proyectos, la ventana Propiedades, el Examinador de objetos y el Cuadro
de herramientas.

Finalmente, está el botón Ayuda de Microsoft Visual Basic. Este botón funciona del
mismo modo que el botón Ayuda que ha visto a través de las aplicaciones de Microsoft.

Otra herramienta útil al trabajar con el Editor de Visual Basic es la barra de herramientas
Edición. Los botones de esta barra afectan y aumentan el entorno de edición del Editor
de Visual Basic. Los botones que se encuentran en la barra de herramientas Edición son:

1 2 3 4 5 6 7 8 9 10 11 12 13 14

1. Lista de propiedades y métodos.


Al hacer clic en este botón se muestra una lista de propiedades y métodos
aplicables al objeto sobre el que se localiza el cursor.
2. Lista de constantes.
Despliega las constantes del sistema que aplican al argumento actual.
3. Información rápida.
Despliega el cuadro de Información rápida que proporciona información de sintaxis
del elemento seleccionado.
4. Información de parámetros.
Muestra información sobre los parámetros de la instrucción seleccionada.
5. Palabra completa.
Termina de escribir la palabra que usted ha comenzado, una vez que cuenta con
los caracteres suficientes para identificarla.
6. Sangría derecha.
Desplaza a la derecha el texto seleccionado.
7. Sangría izquierda.
Desplaza a la izquierda el texto seleccionado.
8. Alternar punto de interrupción.
Coloca un punto de interrupción en la línea de código seleccionada.
9. Bloque con comentarios.
Convierte el texto seleccionado en un comentario. Esto se emplea durante la fase
de depuración y prueba del desarrollo de la aplicación con objeto de saltarse
segmentos de código.
10. Bloque sin comentarios.

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 29 -


Devuelve el texto seleccionado a código.
11. Alternar marcador.
Crea un marcador de posición en la línea actual. Un marcador es una señal que
usted puede poner a una línea de código para una fácil referencia.
12. Marcador siguiente.
Se desplaza al siguiente marcador.
13. Marcador anterior.
Se desplaza al marcador anterior.
14. Borrar todos los marcadores
Borra todos los marcadores del texto.

Cómo examinar el código.

Una de las agradables características de trabajar con el Editor de Visual Basic es que si
está familiarizado con las teclas de navegación en Microsoft Word, aquí puede aplicar su
destreza. La tabla siguiente lista algunas de las teclas de navegación.

Para ir a Oprima esta tecla


Principio de la línea Inicio
Fin de la línea Fin
Principio del módulo Ctrl+Inicio
Fin del módulo Ctrl+Fin
Siguiente palabra Ctrl+Flecha derecha
Palabra anterior Ctrl+Flecha izquierda
Procedimiento siguiente Ctrl+Flecha hacia arriba
Procedimiento anterior Ctrl+Flecha hacia abajo

Si desea buscar una palabra o frase determinada, puede emplear la característica Buscar
del Editor de Visual Basic. Puede acceder esta característica a través del menú Edición,
haciendo clic en el botón Buscar de la barra de herramientas Estándar u oprimiendo
Ctrl+F. Una extensión de la característica Buscar es Reemplazar. La característica
Reemplazar se utiliza para localizar una palabra o frase y reemplazarla con otro texto.
Oprima CtrI+H para acceder al comando Reemplazar.

Otra característica del Editor para examinar son los marcadores. Éstos sirven para poner
señales en el texto que posteriormente le permitan localizarlo de manera más fácil. Son
de gran utilidad cuando prueba y depura el código, ya que le permiten señalar las líneas
en donde usted sospecha que se presentan errores. También puede marcar líneas de
código que están incompletas o que pueden ser mejoradas, así como diferentes
procedimientos o funciones en los que esté trabajando y entre los cuales necesite
desplazarse frecuentemente. Los marcadores sólo sirven para la sesión actual, pues no
se guardan cuando se guarda el libro de trabajo.

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 30 -


Cómo emplear el Examinador de objetos.

El Examinador de objetos le proporciona una interfaz de uso fácil para examinar todos los
objetos disponibles en su proyecto. Puede ver las propiedades, los métodos y los eventos
de los objetos. También puede ver los procedimientos y las constantes que están
disponibles desde cualquier biblioteca de objetos a la cual haga referencia su proyecto.
Existen varias maneras de acceder al Examinador de objetos.

1. Haga clic en el botón Examinador de objetos de la barra de herramientas


Estándar.
2. Seleccione Ver | Examinador de objetos.
3. Oprima F2.

El Examinador de objetos es una herramienta de aprendizaje y ayuda. Esta herramienta


es una manera fabulosa de familiarizarse con las propiedades y los métodos de un
objeto. También puede acceder a la Ayuda por medio del Examinador de objetos. Realice
los siguientes pasos para utilizar el Examinador de objetos.

1. Oprima F2 para desplegar el Examinador de objetos.


2. Localice el objeto Range y selecciónelo.
3. Desplácese a través de los métodos (conocidos por el Examinador de objetos
como funciones) y propiedades disponibles para el objeto Range.
4. Seleccione Activate.
5. Oprima F1. Aparecerá el tema de Ayuda correspondiente.
6. Cierre la Ayuda.
7. Cierre el Examinador de objetos.

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 31 -


Cómo establecer opciones.

Utilice el cuadro de diálogo Opciones para personalizar el entorno del Editor de Visual
Basic. Por medio de este cuadro de diálogo, es posible controlar valores del Editor, el
formato del Editor, valores generales y valores de acoplamiento. Dé los siguientes pasos
para familiarizarse con los valores disponibles en el cuadro de diálogo Opciones.

1. Seleccione Herramientas | Opciones. Aparecerá el cuadro de diálogo


correspondiente.
2. Seleccione la ficha Editor. Ésta se utiliza para establecer código y configuraciones
de la ventana. Aquí es donde puede habilitar o deshabilitar características tales
como información rápida automática y comprobación de sintaxis automática.
3. Seleccione la ficha Formato del editor. Ésta le permite controlar los colores que se
usan para los diferentes tipos de texto en el Editor. También puede escoger
diferentes estilos y tamaños de fuente. Si trabaja con una laptop, tal vez necesite
cambiar algunos colores que el Editor utiliza, debido a que no hay mucha
diferencia entre el negro y el azul. Si tiene un impedimento visual, puede aumentar
el tamaño del texto.
4. Seleccione la ficha General. Ésta afecta a todo el entorno del Editor. Las opciones
de la sección Opciones de La cuadrícula sirven para controlar la cuadrícula en el
diseño de formularios. También puede controlar los valores de las secciones Editar
y continuar, Interceptación de errores y Compilar.
5. Seleccione la ficha Acoplar. Ésta le permite elegir qué ventanas desea que sean
acoplabIes.
6. Haga clic en Cancelar para cerrar el cuadro de diálogo.

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 32 -


CAPÍTULO 4 ENTRADA DE DATOS DEL USUARIO

Algunos de los procedimientos que utilizó anteriormente para ilustrar varios temas,
emplearon las instrucciones MsgBox e InputBox. En este capítulo aprenderá acerca de
estas instrucciones y cómo usarlas en su código de VBA. En el capítulo uno vió algunas
limitaciones de macros grabadas. Una de estas limitaciones es la capacidad de pedir
información a los usuarios. En este capítulo aprenderá a pedir información a los usuarios
y recuperar el resultado de la petición.

Tal vez haya pensado que con los cuadros de mensaje necesitan mucho tiempo de
programación. El cuadro de mensaje que se muestra a continuación se puede crear con
la siguiente línea de código de VBA:

MsgBox "Desea guardar los cambios efectuados en " & _


ThisWorkbook.Name , vbYesNoCancel + vbExclamation

ThisWorkbook.Name se utiliza en este código para recuperar el nombre del libro actual.

La función MsgBox se emplea para desplegar un mensaje en un cuadro de diálogo. Una


vez desplegado, espera que el usuario haga clic en un botón. Dependiendo en qué botón
haga clic, se devolverá un valor Entero (Integer). La sintaxis para la función MsgBox es la
siguiente:

MsgBox(prompt [, buttons] [, title] [, helpfile, context])

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 33 -


prompt es el único argumento que se requiere para esta función. Su valor es la cadena
que se despliega en el cuadro de diálogo. Observe el uso de los paréntesis en la sintaxis
dada. MsgBox es una función, por lo que devuelve un valor. En el ejemplo dado anterior
a éste, no hubo paréntesis. Cuando omite los paréntesis de los argumentos, indica a VBA
que no está interesado en el valor devuelto por la función. Si desea el valor devuelto,
debe usar código similar al siguiente:

Dim Respuesta As Integer


Respuesta = MsgBox("Desea guardar los cambios efectuados en " & _
ThisWorkbook.Name & " " , vbYesNoCancel + vbExclamation)

Observe que la instrucción MsgBox ahora está dividida en dos líneas. El carácter de
continuación de línea en VBA es un espacio seguido por un guión bajo.

Si no suministra un valor para el argumento buttons, VBA de manera predeterminada


asume que usted sólo desea el botón Aceptar en el cuadro de diálogo que se creó. Este
argumento es muy útil pues le permite controlar:

 Cuántos botones tendrá el cuadro de mensaje


 Qué tipo de botones se colocarán en el cuadro de mensaje
 El icono a desplegar en el cuadro de mensaje
 El botón que será el predeterminado
 La modalidad del cuadro de mensaje

La siguiente tabla lista los valores para este argumento. En dicha tabla encontrará que
los argumentos están agrupados. El primer grupo de valores establece el número y el tipo
de botones a desplegar en el cuadro de diálogo. El segundo grupo selecciona el estilo del
icono. El tercer grupo establece el botón predeterminado. El cuarto grupo establece la
modalidad del cuadro de mensaje. Cuando agregue valores para crear un valor final para
el argumento buttons, sólo use un número de cada grupo.

Tabla de Valores disponibles para el argumento buttons del cuadro de mensaje


Grupo Constante Valor Descripción
vbOKOnly 0 Despliega únicamente el botón Aceptar
(predeterminado).
vbOKCancel 1 Despliega los botones Aceptar y Cancelar.
vbAbortRetry 2 Despliega los botones Anular, Reintentar y
Grupo1
Ignore Omitir
vbYesNoCancel 3 Despliega los botones Sí, No y Cancelar.
vbYesNo 4 Despliega los botones Sí y No.
vbRetryCancel 5 Despliega los botones Reintentar y

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 34 -


Cancelar.
vbCritical 16 Despliega un icono de mensaje crítico.
vbQuestion 32 Despliega un icono de consulta de
advertencia.
Grupo 2
vbExclamation 48 Despliega un icono de mensaje de
advertencia.
vblnformation 64 Despliega un icono de mensaje de
información.
vbDefaultButton1 0 El primer botón es el predeterminado.
vbDefaultButton2 256 El segundo botón es el predeterminado.
Grupo 3
vbDefaultButton3 512 El tercer botón es el predeterminado.
vbDefaultButton4 768 El cuarto botón es el predeterminado.
vbApplication 0 Aplicación modal; el usuario debe
Modal responder al cuadro de mensaje antes de
continuar trabajando en la aplicación
Grupo 4 actual.
vbSysteraModal 4096 Sistema modal; todas las aplicaciones se
suspenden hasta que el usuario responda
al cuadro de mensaje.
vbMsgBoxHelp 16384 Agrega un botón de Ayuda al cuadro de
Button mensaje.
vbMsgBoxSet 65536 Establece el cuadro de mensaje como la
Foreg round ventana de primer plano.
Adicional
vbMsgBoxRight 524288 Despliega un cuadro de mensaje alineado
Opciones
a la derecha.
vbMsgBoxRtl 1048576 Especifica que el texto se debe desplegar
Reading de derecha a izquierda como en los
sistemas Hebreo y Arábigo.

Para ver una lista de constantes MsgBox y otras constantes intrínsecas de VBA, use el
Examinador de objetos. Busque las clases que empiecen con VB. También vea la clase
Constants. También encontrará las constantes intrínsecas de Excel.

El argumento opcional title determina la expresión de cadena que se muestra en la barra


de título del cuadro de diálogo. Si no se proporciona un valor para el argumento title,
Microsoft Excel se mostrará como título en dicha barra.

helpfile y context son argumentos opcionales que se usan cuando crea sus propios
archivos de ayuda para su aplicación.

MsgBox es una función que puede devolver un valor. La tabla 5.2 lista los valores que
MsgBox puede devolver. El valor devuelto se basa en el botón que seleccione el usuario.

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 35 -


Tabla de Valores devueltos de la función MsgBox
Constante Valor Descripción
vbOK 1 Aceptar
vbCancel 2 Cancelar
vbAbort 3 Anular
vbRetry 4 Reintentar
vblgnore 5 Ignorar
vbYes 6 Sí
vbNo 7 No

Al ver los valores devueltos por la función MsgBox, ¿Qué tipo de variable cree usted que
necesitaría crear para almacenar el resultado? El mejor tipo de datos al declarar la
variable que almacenar el resultado de una función MsgBox es Integer. En el siguiente
ejercicio creará un cuadro de mensaje con múltiples botones y luego desplegará el botón
que fue seleccionado usando otro cuadro de mensaje:

1. Vaya al Editor de Visual Basic.


2. Haga clic con el botón derecho en ThisWorkbook, que se encuentra en la ventana
del Explorador de proyectos.
3. Seleccione Insertar | Módulo.
4. Seleccione Insertar | Procedimiento.
5. Introduzca MBEjercicio para el nombre y oprima Entrar.
6. Introduzca el siguiente código para el procedimiento Mensaje:
Dim Resu As Integer
Resu = MsgBox("Seleccione un botón", vbYesNoCancel)
MsgBox Resu
7. Coloque el punto de inserción dentro del procedimiento y oprima F5 para ejecutar
el procedimiento. Se desplegará un cuadro de mensaje, como se muestra en la
figura siguiente.

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 36 -


8. Haga clic en el botón Sí. Otro cuadro de mensaje de desplegará con un 6 en él de
acuerdo a la Tabla de Valores devueltos de la función MsgBox sabe que el 6 es el
resultado de hacer clic en el botón Si. Haga clic en Aceptar para quitar el cuadro
de mensaje.
9. Oprima F5 para ejecutar nuevamente el procedimiento. Esta vez, haga clic en el
botón No en respuesta al cuadro de mensaje. El segundo cuadro de mensaje
desplegará un 7. Haga clic en Aceptar para quitar el cuadro de mensaje.
10. Oprima F5 una vez más. Haga clic en Cancelar en respuesta al cuadro de
mensaje. El segundo cuadro de mensaje desplegará un 2. Haga clic en Aceptar
para quitar el cuadro de mensaje.

Ahora sabe cómo emplear una variable para desplegar el valor devuelto por un cuadro de
diálogo.

Función InputBox.

La función MsgBox le sirve cuando necesita un tipo de respuesta simple Sí/No,


Aceptar/Cancelar. Si necesita otros tipos de entradas de datos como, números y textos,
debe emplear la función InputBox. Ésta despliega un cuadro de diálogo y provee texto
para que el usuario introduzca los datos. La sintaxis para el InputBox es la siguiente:

InputBox( prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context])

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 37 -


El único argumento que se requiere para la función InputBox es prompt. Igual que en el
argumento prompt de la función MsgBox, su valor es una cadena que se despliega como
el mensaje en el cuadro de diálogo.

El argumento opcional title es una expresión de cadena desplegada en la barra de títulos


del cuadro de diálogo. Como su primo el MsgBox, si no proporciona un valor para el
argumento title, Microsoft Excel se mostrará como título en dicha barra.

Para ahorrarle tiempo a su usuario, puede establecer un valor para el argumento opcional
default. Este argumento se puede establecer como una expresión de cadena que será
desplegada en el cuadro de texto como respuesta predeterminada si no introduce otra
información. Si omite este argumento, el cuadro de texto se desplegará vacío. Si fuera a
pedirle a un usuario que introduzca su código postal, pero usted sabe de antemano que
la mayoría de sus clientes tienen en el mismo código postal, debería proporcionar ese
código postal como el predeterminado.

xpos e ypos son argumentos opcionales que controlan la posición en la pantalla del
cuadro de entrada de datos.

helpfile y context son argumentos opcionales que se utilizan cuando se crean archivos de
ayuda para una aplicación.

El valor que la función InputBox devuelve es el que se introduce en el cuadro de texto.


Realice los siguientes pasos para que obtenga algo de experiencia al trabajar con la
función InputBox:

1. Inserte un nuevo procedimiento Sub que se llame Entrada_datos.


2. Introduzca el siguiente código para el nuevo procedimiento.

Dim Resu As Integer


Resu = InputBox("Introduzca su número favorito:")
MsgBox Resu
ActiveCell.Value = Resu

Este código le indica que introduzca un número y después el número en un cuadro


de mensaje. También coloca el número en la celda activa del libro.

3. Coloque el punto de inserción dentro del procedimiento, oprima F5 para ejecutar


dicho procedimiento. Se desplegará el cuadro de entrada de datos que se muestra
en la figura siguiente:

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 38 -


4. Teclee un número y oprima Entrar. Se desplegará un cuadro de mensaje con el
número que tecleó.
5. Haga clic en Aceptar para quitar el cuadro de mensaje.
6. Vaya a su libro. También debe ver el número en la celda activa de su libro.

Si ve la documentación de Ayuda en línea, encontrará que la función InputBox devuelve


una cadena. Este no es exactamente el caso. En versiones más recientes de Visual
Basic, incluyendo la implementada en VBA, el valor actúa con tipo Variant y toma para sí
las características de los datos introducidos. Es por eso que su procedimiento funcionará,
aun cuando a la variable Resu se le haya asignado el tipo de datos Integer. Otra cosa
que necesita saber acerca de la función InputBox es lo que se devuelve si el usuario
hace clic en el botón Cancelar. Si el usuario hace clic en Cancelar, la función InputBox
devuelve una cadena de longitud cero (""). Una última cosa: los usuarios siempre
parecen desear saber cómo controlar el tamaño de los cuadros de entrada de datos. No
es posible controlarlo. Éste es un caso de "¡Lo que ves es lo que obtienes!"

Método InputBox.

Para obtener entrada de datos de un usuario, Excel soporta el método InputBox. Es


idéntico a su prima, la función InputBox; tiene algunas pequeñas diferencias, pero útiles.
Lo primero que debe hacer es ver la sintaxis para el método InputBox:

Application.lnputBox(Prompt, [Title], [Default], [Left], [Top], [HelpFile], [HelpContectld],


[Type])

La sintaxis es similar a la de la función InputBox. InputBox es un método que pertenece a

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 39 -


Excel, por lo tanto, la instrucción inicia con Application. La mayoría de los argumentos
son conocidos. Una pequeña diferencia se puede encontrar con Left y Top. Éstos son
equivalentes a xpos e ypos.

El argumento al que debe enfocarse es el último argumento en el método InputBox, Type.


El argumento opcional Type le permite especificar el tipo de datos del valor devuelto. La
tabla siguiente lista los valores que puede emplear para el argumento Type.

Valores para el argumento Type


Valor Valor devuelto esperado
0 Una formula
1 Un número
2 Texto (cadena)
4 Un valor lógico, tal como verdadero o falso
8 Una referencia de celda
16 Un valor de error
64 Una matriz de valores

Al ver esta tabla, se estará preguntando por qué se salta la numeración, como en el caso
del 4 al 8 y del 16 al 64. Esto se debe a que puede sumar los valores permisibles, por
ejemplo, si desea aceptar tanto números como texto, establezca el argumento Type a
1+2. Si no proporciona un valor para ese argumento, el método InputBox devuelve texto.
Para demostrar el beneficio del método InputBox, complete los pasos siguientes:

1. Ejecute el procedimiento Entrada_datos.


2. Introduzca la letra a en respuesta al cuadro de entrada de datos y oprima Entrar.
Vea lo que pasa. Debido a que introdujo texto en vez de un número, su
procedimiento falló vea la siguiente figura.

3. Haga clic en Finalizar para quitar el cuadro de mensaje.


4. Cree un nuevo procedimiento y déle el nombre Método. Este nuevo procedimiento
usará el método InputBox.
5. Introduzca el siguiente código para el procedimiento Método:
Dim Resu As Integer
Resu = Application.InputBox ("Introduzca su número favorito:", , , , , , , 1)
MsgBox Resu
ActiveCell.Value = Resu

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 40 -


Las comas utilizadas en la instrucción Application.InputBox actúan como
marcadores de posición para los argumentos que no les ha introducido un valor. El
argumento Type es el último argumento en la sintaxis del InputBox. Éste se
estableció a 1, esto significa que solamente se aceptan números. Observe que la
única diferencia entre las líneas en ese procedimiento y las líneas de código en
Entrada_datos es el uso de la instrucción Application.InputBox.

6. Coloque el punto de inserción dentro del procedimiento Método y oprima F5 para


ejecutar el procedimiento. Aparecerá un cuadro de entrada de datos.
7. Teclee la letra A y oprima Entrar. En vez de que el procedimiento falle, se
desplegará un mensaje para explicar el problema vea la figura siguiente.

8. Oprima Entrar para quitar el cuadro de mensaje.


9. Teclee 7 y oprima Entrar. Se desplegará un cuadro de mensaje con el 7 en él.
Haga clic en Aceptar para quitar el cuadro de mensaje.

Ahora puede ver que una de las ventajas del método InputBox es el manejo de errores
integrado. Otra diferencia entre la función InputBox y el método InputBox es el resultado
que se devuelve si el usuario hace clic en el botón Cancelar. Si el usuario hace clic en el
botón Cancelar cuando se utilice la función InputBox, se devolverá una cadena de
longitud cero. El método InputBox devuelve Falso cuando se selecciona el botón
Cancelar.

Argumentos con nombre.

En el ejercicio anterior introdujo la siguiente instrucción:

Resu = Application.InputBox ("Introduzca su número favorito:", , , , , , , 1)

Si olvida una de las comas, probablemente surja un error cuando se ejecute su


instrucción. Al pasar valores de argumento por posición definitivamente tiene sus
inconveniencias. Para remediar esto, VBA soporta argumentos con nombre. El uso de
este tipo de argumentos le permite pasar argumentos en cualquier orden. Por ejemplo,
puede reemplazar la instrucción anterior con el siguiente argumento con nombre:

Resu = Application.InputBox("Introduzca su número favorito:", Type:=1)

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 41 -


Para emplear un argumento con nombre, teclee el nombre del argumento en inglés como
aparece en la sintaxis seguido por dos puntos (:) y el signo igual. Después del signo igual
continúe con el valor para el argumento. La sintaxis de la instrucción y el nombre del
argumento en inglés se muestran en el cuadro de Información rápida que se despliega
cuando teclea una instrucción. También está disponible a través de la Ayuda en línea.

Si no se despliega la Información rápida, seleccione Herramientas I Opciones. Seleccione


la ficha Editor del cuadro de diálogo Opciones. Active la casilla de verificación de
Información rápida automática.

Concatenación de cadenas de texto.

Si necesita combinar cadenas de texto, utilice el carácter de concatenación de cadenas


(&). El siguiente listado ilustra el uso de este carácter:

Sub Concate_Cadenas()
Dim Nombre As String, Texto As String
Nombre = InputBox(“Introduzca su nombre y apellido: “)
'La siguiente línea de código une la cadena Hola y el valor
'de Nombre para que se despliegue como una sola cadena
'en un cuadro de mensaje.
MsgBox “Hola “ & Nombre
Texto = “Este es un ejemplo del uso de la concatenación”
Texto = Texto & “de cadenas para unir cadenas “
Texto = Texto & “largas." & vbNewLine
Texto = Texto & “La constante vbNewLine le permite “
Texto = Texto & “agregar saltos de línea a sus cadenas.”
MsgBox Texto
End Sub

La siguiente figura muestra el resultado de la cadena desplegada por la línea Texto de


MsgBox. Por medio del carácter de concatenación, puede combinar cadenas contenidas
en texto literal, variables, constantes, etcétera.

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 42 -


CAPÍTULO 5 LÓGICA CONDICIONAL Y BUCLES

En el capítulo anterior aprendió a pedir una respuesta al usuario y después guardar esa
respuesta en una variable. ¿Qué hará con ella después? Utilizará la respuesta para
tomar una decisión. El problema está en que debe hacer para manejar todas las
respuestas posibles que pudiera dar el usuario. Esto se hace con lógica condicional.

Cómo controlar el flujo de su aplicación.

Su aplicación despliega un cuadro de mensaje con los botones Sí y No. Necesita decidir
qué hacer si el usuario selecciona Sí y qué hacer si el usuario selecciona No. En otras
palabras, debe ejecutar diferentes instrucciones dependiendo de lo que el usuario
seleccione. Esto se hace con instrucciones condicionales. Una instrucción condicional
evalúa si la condición es verdadera o falsa. Dependiendo del resultado de esa
evaluación, se ejecutarán una o más instrucciones, tal vez usted mismo se encontrará
utilizando instrucciones condicionales en sus procedimientos.

En sus instrucciones condicionales utilizará la lógica condicional para controlar el flujo del
programa. La lógica condicional le permite seleccionar diferentes rutas del programa,
basadas en el valor de la variable, la respuesta del usuario, el cálculo de una función o el
valor de una propiedad. Cuando usa la lógica condicional, crea una prueba y después,
basándose en los resultados de esa prueba, su programa ejecuta una acción.

Si, por ejemplo, su procedimiento despliega un cuadro de entrada de datos que pregunte
al usuario la región donde trabaja, puede emplear la lógica condicional para que ese
conjunto de instrucciones se ejecute si el usuario trabaja en la región Sur y otro conjunto
se ejecute si trabaja en la región Norte. Podría tener una hoja de cálculo que contenga el
número total de ventas que hayan realizado sus empleados. Podría crear un
procedimiento que calculara una comisión basada en el número de años que la persona
haya permanecido en una empresa. Si la persona ha sido empleada por menos de dos
años, obtendría un 5% de comisión. Si ha sido empleada por más de dos años, obtendría
el 8% de comisión. Para realizar este tipo de pruebas necesita usar los operadores de
comparación. Al utilizar un operador de comparación, el resultado de la prueba puede ser
verdadero, si la condición de la prueba se cumplió, o falso; en caso contrario. Si ha
trabajado con algunas de las funciones de Excel, tal vez esté familiarizado con los
operadores de comparación, tal como la función If. La tabla siguiente lista los operadores
de comparación disponibles.

Operadores de comparación
Operador de comparación Significado
= Igual a
<> Diferente de
Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 43 -
> Mayor que
>= Mayor o igual que
< Menor que
<= Menor o igual que

Operadores aritméticos
Símbolo del operador Función
+ Adición
- Substracción
* Multiplicación
/ División fraccionaria
\ División entera
^ Exponenciación
Mod Residuo de una división
entera
& Concatenación de cadenas

Algunas veces necesitará probar que un valor cumpla con múltiples condiciones. Por
ejemplo, tal vez necesite probar que un trabajador ha sido empleado por más de 4 años y
necesita calcular su periodo vacacional, para llevar esto a cabo, utilice los operadores
lógicos para combinar los requisitos de condición de la prueba. La tabla siguiente lista los
operadores lógicos de VBA.

Operadores lógicos
Operador lógico Significado
And Si ambas condiciones son verdaderas, el resultado es verdadero.
Or Si cualquiera de las condiciones es verdadera, el resultado es
verdadero
Not Si la expresión condicional es falsa, el resultado es verdadero. Si
la expresión condicional es verdadera, el resultado es falso.
Xor Si una, y solamente una, de las condiciones es verdadera, el
resultado es verdadero. Si ambas son verdaderas o ambas son
falsas, el resultado es falso.

Cómo utilizar la instrucción If.

La primera instrucción condicional con la que va a trabajar, es la instrucción If . . .Then . .


. Else. La sintaxis para esta instrucción es la siguiente.

If condición Then
[instrucciones]
[Elself condición-n Then

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 44 -


[instruccioneselseif] ...
[Else
[instruccioneselse]]
End If

condición es una parte que se requiere para la sintaxis. Aquí es donde se introduce la
condición a ser probada. Si la condición resulta verdadera, se ejecutan las instrucciones
listadas después de la palabra then.

Si desea probar una segunda condición dentro de la misma instrucción If, puede agregar
una o más cláusulas opcionales Elself. VBA prueba la condición listada después del
primer If. Si esa condición resulta falsa, VBA va a la siguiente condición a ser probada de
la cláusula Elself y continúa así hasta que una condición resulte verdadera. Si ninguna de
las condiciones es verdadera, VBA procede hasta la instrucción End If, a menos que
tenga una cláusula Else. Las instrucciones que siguen a esta cláusula se ejecutan si
ninguna de las condiciones en la instrucción If resulta verdadera. El siguiente ejercicio le
dará oportunidad de experimentar con la instrucción If:

1. Abra un libro nuevo y llámele Ventas.


2. Cree la hoja que se muestra en la figura siguiente.

3. En la celda B6, introduzca la fórmula B3 + B4. Esto calcula el total.


4. Oprima Alt+F11 para abrir el Editor de Visual Basic.
5. En el explorador de proyectos, haga clic con el botón derecho en ThisWorkbook.
6. Seleccione Insertar | Módulo para agregar un módulo al libro.
7. Cree un nuevo procedimiento llamado embarque.
8. Introduzca el siguiente código para el procedimiento que acaba de crear.

Public Sub Embarque()


Dim Respuesta As Integer

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 45 -


Respuesta = MsgBox(“¿Se necesita embarcar esta venta?” , vbYesNo)
If Respuesta = vbYes Then
Range(“B4”).Value = 10
Else
Range(“B4”).Value = 0
End If
End sub

9. Regrese al libro que creó en el paso 2.


10. Seleccione la pestaña Programador y a su vez el botón Insertar para agregar un
botón de comando a la hoja de cálculo. Se desplegará el cuadro de diálogo
Asignar Macro, seleccione Embarque y haga clic en Aceptar. Su procedimiento se
ha asignado al botón.
11. Resalte el texto del botón agregado. Oprima la tecla Supr para eliminar el texto.
Teclee Calcular. Ahora este es el título del botón.
12. Haga clic fuera del botón para desactivarlo. La hoja de cálculo terminada debe ser
similar a la que se muestra en la figura siguiente.

13. Introduzca 200 en la celda B3 como cantidad de la venta.


14. Haga clic en el botón Calcular. Se desplegará un cuadro de mensaje
preguntándole si esta venta necesita ser embarcada.
15. Haga clic en el botón Si. Se colocará el 10 en la celda B4. Esto se debe a la
instrucción If del procedimiento.
16. Haga clic nuevamente en Calcular.
17. Haga clic en el botón No en respuesta al cuadro de mensaje. Esta vez se colocará
un cero en la celda B4.
Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 46 -
Este ejemplo simple le muestra qué tan útil puede ser la lógica condicional.

Esta variable se utilizó en el procedimiento para almacenar la respuesta del cuadro de


mensaje, como se muestra en la siguiente línea de código:

Respuesta = MsgBox("¿Se necesita embarcar esta venta?", vbYesNo)

El cuadro de mensaje que se generó con esta instrucción tiene dos botones: Sí y No. El
valor de la variable Respuesta se prueba con la instrucción If.

If Respuesta = vbYes Then


Range("B4").Value = 10
Else
Range("B4").Value = 0
End If

Si Respuesta es igual a vbYes (Constante de enumeración de VBA), lo que quiere decir


que el usuario hizo clic en el botón Sí, el 10 se despliega en la celda B4. En caso
contrario, se despliega 0.

Puede crear instrucciones If mucho más complicadas que la ilustrada anteriormente. Más
aún, puede poner instrucciones If dentro de otras instrucciones If. Los siguientes pasos lo
llevarán a la creación de una instrucción If más complicada. En este escenario, la tasa de
comisión toma en consideración tres factores. El primer factor es que el artículo esté en
venta. Si no está en venta, todos los vendedores obtendrán un 3% de comisión. Si el
artículo está en venta, todos tendrán el 2%. El segundo factor es el número de años que
la persona ha estado en la empresa. El factor final tiene que ver con el departamento. La
gente que trabaje en el departamento de muebles obtendrá un 1% adicional.

Cuando una instrucción If está dentro de otra instrucción If, se dice que es una
instrucción If anidada.

1. Agregue una nueva hoja de cálculo a su libro.


2. Cree la hoja de cálculo que se muestra en la figura siguiente.

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 47 -


3. Vaya al Editor de Visual Basic.
4. Inserte un nuevo procedimiento que se llame Comisión.
5. Introduzca el siguiente código en el procedimiento.

Public Sub Comision()


Dim Comi As Single
If Range("B2").Value = "No" Then
Comi = 0.03
If Range("B3").Value >= 5 And Range("B3") < 10 Then
Comi = Comi + 0.01
ElseIf Range("B3").Value >= 10 Then
Comi = Comi + 0.02
End If
If Range("B1").Value = "Muebles" Then
Comi = Comi + 0.01
End If
Else
Comi = 0.01
End If
Range("B5").Value = Comi
End Sub

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 48 -


6. Regrese a la hoja de cálculo y agregue un botón de comando con la pestaña
Programador | Insertar Control de formulario y asigne el procedimiento Comisión al
botón.
7. Edite el texto del botón para que el título sea Calcular comisión.
8. Haga clic fuera del botón para deseleccionarlo.
9. En la celda B1 introduzca Muebles. Asegúrese de introducir el texto exactamente
como se muestra en este paso.
10. En la celda B2 introduzca No. Asegúrese de introducir el texto exactamente como
se muestra en este paso.
11. En la celda B3 introduzca 10.
12. Haga clic en el botón de comando. El resultado debe ser .05 debido a que el
artículo no estaba en venta, era del departamento de muebles y el vendedor había
trabajado ahí por 10 años o más.

Como siempre, empezó el procedimiento declarando una variable, en este caso, Comi.
Comi se utiliza para almacenar la tasa de la comisión que se va acumulando. La primera
prueba es que el artículo esté o no en venta:

If Range("B2").Value = "No" Then


Comision = 0.03

La celda B2 puede contener Sí, si el artículo está en venta, o No, si no lo está. Si no está
en venta, la comisión mínima es 3%. Si está en venta, la comisión es 1%.

Else
Comi = 0.01
End If

Si el artículo no está en venta, ocurren dos pruebas:

If Range("B3").Value >= 5 And Range("B3") < 10 then


Comi = Comi + 0.01
Elself Range("B3").Value >= 10 Then
Comi = Comi + 0.02
End If

If Range("B1"). Value = "Muebles" Then


Comi = Comi + 0.01
End If

La primera instrucción If listada en el código anterior prueba cuánto tiempo ha estado un


empleado en la empresa. La segunda prueba determina que el artículo sea del
departamento de muebles. Estas instrucciones se anidaron en la primera instrucción If de
este procedimiento.
Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 49 -
Cuando creó el procedimiento para este ejercicio, se le especificó que tecleara No. Para
saber el motivo, complete estos pasos:

1. Vaya a la hoja de cálculo que tiene el botón Calcular comisión. Observe que la
tasa de la comisión está calculada para que sea 0.06.
2. En la celda B2 introduzca no (en minúsculas).
3. Haga clic en el botón Calcular comisión ¿Cuál es la comisión calculada? ¿Es .01?
¿Porqué?
4. Regrese al Editor de Visual Basic y mire el procedimiento, específicamente a la
primera instrucción If que diga If Range("B2").Value = "No". En este momento tal
vez haya adivinado que la instrucción If es sensible a mayúsculas y minúsculas.
Para eludir esto, realice los siguientes cambios en las dos líneas siguientes:

If Ucase(Range("B2").Value) = "NO"

If Ucase(Range("B1").Value) = "MUEBLES" Then

5. Regrese a la hoja de cálculo y haga clic en el botón Calcular comisión, el


procedimiento debe ejecutarse correctamente.

La función Ucase toma el contenido de una cadena y todo lo convierte a mayúsculas. Al


hacer esto, puede trabajar la sensibilidad a mayúsculas y minúsculas de la instrucción If.
Más adelante trataremos a las funciones.

Cómo utilizar la instrucción Select Case.

Mire el código del siguiente listado. Este listado contiene una instrucción If que prueba un
valor y determina un grado.

If Range("A3") >= 90 Then


MsgBox "¡Obtuvo una A en el examen!"
Elself Range("A3") < 90 And Range("A3") >= 80 Then
MsgBox "Obtuvo una B en el examen."
Elself Range("A3") < 80 And Range("A3") >= 70 Then
MsgBox "Obtuvo una C en el examen."
Elself Range("A3") < 70 And Range("A3") >= 60 Then
MsgBox "Obtuvo una D en el examen."
Else
MsgBox "Reprobado."

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 50 -


End If

Esta instrucción contiene demasiadas Elself y puede ser un poco difícil de leer. Una
alternativa para la instrucción If es la instrucción Select Case. Las instrucciones Select
Case son más fáciles de leer que las If y están mejor diseñadas para trabajar con una
situación de prueba múltiple. El listado siguiente muestra el código convertido a una
instrucción Select Case.

Select Case Range("A3")


Case Is >= 90
MsgBox "¡Obtuvo una A en el examen!"
Case 80 To 89
MsgBox "Obtuvo una B en el examen."
Case 70 To 79
MsgBox "Obtuvo una C en el examen."
Case 60 To 69
MsgBox "Obtuvo una D en el examen."
Case Else
MsgBox "Reprobado."
End Select

Como puede ver en el listado, las instrucciones Select Case son mucho más fáciles de
leer en una situación de prueba múltiple. La sintaxis de la instrucción Select Case es la
siguiente:

Select Case expresióndeprueba


[Case expresiónlista-n
[instrucciones-n]] ...
[Case Else
[elseinstrucciones]]
End Select

El siguiente listado muestra otro ejemplo de una instrucción Select Case. Al separar
valores con una coma, en esencia está implicando una selección de tipo Or. Por ejemplo,
la instrucción Select Case interpreta Case "Chiapas", "Tabasco" como Chiapas o
Tabasco.

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 51 -


'Instrucción Select Case para determinar el costo de embarque.
Select Case Estado
Case "Nuevo León"
Embarque =5.00
Case "Guanajuato", "Sinaloa", "Jalisco"
Embarque= 4.00
Case "Chiapas", "Tabasco"
Embarque =3.00
Case "Veracruz", "Nayarit", "Baja California", "Hidalgo"
Embarque =2.00
Case Else
Embarque = 1.00
End Select

Para utilizar los operadores de comparación, necesita emplear las palabras clave Is o To.
Use la palabra clave Is cuando necesite comparar la expresión de prueba contra la
expresión listada después de la palabra clave Is. La palabra clave To define un rango de
valores.

Cómo desplegar cuadros de diálogo integrados de Excel.

Ahora que sabe cómo controlar el flujo de su aplicación, realmente puede hacer algo con
la respuesta que da el usuario a un cuadro de mensaje. Por ejemplo, si le pregunta a su
usuario si desea guardar su trabajo, necesitará desplegar el cuadro de diálogo Guardar.
Excel tiene más de 200 cuadros de diálogo integrados. Puede acceder a todos ellos por
medio de VBA. La sintaxis para desplegar un cuadro de diálogo integrado es la siguiente:

Application.Dialogs(xlDialogConst).Show

1. Inserte en su módulo un nuevo procedimiento que se llame GuardarAhora.


2. Introduzca el siguiente código para el procedimiento:

Dim Respuesta As Integer


Respuesta = MsgBox("¿Desea guardar su trabajo?", vbYesNo)
If Respuesta = vbYes Then
Application.Dialogs(xlDialogSaveAs).Show
End If

3. Vaya a la hoja de su libro donde tiene el botón Calcular comisión.


4. Agregue otro botón a la hoja. Asigne al botón el procedimiento GuardarAhora.
5. Cambie el título del botón a Guardar.
6. Haga clic afuera del botón para deseleccionarlo.

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 52 -


7. Vuelva a hacer clic en el botón. Se desplegará un cuadro de mensaje
preguntándole si desea guardar su trabajo.
8. Haga clic en Sí. Se desplegará el cuadro de diálogo integrado Guardar como,
como se muestra en la figura siguiente.

Bucles a través del código.

Si necesitara hacer la misma cosa para 20 precios, ¿desearía escribir las mismas líneas
de código 20 veces?, esto no es necesario. En cambio, podría emplear bucles. Los
bucles le permiten repetir el mismo código múltiples veces. En este capítulo aprenderá
acerca de los bucles Do y las instrucciones For.

Instrucción For. . .Next.

Cuando escriba código, verá que hay veces que necesita hacer la misma cosa una y otra
vez. En una situación donde necesite repetir la ejecución de un conjunto de instrucciones
un número determinado de veces, necesitará emplear el bucle For. .Next. La sintaxis
para la instrucción For.. .Next es la siguiente:

For contador = inicio To fin [Step paso]

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 53 -


[instrucciones]
[Exit For]
[instrucciones]
Next [contador]

For... Next se ejecuta un cierto número de veces con base en los valores inicio y fin. El
contador es una variable entera que se incrementa en uno, a menos que se incremente
con el valor opcional paso, cada vez que se ejecute la instrucción Next. Cuando el valor
del contador es mayor que el valor de fin, el bucle detiene su ejecución. La instrucción
opcional Exit For le proporciona una manera alternativa de terminar el bucle. Además,
generalmente se coloca en una instrucción If o Select Case. Para experimentar con la
instrucción For... Next, abra un nuevo libro. Guarde el libro como Bucles. Acceda al Editor
de Visual Basic oprimiendo las teclas Alt+F11. Ahora dé los siguientes pasos para ver un
ejemplo simple de una instrucción For...Next:

1. Haga clic con el botón derecho en ThisWorkbook del Explorador de proyectos y


seleccione Insertar | Módulo.
2. Inserte un nuevo procedimiento Sub que se llame Sonar_Imprimir. Éste será un
procedimiento que hará que su computadora emita un sonido e imprima en la hoja
su nombre un cierto número de veces.
3. Introduzca el siguiente código para el procedimiento que acaba de agregar:

Public Sub Sonar_Imprimir()


Dim i As Integer
For i = 1 To 10
Beep
cells(i , 1) = “TECNOLÓGICO”
Next
End Sub

4. Oprima F5 para ejecutar el procedimiento. Deberá oír un sonido e imprimir 10


veces la palabra “TECNOLÓGICO”

Si hace referencia a la sintaxis de la instrucción For, observará que hay una cláusula
opcional, Step. Esta cláusula le permite controlar la forma en que For cuenta. Por
Ejemplo, puede establecer la instrucción For para que cuente de cinco en cinco, de diez
en diez o lo que se ajuste a sus necesidades. También puede contar en forma regresiva

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 54 -


al establecer el paso a -1. Dé los siguientes pasos para crear una instrucción For que
cuente en forma regresiva:

1. Inserte un procedimiento Sub y nómbrelo CuentaRegresiva. El procedimiento


CuentaRegresiva desplegará una serie de cuadros de mensaje que ilustrarán la
instrucción For y la cláusula opcional Step.
2. Introduzca el siguiente código para el procedimiento Uso_de_Step:

Dim i As Integer
For i = 1 To 3
MsgBox “Cuenta hacia adelante: ” & i
Next i
For i = 3 To 1 Step -1
MsgBox “Cuenta hacia atras: ” & i
Next i

3. Ejecute el procedimiento. Verá el primer cuadro de mensaje, como se muestra en


la siguiente figura. Podrá ver desde este cuadro que la variable i actualmente está
establecida a 1.

4. Haga clic en Aceptar conforme se vayan desplegando los mensajes hasta que vea
el cuadro de mensaje mostrado en la siguiente figura. La variable i está
establecida a 3.

5. Haga clic nuevamente en el botón Aceptar. Observe que ahora la cuenta va hacia
atrás.

6. Continúe haciendo clic en Aceptar en respuesta a los cuadros de mensaje hasta


que el procedimiento termine su ejecución.

.
Ahora que ya tiene una idea de lo que es la instrucción For, creará un procedimiento
más, que utilice una instrucción For para calcular el dinero que podría ganar si lo
depositara en una cuenta que tuviera el 2% de interés mensual. Realice los pasos que se
muestran a continuación:

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 55 -


1. Inserte un nuevo procedimiento Sub y nómbrelo Dinero.

2. Introduzca el siguiente código para el procedimiento Dinero.

Dim n As Integer, i As Integer


Dim Ahorro As Double
Ahorro = InputBox(”Introduzca la cantidad que va a depositar en su cuenta: ”)
n = InputBox(“Introduzca el número de meses que quiere ahorrar su dinero: “)
For i = 1 To n
Ahorro = Ahorro * 1.02
Next i
MsgBox “En “ & n & “ Meses tendrá “ & Format(Ahorro, “0.00”) & “ pesos.”

3. Ejecute el procedimiento Dinero.

4. Introduzca 1000 como la cantidad que depositará para ahorrar.

5. Introduzca 10 para el número de meses. Se desplegará un cuadro de mensaje con


la cantidad que tendrá en 10 meses. Tendrá $1218.99 en 10 meses.

6. Haga clic en Aceptar para quitar el cuadro de mensaje.

Con el uso de la variable n para controlar el número de veces que va a ejecutarse el


bucle, calcula el valor final de Ahorro. Tal vez haya notado el uso de la instrucción
Format en el procedimiento Dinero. La instrucción Format(Ahorro, 0.00) da formato al
resultado que se colocó en Ahorro para desplegar dos decimales.
Más adelante se tratará esta función Format a detalle.

Bucles Do.

La instrucción For es fabulosa cuando sabe cuántas veces necesita ejecutar una serie de
instrucciones. Como solución a esta limitante, VBA provee la alternativa a la instrucción
For llamada bucle Do. El bucle Do es un bucle condicional. Existen dos clases de
instrucciones Do. Do While y Do Until. Do While repite un bloque de instrucciones
mientras que una condición en particular sea verdadera. Por otro lado Do Until repite un
bloque de código hasta que una condición en particular se vuelva verdadera. La sintaxis
para esta instrucción es la siguiente:

Sintaxis 1:

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 56 -


Do [{While | Until} condición 1]
[instrucciones]
[Exit Do]
[instrucciones]
Loop

Sintaxis 2:

Do
[instrucciones]
[Exit Do]
[instrucciones]
Loop [{While | Until} condición]

Hay una sutil diferencia entre los dos tipos de instrucciones de los bucles Do. La sintaxis
1 coloca la condición de prueba al principio del bucle. Esto significa que si no se cumple
la condición, el bloque nunca se ejecutará. La sintaxis 2 coloca la condición al final del
bucle. Esto significa que el bloque se ejecutará por lo menos una vez. En ambas
instrucciones, como opción tiene Exit Do que se puede utilizar para abandonar el bucle si
es necesario. Al igual que la cláusula Exit For, es posible colocar la cláusula Exit Do en
una instrucción If o en una instrucción Select.

Dé los siguientes pasos para crear un procedimiento por medio de un bucle Do:

1. Inserte un nuevo procedimiento Sub y nómbrelo IntroducirNombre. Este


procedimiento seguirá pidiendo el nombre a los usuarios hasta que lo introduzcan
o elijan salir.

2. Introduzca el siguiente código para el procedimiento que acaba de crear:

Dim Nornbre As String


Dim Respuesta As Integer
Nombre = “”
Do While Nombre = “”
Nombre = InputBox(“Introduzca su nombre: “)
If Nombre = “” Then
Respu = MsgBox(“Desea salir?” , vbYesNo)
If Respu = vbYes Then

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 57 -


Exit Do
End If
End If
Loop

Sólo como un recordatorio, cuando haga clic en Cancelar en respuesta a un


cuadro de entrada de datos creado por medio de la función InputBox, ésta
devolverá una cadena vacía. Si hace clic en Cancelar en respuesta a un cuadro de
entrada de datos creado por medio del método Application. InputBox, se devolverá
falso.

3. Ejecute el procedimiento.

4. En respuesta al cuadro de entrada de datos, oprima Entrar o haga clic en Cancelar


sin introducir ningún valor en el cuadro de entrada de datos. Se desplegará un
cuadro de mensaje preguntándole si desea salir.

5. Haga clic en No. Se desplegará nuevamente el cuadro de entrada de datos.


Introduzca su nombre, el procedimiento terminará.

En el tema “Para qué sirven las variables y constantes”, vimos algo sobre las matrices,
así como de las matrices dinámicas. Estas últimas son matrices que pueden cambiar su
tamaño. Pueden ser bastante útiles cuando hacen equipo con los bucles Do. Realice los
siguientes pasos para crear una matriz dinámica que se utilice conjuntamente con un
bucle Do.

1. Inserte un nuevo procedimiento Sub y nómbrelo ListaDeNombres. Este


procedimiento va a permitir que el usuario introduzca nombres hasta que elija no
continuar. Cada vez que el usuario introduzca un nuevo nombre, se agregará un
elemento a una matriz dinámica.

2. Introduzca el siguiente código para el procedimiento ListaDeNombres.

Dim i As Integer, Respu As Integer, Conta As Integer


Dim Nombres() As String
Respu = vbYes
Do While Respu = vbYes
Conta = Conta + 1
ReDim Preserve Nombres(Conta) As String
Nombres(Conta) = InputBox(“Introduzca un nombre: “)
If Nombres(Conta) = “” Then
Respu = MsgBox(“¿Desea continuar?”, vbYesNo)
If Respu = vbYes Then
Nombres(Conta) = InputBox(“Introduzca un nombre: “)
End If

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 58 -


End If
Loop
For i = 1 To Conta – 1
MsgBox “ El nombre # “ & i & “ es “ & Nombres(i)
Next i
3. Ejecute el procedimiento. Se desplegará el primer cuadro de mensaje.

4. Introduzca un nombre y oprima Entrar.


5. Introduzca un segundo nombre y oprima Entrar.
6. Introduzca un tercer nombre y oprima Entrar.
7. Haga clic en Cancelar. Se desplegará un cuadro de mensaje preguntándole si
desea continuar.
8. Haga clic en No. Se desplegará un cuadro de mensaje con el primer nombre.
9. Haga clic en Aceptar. Se desplegará el segundo nombre.
10. Haga clic en Aceptar. Se desplegará el tercer nombre.
11. Haga clic en Aceptar. Se terminará el procedimiento.

La fuerza del procedimiento ListaDeNombres radica en el hecho de que usted no tiene


que saber cuántos nombres se van a introducir antes de que comience el procedimiento.

La variable Conta se incrementa al inicio del bucle Do y se utiliza para controlar el


tamaño de la matriz, así como para seleccionar elementos de la matriz. Nombres es una
matriz dinámica que reajusta su tamaño cada vez que se ejecuta el bucle Do. La variable
Respu registra los nombres que se introducen, ya sea que el usuario desee continuar o
no. Respu actúa como un factor de control para la ejecución del bucle. La variable entera
i controla la instrucción For, la cual se usa para desplegar los nombres. Lo primero que
debe hacer después de declarar las variables es inicializar la variable Respu:

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 59 -


Respu = vbYes

Ya inicializada la variable, está listo para empezar el bucle:

Do While Respu = vbYes

Debido a que Respu se inicializó a vbYes, el bucle está listo para ejecutarse. Lo primero
que se hace es agregar uno a Conta. La primera vez que se ejecute el bucle, el valor de
Conta será 1; la segunda vez, será 2, y así sucesivamente. Después de que se
incrementa Conta, se utiliza para redimensionar la matriz Nombres. El último elemento
agregado al arreglo se usa para almacenar un nombre nuevo:

Conta = Conta + 1
ReDim Preserve Nombres(Conta) As String
Nombres(Conta) = InputBox( “Introduzca un nombre: “)

Lo que necesita hacer después es confirmar si el usuario seleccionó Cancelar o


accidentalmente olvidó introducir un nombre:

If Nombres(Conta) = “” Then
Respu = MsgBox(“¿Desea continuar?”, vbYesNo)
If Respu = vbYes Then
Nombres(Conta) = InputBox(“Introduzca un nombre: “)
End If
End If

Después que se complete el bucle, puede utilizar una instrucción For para desplegar los
nombres. En esta instrucción For utilice el contador para desplazarse a través de los
elementos de la matriz:

For i = 1 To Conta - 1
MsgBox “ El nombre # “ & i & “ es “ & Nombres(i)
Next i

Observe que el contador de la instrucción For es i =1 para Conta -1. Necesita restar un
uno a Conta para compensar el hecho de que esta variable se incrementa en la parte
superior del bucle Do. Si desea ver lo que pasa si no decrementa en uno, elimine el -1 de
esta instrucción y ejecútala nuevamente. Obtendrá un cuadro adicional de mensaje con
un nombre en blanco. Ahora puede ver el propósito no sólo de los bucles Do sino
también de las matrices.

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 60 -


CAPÍTULO 6 COMO TRABAJAR CON CONTROLES

Tipos de controles.

Es posible agregar controles a una hoja de cálculo o a un formulario. Los formularios de


usuario (o simplemente formularios) son ventanas o cuadros de diálogo que se crean
para que sean parte de la interfaz de usuario de la aplicación. Los tipos de controles que
se pueden agregar a una hoja de cálculo están más limitados que aquellos que se
pueden agregar un formulario. Los primeros controles que veremos son los que se
pueden emplear en una hoja de cálculo. Éstos también pueden usarse en formularios.

Cierre todos los libros abiertos y abra uno nuevo. Para accesar los controles de
formulario seleccione la pestaña Programador y a su vez el botón Insertar. Este cuadro
de herramientas tiene 12 controles, pero sólo 9 están habilitados. Estos 9 controles son
los que se pueden colocar en una hoja de cálculo.

El primer control de izquierda a derecha del cuadro de herramientas, es el control Botón


que resultan muy adecuados en las aplicaciones debido a que los usuarios están
acostumbrados a ellos. Los usuarios ven los botones Aceptar, Cancelar, Si y No en el
entorno de Windows.

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 61 -


Los controles Cuadro de lista y Cuadro combinado se emplean para desplegar múltiples
opciones. Por ejemplo, si usted quisiera que el usuario seleccionara de una lista de
estados de la república, podría presentar esos estados en un cuadro de lista. Un control
Cuadro de lista permite al usuario hacer una sola selección, en tanto que un control
Cuadro combinado permite al usuario seleccionar un elemento enlistado o introducir un
valor diferente a los contenidos en la lisa. Un cuadro combinado tiene ese nombre por el
hecho de que es una combinación de un cuadro de lista y uno de texto (o edición).

Los controles Casilla de verificación y Botón de opción, tienen un objetivo similar: permitir
que el usuario realice sus elecciones de las opciones disponibles. Aquí termina la
similitud entre ambos controles. La casilla de verificación es un control conmutable, es
decir al hacer clic en ella, se activa o desactiva, dependiendo de en que estado se

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 62 -


encuentre. Si tiene múltiples casillas de verificación en un grupo, el usuario puede
seleccionar una, varias o todas. Piense en las casillas de verificación como selecciones
“y/o” (seleccione Casilla de verificación 1, y/o Casilla de verificación 2, y/o Casilla de
verificación 3 y así sucesivamente).

Por otro lado, si tiene un grupo de botones de opción, sólo puede seleccionar una opción
en el grupo. Piense en los botones de opción como selecciones “o” (seleccione Botón de
opción 1, o Botón de opción 2, o Botón de opción 3, etcétera).

Casilla de verificación Botón de opción

Otros dos controles que puede colocar en una hoja de cálculo son Barra de
desplazamiento y Control de número. El control Barra de desplazamiento no es algo que
utilice para agregar la posibilidad de desplazamiento a un formulario extenso. Es un
mecanismo de selección. Si ha empleado un programa gráfico, es posible que haya
utilizado un control de este tipo para hacer una imagen más clara o más obscura o
seleccionar diferentes valores del mismo color.

El Control de número también es un mecanismo de selección de valores. Si ha cambiado


la fecha o la hora en su sistema Windows, probablemente ha empleado este control.

Barra de desplazamiento Control de número

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 63 -


El control etiqueta. Las etiquetas son áreas estáticas de texto que se emplean para
rotular otros elementos de la interfaz y proveer información. Debido a que las etiquetas
son estáticas, los usuarios no pueden alterar su contenido.

El siguiente control disponible para la hoja de cálculo es el control Cuadro de grupo. Éste
se utiliza para agrupar otros controles. El control Cuadro de grupo proporciona un marco
visual, de esta forma hace saber a los usuarios que los controles que están contenidos
en él están relacionados entre sí, pues todos se refieren a un mismo tema.

Cómo agregar controles a su hoja de cálculo.

Realmente es muy fácil diseñar una interfaz en el entorno de Excel. Para colocar
cualquiera de los controles disponibles en una hoja de cálculo o en un formulario, dé los
siguientes pasos:

1. Seleccione el control que desee de la barra de herramientas.


2. Coloque el puntero del ratón donde quiera colocar la esquina superior izquierda del
control.
3. Haga clic y arrastre hasta obtener un rectángulo del tamaño que desee para el
control.

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 64 -


4. Libere el botón del ratón y el control se agregará.

El diseño de su interfaz se parece al proceso de dibujar un gran número de rectángulos.


Para ilustrar esto, realice los pasos descritos a continuación:

1. Abra un libro nuevo.


2. En la pestaña Programador, presione el botón Insertar.
3. Seleccione el botón Etiqueta.
4. Coloque el puntero del ratón, el cual debe parecer un signo más (+), en la celda
A5.
5. Haga clic con el botón izquierdo y arrastre hasta que obtenga un rectángulo
aproximadamente del tamaño de tres celdas. Suelte el botón del ratón.
6. Haga clic antes de la T de Texto estático 1. Oprima la tecla Suprimir hasta que
elimine el texto en la etiqueta y Teclee Este es un ejemplo de un control de
Etiqueta.
7. Haga clic fuera de la etiqueta para deseleccionarla.
8. Seleccione el botón Casilla de verificación del botón Insertar de la pestaña
Programador.
9. Coloque el puntero del ratón, el cual debe parecer un signo más (+), sobre la celda
E5.
10. Haga clic con el botón izquierdo y arrastre hasta que obtenga un rectángulo
aproximadamente del tamaño de dos celdas. Libere el botón del ratón.
11. Por medio de estos pasos básicos, agregue un control de Botón, un control de
desplazamiento y un control de número a su hoja de cálculo hasta que sea similar
a la que se muestra en la figura siguiente.

Después de haber agregado los controles, puede volver a darles tamaño o moverlos para
ajustarlos a sus necesidades. Lo primero que necesita hacer para cambiar el tamaño y la
ubicación de un control es seleccionar el control. Si hace clic con el botón izquierdo del
ratón en el control, no lo seleccionará para su edición. Para esto necesita hacer clic con
el botón derecho en el control. Esto coloca al control en un modo de edición y despliega
un menú. Debido a que no necesita usar el menú, haga clic con el botón izquierdo en el
borde del control. Un borde gris rodeará el control seleccionado. Para mover el control,
haga clic en dicho borde hasta que el puntero del ratón parezca una flecha de cuatro

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 65 -


puntas. Haga clic y arrastre el control a su nueva posición. Observe que el borde del
control seleccionado también tiene ocho cuadros pequeños en él. Estos cuadros son
controladores de tamaño. Para volver a dar tamaño a su control, mueva el puntero sobre
uno de los controladores de tamaño hasta que parezca una flecha de doble punta. Haga
clic y arrástrelo hasta que sea del tamaño deseado.

Si desea mover o dar tamaño a múltiples controles, seleccione el primer control, oprima y
mantenga oprimidas las teclas Ctrl y Mayús. Haga clic en otro control. Ambos controles
estarán seleccionados. Continúe oprimiendo las teclas Ctrl y Mayús y haciendo clic en los
controles hasta que todos los controles con los que desee trabajar estén seleccionados.

Cómo aplicar formato a los controles.

Podría haber estado preguntándose cómo empleará los controles que ha colocado en su
hoja de cálculo. Podría asignarles una macro, pero hay otra manera de utilizarlos. Puede
usarlos para introducir valores en la hoja de cálculo. Esto se hace al aplicar formato al
control. El aplicar formato a un control le permite controlar su vista y comportamiento. Los
siguientes pasos ilustran cómo aplicar formato a los controles:

1. Seleccione el control Casilla de verificación que colocó en su hoja de cálculo.


2. Haga clic con el botón derecho en el control y seleccione Formato de control.
Aparecerá el cuadro de diálogo correspondiente.
3. Seleccione la ficha Control.

4. En el cuadro Vincular con la celda, teclee A1 y haga clic en Aceptar.


5. Haga clic afuera de la casilla de verificación para deseleccionarla.
6. Haga clic en la casilla de verificación para colocar una marca de verificación en
ella. La palabra VERDADERO se colocará en la celda A1. Esto significa que la
casilla de verificación ha sido marcada.
7. Haga clic nuevamente en la casilla para eliminar la marca verificación de ésta. La
palabra FALSO se colocará en la celda A1.
Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 66 -
Podría utilizar la función SI para probar el valor de la celda A1 y llevar a cabo
diferentes acciones o cálculos basados en que el valor de la celda sea
VERDADERO o FALSO, si desea agregar 10% a un valor si la casilla de
verificación está marcada, podría emplear una fórmula similar a la siguiente:
=SI (A1=VERDADERO,A4*1.1,A4)
8. Seleccione el control Barra de desplazamiento que creó anteriormente.
9. Haga clic con el botón derecho en el control y seleccione Formato de control.
Aparecerá el cuadro de diálogo correspondiente. Seleccione la ficha Control.

10. En el cuadro de diálogo Vincular con la celda, teclee A3 y haga clic en Aceptar.
11. Haga clic fuera del control Barra de desplazamiento para deseleccionarlo.
12. Haga clic en el botón flecha-derecha del control Barra de desplazamiento. El valor
de la celda A3 se incrementó en uno. Continúe haciendo clic en ese botón para
incrementar el valor de la celda A3.
13. Guarde el libro como Controles y ciérrelo.

Cómo nombrar controles.

Cuando crea un control, Excel le asigna un nombre carente de imaginación como Casilla
de verificación 5 o Barra de desplazamiento 6. Cuando esté listo para escribir código que
utilice estos controles, podría encontrar gran dificultad para recordar cuál control es cuál
usando los nombres definidos por Excel, por lo que es recomendable que asigne sus
propios nombres descriptivos a los controles. La mayoría de los desarrolladores emplean
una convención para nombrar sus controles. Esta convención incorpora un prefijo de tres
caracteres que describa el tipo de control. Por ejemplo, si estuviera creando una casilla
de verificación que tuviera que ver con una prioridad de embarque, podría nombrar la
casilla de verificación chkPrioridadEmbarque. En este caso, chk es el prefijo que se utiliza
para casillas de verificación (por su nombre en inglés “check box”). La tabla siguiente lista
prefijos comúnmente aplicados a los controles y su nombre en inglés.

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 67 -


TABLA: Prefijos recomendados para nombramiento de controles

Tipo de control Prefijo Nombre en inglés


Casilla de verificación chk Check box
Cuadro combinado cbo Combo box
Botón de comando o Botón cmd o btn Command button o Button
Cuadro degrupo grp o fra Group box o frame
Imagen img Image
Etiqueta lbl Label
Cuadro de lista lst List box
Página múltiple mul MultiPage
Botón de opción opt Option button
RefEdit ref RefEdit
Barra de desplazamiento hsb o vsb Scroll bar
Control de número spn Spinner
Barra de tabulaciones tab Tab strip
Cuadro de texto txt Text box
Botón de alternar tog Toggle button

Nombrar un control se hace básicamente de la misma manera que nombrar una celda o
un rango. Seleccione el control y utilice el Cuadro de nombres localizado en la Barra de
fórmulas para introducir el nombre del control. Realice los siguientes pasos para nombrar
los controles:

1. Haga clic con el botón derecho del ratón en la etiqueta para seleccionarla.
2. Haga clic en el Cuadro de nombres en la Barra de fórmulas (probablemente verá
que el nombre actualmente es Texto estático 1.
3. Introduzca lblEjemplo para el nombre del control y oprima Entrar. El control será
renombrado.
.
Cómo trabajar con formularios.

Si realmente desea agregar una vista profesional a su aplicación y facilitar la entrada de


datos a su usuario, necesitará emplear formularios. Éstos actúan como cuadros de
diálogo y ventanas para su aplicación. Agregar controles a un formulario se hace de la
misma manera que agregar controles a una hoja de cálculo. Sin embargo, el primer paso
que necesita dar, es agregar un formulario a su aplicación. Esto se hace por medio del
Editor de Visual Basic. Dé los siguientes pasos para agregar un formulario.

1. Cree un libro nuevo.


2. De clic al botón Visual Basic de la Pestaña Programador. Se abrirá el Editor de
Visual Basic.
3. Seleccione el menú Insertar | UserForm. Aparecerá el formulario recientemente
agregado, como se muestra en siguiente figura.

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 68 -


El formulario recientemente agregado tiene el título UserForm1. La cuadrícula que está
desplegada en el formulario es una herramienta de diseño que le ayuda en la colocación
de controles. La cuadrícula no aparece cuando la aplicación despliega su formulario.

Cuando se abre un formulario el Cuadro de herramientas se despliega automáticamente


En el Cuadro de herramientas verá muchos de los controles con los que ya está
familiarizado, entre ellos los controles Etiqueta, Casilla de verificación, Botón de opción y
Botón (que aquí se llama Botón de comando). También hay algunos controles
adicionales.

El control Botón de alternar es un botón que se mantiene oprimido cuando se hace clic en
él y se libera cuando se hace clic en él nuevamente. Varios botones de barra de
herramientas realmente son botones de alternar. Por ejemplo, cuando hace clic en el
botón Negrita de la barra de herramientas Formato, permanece oprimido (aparece
sumido) para indicar que el atributo de negritas está activado. Si hace clic nuevamente en
dicho botón, se desactiva.

El control Barra de tabulaciones contiene una o más tabulaciones o fichas. Este control
se utiliza para organizar y agrupar información relacionada. Por ejemplo, tal vez desearía
usar una barra de tabulaciones para desplegar la información de ventas por cada ciudad.
Entonces cada ciudad tendría su propia ficha. De manera predeterminada, una barra de
tabulaciones incluye dos páginas llamadas Tabulador1 y Tabulador2. Es posible agregar
más fichas al control.

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 69 -


El control Página múltiple es similar al control Barra de tabulaciones. Es un control que
contiene una o más páginas, pero a diferencia de la barra de tabulaciones que tiene la
misma imagen y sentido en cada tabulación, las páginas del control Página múltiple son
formularios que contienen sus propios controles y tienen un diseño único.

El control Imagen le permite colocar un gráfico en su formulario. Puede desplegar los


siguientes tipos de archivos gráficos mediante el control Imagen.

 .bmp
 .cur.
 .gif
 .ico
 .jpg.
 .wmf

Agregar estos controles a su formulario es exactamente como agregar controles a una


hoja de cálculo. De la misma manera que lo haría en una hoja de cálculo, puede mover y
dar tamaño a los controles. Al formulario mismo se le puede volver a dar tamaño por
medio de sus controladores de tamaño.

Después de que esté satisfecho con el diseño de su formulario, puede tener una vista
preliminar al seleccionar Ejecutar | Ejecutar Sub/UserForm. El formulario se desplegará al
frente del libro actual. Cierre el formulario con el botón Cerrar (se encuentra en la esquina
superior derecha del formulario) y esta acción lo regresará al Editor de Visual Basic. En
los próximos capítulos, aprenderá cómo automatizar un formulario.

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 70 -


CAPÍTULO 7 INTRODUCCIÓN A LOS OBJETOS

Tal vez hasta este punto no se haya dado cuenta que ha estado construyendo una base
para desarrollar por medio del lenguaje de VBA. Ha creado variables, constantes,
cuadros de mensaje, cuadros de entrada de datos, lógica condicional y bucles. Lo que no
ha hecho mucho es trabajar con Excel. Esto está próximo a cambiar. En este capítulo
empezará a trabajar con aspectos específicos del entorno de Excel.

¿Qué son los objetos?

Antes de empezar a hablar de los objetos, hay que señalar algo que tal vez no sea tan
obvio para usted. VBA es un lenguaje, y como tal tiene construcciones definidas. Al
estudiar un lenguaje, gran parte del uso de ese lenguaje tiene que ver con la descripción
del comportamiento, la acción o la apariencia de algo. En el idioma español, ese algo se
llama sujeto o sustantivo. En el lenguaje de VBA los elementos que se describen se
llaman objetos. En el entorno de la programación, los objetos son las cosas que usted
necesita controlar.

Nombre algunos elementos de Excel. Si dijo cosas como libros, hojas de cálculo, celdas,
rangos y gráficos, acaba de nombrar algunos de los objetos de Excel.

Los objetos, las propiedades y los métodos de VBA.

Los objetos se controlan por medio de dos cosas, las propiedades y los métodos. Las
propiedades pertenecen a las características de un objeto. Al cambiar el valor de una
propiedad, cambia el comportamiento o apariencia del objeto. Por ejemplo, si usa las
propiedades puede cambiar el color, el valor, la fuente o el formato de un rango de
celdas.

Los métodos por otro lado son acciones que los objetos pueden llevar a cabo. Un
ejemplo de esto es el método Clear del objeto Range.

Regresando a nuestra comparación del idioma español y el lenguaje de VBA, podemos


decir que los objetos son los sujetos o sustantivos del lenguaje de VBA, las propiedades
son los adjetivos y los métodos son los verbos.

Si utiliza la terminología de los objetos, las propiedades y los métodos, es posible


describir casi cualquier cosa. Por ejemplo, usted mismo se puede describir como un
objeto humano. Entre sus propiedades se encuentran: el nombre, la estatura, el peso, el
color de ojos, el color de pelo, la edad, etcétera. Algunos de sus métodos son dormir,
comer, correr y programar. No se confunda con los conceptos de objetos, propiedades y
métodos; realmente son muy fáciles de abordar.

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 71 -


El modelo de objetos de Excel.

Una de las primeras cosas que debe hacer al empezar a programar en Excel por medio
de VBA (o en cualquier aplicación que soporte VBA) es ver el modelo de objetos de
Excel. Un modelo de objetos describe cómo se relacionan los objetos entre sí.

Excel tiene más de 100 objetos en su modelo, pero no piense que debe aprendérselos
todos. Probablemente trabajará con 20 objetos o menos al programar. Para ver una lista
de los objetos de Excel, dé los siguientes pasos:

1. Abra un libro nuevo.


2. Oprima Alt + F11 para abrir el Editor de Visual Basic.
3. Seleccione Ver | Examinador de objetos.
4. En la ventana de la izquierda aparecen los objetos y en la derecha las propiedades
y los métodos de los objetos. Seleccione por ejemplo el objeto Range y busque
algún método o propiedad conocida.
5. Si desea ver la sintaxis, presione F1 o el icono ?

Los cinco objetos más utilizados.

Aun cuando existen más de 100 objetos en el modelo de objetos de Excel, utilizará
básicamente los cinco objetos siguientes:

1. Application (aplicación)

2. Workbook (libro)

3. Worksheet (hoja de cálculo)

4. Range (rango)

5. Chart (gráfico)

Esto no quiere decir que no trabajará con otros objetos, pero estos cinco objetos
definitivamente son los que más se utilizan. El objeto Application representa a Excel. Por
medio de éste controla valores a todo lo largo de la aplicación, las funciones de hoja de
cálculo integradas y los métodos de alto nivel, tal como el método InputBox.

El objeto Workbook se refiere a un libro de Excel, es decir un archivo de Excel. En el


mundo de VBA no abre un archivo, sino un libro. Usted no guarda un archivo, sino un
libro.

Una de las primeras cosas que le enseñan cuando está aprendiendo Excel, es que los
libros contienen hojas de cálculo. Las hojas de cálculo son páginas individuales de un
libro en el cual se almacenan datos.

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 72 -


Una hoja de cálculo contiene celdas. Tal vez piense que estará escribiendo código que
manipule objetos celda, pero no existe tal objeto. (Existe la propiedad Cells que conocerá
más adelante). En cambio, trabajará con el objeto Range, que es una o más celdas.

La mayoría de los usuarios utilizan la capacidad de Excel para crear gráficos y, por lo
mismo, usted trabajará con el objeto Chart. Todas las cosas que puede hacer cuando
crea un gráfico por medio del Asistente para gráficos las puede realizar a través de
código de VBA.

Tal vez no se haya dado cuenta, pero los controles con los que trabajó anteriormente,
“Cómo trabajar con controles”, también son objetos. Estos incluyen botones de comando,
botones de opción, casillas de verificación, etiquetas, etcétera. Más adelante en “Cómo
automatizar formularios”, trabajará intensamente con objetos de control.

¿Qué significa jerarquía de objetos?

Si observa el modelo de objetos, verá que tiene la forma de un gráfico por jerarquías.
Application esta en la parte supenor de la jerarquía. Debajo del objeto Application
encontrará, entre otros objetos, a Workbook. De acuerdo con la terminología de VBA, el
objeto Workbook está contenido dentro de Application. De la misma manera, el objeto
Worksheet está contenido en el objeto Workbook, y así sucesivamente. Contención
significa que los objetos pueden estar dentro de otros objetos.

Piense en el modelo de objetos como una muñeca rusa anidada. Al abrir la primera
muñeca, encontrará otra muñeca contenida en la más grande. Cuando abra la segunda
muñeca, encontrará una tercera muñeca contenida en la segunda, y así sucesivamente.
La jerarquía de objetos funciona de la misma manera.

Cómo hacer referencia a los objetos en el código.

Tal vez esté pensando por qué tiene que conocer el concepto de contención. La
contención entra en acción cuando usted hace referencia a los objetos en el código. Para
calificar completamente al nombre del objeto en el código debe atravesar por todo lo
largo del “túnel” de la jerarquía del modelo de objetos. Por ejemplo, para referirse al
rango A1 en la Hojal del Libro1, debería emplear el siguiente código:

Application.Workbooks(“Libro1”).Worksheets(“Hoja1”).Range(“A1”)

En realidad puede omitir la referencia Application en la mayoría de los casos (una


excepción es Application.Inputbox). También puede hacer referencia al rango A1 por
medio del siguiente código:

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 73 -


Workbooks(“Libro1”).Worksheets(“Hoja1”).Range(“A1”)

No siempre tendrá que usar el nombre completo del objeto en el código. En algunos
casos, como cuando se ha activado una hoja de cálculo en el código, lo puede lograr con
una referencia más corta:

Range (“A1”)

La experiencia le enseñará qué tanto tiene que calificar a los objetos. Para distinguir un
objeto de otros objetos que tengan el mismo nombre, es necesario que lo califique. Por
ejemplo, podría tener dos libros abiertos, cado uno con una hoja de cálculo llamada
Hoja1. En este caso debería darles un nombre completo para evitar ambigüedades.

Cómo trabajar con los objetos en el código.

Cuando trabaje con objetos en el código, estará haciendo algo de lo siguiente:

1. Establecer las propiedades de un objeto.


2. Obtener las propiedades de un objeto.
3. Ejecutar los métodos de un objeto.

En las siguientes secciones profundizaremos un poco más.

Cómo trabajar con las propiedades.

Para establecer las propiedades de un objeto, utilice la siguiente sintaxis:

Objeto.nombredelapropiedad = valor

Objeto es el nombre del objeto. nombredelapropiedad se refiere al nombre de la


propiedad que se cambió. Valor se refiere al valor que se le asignó a la propiedad. El
nombre del objeto está separado de la propiedad por un punto. Por ejemplo, para
establecer la propiedad Value del objeto Range, utilice el siguiente código:

Range(“A1”).Value = 100

Obtener el valor de las propiedades del objeto es semejante a establecer una propiedad.
La sintaxis básica es:

Nombre_varíable = Objeto.nombredelapropiedad

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 74 -


En esta sintaxis se lee el valor de la propiedad del objeto en una variable u otro
contenedor, tal como otra propiedad. Si desea obtener la propiedad Value de un rango,
utilice el siguiente código:

Dim Valor As Single


Valor = Range(“A1”).Value

Puede emplear el valor de propiedad de muchas otras formas. Por ejemplo, puede
desplegar dicho valor en un cuadro de mensaje por medio del siguiente código:

MsgBox “El valor del rango es “ & Range(”A1”).Value

Uso de los métodos.

Implemente los métodos del objeto por medio de la siguiente sintaxis:

Objeto.Método

Cuando ejecute el método de un objeto, utilice un punto para separar el nombre del
objeto del nombre del método. Por ejemplo, para ejecutar el método Open de un libro,
podría usar el siguiente código:

Workbooks.Open Filename:="aleatorio.xlsm"

Los métodos tienen argumentos que algunas veces son necesarios y otras, opcionales.
Por ejemplo, el siguiente código guarda un libro con el nombre Presupuesto actual:

ThisWorkbook.SaveAs Filename:= “Presupuesto actual.xlsm“

Es posible que alguna vez haya escuchado que a los métodos se les conoce como
procedimientos y funciones específicos de objeto. Esto explica el hecho de que algunos
métodos tengan argumentos. Incluso algunos métodos devuelven un valor.

Cómo obtener información sobre las propiedades y los métodos.

El sistema de Ayuda de VBA es un mecanismo que provee información sobre las


propiedades y los métodos. Para ver un ejemplo de esto, siga estos pasos:

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 75 -


1. Si no tiene abierto un módulo, inserte uno en el libro actual.
2. En el nuevo módulo, teclee worksheet.
3. Coloque el punto de inserción dentro de la palabra worksheet.
4. Oprima F1. Se desplegará el cuadro de diálogo Ayuda contextual. Vea la figura
siguiente.

5. Seleccione el elemento que aparece como Worksheet (o...) y haga clic en Ayuda.
Se desplegará el tema de Ayuda del objeto Worksheet, como se muestra en la
figura siguiente.

6. Cierre la ventana de ayuda.

Como principiante en la programación de VBA sabe lo que quiere hacer pero no cómo
hacerlo. La ayuda es una herramienta fabulosa para este tipo de situaciones. Localice el
tema de Ayuda del objeto y vea primero sus propiedades. Por lo general, encontrará la
propiedad que necesita. De lo contrario, intente ver los métodos del objeto.

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 76 -


Cómo utilizar las variables del objeto.

Cuando aprendió los tipos de datos de las variables no vimos uno de ellos. El tipo de
variable que faltó se llama variable de objeto, que es una variable que apunta a un objeto.
Debido a que las variables de objeto apuntan a los objetos, pueden utilizar las
propiedades y los métodos asociados con el objeto.

Las variables de objeto se crean como cualquier otra variable, con el uso de la instrucción
Dim. Puede emplear el tipo de datos genérico Object o el tipo de objeto específico. El
siguiente listado muestra algunos ejemplos de declaraciones de variable de objeto.

Declaraciones de variables de objeto

Dim HojaPresupuesto As Object


Dim OtroPresupuesto As Worksheet
Dim ArchivoTrabajo As Workbook
Dim CodigoDepto As Range

La primera instrucción Dim empleó el tipo de datos genérico Object. Este es el método de
declaración de la variable menos indicado. Las demás instrucciones Dim muestran el
método de declaración de la variable de objeto más indicado. Si conoce el tipo de objeto
que está creando, úselo en la instrucción Dim. Después de haber declarado las variables,
utilice la instrucción Set para asignar una referencia de objeto a la variable. El listado
siguiente muestra el uso de la instrucción Set.

Set HojaPresupuesto = Workbooks (“Finanzas”) .Worksheets (Presupuesto)


Set OtroPresupuesto = Workbooks(“MIS”).Worksheets(Presupuesto)
Set ArchivoTrabajo = WorkBooks(“Finanzas”)
Set CodigoDeDepto = Workbooks(“Presupuesto”).Worksheets(“Categoría”).Ran
ge(A1:A12)

Después de establecer las variables a los objetos a los que hacen referencia, puede
usarlas como lo haría con el nombre del objeto. El listado siguiente tiene código de
ejemplo del uso de las variables de objeto.

Sub EjemploDeVarsObjeto()
Dim RangoDeTrabajo As Range
Set RangooeTrabajo = Workbooks(“HORA_08”).Worksheets(“Hoja1”).Range(“A1:D1”)
RangoDeTrabajo.Font.Bold = True
RangoDeTrabajo.Fontjtalic = True
RangoDeTrabajo.Font.Name = ”Courier”
End Sub
Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 77 -
En este ejemplo puede ver que la variable RangoDeTrabajo se utilizó en vez del nombre
del objeto. Como podrá observar, de esta forma ahorra el tecleo de un nombre largo
descrito utilizando todos sus calificadores. Conforme vaya progresando en estos apuntes,
encontrará otros usos para las variables de objeto.

Como regla general, si cuando programo tengo que utilizar más de una vez un nombre
que requiere de muchos calificadores, genero una variable de objeto que me evite teclear
demasiado.

Colecciones.

Tómese un momento y observe uno de los nombres con calificadores con los que trabajó
anteriormente:

Application.Workbooks(“Libro1”).Worksheets(“Hoja1”).Range(“A1”)

Observe las palabras en plural, Workbooks y Worksheets. Éstas son colecciones. Una
colección es un grupo de objetos similares. Workbooks es una colección. Worksheets es
una colección. En el ejemplo anterior, Libro1 es un elemento de la colección Workbooks.

En la mayoría de los casos las colecciones están en plural.

No existe el objeto Ranges. Una de las cosas que puede hacer es agregarlo a una
colección. No puede agregar más rangos porque ya están definidos y limitados por Excel.

Método Add.

Una de las características que las colecciones tienen en común es la capacidad de


aceptar lo que se les agregue. Al decir agregar, es decir crear nuevos elementos en la
colección. Para crear un elemento nuevo en una colección, utilice el método Add. Por
ejemplo, para agregar un libro nuevo, deberá usar el siguiente código:

Workbooks.Add

Este código es equivalente a ir al menú Archivo de Excel y agregar un libro nuevo. Para
agregar una hoja de cálculo nueva en un libro, debe emplear el siguiente código:

Worksheets.Add

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 78 -


Propiedad Count.

Las colecciones soportan una propiedad muy útil llamada Count. Ésta almacena el
número de elementos en una colección. Si desea saber cuántas hojas de cálculo hay en
un libro, debe usar el siguienie código:

Dim ContadorDeHojas As Integer


ContadorDeHojas = Worksheets.Count

Tal vez esté pensando por qué debería utilizar la propiedad Count. Digamos que está
creando una aplicación que contiene una hoja de cálculo para cada día de negocios de la
semana hasta que el libro se complete. Si usa la propiedad Count, podría saber si el libro
contiene cinco hojas de cálculo. En ese caso podría emplear un código similar al del
listado siguiente.

Sub ContarHojasDeCalculo()
Dim ContadorDeHojas As Integer
Dim Mensaje As String
ContadorDeHojas = Worksheets.Count
If ContadorDeHojas <> 7 Then
Mensaje = “El libro contiene ” & ContadorDeHojas
Mensaje = Msensaje & “. Debe contener 7 hojas de cálculo”
MsgBox Mensaje
End If
End Sub

Objetos comúnmente usados.

Ahora es tiempo de empezar a trabajar realmente con los objetos de Excel. Esta hora se
enfoca en tres objetos que se utilizan frecuentemente, Application, Workbook y
Worksheet. Aprenderá a trabajar con las propiedades y métodos de estos objetos.
Entre los puntos más importantes de este capítulo se encuentran:

• El papel del objeto Application en VBA


• Cómo crear y controlar objetos Workbook
• Cómo utilizar el objeto Worksheet

El objeto Application.

En la sección anterior aprendió que el objeto Application está en el nivel más alto de la
jerarquía de objetos de Excel. ¿Qué significa esto para usted como programador?

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 79 -


Significa que puede emplear este objeto para controlar los valores y las opciones en
cualquier parte de la aplicación, sin importar el libro que esté actualmente abierto.

Cómo emplear las funciones integradas de Excel.

El papel del objeto Application no está limitado a los valores y opciones de la aplicación.
Este objeto también es el propietario de las funciones integradas de Excel. Si desea
utilizar SUMA, PROMEDIO, MAX, TIR, o cualquiera de las funciones integradas, desde
dentro de su procedimiento en VBA, debe usar el objeto Application.

Recuerde, una de las ventajas del uso de Excel como plataforma de desarrollo son sus
funciones integradas. ¿Por qué no explotar estas características en su código de VBA?
Realice los siguientes pasos para emplear las funciones PROMEDIO y SUMA en código
de VBA.

1. Cree un procedimiento nuevo y nómbrelo Integrados.


2. Introduzca el siguiente código para el procedimiento que acaba de crear:
Dim Respu As Single
Respu = Application.Average(Worksheets(“Hoja1”).Range(”A1:A4”))
MsgBox “El promedio de este rango es “ & Respu
Respu = Application.Sum(Worksheets(”Hoja1”).Range(“A1:A4”))
MsgBox “La suma de este rango es “ & Respu
3. Vaya a la Hoja1 de su libro.
4. Introduzca 10 en la celda A1, 20 en la celda A2, 30 en la celda A3 y 40 en la celda
A4.
5. Ejecute el procedimiento Integrados. El primer cuadro de mensaje desplegará el
promedio de los números.

6. Haga clic en Aceptar para quitar el cuadro de mensaje. El segundo cuadro de


mensaje desplegará el resultado de la suma de los números.
7. Haga clic en Aceptar para quitar el cuadro de mensaje y terminar el procedimiento.
Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 80 -
Como puede ver en este ejemplo, puede utilizar cualquiera de las funciones integradas
en sus procedimientos de VBA si califica el nombre de la función con el objeto Application
y proporciona valores a cualquiera de los argumentos que sean necesarios.

Propiedades y métodos del objeto Application.

El objeto Application tiene varias propiedades y métodos que le serán muy útiles. Algunas
de sus propiedades incluyen lo siguiente:

1. ActiveWorkbook.- Devuelve el libro activo.


2. ActiveSheet.- Devuelve la hoja activa del libro activo. La hoja devuelta puede ser
cualquiera de los tipos de hoja soporte, incluyendo hojas de cálculo y hojas para
gráficos.
3. ActiveCell.- Devuelve la celda activa de la hoja activa en el libro activo.
4. ThisWorkbook.- Devuelve el libro en el cual reside el procedimiento ejecutante.

El objeto Workbook.

Ya sabe que el objeto Workbook representa un archivo de Excel. Debido a esto, tal vez
de inmediato sepa qué tipo de cosas puede hacer con este objeto: abrir, guardar,
imprimir, cerrar, etcétera. Más que empezar con las propiedades de este objeto,
empecemos con sus métodos más utilizados:

1. Activate.- El método Activate se utiliza para activar el libro.


2. Close.- El método Close cierra el libro.
3. Save.- El método Save guarda el libro.
4. SaveAs.- El método SaveAs guarda el libro. La diferencia entre este método y el
método Save es que el método SaveAs tiene varios argumentos opcionales
ventajosos, incluyendo Filename, FileFormat, Password, WriteResPassword y
ReadOnlyRecommended.
5. PrintOut.- El método PrintOut se utiliza para imprimir el libro entero.
6. PrintPreview.- El método PrintPreview despliega el libro en Vista preliminar.

También existen algunas propiedades de libro que puede utilizar. Como el objeto
Application, el objeto Workbook soporta la propiedad ActiveSheet. Si necesita encontrar
la ubicación de un directorio, use la propiedad Path. Saved es una propiedad
extremadamente ventajosa del objeto Workbook. Si no guardó los cambios que haya
hecho al libro, se devuelve False.

Lo único que todavía no se cubre en este capítulo es cómo crear un nuevo objeto
Workbook. En otras palabras, ¿cuál es el código de VBA equivalente a hacer clic en el

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 81 -


botón Nuevo dentro del botón Office? Tenga presente el uso del método Add cuando
agregue un objeto nuevo a una colección. En el siguiente ejercicio creará, imprimirá,
guardará y cerrará un libro.

1. Cree un nuevo procedimiento y nómbrelo LibroEjemplo.


2. Introduzca el siguiente código para el procedimiento:

Dim NuevoLibro As Workbook


Set NuevoLibro = Workbooks.Add
NuevoLibro.Worksheets(“Hoja1”).Range(“A1”).Value = 100
NuevoLibro.SaveAs “Guarda Libro.xlsm”
NuevoLibro.Close
MsgBox “El libro se cerró. “

3. Ejecute el procedimiento. Tal vez no vea que esté pasando algo.


4. Cuando se despliegue el cuadro de mensaje haciéndole saber que el libro se
cerró, haga clic en Aceptar.
5. Abra el libro. (Si está en el Editor de Visual Basic tendrá que ir a la ventana de la
aplicación Excel y abrir el libro por medio del menú Archivo.)
6. Verá un valor de 100 en la celda A1, haciéndole saber que de hecho éste es el
libro que creó por medio de su procedimiento.

Después de ese procedimiento deberá sentirse como un genuino desarrollador de Excel.


Ahora examinará las líneas que crearon el procedimiento.

Usted inició este procedimiento al crear una variable de objeto.

Dim NuevoLibro As Workbook

Esta variable de objeto entra en acción cuando se crea el nuevo libro:

Set NuevoLibro = Workbooks.Add

Esta instrucción crea el libro al agregar un elemento nuevo a la colección Workbooks. Al


momento de la creación, Excel le asigna un nombre, como Libro1 o Libro2. Usted no
puede garantizar cuál será el nombre del libro. Para resolver este problema, asigne el
nuevo libro a la variable de objeto y utilícela en el código para hacer referencia al nuevo
libro.

Lo siguiente que hace el procedimiento es colocar un valor en la celda A1 sólo para que
tenga algo de información en el libro:

NuevoLibro.Worksheets(“Hoja1”).Range(“A1”).Value = 100

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 82 -


Finalmente, lleva a cabo los métodos de Workbook SaveAs y Close. El cuadro de
mensaje se agrega como una forma fácil de saber que todo ha terminado:

NuevoLibro.SaveAs “Guarda Libro.xlsm”


NuevoLibro.Close
MsgBox “El libro se cerró. “

Usted también terminó. Ya creó, guardó y cerró su primer libro de Excel por medio de
código de VBA. Después de que guarde el libro con un nombre, podrá referirse a él ya
sea por ese nombre o mediante la variable de objeto. Esto es sólo cuestión de gustos.

El objeto Worksheet.

Ya que sabe cómo trabajar con el objeto Workbook, preparese para trabajar con el objeto
Worksheet. Tómese un momento como lo hizo con el objeto Workbook y, como usuario
de Excel, piense qué tipo de cosas hace con las hojas de cálculo. Probablemente las
selecciona, las nombra, inserta nuevas hojas en un libro, copia y borra hojas, etcétera.
Ahora que sabe lo que necesita hacer con el objeto Worksheet, debe conocer las
propiedades y los métodos para llevar a cabo estas tareas.

Primeramente utilizará un par de propiedades para trabajar con hojas de cálculo. Una es
la propiedad Name. Establecer esta propiedad en VBA, es el equivalente de hacer doble
clic en una etiqueta de hoja para cambiarle el nombre. Por ejemplo, para nombrar una
hoja como Presupuesto, debe utilizar el siguiente código:

ActiveSheet.Name = “Presupuesto”

Si deseara aplicar algún formato a la hoja entera, ¿cómo seleccionaría todas las celdas
de la hoja? Puede hacerlo utilizando la propiedad Cells. Si quisiera establecer la fuente
para todas las celdas de la hoja, podría emplear el siguiente código:

Worksheets(“Hoja1”).Cells.Font.Name = “Arial “

Podría necesitar los siguientes tres métodos del objeto Worksheet:

1. Activate.- Este método activa la hoja.


2. CheckSpelling.- Este método se utiliza para revisar la ortografía del contenido de
la hoja de cálculo.
3. Delete.- Si necesita eliminar una hoja, utilice el método Delete.

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 83 -


Para insertar una hoja de cálculo y cambiarle el nombre, siga estos pasos:

1. Cree un nuevo procedimiento nuevo y nómbrelo HojaDeCalculo.


2. Introduzca el siguiente código para el procedimiento:

Dim HojaDeCalculo As Worksheet


Set HojaDeCalculo = Worksheets.Add
HojaDeCalculo.Name = Format(Date, “d, mmmm , yyyy”)

3. Ejecute el procedimiento.
4. Si está en el Editor de Visual Basic al ejecutar el procedimiento, vaya a la ventana
de Excel para ver la hoja de cálculo recién agregada vea la figura siguiente.
Observe el nombre de la hoja de cálculo que agregó. Es la fecha en que insertó la
página.

Este código comparte algunas similitudes con el código que utilizó para crear un libro. Así
como lo hizo en ese código, empezó creando una variable de objeto y la usó
conjuntamente con el método Add para que pudiera hacer referencia al objeto en el
código por medio del nombre de la variable del objeto.

Dim HojaDeCalculo As Worksheet

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 84 -


Set HojaDeCalculo = Worksheets.Add

Después de que se inserta la página, utiliza la propiedad Name:

HojaDeCalculo.Name = Format(Date, “d, mmmm , yyyy”)

Esta línea de código utiliza una propuesta interesante pasa seleccionar un nombre, utiliza
la fecha de hoy como nombre. La función Format le permite controlas el formato o la
apariencia de la fecha. En este caso, a la fecha se le dió el formato día, mes, año.

El objeto Range.

Probablemente el objeto más frecuentemente utilizado en el código de VBA es Range.


Este objeto es el caballo de batalla en el mundo de los objetos de Excel. Como usuario
de Excel, debe pasar la mayor parte de su tiempo interactuando con rangos.

Como usuario de Excel fundamentalmente interactúa con las celdas de una hoja de
cálculo. En VBA esto se traduce al objeto Range. De todos los objetos de Excel, Range
es el que más utilizará si usted es un programador típico.

Un objeto Range puede ser cualquiera de lo siguiente:

1. Una sola celda.


2. Una selección de celdas.
3. Selecciones múltiples.
4. Una fila o una columna.
5. Un rango 3D.

Propiedades del objeto Range.

Como hizo con los otros objetos, comenzará por aprender acerca de algunas de las
propiedades y métodos del objeto Range. Las siguientes son algunas propiedades útiles.

1. Address.- La propiedad Address devuelve la ubicación actual del rango.


2. Count.- La propiedad Count se utiliza para determinar el número de celdas en un
rango.
3. Formula.- Devuelve la fórmula utilizada para calcular el valor y desplegarlo.
4. Offset.- La propiedad Offset es ventajosa para desplazarse de un rango a otro.
5. Resize.- Le permite volver a dar tamaño al rango actualmente seleccionado.
6. Value.- Devuelve el valor del rango.

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 85 -


Esta lista de ninguna manera se acerca al número real de propiedades del objeto Range,
pues éstas realmente se cuentan por docenas. Los siguientes pasos le permiten
experimentar con algunas de las propiedades del objeto Range. Empiece por cerrar
todos los libros y abra un nuevo libro. Después realice lo siguiente:

1. Introduzca 10 en la celda A1; 20, en la celda A2 y 30, en la celda A3.


2. Seleccione la celda A4 e introduzca SUMA(A1:A3).
3. Oprima Alt+F11 para abrir el Editor de Visual Basic e inserte un módulo nuevo en
el libro actual.
4. Cree un procedimiento nuevo y nómbrelo RangoPropiedades.
5. Introduzca el siguiente código para el nuevo procedimiento.

ThisWorkbook.Worksheets(“Hoja1”).Range(”A1”).Activate
ActiveCell.Offset(2, 2).Activate
MsgBox “La celda activa actual es “ & ActiveCell.Address
MsgBox “El valor de A4 es “ & Range(“A4”).Value
MsgBox “La fórmula de A4 es “ & Range(“A4”).Formula

6. Vaya a la Hoja1 de su libro y ejecute el procedimiento RangoPropiedades. El


primer cuadro de mensaje se desplegará diciéndole que la celda activa es C3 vea
la figura siguiente.

7. Haga clic en Aceptar (OK). El siguiente cuadro de mensaje se desplegará con el


valor de la celda A4.
8. Haga clic en Aceptar. El cuadro de mensaje final se desplegará con la fórmula que
está en A4.
9. Haga clic en Aceptar para quitar el cuadro de mensaje.

¿Se dio cuenta de algunas ligeras diferencias en la información desplegada? Para estar
seguro se revisará lo que hace el procedimiento.

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 86 -


Lo primero hace este procedimiento es activar la celda A1:

ThisWorkbook.Worksheets(“Hoja1”).Range(”A1”).Activate

Después de que se activó la celda, utilizó el método Offset para desplazarse a la celda
C3 y desplegar en un cuadro de mensaje con la dirección de la celda recién activada.

ActiveCell.Offset(2, 2).Activate
MsgBox “La celda activa actual es “ & ActiveCell.Address

La propiedad Offset le permite ir a otra ubicación del rango. La sintaxis para esta
propiedad es:

rangename.Offset(RowOffset, ColumnOffset)

Los argumentos opcionales RowOffset y ColumnOffset controlan la dirección del


movimiento. En el procedimiento, usted estableció RowOffset a 2 y ColumnOffset a 2, por
eso terminó en la celda C3.

Lo siguiente que hizo fue desplegar el valor de la celda y luego la fórmula de la celda:

MsgBox “El valor de A4 es “ & Range(“A4”).Value


MsgBox “La fórmula de A4 es “ & Range(“A4”).Formula

Estas dos líneas hicieron un excelente trabajo al ilustrarle la diferencia entre las
propiedades Value y Formula. La propiedad Value devuelve lo que se desplegó en la
celda. Formula devuelve lo que realmente está en la celda.

Métodos del objeto Range.

El objeto Range también tiene un gran número de métodos, incluyendo los siguientes:

1. Activate.- Activa un rango.


2. Clear.- Borra el contenido de un rango.
3. Copy.- Copia al Portapapeles el contenido de un rango.
4. Cut.- Coloca el contenido de un rango en el Portapapeles.
5. PasteSpecial.- Pega el contenido del Portapapeles en un rango.
6. Select.- Selecciona un rango.

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 87 -


Cómo utilizar la instrucción With.

Ahora que se ha familiarizado con los objetos más frecuentemente utilizados en Excel, es
tiempo de que aprenda a construir un mecanismo para facilitar el trabajo con los objetos.
Una de las tareas comunes al trabajar con objetos de rango es establecer una variedad
de propiedades de formateo. El siguiente listado muestra un ejemplo de código que se
emplea para asignar diferentes características de formato a un objeto de rango.

Range(“Al:A6”).NumberFormat = “#,##0.00”
Range(“Al:A6”).Font.Name = “Courier New”
Range(“Al:A6”).Font.FontStyle = “Normal”
Range(“Al:A6”).Font.Size = 11
Range(“Al:A6”).Font.Strikethrough = False
Range(“Al:A6”).Font.Superscript = False
Range(“Al:A6”).Font.Subscript = False
Range(“Al:A6”).Font.OutlineFont = False
Range(“Al:A6”).Font.Shadow = False
Range(“Al:A6”).Font.Underline = xlUnderlineStyleNone
Range(“Al:A6”).Font.Colorlndex = xlAutomatic

Si fuera a teclear el código del listado anterior, rápidamente se cansaría de teclear una y
otra vez Range(“Al:A6”). Podría usar una variable de objeto para hacer referencia a
Range(“Al:A6”), pero aún tendría que teclear el nombre de la variable una y otra vez. VBA
proporciona una manera de evitar esto: la instrucción With. Esta instrucción se utiliza
para establecer múltiples propiedades o ejecutar múltiples métodos para el mismo objeto.
El siguiente listado muestra el mismo código del listado, pero ahora utiliza la instrucción
With.

With Range(A1:A6)
.NumberFormat = “#,##0.00”
With .Font
.Name = “Courier New“
.FontStyle = “Normal”
.Size = 11
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.Colorlndex = xlAutomatic
End With
End With

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 88 -


Aunque en este listado la instrucción With no redujo el número de líneas de código, sí
redujo la cantidad que se requería para teclear. Lo siguiente es la sintaxis para la
instrucción With:

With objeto
[instrucciones]
End With

Objeto en esta sintaxis se refiere al objeto que está siendo manipulado por las
propiedades y los métodos listados en la sección instrucciones. Cada línea de esta
sección empieza con un punto y también puede anidar instrucciones With. El siguiente
listado ilustra una instrucción With que emplea propiedades y métodos.

Sub WithHojaDeCalculo()
With ThisWorkbook
.SaveAs “WithEjemplo“
MsgBox “Guardar estado “ & .Saved
End With
End Sub

Cómo utilizar la instrucción For Each.

Considerando que la instrucción With se utiliza para ejecutar múltiples instrucciones para
el mismo objeto, la instrucción For Each ejecuta las mismas instrucciones para múltiples
objetos. For Each le permite repetir instrucciones para cada elemento en una colección.
La instrucción For Each también se puede utilizar con matrices.

A continuación se muestra la sintaxis para la instrucción For Each:

For Each elemento In grupo


[instrucciones]
[Exit For]
[instrucciones]
Next

Observe que esta sintaxis soporta la cláusula Exit For. Como las otras cláusulas Exit,
tradicionalmente se coloca en una instrucción If. Por ejemplo, si necesitara cambiar el
valor de cada celda en un rango, tendría que emplear el código del listado siguiente.

Sub EjemploDeFor()
Dim x As Range

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 89 -


For Each x In ThisWorkbook.Worksheets(“Hoja1”).Range(“A1:A6”)
x.Value = x.Value + 10
Next
End Sub

Ejemplos de código del objeto Range.

Algunos programadores mencionan que la mejor manera de aprender para ellos es ver
ejemplos de código, por ese motivo se muestra esta sección. En esta parte verá una
variedad de ejemplos de código que usan el objeto Range. Estos ejemplos han sido
seleccionados debido a que son los que comúnmente utilizan los programadores.

El primer ejemplo de código cambia el formateo en cada fila de un rango. Esta es una
manera popular de hacer las cosas con hojas de cálculo muy largas para facilitar la vista
al imprimirlas. En este ejemplo debe tener una hoja similar a la que se muestra en la
siguiente figura. Observe que la primera fila contiene encabezados. Desde la tercera fila
se empezará a aplicar el formato de negritas. El procedimiento que lleva a cabo esta
tarea se muestra en el listado siguiente.

Sub Negritas()
Dim conta As Integer
For conta = 3 To ThisWorkbook.Worksheets(“Hoja1”). Range(“B1:D33”).Rows.Count
Step 2
ThisWorkbook.Worksheets(“Hoja1”).Range(“B1:D33”).Rows(conta).Font.Bold = True
Next
End Sub

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 90 -


La clave principal para este procedimiento es la instrucción For Next. Observe que el
conta inicialmente se estableció a 3. Esto es para empezar el proceso de negritas en la
tercera fila. Step se estableció a 2, de esta forma cada fila salteada está en negritas.

Tal vez haya pensado que el código que se mostró es fabuloso si sabe la dirección del
rango con el que está trabajando, pero ¿qué pasa si no conoce el tamaño del rango? Un
ejemplo clásico de esto ocurre cuando importa datos a su hoja de cálculo desde otra
aplicación, tal como una base de datos. Tal vez no sabe cuántas filas fueran a
devolverse. El código del siguiente listado muestra un ejemplo de cómo seleccionar un
rango con un tamaño desconocido.

Sub SeleccionarRango()
ThisWorkbook.Worksheets(“Hoja1”).Range(“A1”).Activate
ActiveCell.CurrentRegion.Select
MsgBox “La dirección del rango seleccionado es “ & Selection.Address
End Sub

El elemento clave del procedimiento SeleccionarRango es la propiedad CurrentRegion.


Ésta devuelve la región colindante con la primera fila y primera columna vacías. Al
seleccionar CurrentRegion, no tiene que saber el tamaño del rango.

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 91 -


El último procedimiento que verá, lleva a cabo una operación de copiar y pegar. En el
código del listado siguiente observará que todo lo que se seleccione se copiará y
después se pegara en otro lugar de la hoja.

Sub CopiarYPegar()
Selection Copy
Range(”F3”).Select
ActiveSheet.Paste
Application.CutCopyMode = False
EndSub

La instrucción Selection.copy coloca el rango seleccionado en el Portapapeles. El


siguiente paso es ir al destino deseado del rango que se copió. Ahí utiliza el método
Paste para mover a la nueva ubicación el rango que se copió en el Portapapeles.
Finalmente, estableció a Falso la propiedad CutCopyMode del objeto Application. Si no
hiciera esto, la marquesina (las Iíneas discontinuas parpadeantes) permanecerán
alrededor del texto original y la barra de estado contendrá instrucciones para desplazarse
al destino.

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 92 -


CAPÍTULO 8 FORMULARIOS DE USUARIO

Ya sabe bastante sintaxis. ¿Qué sigue? Bueno pues, va a regresar a la interfaz de


usuario por un tiempo. En este punto, comenzará a trabajar con formularios de usuario (o
simplemente formularios) como una forma de personalizar la interfaz de su aplicación.

Creará una aplicación para llevar un registro de los gastos hechos por los huéspedes de
un hotel. Cuando un huésped utiliza el campo de golf o la cancha de tenis, solicita toallas
adicionales para la alberca, etcétera, se crea una entrada en la aplicación. En esta
aplicación, el usuario no interactuará directamente con una hoja de cálculo. En cambio,
introducirá información por medio de un cuadro de diálogo personalizado que usted
creará en esta parte.

Cómo agregar un formulario a su aplicación.

En la parte, "Cómo trabajar con controles", colocó controles directamente en una hoja de
cálculo. Ésta es una buena iniciativa cuando desea que sus usuarios interactúen con una
hoja de cálculo, pero ¿qué tal si trata de protegerlos del entorno de Excel o si trata de
crear una aplicación que tenga una interfaz personalizada? En tal caso necesitará
emplear formularios.

Los formularios de usuario se convierten en las ventanas personalizadas y los cuadros de


diálogo de su aplicación. Contienen controles que se utilizan para obtener información del
usuario. Para agregar un formulario a una aplicación, complete los siguientes pasos:

1. Cierre todos los libros que tenga abiertos.


2. Abra un libro nuevo.
3. Oprima Alt+F11 para acceder al Editor de Visual Basic.
4. Haga clic con el botón derecho del ratón en ThisWorkbook en el Explorador de
proyectos.
5. Seleccione Insertar I UserForm del menú contextual que aparece. Se agregará un
formulario a su libro, como se muestra en la figura siguiente.

El formulario recién agregado aparece como un cuadro gris con una barra de título. Ésta
es su base para construir un cuadro de diálogo personalizado. A continuación conocerá
sus propiedades y aprenderá cómo ejecutarlas.

Cómo establecer las propiedades de un formulario.

El primer paso para trabajar con formularios es establecer algunos valores de propiedad.
Lo primero que debe establecer para un formulario o cualquier objeto es la propiedad
Name. Ésta controla la manera de hacer referencia, mediante código, a un formulario.
Cuando se crea un formulario, Excel le asigna un nombre tal como UserForm1. ¿Se
imagina la dificultad para llevar un registro de varios formularios que utilicen nombres
como UserForm1, UserForm2, UserForm3, y así sucesivamente? Un prefijo
recomendado para los formularios es frm, frm se usa como abreviatura de formulario.

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 93 -


Después de establecer la propiedad Name, se establece la propiedad Caption del
Formulario. Esta propiedad controla el texto en la barra de título del formulario. Para
establecer estas propiedades, dé los siguientes pasos:

1. La ventana Propiedades (vea la figura siguiente) es donde se listan las


propiedades de un formulario. Si no está desplegada, oprima F4.

2. Seleccione la propiedad Name. Esta propiedad se encuentra listada en la parte


superior de las propiedades alfabéticas y se muestra como (Name).
3. Escriba GastosDeHuespedes.
4. Seleccione la propiedad Caption.
5. Escriba Gastos de huéspedes. Observe que conforme teclea Gastos de
huéspedes en la propiedad Caption, cambia la barra de título del formulario.

Hasta ahora, el único cambio que puede ver en el formulario es su barra de título. Hay
muchas otras propiedades que puede establecer para un formulario, pero, por el
momento, sólo necesita estas dos.

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 94 -


Ejecución del formulario.

Aun cuando no existe ningún código asociado con el formulario, puede ejecutarlo.
Ejecutar un formulario significa verlo desplegarse como si estuviera en su aplicación.
Siga los pasos que se muestran a continuación para ejecutar el formulario:

1. Haga clic en el formulario para seleccionarlo.


2. Oprima F5. El formulario se desplegará en modo de ejecución, como se muestra
en la siguiente figura. Observe que la cuadrícula que se despliega cuando trabaja
con el formulario en el Editor de Visual Basic no se despliega cuando se ejecuta el
formulario.

3. Cierre el formulario por medio del botón Cerrar (X) de la barra de título del
formulario.
4. Regresará al Editor de Visual Basic.

Como vió al seguir estos pasos, usar los formularios es como trabajar con plantillas, no
tiene que escribir código para el botón cerrar del formulario. Eso es controlado por VBA.

Cómo agregar controles a su formulario.

Agregar controles a un formulario es muy parecido a colocar controles en una hoja de


cálculo. Simplemente seleccione, en la barra de herramientas, el control con el que desea
trabajar y con el ratón dibújelo en el formulario. Para eso utilizará el Cuadro de
herramientas.

A continuación creará el formulario para llevar un registro de los diferentes gastos que
realizan los huéspedes en un hotel, el formulario terminado deberá ser como el que se
muestra en la figura siguiente.

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 95 -


Como puede ver en la figura anterior, dicho formulario utiliza una gran variedad de
controles. Ahora está listo para colocar estos controles. Siga los pasos mostrados a
continuación:

1. Seleccione el cuadro de herramientas de la ficha programador.


2. Del Cuadro de herramientas seleccione el control Etiqueta.
3. Utilice la figura anterior como guía, coloque la etiqueta en la parte superior
izquierda del formulario.
4. Si la ventana Propiedades no está desplegada, oprima F4. Establezca la
propiedad (Name) del control Etiqueta a IblNumeroHabitacion y la propiedad
Caption a Número de habitación.
5. Del Cuadro de herramientas elija el control Cuadro de texto. Colóquelo a un lado
de la etiqueta. Establezca la propiedad (Name) a txtNumeroHabitacion.
6. Utilice la figura anterior como guía y continúe agregando los siguientes controles y
establezca sus propiedades según se indica en la tabla siguiente. Cuando trabaje
con marcos, primero dibújelos y después coloque los controles que van dentro de
éstos. No se preocupe por darles una alineación y un tamaño perfectos. También
aprenderá algunas técnicas para facilitar ese proceso.

Tipo de control Propiedad Name Propiedad Caption


Etiqueta lblNombreHuesped Nombre del huésped:
Cuadro de texto txtNombreHuesped
Etiqueta IblTipoGasto Tipo de gasto:
Cuadro combinado cboTipoGasto
Etiqueta Ibllmporte Importe:
Cuadro de texto txtlmporte
Etiqueta IblFecha Fecha:
Cuadro de texto txtFecha

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 96 -


Marco fraFormaPago Forma de pago
Botón de opción optCargoAHabitación Cargar a la habitación
Botón de opción optEfectivo Efectivo
Botón de opción optCheque Cheque
Botón de opción optTarjetaCredito Tarjeta de crédito
Etiqueta IblTipoTarjeta Tipo de tarjeta:
Cuadro combinado cboTipoTarjeta
Etiqueta IblNume rolar jeta Número de tarjeta:
Cuadro de texto txtNumeroTarjeta
Etiqueta iblVencimiento Vencimiento:
Cuadro de texto txtVencimiento
Botón de comando cmdGuardar Guardar
Botón de comando cmdCancelar Cancelar
Marco fraPropina Información de propina
Casilla de verificación chkPropinalncluida Propina incluida
Etiqueta IblImportePropina Importe de la propina:
Cuadro de texto txtlmportePropina

7. Guarde el libro como GastosHuespedes.

Se sabe que crear controles puede ser poco tedioso, pero obviamente son necesarios. A
continuación trabajará con otras propiedades y técnicas, para hacer que el formulario y
sus controles se vean mejor.

Cómo establecer propiedades adicionales.

En el ejercicio anterior, estableció la propiedad Name para todos los controles y la


propiedad Caption para algunos de ellos. Ahora establecerá algunas propiedades
adicionales.

Propiedades Default y Cancel de los botones de comando.

A los primeros controles que va a establecer propiedades adicionales son los botones de
comando. Su formulario tiene dos botones de comando: Guardar y Cancelar. El botón
Guardar tendrá la función de validar datos, y si éstos son correctos, los escribirá en una
hoja de cálculo. Piense en cómo introduciría los datos. Probablemente iría de campo en
campo y por último oprimiría Entrar. Si en este formulario oprime Entrar, sucederá nada.
Tiene que establecer una propiedad para que cuando un usuario oprima Entrar, sea
como hacer clic en el botón Guardar. Para efectuar esto, necesita establecer a True la
propiedad Default del botón Guardar. En cada formulario solamente un botón de
comando puede tener la propiedad Default establecida a True.

En la mayoría de los formularios al oprimir ESC se ejecuta una cancelación. En su


formulario, necesita establecer a True la propiedad Cancel del botón Cancelar para
realizar dicha acción.

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 97 -


También necesita dar el mismo tamaño a estos dos botones. Para llevar a cabo esto, use
el botón Hacer del mismo ancho. Dé los siguientes pasos:

1. Haga clic en el botón Guardar para seleccionarlo.


2. Mantenga oprimida la tecla Ctrl y haga clic en el botón Cancelar. De esta forma
selecciona ambos botones al mismo tiempo.
3. De la barra de herramientas Formato, haga clic en la flecha que está a un lado del
botón Hacer del mismo ancho. Si no ve la barra de herramientas Formato, haga
clic con el botón derecho del ratón en una barra de herramientas y seleccione
Formato.
4. Seleccione Ambos.

Los botones toman el tamaño basado en el del botón Cancelar. El último botón
seleccionado actúa como la plantilla para los otros botones seleccionados.

Establecimiento de la propiedad Value de un botón de opción y alineación de los


controles.

El siguiente grupo de controles con el que va a trabajar es el de los botones de opción.


Observe el orden de los botones de opción en el formulario. Cargar a la habitación va
primero, seguido por Efectivo, etcétera. Se seleccionó este orden porque damos por
hecho que la mayoría de las personas piden que la cuenta se cargue a su cuarto. La
segunda forma de pago más frecuentemente usada es el pago en efectivo y el orden
continúa hacia abajo. Cuando diseñe un formulario que lleve botones de opción, intente
ordenarlos desde el más usado hasta el menos usado. También necesita establecer uno
de los botones de opción como la opción predeterminada. Para hacer esto, establezca a
True la propiedad Valué del botón de opción optCargoAHabitacion.

También necesita alinear sus botones de opción en el lado izquierdo. Use los siguientes
pasos para realizar esto:

1. Haga clic en el botón de opción Cargar a la habitación.


2. Mantenga oprimida la tecla Ctrl y haga clic en los botones de opción restantes.
3. Haga clic en la flecha hacia abajo que se encuentra un lado del botón Alinear a los
lados izquierdos en la barra de herramientas Formato.
4. Seleccione Izquierda. Los controles ahora están alineados hacia el lado izquierdo.

Si otros controles del marco Forma de pago deben ser alineados, realice la alineación en
este momento.

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 98 -


Desactivación de controles.

Hay algunos controles que se necesitan sólo cuando se seleccionan otros controles. Por
ejemplo, no necesita el cuadro de texto Importe de la propina a menos que se haya
marcado la casilla de verificación Propina incluida. Tampoco necesita los controles que
pertenezcan a la tarjeta de crédito a menos que se seleccione el botón de opción Tarjeta
de crédito. Para hacer esto más obvio a su usuario, puede desactivar estos controles, de
manera que no puedan ser utilizados. Algunos controles, cuando están deshabilitados,
aparecen atenuados en color gris. Establezca a False la propiedad Enabled de las
etiquetas de los cuadros de texto y el cuadro combinado. Más tarde podrá activarlos
cuando el usuario seleccione el control apropiado.

Otra propiedad que podría resultar útil cuando trabaje con controles es la propiedad
ControlTipText. Si introduce texto en esta propiedad, dicho texto se mostrará como una
sugerencia cuando el usuario coloque el puntero sobre el control.

Cómo asignar orden de tabulación a los controles.

Ahora ejecute su formulario. Empiece oprimiendo la tecla Tab. Tal vez note que la tecla
Tab no selecciona los controles en el orden que usted desearía. Por ejemplo, al usar la
tecla Tab, seleccionará los controles de la forma de pago antes de haber seleccionado
los controles de la propina. Los botones Guardar y Cancelar tampoco son los últimos
controles en ser seleccionados. Esto es debido a que el orden de tabulación de los
controles está basado en el orden en el cual fueron creados. Si no tiene el orden de
tabulación que desea en el formulario, puede corregirlo por medio de la propiedad
Tablndex. Ésta controla el orden de tabulación de los controles en un formulario. La
numeración para la propiedad Tablndex comienza en cero.

Su primera reacción para establecer la propiedad Tablndex es empezar con el primer


botón e iniciar la numeración O, 1, 2, 3, y así sucesivamente. Hay otra propuesta que tal
vez le agrade. Empiece seleccionando el botón que usted prefiera que sea el último en el
orden de tabulación. Establezca Tablndex a 0. Seleccione el control que sigue al último
en el orden de tabulación deseado (asegúrese de incluir etiquetas y marcos) y establezca
la propiedad Tablndex a 0. Continúe hacia atrás, estableciendo cada propiedad Tablndex
de los controles a 0. Lo que sucede cuando establece a 0 la propiedad Tablndex, es que
se incrementa en 1 el valor de la propiedad Tablndex del resto de los controles. Es por
eso que debe trabajar en forma regresiva. Tómese su tiempo para corregir el orden de
tabulación. Después de que haya establecido las propiedades Tablndex, ejecute el
formulario y compruebe lo que sucede al oprimir la tecla Tab.

Cómo asignar teclas de aceleración a los controles.

Casi ha terminado con la porción de interfaz de su formulario. Ejecute su formulario.


¿Nota que falta algo? Probablemente sí, si prefiere usar el teclado más que el ratón. Así
como está el formulario no tiene ninguna tecla de aceleración (también conocidas como
teclas de método abreviado). Para agregar teclas de aceleración, necesita emplear la
propiedad Accelerator. Introduzca una de las letras del título del control, la cual desea

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 99 -


como tecla de aceleración. Después de establecer la propiedad Accelerator, la letra
seleccionada aparecerá subrayada en el título del control.

Para acceder de manera rápida a un control, debe utilizar una tecla de aceleración junto
con la tecla Alt. Por ejemplo, si hubiera un control que tuviera la letra E como tecla de
aceleración, debería oprimir Alt+E para acceder al control.

Cómo automatizar formularios.

La automatización de un formulario se puede dividir en varias partes. Tiene que decidir


cómo quiere que se vea el formulario cuando se cargue, determinar cómo se comportará,
probar si los valores serán aceptados y escribir los datos a una hoja de cálculo. Éstas son
las tareas que efectuará en esta parte.

Valores de inicialización en formularios.

Cuando despliega un formulario, usted necesita que pasen ciertas cosas conforme éste
se carga. Por ejemplo, sus usuarios probablemente le agradecerían que pusiera la fecha
de hoy en el cuadro de texto Fecha. Para hacer esto, deberá colocar código en el
procedimiento UserForm_Activate. Éste se ejecuta en el momento en el que el formulario
está siendo activado. Además, el procedimiento UserForm_Activate es donde debe
colocar el código para inicializar los valores de los distintos controles del formulario.

Una de las cosas que hará en este procedimiento es usar un rango de celdas para poblar
un cuadro combinado. Necesita valores para los cuadros combinados Tipo de gasto y
Tipo de tarjeta. Complete los siguientes pasos para introducir estos valores:

1. Vaya a la Hoja2 del libro actual. Cambíele el nombre a Listas.


2. Vaya a la celda B1 e introduzca Categorías de gastos.
3. Empiece en la celda B2 e introduzca los siguientes valores:
Celda B2: Sombrillas de playa
Celda B3: Renta de bicicletas
Celda B4: Lecciones de golf
Celda B5: Golf, 18 hoyos
Celda B6: Golf, 9 hoyos
Celda B7: Toallas de piscina
Celda B8: Cancha de tenis
Celda B9: Lecciones de tenis
4. Seleccione el rango B2:B9 y nómbrelo Gastos.
5. Vaya a la celda F1 e introduzca Tipos de tarjetas de crédito.
6. Empezando en la celda F2, introduzca los siguientes valores:
Celda F2: American Express
Celda F3: Diner's Club
Celda F4: Mastercard
Celda F5: Visa
7. Seleccione el rango F2:F5 y nómbrelo TiposTarjeta.

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 100 -
8. Guarde el libro.
9. Oprima Alt+F11 para ir al Editor de Visual Basic.

El siguiente paso en el proceso es proporcionar los valores y configuraciones iniciales


para algunos de los controles del formulario. Para inicializar los valores de su formulario,
realice los pasos descritos a continuación:

1. Haga doble clic en frmGastosDeHuespedes del árbol y, una vez que se despliegue
el formulario, haga doble clic en su fondo gris. Se abrirá la ventana Código y se
desplegará el procedimiento UserForm_Click.
2. No necesita escribir código para el procedimiento UserForm_Click. En cambio, sí
necesita hacerlo para el evento Actívate del UserForm. En el cuadro Objeto, que
está en la parte superior izquierda de la ventana Código, ya aparece seleccionado
el objeto UserForm. En el cuadro Procedimiento, que está en la parte superior
derecha de la ventana Código, se muestra la palabra Click y contiene una lista con
todos los eventos del control mostrado en el cuadro Objeto. Haga clic en el botón
de flecha hacia abajo, que está a un lado de esta lista, y localice y seleccione el
evento Activate. Se desplegará el procedimiento UserForm Activate.
3. Introduzca el siguiente código en el procedimiento UserForm_Activate:

With cboTipoGasto
.RowSource = "Gastos"
.ListIndex = 0
End With
txtFecha.Text = Format(Now, "dd/mm/yy")
With cboTipoTarjeta
.RowSource = "TiposTarjeta"
.ListIndex = 0
End With

4. Oprima F5 para ejecutar el procedimiento. Se desplegará el formulario, como se


muestra en la figura siguiente. Observe que los cuadros combinados están
poblados y que en el cuadro de texto Fecha se muestra la fecha actual.
5. Cierre el formulario y regrese al Editor de Visual Basic.

La clave para inicializar valores en un formulario es emplear el evento Activate del


formulario, como se muestra en estos pasos. Usando un código similar puede inicializar
valores de botones de opción, valores de casillas de verificación, fuentes de cuadros de
lista, entradas de cuadros de texto y títulos de etiquetas. En el procedimiento
UserForm_Activate, trabajó con cuadros combinados y cuadros de texto.

Ambas instrucciones With abordaron los cuadros combinados. Al utilizar la primera


instrucción With como ejemplo, puede ver que se establecieron dos propiedades:

With cboTipoGasto
.RowSource = "Gastos"
.ListIndex = 0

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 101 -
End With

La propiedad RowSource hace referencia al rango donde se localiza la lista de valores


necesaria para poblar el cuadro combinado. Cuando use valores de celdas para poblar
un cuadro combinado, lo mejor es que utilice un rango nombrado.

La propiedad Listlndex determina qué elemento en la lista de valores del cuadro


combinado se desplegará. La numeración de los índices empieza en 0; así, el primer
elemento tendrá el índice 0, el segundo el 1, etcétera.

El otro tipo de objeto que se inicializó mediante el procedimiento UserForm_Activate fue


un cuadro de texto:

txtFecha.Text = Format(Now, "dd/mm/yy")

La función Now se utiliza para devolver la fecha actual y la función Format aplica el
formato dd/mm/yy.

Cómo desplegar formularios.

Tal vez se esté preguntando de qué otra manera puede ejecutar un formulario, que no
sea mediante el Editor de Visual Basic. Escribirá un procedimiento simple para hacerlo.
Puede asignar el procedimiento a varios objetos tales como un botón de comando, un
botón de una barra de herramientas y un elemento de menú.

Debido a que la asignación de procedimientos a botones de barras de herramientas y


elementos de menús, todavía no ha sido estudiada en este libro, trabajaremos por el

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 102 -
momento asignando el procedimiento a un botón. El procedimiento que despliegue el
cuadro de diálogo solamente tendrá una línea de código.

GastosDeHuespedes.Show

El método Show del UserForm carga el formulario en la memoria y lo despliega. Para


crear este procedimiento, realice los siguientes pasos:

1. Si todavía no está ahí, vaya al Editor de Visual Basic y agregue un módulo nuevo
a ThisWorkbook.
2. Cree un nuevo procedimiento y nómbrelo MostrarGastosHuespedes.
3. Introduzca el código siguiente para el procedimiento:

GastosDeHuespedes.Show

4. Vaya a la Hoja1 de su libro y agregue un botón de comando a la hoja de cálculo.


5. Cuando aparezca el cuadro de diálogo que le pide que asigne una macro al botón,
elija MostrarGastosHuespedes.
6. Establezca el título del botón a Mostrar gastos de huéspedes y haga clic fuera del
botón para desactivarlo.
7. Haga clic en el botón para desplegar el formulario. El formulario se despliega.
Observe que los controles del cuadro combinado y el cuadro de texto se
inicializaron.
8. Cierre el formulario y guarde el libro.

Como ya sabe, desplegar un formulario es muy fácil de hacer por medio del método
Show. El procedimiento MostrarGastosHuespedes se usará más adelante para desplegar
el formulario desde un botón de barra de herramientas y un elemento de menú.

Cómo controlar el comportamiento de un formulario.

Después de desplegar el formulario, tal vez lo necesite para efectuar diferentes tareas.
Por ejemplo, cuando marque la casilla de verificación Propina incluida, necesitará
habilitar el cuadro de texto Importe de la propina. Además, cuando el botón de opción
Tarjeta de crédito se seleccione, usted necesitará que se habiliten los controles
asociados con la información de tarjeta de crédito. Para hacer esto, colocará código en el
procedimiento del evento Change del control apropiado. Este evento ocurre cuando
cambia la propiedad Value del control. Debido a que trabajará con un botón de opción
(Tarjeta de crédito) y una casilla de verificación (Propina incluida), necesitará habilitar los
controles asociados si la propiedad Value es True. Realice los siguientes pasos para
introducir código y de esta forma habilitar los controles:

1. Si todavía no está ahí, vaya al Editor de Visual Basic y abra el formulario


frmGastosDeHuespedes.
2. Haga doble clic en la casilla de verificación Propina incluida para abrir la ventana
Código.

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 103 -
3. Seleccione Change en la lista de eventos de la ventana Código e introduzca el
siguiente código para el procedimiento chkPropinaIncluida_Change:

If chkPropinalncluida.Value = True Then


IblImportePropina.Enabled = True
txtImportePropina.Enabled = True
Else
IblImportePropina.Enabled = False
txtImportePropina.Enabled = False
End If

4. En la esquina superior izquierda de la ventana Código se localiza el cuadro con la


lista Objetos que actualmente tiene seleccionado chkPropinalncluida. Haga clic en
la flecha hacia abajo de este cuadro de lista. Localice y seleccione
optTarjetaCredito.
5. Seleccione Change del cuadro de eventos. El procedimiento se desplegará en la
ventana Código.
6. Introduzca el siguiente código para el procedimiento optTarjetaCredito_Change:
If optTarjetaCredito.Value = True Then
lblTipoTarjeta.Enabled = True
cboTipoTarjeta.Enabled = True
lblNumeroTarjeta.Enabled = True
txtNumeroTarjeta.Enabled = True
lblVencimiento.Enabled = True
txtVencimiento.Enabled = True
Else
lblTipoTarjeta.Enabled = False
cboTipoTarjeta.Enabled = False
lblNumeroTarjeta.Enabled = False
txtNumeroTarjeta.Enabled = False
lblVencimiento.Enabled = False
txtVencimiento.Enabled = False
End If
7. Vaya a la Hoja1 de su libro y haga clic en el botón de comando en la hoja de
cálculo. El formulario se desplegará como la figura siguiente.

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 104 -
8. Marque la casilla de verificación Propina incluida. El control Importe de la propina
se habilitará.
9. Seleccione el botón de opción Tarjeta de crédito. Los controles relacionados con la
información de la tarjeta de crédito se habilitarán, como se muestra en la figura
siguiente.

10. Cierre el formulario y guarde el libro. Regrese al Editor de Visual Basic.

Básicamente, lo que hizo en el procedimiento del evento Change fue probar la propiedad
Value. Si estaba como True, era necesario que estableciera a True la propiedad Enabled
de los controles apropiados. De lo contrario, era necesario que la propiedad Enabled se
estableciera a False.

No está limitado a trabajar con la propiedad Enabled. Puede establecer cualquier


propiedad que tenga la capacidad de ser establecida en tiempo de ejecución incluyendo
Text, Value y Caption.

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 105 -
Validación de datos.

Después de que el usuario introduzca la información en el formulario, hará clic en el


botón Guardar. ¿Qué pasará después? El código asociado con el botón Guardar necesita
hacer dos cosas: asegurarse de que los datos son válidos y si es así, escribir los datos a
una hoja de cálculo. Empecemos con la validación de datos.

Cuando valide datos, asegúrese de que sea válido en el contexto de su aplicación. Un


cuadro de texto aceptará cualquier cosa que pueda introducir desde un teclado. Esto no
significa que los datos sean válidos. Al observar el formulario Gastos de los huéspedes,
hay un solo control para el que va a validar los datos: txtNumeroHabitacion. Para el
propósito del ejemplo, los números de habitación de este hotel empiezan desde 101 y
terminan en 730. Esto significa que no deberá aceptar algún otro código en su rutina de
validación. También necesita agregar código que asegure que se ha introducido algún
dato en los campos obligatorios. Los campos obligatorios son Número de habitación, Tipo
de gasto, Importe y Fecha. La forma de pago también es obligatoria, pero los botones de
opción, por su propia naturaleza, se cuidan solos.

Pero, espere, tiene que haber más validaciones. Si la casilla de verificación Propina
incluida está activada, se requerirá el Importe de la propina. También, si el botón de
opción Tarjeta de crédito está seleccionado, se requerirá la información asociada a la
tarjeta de crédito.

Ahora que ha identificado lo que necesita validar al hacer clic en el botón Guardar, está
listo para escribir el procedimiento por medio de los siguientes pasos:

1. Despliegue el formulario en el Editor de Visual Basic.


2. Haga doble clic en el botón Guardar. Se desplegará el procedimiento
cmdGuardar_Click
3. Introduzca el siguiente código para el procedimiento cmdGuardar_Click:

If Val(txtNumeroHabitacion.Text) < 101 Or Val(txtNumeroHabitacion.Text) > 730 _


then
MsgBox "Número de habitación no válido."
txtNumeroHabitacion.SetFocus
Exit Sub
End If
If txtNombreHuesped.Text = "" Then
MsgBox "Introduzca el nombre del huésped."
txtNombreHuesped.SetFocus
Exit Sub
End If
If chkPropinaIncluida.Value = True Then
If txtImportePropina = "" Then
MsgBox "Si la propina ha sido incluida, debe introducir su importe."
txtImportePropina.SetFocus
Exit Sub

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 106 -
End If
End If
If txtImporte.Text = "" Then
MsgBox "Introduzca el importe del gasto."
txtImporte.SetFocus
Exit Sub
End If
If IsNumeric(txtImporte.Text) = False Then
MsgBox "El importe del gasto debe ser un número."
txtImporte.SetFocus
Exit Sub
End If
If txtFecha.Text = "" Then
MsgBox "Debe introducir una fecha."
txtFecha.SetFocus
Exit Sub
End If
If optTarjetaCredito.Value = True Then
If txtNumeroTarjeta = "" Then
MsgBox "Introduzca el número de tarjeta"
txtNumeroTarjeta.SetFocus
Exit Sub
End If
If txtVencimiento.Text = "" Then
MsgBox "Introduzca la fecha de vencimiento de la tarjeta."
txtVencimiento.SetFocus
Exit Sub
End If
End If
Unload Me

4. Vaya a la Hoja1 y haga clic en el botón de comando. Se desplegará el formulario.


5. Haga clic en el botón Guardar. Puesto que no ha introducido nada en el cuadro de
texto Número de habitación, aparecerá el cuadro de mensaje que se muestra en la
figura siguiente.

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 107 -
6. Haga clic en Aceptar para quitar el cuadro de mensaje. Introduzca 121 y haga clic
en el botón Guardar. Se desplegará otro cuadro de mensaje. Haga clic en Aceptar
para quitarlo.
7. Introduzca su nombre como el nombre del huésped. En el cuadro de texto Importe
teclee 20.
8. Marque la casilla de verificación Propina incluida. Si en este momento hace clic en
el botón Guardar, se desplegará un cuadro de mensaje haciéndole saber que debe
introducir el importe de la propina. Haga clic en Aceptar para quitar el cuadro de
mensaje.
9. Introduzca 2 para el importe de la propina y haga clic en Guardar. Se cerrará el
formulario.

Probablemente ya observó que en el procedimiento cmdGuardar_Click utilizó siempre un


mismo patrón para la validación del código. Básicamente probó la propiedad Text o la
propiedad Value de los controles. El listado siguiente tiene una de las instrucciones If que
se utilizaron en el procedimiento.

If Val(txtNumeroHabitacion.Text) < 101 Or Val(txtNumeroHabitacion.Text) > 730 then


MsgBox "Número de habitación no válido."
txtNumeroHabitacion.SetFocus
Exit Sub
End If

La instrucción If asegura que el número de cuarto esté entre 101 y 730. Note el uso de la
función Val. El contenido de la propiedad Value realmente es una cadena. La propiedad
Val convierte una cadena a un número. Se dió cuenta que no escribió código para ver si
txtNumeroHabitacion.Text estaba vacío. Eso ya estaba implícito en la instrucción If,
debido a que vacío es menor que 101.

El método SetFocus hace que el control nombrado sea el objeto activo en el formulario.
Exit Sub se usa después de que el control en donde se encontró el error ha sido activado
pues no hay motivo para continuar el procedimiento luego de que se ha encontrado un
error.

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 108 -
La instrucción If le proporciona la plantilla básica para la validación de los controles. Si
todas las entradas son válidas, el formulario se oculta y se borra de la memoria por medio
de la instrucción Unload.

Uso de los valores del formulario.

Todavía hay un problema con el procedimiento cmdGuardar_Click. ¿Cómo recuperará


los datos introducidos en el formulario para llevarlos a la hoja de cálculo? Deberá
emplear el contenido de las propiedades Text y Value en el formulario y las aplicará en
una hoja de cálculo. Dé los siguientes pasos para modificar el procedimiento
cmdGuardar_Click.

1. Vaya a la Hoja3 de su libro. (Si no la tiene, agréguela). Renombre Hoja3 como


Gastos de huespedes.
2. Vaya al Editor de Visual Basic y despliegue el formulario.
3. Haga doble clic en el botón Guardar para desplegar la ventana Código.
4. Inserte el siguiente código antes de la última instrucción en el procedimiento
cmdGuardar_Click. Es muy importante que su código vaya antes de la instrucción
Unload Me:

Worksheets("Gastos de huéspedes").Activate
Range("A2").Select
If Range("A2").Value = "" Then
Range("A2").Activate
Else
Range("A2").CurrentRegion.Select
ActiveCell.Offset(Selection.Rows.Count, 0).Activate
End If
With ActiveCell
.Value = txtNumeroHabitacion.Text
.Offset(0, 1).Value = txtNombreHuesped.Text
.Offset(0, 2).Value = cboTipoGasto.Text
.Offset(0, 3).Value = txtImporte.Text
.Offset(0, 4).Value = txtFecha.Text
If chkPropinaIncluida.Value = True Then
.Offset(0, 5).Value = txtImportePropina.Text
End If
If optCargoAHabitacion.Value = True Then
.Offset(0, 6).Value = "Habitación"
ElseIf optEfectivo.Value = True Then
.Offset(0, 6).Value = "Efectivo"
ElseIf optCheque.Value = True Then
.Offset(0, 6).Value = "Cheque"
ElseIf optTarjetaCredito.Value = True Then
.Offset(0, 6).Value = "Tarjeta de crédito"
.Offset(0, 7).Value = cboTipoTarjeta.Text
.Offset(0, 8).Value = txtNumeroTarjeta.Text

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 109 -
.Offset(0, 9).Value = txtVencimiento.Text
End If
End With

5. Vaya a la Hoja1 de su libro.


6. Guarde su libro. Siempre es buena idea guardar su trabajo antes de ejecutar un
procedimiento al cual se le introducen datos.
7. Haga clic en el botón Gastos de huéspedes. Teclee 430 como el número de
habitación. Introduzca su nombre como huésped. Elija Lecciones de golf como el
tipo de gasto. Escriba 100 para el importe. Marque la casilla de verificación
Propina incluida. Escriba 10 como importe de la propina. Seleccione el botón de
opción Tarjeta de crédito. Elija Visa como el tipo de tarjeta. Teclee 414121 para el
número de tarjeta. Teclee 6/8/11 como fecha de vencimiento de la tarjeta. Haga
clic en Guardar.

Las entradas del formulario se escribirán en la hoja Gastos de huéspedes, como se


muestra en figura siguiente.

Ahora tómese un momento para observar el código que usted introdujo. Lo primero que
hizo fue determinar dónde empezar a introducir datos en la hoja de cálculo:

Worksheets("Gastos de huéspedes").Activate
Range("A2").Select
If Range("A2").Value = "" Then
Range("A2").Activate
Else
Range("A2").CurrentRegion.Select
ActiveCell.Offset(Selection.Rows.Count, 0).Activate
End If

Primero se activó la hoja Gastos de huéspedes y, posteriormente, el rango A2. Este


rango es su punto de partida porque la primera fila de esta hoja de cálculo podría
utilizarse para colocar encabezados. El siguiente paso pregunta si existe algún valor en el
rango A2. De no ser así, A2 será su punto de partida. De otro modo, usted tendrá que
buscar la última fila ocupada. Aquí es donde CurrentRegion entra en acción. Al
seleccionar la región actual, puede averiguar cuántas filas ya han sido ocupadas y utilizar
esa información para localizar su punto de partida.

Después de que obtenga su punto de partida, use la propiedad Offset para introducir
valores en las distintas columnas a lo largo de la fila. Si se selecciona el botón de opción
Tarjeta de crédito, tendrá que hacer entradas adicionales.

Hay una cosa más qué hacerle a su formulario. Necesita escribir el código para el botón
Cancelar por medio de estos pasos:

1. Vaya al Editor de Visual Basic y haga doble clic en el botón Cancelar para abrir la
ventana Código.

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 110 -
2. Introduzca el siguiente código para el procedimiento cmdCancelar_Click:

Unload Me

3. Guarde el libro.

Si el usuario hace clic en Cancelar, necesitará descargar el formulario, para que de esa
manera no se siga desplegando y se elimine de la memoria. En la vida real,
probablemente tendría un cuadro de mensaje preguntándole si el usuario está seguro de
querer cancelar.

FORMATOS DE IMPRESIÓN

Los distintos formatos que se pueden utilizar se muestran a continuación.

FORMATOS NUMÉRICOS

“General” Presenta el número como es, sin separadores de millar.


“$#,##0.00” Presenta el número con separador de millar; si es apropiado,
presenta los números negativos entre paréntesis; presenta dos
dígitos a la derecha del separador decimal.
“#,##0.00” Presenta el número con separador de millar con al menos un
dígito a la izquierda y dos dígitos a la derecha del separador
decimal.
“0.00%” Presenta el número multiplicado por 100 con un signo de
porcentaje (%) pegado a la derecha.
“0.00E+00” Usa notación científica estándar.

FORMATOS DE FECHA

“dd/mm/yyyy”
21/08/2011
“[$-F800]dddd, mmmm dd, yyyy” Domingo, 21 de Agosto de 2011
“dd/mm/yy” 21/08/11
“mm/dd/yy” 08/21/11
“dd-mm-yy” 21-08-11
“yyyy-mm-dd” 2011-08-21
“[$-80A]dddd d"" de ""mmmm"" de ""yyyy” Domingo 21 de Agosto de 2011
“[$-80A]d"" de ""mmmm"" de ""yyyy” 21 de Agosto de 2011

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 111 -
FORMATOS DE CADENA DEFINIDOS POR USUARIO

@ Marcador de lugar de carácter.


Presenta un carácter o un espacio. Si la cadena tiene un carácter
en la posición donde aparece @ en la cadena de formato, éste se
presenta; de lo contrario, se presenta un espacio en esa posición.
Los marcadores de lugar se llenan de derecha a izquierda, a
menos que haya un carácter ! en la cadena de formato. Vea más
abajo.
& Marcador de lugar de carácter.
Presenta un carácter o nada. Si la cadena tiene un carácter en la
posición donde aparece &, éste se presenta; de lo contrario, no
se presenta nada. Los marcadores de lugar se llenan de derecha
a izquierda, a menos que haya un carácter ! en la cadena de
formato.
< Fuerza minúscula.
Presenta todos los caracteres en formato de letra minúscula.
> Fuerza mayúscula.
Presenta todos los caracteres en formato de letra mayúscula.
! Fuerza llenar de izquierda a derecha los marcadores de lugar.
El valor predeterminado es llenar de derecha a izquierda.

FORMATOS NUMÉRICOS DEFINIDOS POR USUARIO

Ninguno Sin formato.


Presenta el número sin formato.
0 Marcador de lugar de dígito.
Presenta un dígito o un cero. Si la expresión tiene un dígito en la
posición donde aparece el 0 en la cadena de formato, se
presenta el dígito. De lo contrario, se presenta un cero en esa
posición. Si el número tiene menos dígitos que ceros (en
cualquier lado de la coma decimal) en la expresión de formato, se
presentan los ceros de la izquierda o de la derecha. Si el número
tiene más dígitos a la derecha del separador decimal que los que
hay a la derecha del separador decimal en la expresión de
formato, se redondea el número en tantos lugares decimales
como ceros existan. Si el número tiene más dígitos a la izquierda
del separador decimal que los que hay a la izquierda del
separador decimal en la expresión de formato, se presentan los
dígitos adicionales sin modificación.
# Marcador de lugar de dígito.
Presenta un dígito o nada. Si la expresión tiene un dígito en la
posición donde aparece la # en la cadena de formato, se
presenta el dígito; de lo contrario, no se presenta nada en esa
posición.
Este símbolo funciona como el marcador de lugar del dígito O,

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 112 -
excepto en que no se presentan los ceros a la izquierda o a la
derecha si el número tiene los mismos o menos dígitos que
existen en los caracteres # en cualquier lado del separador
decimal en la expresión de formato.
, Marcador de lugar decimal.
En algunas localidades, se usa un punto como separador
decimal. El marcador de lugar decimal determina cuántos dígitos
se presentan a la izquierda y a la derecha del separador decimal.
Si la expresión de formato contiene sólo signos de número a la
izquierda de este símbolo, los números menores de 1 comienzan
con un separador decimal.
Si se desea que siempre se presente un cero a la izquierda en
los números fraccionarios, se usa 0 como marcador de lugar del
primer dígito a la izquierda del separador decimal. El carácter real
usado como marcador de lugar de decimal en el formato que
resulta depende del formato de número reconocido por el
sistema.
% Marcador de lugar de porcentaje.
La expresión se multiplica por 100. El carácter de porcentaje (%)
se inserta en la posición donde aparece en la cadena de formato.
. Separador de millar.
En algunas localidades, se usa una coma como separador de
millar. El separador de millar separa los millares de las centenas
en un número que tiene cuatro o más lugares a la izquierda del
separador decimal. Se especifica el uso estándar del separador
de millar si el formato contiene un separador de millar rodeado
por los marcadores de lugar de dígitos (O ó #). Dos separadores
de millar adyacentes o un separador de millar inmediatamente a
la izquierda del separador decimal (aunque no se especifique un
decimal) significa "escale el número dividiéndolo por 1000;
redondeándolo si es necesario". Con esta técnica se pueden
poner a escala números grandes. Por ejemplo, se puede usar la
cadena de formato "##0." para representar 100 millones como
100.
Números menores que un millón se presentan como 0. Dos
separadores de millar adyacentes en cualquier posición diferente
a la inmediatamente a la izquierda del separador decimal se
consideran simplemente como especificadores de que se está
usando un separador de millar. El carácter real usado como
separador de millar en el formato que resulta depende del
formato de número reconocido por el sistema.
: Separador de hora.
En algunas localidades se pueden usar otros caracteres para
representar el separador de hora. El separador de hora separa
horas, minutos y segundos cuando los valores de hora tienen
formato. El carácter real usado como separador de hora en el
formato que resulta viene determinado por las configuraciones

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 113 -
del sistema.
- Separador de fecha.
En algunas localidades se pueden usar otros caracteres para
representar el separador de fecha. El separado de fecha separa
el día, el mes y el año cuando los valores de fecha tienen
formato. El carácter real usado como separador de fecha en el
formato que resulta viene determinado por las configuraciones
del sistema.
E- E+ e- e+ Formato de notación científica.
Si la expresión de formato contiene al menos un marcador de
lugar de dígito (O ó #) a la derecha de E-, E+, e- o e+, el número
se presenta en formato científico y se inserta E o e entre el
número y su exponente. El número de marcadores de lugar de
dígito a la Derecha determina el número de dígitos en el
exponente. Use E- o e- para colocar un signo menos junto a
exponentes negativos y un signo más, junto a exponentes
positivos.
- + ( ) espacio Presenta un carácter literal.
Para presentar un carácter diferente a los que están
enumerados, se precede de una barra inversa ( \ ) o se pone
entre comillas (" ").
Presenta el carácter siguiente en la cadena de formato.
Muchos caracteres en la expresión de formato tienen un
significado especial y no se pueden presentar como caracteres
literales, a menos que vayan precedidos de una barra inversa. La
barra inversa no se presenta. Usar la barra inversa es lo mismo
que poner entre comillas el carácter siguiente. Para presentar
una barra inversa, use dos barras inversas (\\).
Ejemplos de caracteres que no se pueden presentar como
caracteres literales son los caracteres de formato de fecha y hora
(a, c, d, h, m, n, p, q, s, t, w, /:), los caracteres de formato
numérico (#, O, %, E, e, coma y punto) y los caracteres de
formato de cadena (@, &, <, >, !).
"ABC" Presenta la cadena entre comillas.
Para incluir una cadena con formato desde el código, se debe
usar Car(34) para encerrar el texto (34 es el código de carácter
para las comillas).

FORMATO DE FECHA DEFINIDOS POR USUARIO

: Separador de hora. En algunas localidades se pueden usar otros


caracteres para representar el separador de hora. El separador
de hora separa las horas, los minutos y los segundos cuando se
da formato a los valores de hora. El carácter real que se usa
como separador de hora en el formato que resulta viene

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 114 -
determinado por las configuraciones del sistema.
- Separador de fecha. En algunas localidades se pueden usar
otros caracteres para representar el separador de fecha. El
separador de fecha separa el día, el mes y el año cuando se da
formato a los valores de fecha. El carácter real que se usa como
separador de fecha en el formato que resulta viene determinado
por las configuraciones del sistema.
1 Presenta la fecha como ddddd y la hora como ttttt, en este orden.
Sólo se presenta información de fecha si no hay parte
fraccionaria en el número de serie de la fecha; sólo se presenta
información de hora si no hay una porción de números enteros.
d Presenta el día como un número sin un cero a la izquierda (1-31).
dd Presenta el día como un número con un cero a la izquierda (01-
31).
ddd Presenta el día como abreviatura (Lun-Dom).
dddd Presenta el día como nombre completo (Lunes-Domingo).
ddddd Presenta una fecha como fecha completa (incluyendo el día, el
mes y el año), con el formato de acuerdo a la configuración de
formato de fecha abreviada del sistema. En Microsoft Windows,
el valor predeterminado de formato de fecha abreviada es
d/m/aa.
dddddd Presenta un número de serie de fecha como fecha completa
(incluyendo el día, el mes y el año), con el formato de acuerdo a
la configuración de formato de fecha larga reconocido por el
sistema. En Microsoft Windows, el valor predeterminado de
formato de fecha larga es dd de mmmm de aaaa.
e Presenta el día de la semana como un número (1 para lunes
hasta 7 para domingo).
ee Presenta la semana del año como un número (1-53).
m Presenta el mes como un número sin un cero a la izquierda (1-
12). Si m sigue inmediatamente a h o hh, se presenta el minuto
en lugar del mes.
mm Presenta el mes como un número con un cero a la izquierda (01-
12). Si m sigue inmediatamente a h o hh, se presenta el minuto
en lugar del mes.
mmm Presenta el mes como abreviatura (Ene-Dic).
mmmm Presenta el mes como nombre de mes completo (enero-
diciembre).
t Presenta el trimestre del año como número (1-4).
a Presenta el día del año como número (1-366).
aa Presenta el año como número de dos dígitos (00-99).
aaaa Presenta el año como número de cuatro dígitos (100-9999).
h Presenta la hora como un número sin ceros a la izquierda (0-23).
hh Presenta la hora como un número con ceros a la izquierda (00-
23).
n Presenta el minuto como un número sin ceros a la izquierda (0-
59).
Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 115 -
nn Presenta el minuto como un número con ceros a la izquierda (00-
59).

BIBLIOGRAFÍA BÁSICA Y COMPLEMENTARIA

[01] Podlin Sharon. Aprendiendo Programación con Microsoft Excel 2000. Pearson
Educación. México, 2001.

[02] Pallerola Comamala Joan. Las Macros en Microsoft Excel 2010. Alfaomega Ra-ma.
México, 2012.

[03] Barreras Alconchel Miguel. Matemáticas con Microsoft Excel. Alfaomega Ra-ma.
México, 2010.

[04] Ceballos Sierra Fco. Javier. Visual Basic 6 Curso de Programación. Alfaomega Ra-
ma. México, 1999.

[05] Michele AMELOT. VBA Excel 2007 Programar en Excel: Macros y Lenguaje VBA.
Ediciones Eni. España, 2007.

[06] Frédéric LE GUEN. Macros y lenguaje VBA. Aprender a programar con Excel.
Ediciones Eni. España, 2012.

Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 116 -