Professional Documents
Culture Documents
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.
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
ANEXOS
MANUAL DE BOLSILLO (Archivo de Word)
RELACION DE FUNCIONES Y SENTENCIAS (Archivo de Excel)
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:
2. Visual Basic cuenta con su propio entorno de desarrollo. VBA requiere de una
aplicación para su ejecución.
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
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.
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.
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.
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.
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.
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.
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:
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:
3. Seleccione la celda A1
No se está grabando ninguna macro en este momento. Haga clic para empezar a grabar una nueva macro
Se está grabando una macro en este momento. Haga clic para detener grabación
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.
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:
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.
Sub Mi_primer_Macro()
‘ Mi_primer_Macro Macro
‘ Macro grabada el 01 de Abril de 2013
End Sub
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.
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:
Estas limitaciones son solo algunas de las razones por las que necesitará crear su propio
código de VBA.
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.
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.
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.
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
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.
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:
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.
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:
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:
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)
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?
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.
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.
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.
Por ejemplo, si quisiera crear una matriz que pudiera contener 15 nombres de
estudiantes, debería emplear la siguiente instrucción.
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:
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:
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:
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)
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:
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.
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:
Modulo 1 Modulo 2
Entorno de la aplicación
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.
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.
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.
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
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.
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.
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.
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.
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:
ThisWorkbook.Name se utiliza en este código para recuperar el nombre del libro actual.
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.
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.
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.
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.
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:
Ahora sabe cómo emplear una variable para desplegar el valor devuelto por un cuadro de
diálogo.
Función InputBox.
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.
Método InputBox.
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:
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.
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
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.
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.
If condición Then
[instrucciones]
[Elself condición-n Then
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:
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.
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.
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:
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
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"
Mire el código del siguiente listado. Este listado contiene una instrucción If que prueba un
valor y determina un grado.
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.
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:
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.
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.
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
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.
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... 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:
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
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
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.
.
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:
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:
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:
3. Ejecute el procedimiento.
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.
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: “)
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.
Tipos de controles.
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.
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
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).
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 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.
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:
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
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.
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:
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.
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.
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.
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.
.bmp
.cur.
.gif
.ico
.jpg.
.wmf
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.
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.
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 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.
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:
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)
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.
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.
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.
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.
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”)
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.
Objeto.nombredelapropiedad = valor
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
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:
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:
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.
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.
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.
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.
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.
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.
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.
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
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:
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
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 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?
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.
El objeto Application tiene varias propiedades y métodos que le serán muy útiles. Algunas
de sus propiedades incluyen lo siguiente:
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:
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
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
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 “
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.
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.
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.
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.
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
¿Se dio cuenta de algunas ligeras diferencias en la información desplegada? Para estar
seguro se revisará lo que hace el procedimiento.
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)
Lo siguiente que hizo fue desplegar el valor de la celda y luego la fórmula de la celda:
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.
El objeto Range también tiene un gran número de métodos, incluyendo los siguientes:
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
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
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.
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
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
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
Sub CopiarYPegar()
Selection Copy
Range(”F3”).Select
ActiveSheet.Paste
Application.CutCopyMode = False
EndSub
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.
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.
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.
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.
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.
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:
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.
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.
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.
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.
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.
También necesita alinear sus botones de opción en el lado izquierdo. Use los siguientes
pasos para realizar esto:
Si otros controles del marco Forma de pago deben ser alineados, realice la alineación en
este momento.
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.
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.
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.
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:
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.
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
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 función Now se utiliza para devolver la fecha actual y la función Format aplica el
formato dd/mm/yy.
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ú.
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
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
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ú.
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:
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:
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.
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.
Instituto Tecnológico de Tuxtla Gutiérrez. M.C. Jorge A. Mijangos López Página - 105 -
Validación de datos.
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:
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
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.
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.
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
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
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
FORMATOS NUMÉRICOS
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
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).
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).
[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 -