Está en la página 1de 241

MACROS CON

MICROSOFT EXCEL
Y VBA

2016

Macros en Excel
Contenido

Qu es una Macro?
Que es el Cdigo Fuente
Observando los cdigos de una macro de Excel
Objetos, propiedades y mtodos
Conjuntos
Insertar un nuevo mdulo
La funcin InputBox
Hacer referencia a rangos
Estructuras de Control
Estructuras with...end with
Estructuras for each...next
Estructuras for each...next
Estructuras if...then
Estructuras if...then
Estructuras select case
Bucles for...next
Bucles do...while
Bucles do...until
Controles
Propiedades comunes a todos los controles
Eventos comunes a todos los controles
Cdigos ms comunes
Creando formularios
Trabajando con Variables y Tipos de Datos
Tipo de dato Bytes usados Rango de valores
mbito de las variables
Variables locales
Variables a nivel de mdulo
Variables Public
Variables Static
Declarar Constantes
Trabajar con cadenas
Operadores
Trabajando con frmulas
Busando informacin con un textbox
Trabajando con el asistente
Elaborando una consulta
Programacin de los Controles
Trabajar con Listbox y Combobox

Ejecutando las macros


Grficos en Excel
Diferentes tipos de grficos
Archivos Secuenciales de Texto
Ejemplo Final

Qu es una Macro?
Una Macro es una serie de pasos que se almacenan y se pueden activar con alguna
tecla de control y una letra. Por ejemplo, si todos los das empleo frecuentemente en
mis celdas los mismos pasos: Tamao de Fuente (Tamao de la letra), Negrita, Fuente
(Tipo de letra) y Color de Fuente (Color de Letra), para no estar repitiendo estos pasos
los puedo almacenar en una macro y cuando ejecute la macro los pasos antes
mencionados se ejecutaran las veces que yo lo desee. A continuacin se muestra
como grabar una macro y ejecutarla:
Selecciona la celda A1 y escribe tu Nombre. Por ejemplo, Maria y presiona Enter
Regresa a la celda A1, porque al dar Enter cambia de celda. Da clic en el Men Ver,
seguido por la Opcin Barra de Herramientas y elige Visual Basic. Se activara la
barra de herramientas Visual Basic.

Da clic en el botn Guardar Macro. Windows activa el cuadro de dialogo Grabar


Macro, el cual permitir darle el nombre a la macro y cual ser el mtodo abreviado
para ejecutarla. El mtodo Abreviado se refiere con que letra se va a activar la macro,
obviamente se activara con la tecla Control y la letra que usted quiera, de preferencia
en minscula, porque si activa las maysculas la macro se activara presionando la
tecla Shift + Control + la letra que usted indico.

Donde dice Nombre de la macro ya aparece el nombre que llevara la macro en este
caso Macro1. si desea cambiar el nombre escriba uno nuevo. En la opcin Mtodo
Abreviado aparece que se activara con la tecla Control(CTRL) + la letra que usted

indica, de clic en el cuadro y ponga una letra, por ejemplo ponga la letra a (en
minsculas). La macro se activara cuando este lista con la tecla Control + a De clic
en el Botn Aceptar. Windows empezara a grabar todos los pasos en la Macro1.y el
botn utilizado para grabar cambiara de forma (ahora ser un cuadro Azul), se llamara
Detener grabacin. Lo utilizaremos cuando terminemos de indicarle los pasos para
detener la grabacin. Cambie el Tipo de Letra en el Botn Fuente de la barra de
herramientas Formato Cambie el tamao de la letra en el Botn Tamao de Fuente
de la barra de herramientas Formato Presione el Botn Negrita de la barra de
herramientas Formato Cambie el color de la letra en el Botn Color de Fuente de la
barra de herramientas Formato. Recuerde que todos estos pasos estn siendo
almacenados en la macro que estamos grabando y tambin recuerde que estos pasos
se estn efectuando en la celda A1. Presione el Botn Detener Grabacin de la barra
de Herramientas de Visual Basic. El que tiene el cuadro azul presionado.

Excel guardo los pasos en la Macro1 que se activara presionado la tecla Control + a
Escribe otro nombre en la celda C1 y presiona Enter, despus regresa a la celda C1.
Presiona la tecla Control + a. Windows efectuara todos los pasos grabados sobre la
celda C1, esto quiere decir que el nombre que esta en C1 tendr las caractersticas
del que esta en A1. Tipo de letra, tamao, negrita y el color que indicaste al grabar la
macro.
Nota: Cada vez que presiones Control + a Excel ejecutara la macro y efectuara los
pasos en la celda que te encuentres. Es posible grabar todas las macros que desees.
Se sugiere crear varias macros utilizando el grabador de macros (de la barra de
herramientas Visual Basic, a los efectos de familiarizarse con estos pasos)

Que es el Cdigo Fuente


El cdigo fuentes esta compuesto por el conjunto de instrucciones que Excel genera
automticamente al grabar una macro. Tambien es posible escribir dicho cdigo sin la
ayuda del grabador de macros, esto exige un conocimiento del lenguaje Visual Basic
For Applications.
Visual Basic For Applications (VBA) es el lenguaje de macros de Microsoft Visual
Basic, que se utiliza para programar aplicaciones Windows y que se incluye en varias

aplicaciones Microsoft. VBA permite a usuarios y programadores ampliar la


funcionalidad de programas de Microsoft Office. VBA es un subconjunto casi completo
de Visual Basic . Viene integrado en aplicaciones Microsoft Office, como Word, Excel,
Access, PowerPoint y Visio. Prcticamente cualquier cosa que se pueda programar
en Visual Basic se puede hacer tambien dentro de un documento de Office, con la
sola limitacin que el producto final no se puede distribuir de manera separada del
documento que lo contiene, hoja o base de datos en que fue creado, es decir , se
conviente en una macro.
Su utilidad principal es automatizar tareas cotidianas, como fue explicado en el
ejemplo inicial
El lenguaje Visual Basic para Aplicaciones
Como seguramente sabemos, Excel es una potente aplicacin incluida en el
paquete Microsoft Office que nos proporciona herramientas y funciones destinadas
a analizar, compartir y administrar datos. Adems, Excel nos ofrece amplias
posibilidades para automatizar tareas que realizamos de manera cotidiana, y para
crear aplicaciones basadas en el procesamiento y el anlisis de datos numricos por
medio de la creacin de macros.
Visual Basic para Aplicaciones (Visual Basic for Aplications), tambin conocido por
su abreviatura VBA, es un lenguaje de programacin comn a todas las
aplicaciones del paquete Microsoft

En esta imagen vemos como, en Excel 5.0, el mdulo de VBA se inserta a la


derecha de la ltima hoja del libro.

En esta imagen, podemos ver un conjunto de instrucciones


escritas en VBA.

Observando los cdigos de una macro de Excel


En primer lugar Crearemos una macro y luego observaremos el cdigo generado:
Primeramente trasldese a la celda A5 antes de empezar la grabacin de la Macro
Presione el Botn Grabar Macro de la barra de Herramientas Visual Basic. Excel
muestra el cuadro de Dialogo Grabar Macro en la opcin Mtodo Abreviado escriba
la letra r , por lo tanto la macro se llamara con Control + r Presione el botn Aceptar.
Excel inicia la grabacin del la Macro1 Trasldese a la celda A1 y escriba Maria,
despus presione Enter para aceptar el valor en la celda Pare la grabacin de la macro
presionando el botn Detener Grabacin de la barra de herramientas Visual Basic.
Excel a grabado los pasos y a generado un cdigo, Observmoslos: Presione la tecla
Alt + la tecla de funcin F11(Alt + F11). Excel nos traslada al Editor de Visual Basic.
Si este editor no se activa revise la instalacin de Microsoft Excel. Tambin puede
acceder desde el Men Herramientas, Macro y Editor de Visual Basic. Active los
siguientes cuadros o ventanas:
De clic en el Men Ver y elija la opcin Explorador de Proyectos De clic en el Men
ver y elija la opcin Ventana Propiedades

Estas dos opciones deben de estar siempre activadas ya que de ah depende todo lo
que vallamos a hacer.

Del cuadro Proyecto haga un doble clic en Mdulos o simplemente presione el signo
de + que aparece en la opcin Mdulos. Se activara debajo de Mdulos la Opcin
Modulo1 De doble clic en Modulo1. Se mostrara en el Editor de Visual Basic el cdigo
de la macro que grabamos de la siguiente forma:
Sub Macro1()
'
' Macro1 Macro
' Macro grabada por ALUMNO
'
' Acceso directo: CTRL+r
'
Range("A1").Select
ActiveCell.FormulaR1C1 = "Maria"
Range("A2").Select
End Sub
Analizaremos el significado de estas sentencias
Sub y End Sub indican el inicio y el final del procedimiento de la Macro1 Todo lo que
aparece con un apostrofe indica que no se tomara en cuenta que es solo texto o
comentarios y ese texto debe de aparecer en un color, ya sea el color verde.
Range("A1").Select Indica que lo primero que hicimos al grabar la macro fue
trasladarnos a la celda A1. La orden Range nos permite trasladarnos a una celda
ActiveCell.FormulaR1C1 = "Maria" Esto indica que se escribir en la celda en que
se encuentra el valor de texto Maria. Todo lo que aparece entre comillas siempre ser

un valor de texto. La orden ActiveCell.FormulaR1C1 nos permite escribir un valor en


la celda activa. Range("A2").Select Otra vez indicamos que se traslade a la celda A2.
Esto se debe a que cuando escribimos el nombre de Maria en A1 presionamos Enter
y al dar Enter bajo a la celda A2.
Para comprender mejor alteraremos el cdigo dentro del editor de Visual Basic.
Observe que hemos quitado los comentarios (las lneas que comenzaban con
apostrofe, esto no debe alterar el codigo, ya que los comentarios no se ejecutan)
Sub Macro1()
Range("A1").Select
ActiveCell.FormulaR1C1 = "Alumno"
Range("B1").Select
ActiveCell.FormulaR1C1 = "Direccion"
Range("C1").Select
ActiveCell.FormulaR1C1 = "Telefono"
Range("D1").Select
ActiveCell.FormulaR1C1 = "Neuquen"
Range("E1").Select
ActiveCell.FormulaR1C1 = "Patagonia"
End Sub
Cuando termine de alterar el cdigo regrese a Excel y ejecute la macro con Control
+ r har lo siguiente:
En A1 escribir Alumno
En B1 escribir Direccion
En C1 escribir Telefono
En D1 escribir Neuquen
En E1 escribir Patagonia
As que salgamos del editor dando clic en el Men Archivo y eligiendo la
opcin Cerrar y volver a Microsoft Excel. Si no desea salir por completo de clic en
el botn Microsoft Excel que se encuentra activado en la barra de tareas y cuando
dese volver al editor de clic en el botn Microsoft Visual Basic que se encuentra
en la barra de Tareas.
Ahora ya que salimos de Visual Basic y estamos en Excel de Nuevo ejecutemos la
macro presionando Control + r y veamos los resultados de nuestra modificacin.

Objetos, propiedades y mtodos


A la hora de trabajar con macros en Excel, deben tenerse claros ciertos conceptos de
lo que se llama programacin orientada a objetos (OOP). No nos extenderemos
demasiado sobre la OOP, pero si definiremos a continuacin los conceptos de Objeto,
Propiedades y Mtodos.
Objeto
Cuando en el mundo real nos referimos a objeto significa que hablamos de algo ms
o menos abstracto que puede ser cualquier cosa. Si decidimos concretar un poco ms
podemos referirnos a objetos coche, objetos silla, objetos casa, etc. En OOP, la
generalizacin (o definicin) de un objeto se llama Clase, as la clase coche seria
como la representante de todos los coches del mundo, mientras que un objeto coche
seria un coche en concreto. De momento, no definiremos ni estudiaremos las clases
sino que nos concentraremos en los objetos, tenga en cuenta pero que cualquier
objeto est definido por una clase.
Cuando decimos que la clase coche representa a todos los coches del mundo significa
que define como es un coche, cualquier coche. Dicho de otra forma y para
aproximarnos a la definicin informtica, la clase coche define algo que tiene cuatro
ruedas, un motor, un chasis, entonces, cualquier objeto real de cuatro ruedas, un
motor, un chasis, es un objeto de la clase coche.
Propiedades
Cualquier objeto tiene caractersticas o propiedades como por ejemplo el color, la
forma, peso, medidas, etc. Estas propiedades se definen en la clase y luego se
particularizan en cada objeto. As, en la clase coche se podran definir las propiedades
Color, Ancho y Largo , luego al definir un objeto concreto como coche ya se
particularizaran estas propiedades a, por ejemplo, Color = Rojo, Ancho = 2 metros y
Largo = 3,5 metros.
Mtodos
La mayora de objetos tienen comportamientos o realizan acciones, por ejemplo, una
accin evidente de un objeto coche es el de moverse o lo que es lo mismo, trasladarse
de un punto inicial a un punto final. Cualquier proceso que implica una accin o pauta
de comportamiento por parte de un objeto se define en su clase para que luego pueda
manifestarse en cualquiera de sus objetos. As, en la clase coche se definiran en el
mtodo mover todos los procesos necesarios para llevarlo a cabo (los procesos para
desplazar de un punto inicial a un punto final), luego cada objeto de la clase coche
simplemente tendra que invocar este mtodo para trasladarse de un punto inicial a
un punto final, cualesquiera que fueran esos puntos.

Repasemos a continuacin todos estos conceptos pero ahora desde el punto de vista
de algunos de los objetos que nos encontraremos en Excel como WorkSheet (Objeto
hoja de clculo) o Range (Objeto casilla o rango de casillas).
Un objeto Range est definido por una clase donde se definen sus propiedades,
recordemos que una propiedad es una caracterstica, modificable o no, de un objeto.
Entre las propiedades de un objeto Range estn Value , que contiene el valor de la
casilla , Column y Row que contienen respectivamente la fila y la columna de la
casilla, Font que contiene la fuente de los caracteres que muestra la casilla, etc.
Range, como objeto, tambin tiene mtodos, recordemos que los mtodos sirven
llevar a cabo una accin sobre un objeto. Por ejemplo el mtodo Activate, hace activa
una celda determinada, Clear, borra el contenido de una celda o rango de celdas,
Copy, copia el contenido de la celda o rango de celdas en el portapapeles,...
Conjuntos
Un conjunto es una coleccin de objetos del mismo tipo, para los que conozcan algn
lenguaje de programacin es un array de objetos. Por ejemplo, dentro de un libro de
trabajo puede existir ms de una hoja (WorkSheet), todas las hojas de un libro de
trabajo forman un conjunto, el conjunto WorkSheets.
Cada elemento individual de un conjunto se referencia por un ndice, de esta forma, la
primera, segunda y tercera hoja de un libro de trabajo, se referenciarn por
WorkSheets(1), WorkSheets(2) y WorkSheets(3).
Objetos de Objetos
Es muy habitual que una propiedad de un objeto sea otro objeto. Siguiendo con el
coche, una de las propiedades del coche es el motor, y el motor es un objeto con
propiedades como cubicaje, caballos, nmero de vlvulas, etc. y mtodos, como
aumentar_revoluciones, coger_combustible, mover_pistones, etc.
En Excel, el objeto WorkSheets tiene la propiedad Range que es un objeto, Range
tiene la propiedad Font que es tambin un objeto y Font tiene la propiedad Bold
(negrita). Tenga esto muy presente ya que utilizaremos frecuentemente Propiedades
de un objeto que sern tambin Objetos. Dicho de otra forma, hay propiedades que
devuelven objetos, por ejemplo, la propiedad Range de un objeto WorkSheet
devuelve un objeto de tipo Range.
Programacin Orientada a Objetos o Programacin Basada en Objetos

Hay una sutil diferencia entre las definiciones del ttulo. Programacin orientada a
Objetos, significa que el programador trabaja con objetos fabricados por l mismo, es
decir, el programador es quien implementa las clases para luego crear objetos a partir
de ellas. Lo que haremos nosotros, por el momento, ser utilizar objetos ya definidos
por la aplicacin Excel (WorkSheets, Range,...) sin implementar ninguno de nuevo,
por lo que en nuestro caso es ms correcto hablar de programacin basada en objetos.
Observe que esta es una de las grandes ventajas de la OOP, utilizar objetos definidos
por alguien sin tener que conocer nada sobre su implementacin, slo debemos
conocer sus propiedades y mtodos y utilizarlos de forma correcta.
Bueno, despus de esta extensa pero necesaria introduccin pasemos ya a hacer
alguna cosa en Excel. No es necesario que se aprenda lo anterior al pi de la letra y
tampoco es necesario que lo comprenda al cien por cien, slo tngalo presente para
las definiciones que vienen a continuacin y ver como va asimilando los conceptos
de Objeto, propiedades, mtodos, etc.

Jerarqua de objetos
El modelo de objetos de Excel est compuesto por ms de 192 objetos diferentes,
algunos de ellos estn ocultos, y otros se usan muy poco o se dejaron de utilizar.
Los objetos de Excel pueden contener otros objetos, y, a su vez, estos pueden
contener otros objetos. Esto significa que tenemos un cierto orden o jerarqua..
Ejemplo de modelo de objetos
Aplicacin
(Application
)
Libro
(Workbook
)
Hoja
(Worksheet
)
Celda
(Range)

En este diagrama, vemos las colecciones de objetos ms


relevantes y su relacin jerrquica.

Referencia a objetos
Hacemos referencia a los objetos de Excel segn la posicin jerrquica que estos
ocupan en el modelo de objetos y empleamos el punto para separar el objeto
contenedor de uno o varios objetos. Es decir, el punto nos servir para navegar por
la jerarqua de objetos. Por ejemplo, para hacer referencia a un libro de Excel
llamado Planilla.xlsx, escribimos la siguiente sentencia:
Application.Workbooks(planilla.xlsm)

Si, por ejemplo, quisiramos hacer referencia a la celda A1 de la hoja Datos del libro
Planilla.xlsx, debemos indicar toda la ruta de la jerarqua del modelo de objetos:
Application.Workbooks(planilla.xlsm).Worksheets(datos).Range(A1).
Select

Para simplificar este procedimiento, podemos omitir la referencia Application


en la mayora de los casos. Esto es posible debido a que es el primer objeto
de la estructura jerrquica y es el que contiene al resto de los objetos. Por lo
tanto, tambin podemos hacer referencia a la celda A1, de una manera ms
sencilla, por medio del cdigo que presentamos a continuacin:
Workbooks(planilla.xlsm).Worksheets(datos).Range(A1).Select

Adems, podemos omitir la referencia especfica a un objeto si ese objeto se


encuentra activo. Es decir, si solo tenemos un libro abierto, podemos omitir la
referencia Workbooks. Siguiendo el ejemplo anterior, si el nico libro abierto es
Planilla.xlsx, podemos hacer referencia a la celda A1 por medio del siguiente
cdigo:

Worksheets(datos).Range(A1).Select

Y algo ms simple an, si sabemos que la hoja activa es Datos, tambin es


posible omitir el objeto Worksheets:
Range(A1).Select

El entorno de VBE
A continuacin, conoceremos en detalle algunas de las herramientas principales que
integran la ventana del Editor de Visual Basic.

La barra de men
A travs de la barra de men accedemos a la mayora de las funciones de VBE para
desarrollar, comprobar y guardar las macros. En ella, encontraremos las siguientes
opciones:
Archivo: agrupa los comandos que permiten administrar los archivos
con cdigo VBA, como PARA ACCEDER AL
Guardar Libro, Imprimir..., Importar archivo... o EDITOR DE VISUAL
Exportar archivo....

Edicin: contiene los comandos que nos BASIC, PODEMOS ayudarn a


trabajar con la ventana donde se PRESIONAR LAS incluye el cdigo VBA,
como los clsicos Copiar,
Cortar, Pegar, Buscar y Reemplazar. Tambin TECLAS ALT + F11 incluye un
conjunto de comandos que nos proporcionan informacin sobre el objeto con el
cual estamos trabajando (IntelliSense) en la ventana de Cdigo:
- Lista de propiedades y mtodos: muestra un men con las
propiedades y los mtodos de un objeto despus de que
escribimos el punto.
- Lista de constantes: presenta un men emergente con

todas las constantes disponibles para una propiedad o


mtodo.
- Informacin rpida: para acceder a la informacin rpida de

un elemento. Cuando escribimos una palabra reservada,


seguida de un espacio o de un parntesis, nos muestra
informacin sobre la sintaxis de ese elemento y resalta el
parmetro actual.
- Informacin de parmetros: brinda informacin sobre los

parmetros que se pueden utilizar en una funcin.


- Palabra completa: usamos esta herramienta para

completar una palabra clave que hemos comenzado a


escribir. Es decir, si la cantidad de letras que hemos escrito
son suficientes para definir una palabra clave nica,
IntelliSence completa el resto de la palabra.

- Marcadores: muestra un men que nos permite

desplazarnos a travs de los marcadores.

Ver: nos permite mostrar u ocultar caractersticas del entorno del Editor de
VBA. Aqu encontramos las opciones para activar y desactivar las
diferentes ventanas del editor como, por ejemplo: Cdigo, Inmediato,
Locales, Inspeccin, Propiedades, Explorador de Proyectos. Ms adelante,
explicaremos con ms detalle cada una de ellas. Con la opcin Barra de
herramientas, podremos seleccionar las barras de herramientas que
queremos mantener visibles.

Insertar: desde aqu podemos insertar procedimientos, formularios,


mdulos y mdulos de clase.

Formato: este men tiene varias opciones que nos permiten cambiar el
tamao y el aspecto de un grupo de controles de un formulario: botones,
etiquetas, cuadro de texto, entre otros. Por ejemplo, el submen Igualar
tamao nos permite hacer que un grupo de controles tengan el mismo
ancho, alto o ambos.

Depuracin: despus de escribir una macro necesitaremos probarla para


ver si tiene errores. Este men rene las herramientas que nos permitirn
ejecutar el cdigo y alertarnos de algn error, como, por ejemplo, Paso a
paso por instrucciones, Paso a paso por procedimientos.

Ejecutar: contiene las herramientas para ejecutar, interrumpir y restablecer


un procedimiento mientras estamos en modo de desarrollo, es decir, desde
la ventana de cdigo.

Herramientas: desde este men, podremos modificar las propiedades de


los proyectos VBA, como as tambin las opciones generales del VBE, por
ejemplo, controlar la apariencia del cdigo (fuente utilizada, color, tamao),
controlar qu ventanas son acoplables, entre otras. Ms adelante,
describiremos estas herramientas.

Complementos: permite el acceso al Administrador de complementos. Los


complementos de Excel son archivos que tienen la extensin .XLA o .XLAM
y guardan informacin de cdigo creado en Visual Basic para Aplicaciones,
como funciones y los

La depuracin de un programa es el proceso de correccin o la modificacin del


cdigo para comprobar su funcionamiento. VBA incluye una amplia variedad de
herramientas que nos van a ayudar en la tarea de la bsqueda de errores en el
cdigo, que veremos en los prximos captulos.
procedimientos, que utilizamos de manera frecuente. Los
complementos se pueden usar en cualquier libro.
Ventana: contiene los comandos que nos permiten organizar las ventanas
del Editor Visual Basic.

Ayuda: desde esta opcin accedemos a la ayuda del Visual Basic.

La barra de herramientas Estndar


De manera predeterminada, debajo de la Barra de men, se encuentra la barra de
herramientas Estndar, que al igual que cualquier otra barra de herramientas
contiene los botones con los comandos comnmente ms usados. En la siguiente
Gua visual, explicaremos cada uno de sus elementos.

01

02

18

03

17

04

16

05

15

06

14

07

13

08

12

09

11

10

Ver Microsoft Excel: permite ir de la ventana del Editor de Visual Basic a la hoja de trabajo
de Microsoft Excel.
Guardar: guarda el libro, incluidos el proyecto y todos sus componentes.

Copiar: copia el texto u objeto seleccionado y lo coloca en el Portapapeles.

Buscar: abre el cuadro de dilogoBuscar , para rastrear un texto especfico.

Rehacer: a la inversa del botn Deshacer,este botn rehace las ltimas acciones de edicin.

06
07
08
09

Interrumpir: detiene la ejecucin de un procedimiento y cambia al modo de interrupcin.


Modo de Diseo: permite activar o desactivar el modo Diseo.

Ventana de Propiedades: abre la ventana Propiedades donde visualizaremos las diferentes


propiedades de cada uno de los objetos de VBA que seleccionemos.

Cuadro de herramientas: este botn est disponible cuando un UserForm est activo.
Permite mostrar u ocultar el cuadro de herramientas que contiene todos los controles y
objetos que se pueden insertar en un formulario.

10
11
12
13
14

15
16
17

Ayuda de Microsoft Visual Basic para Aplicaciones: brinda acceso a la ayuda de Microsoft
Visual Basic.
Examinador de objetos: permite abrir la ventana del Examinador de objetos donde
visualizaremos una lista con los objetos, sus propiedades, mtodos y constantes.
Explorador de proyectos: abre una ventana que muestra los proyectos abiertos (archivos
de Excel) y sus objetos (hojas de clculo, formularios, mdulos y mdulos de clase).
Restablecer: restablece el proyecto interrumpido.

Ejecutar macro: permite ejecutar un procedimiento o un UserForm dependiendo de


dnde se encuentre el cursor. Si las ventanas de Cdigo o UserForm no estn activas,
entonces ejecutar una macro.
Deshacer: deshace la ltima accin de edicin.

Pegar: inserta el contenido del Portapapeles en el lugar donde se encuentra el cursor.

Cortar: permite quitar el texto u objeto seleccionado y colocarlo en el Portapapeles.

Insertar un nuevo mdulo


Un mdulo sirve para agrupar procedimientos y funciones. El procedimiento y la
funcin son entidades de programacin que sirven para agrupar instrucciones de
cdigo que realizan una accin concreta.
Para insertar un mdulo active opcin del men Insertar/ Mdulo. Se activar una
nueva ventana, si aparece demasiado pequea, maximcela.
Ya hemos dicho que un procedimiento es un bloque de instrucciones de cdigo que
sirven para llevar a cabo alguna tarea especfica. Un procedimiento empieza siempre
con la instruccin
Sub Nombre_Procedimiento

Y termina con la instruccin


End Sub.
A continuacin crearemos un procedimiento para poner el texto "Hola" en la casilla A1.
o

Ejemplo 1

Sub Primero()
Range("A1").Value = "Hola"
End Sub
Observe el cdigo.
Range("A1").Value="Hola"
En esta lnea estamos indicando que trabajamos con un objeto Range. Para indicarle
que nos referimos a la casilla A1, encerramos entre parntesis esta referencia (ms
adelante ver otra forma de referirnos a las casillas). De este objeto, indicamos que
queremos establecer un nuevo valor para la propiedad Value, observe que para
separar el objeto de su propiedad utilizamos la notacin punto.
Recuerde que el conjunto Range es un objeto que pende del objeto WorkSheets, as
por ejemplo el siguiente cdigo hara lo mismo que el anterior.
WorkSheets(1).Range("A1").Value = "Hola"
Bueno, de hecho no hace lo mismo, en la primera opcin, el texto "Hola" se pone
dentro de la casilla A1 de la hoja activa, mientras que en el segundo es en la casilla
A1 de primera hoja ( del conjunto de hojas). La segunda notacin es ms larga, pero
tambin ms recomendable ya que se especifican todos los objetos. En muchas
ocasiones se pueden omitir algunos objetos precedentes, no le aconsejamos hacerlo,
sus programas perdern claridad y concisin.
Si desea hacer referencia a la hoja activa puede utilizar ActiveSheet, as, el primer
ejemplo lo dejaremos de la manera siguiente.
Sub Primero()

ActiveSheet.Range("A1").Value = "Hola"
End Sub
Si desea poner "Hola" (o cualquier valor) en la casilla activa, puede utilizar la propiedad
(objeto) Activecell de WorkSheets. As para poner "Hola" en la casilla activa de la
hoja activa seria,
Sub Primero()
ActiveSheet.ActiveCell.Value = "Hola"
End Sub
Para terminar con este primer ejemplo. WorkSheets estn dentro del Objeto
WorkBooks (libros de trabajo) y WorkBooks estn dentro de Application.
Application es el objeto superior, es el que representa la aplicacin Excel. As, el
primer ejemplo, siguiendo toda la jerarqua de objetos quedara de la forma siguiente.
Sub Primero()
Application.WorkBooks(1).WorkSheets(1).Range("A1").Value = "Hola"
End Sub
Insistiendo con la nomenclatura, Application casi nunca es necesario especificarlo,
piense que todos los objetos dependen de este, WorkBooks ser necesario
implementarlo si en las macros se trabaja con diferentes libros de trabajo (diferentes
archivos), a partir de WorkSheets, es aconsejable incluirlo en el cdigo, sobre todo si
se quiere trabajar con diferentes hojas, ver, sin embargo, que en muchas ocasiones
no se aplica.
Los procedimientos Function
Como sabemos, Microsoft Excel proporciona un gran conjunto de funciones
predefinidas o internas, tales como Suma, Promedio, Max, Min, entre otras.
Pero, en ocasiones, necesitamos realizar clculos ms complejos para los
cuales no existe una funcin disponible.
Por medio de los procedimientos Function, podemos crear nuevas funciones
ampliando, de esta manera, las incorporadas en Excel. A este tipo de
funciones, se las conoce como funciones definidas por el usuario.
Al igual que los procedimientos Sub, un procedimiento Function puede tomar
argumentos, realizar un conjunto de acciones especficas y

Sintaxis de los procedimientos Function


Todo procedimiento Function debe comenzar con la sentencia Function que indica
el inicio, seguido del nombre de la funcin y la sentencia End Function, que marca el
fin. La sintaxis que define a este tipo de procedimiento es la siguiente:
[Private | Public | Friend] [Static] Function nombre [(lista de
argumentos)] [(As tipo)]
[Instrucciones]
[Exit Function]
[Instrucciones]
End Function
Donde:

Public: indica que el procedimiento Function est disponible para todos los
mdulos del proyecto. Este dato es opcional.
Private: determina que el procedimiento Function solo puede ser llamado desde otros
procedimientos que estn en el mismo mdulo. Este dato es opcional.

Friend: se emplea solamente en un mdulo de clase. Podemos declarar


como Friend a aquellos procedimientos de la clase que queremos poner a
disposicin de otras clases dentro del mismo procedimiento. Este dato es
opcional.

Static: indica que las variables del procedimiento Function se mantendrn


entre una llamada y otra. Este dato es opcional.

nombre: es el nombre del procedimiento Function. Este dato es requerido.


lista de argumentos: es una lista de variables separadas por comas que se
pasan al procedimiento cuando se lo invoca. Este dato es opcional.

As tipo: determina el tipo de datos que devuelve la funcin. Este dato es


opcional. En el Captulo 4, veremos los tipos de datos.

Instrucciones: es el conjunto de sentencias que se ejecutarn dentro del


procedimiento. Cada instruccin se escribe en una lnea diferente. Este
dato es opcional.

Exit Function: permite salir de una funcin. Solo se requiere si se necesita


retornar a la sentencia situada inmediatamente a continuacin de la que
efectu la llamada antes de que el procedimiento finalice.
Por ejemplo, la sintaxis de una funcin que nos permite calcular el rea de un
hexgono sera la siguiente:

Function area_hexagono(Lado, Apotema)


P = Lado * 6

A = (P * Apotema) / 2

area_hexagono = A End Function

La funcin InputBox
Esta funcin muestra una ventana para que el usuario pueda teclear datos. Cuando
se pulsa sobre Aceptar, los datos entrados pasan a la variable a la que se ha igualado
la funcin. Vea la lnea siguiente.
Texto = InputBox("Introduzca el texto", "Entrada de datos").
Si en la ventana que muestra InputBox pulsa sobre el botn Aceptar, los datos
tecleados se guardarn el la variable Texto.

Hacer referencia a rangos


Un rango puede ser una celda, una fila, una columna o una agrupacin de cualquiera
de stos. El objeto Range es probablemente el objeto ms frecuente utilizado en Excel
VBA; despus de todo, estamos manipulando datos en una hoja. Pero, aunque un
rango puede hacer referencia a cualquier agrupacin de celdas en una hoja, puede
hacer referencia solamente a una hoja de cada vez; si quieres hacer referencia a
rangos en mltiples hojas, tendrs que hacer referencia a cada hoja por separado.
Esta seccin te muestra diferentes formas de hacer referencia a rangos, tales como
especificar una fila o columna. Tambin aprenders cmo manipular celdas basndote
en la celda activa y cmo crear un nuevo rango a partir de

La jerarqua de objeto de Excel es la siguiente:


Aplicacin: Libro: Hoja: Rango
El objeto Range es una propiedad del objeto Worksheet. Esto significa que o bien hay
una hoja activa o que tiene que hacer referencia a una hoja. Las siguientes lneas
significan lo mismo si Worksheets (1) es la hoja activa:
Range(A1)
Worksheets(1).Range(A1)
Existen varias formas de hacer referencia a un objeto Range; Range(A1) es la forma
ms identificada porque es como lo hace el grabador de macro. Pero cada una de las
que aparece a continuacin es equivalente:
Range(D5)
[D5]
Range(B3).Range(C3)
Cells (5,4)
Range(A1).Offset(4,3)
Range(MiRango) Suponiendo que D5 tiene un nombre denominado MiRango.

Estructuras de Control

VBA ofrece dos importantes dos importantes estructuras que pueden simplificar el
trabajo con objetos y colecciones:
Estructuras With ...End With
Estructuras For Each...next

Estructuras with...end with

Permite realizar mltiples operaciones en un solo objeto.

Sub CambiarFuente()
With Selection.Font
.Name = Times New Roman
.FontStyle = Bold Italic
.Size = 12
.Underline = xlSingle
.ColorIndex= 5
End With
End Sub

Estructuras for each...next

Recordemos que una coleccin es un grupo de objetos relacionado. Por ejemplo, la


coleccin WorkBooks es una coleccin de todos los objetos WorkBook abiertos. No
es necesario saber la cantidad de elementos que existen en una coleccin para usar
la estructura For Each...Next .
Sub ContarHojas()
Dim Item As Worksheet
For Each Item In ActiveWorkbook.Sheets
MsgBox Item.Name
Next Item
End Sub
Sub VentanasAbiertas()
Suma = 0
For Each Item In Windows
Suma = Suma + 1
Next Item
MsgBoxTotal de ventanas abiertas, & Suma
End Sub

Estructuras for each...next

Sub CerrarActivo()
For Each Book In Workbooks
If Book.Name <> ActiveWorkbook.Name Then Book.Close
Next Book
End Sub

Sub ConvertirMayus()
For Each Cell In Selection
Cell.Value = UCASE(Cell.Value)
Next Cell
End Sub

Estructuras if...then

Se usa para ejecutar una o ms instrucciones de forma condicional. La sintaxis general


es:
If condicin Then inst_verdaderas [Else inst_falsas]
Sub Positivos()
a = InputBox("Ingrese un nmero")
If a > 0 Then
MsgBox "Nmero Positivo"
End If
End Sub
Sub Positivos_Negativos()
a = InputBox("Ingrese un nmero")
If a > 0 Then MsgBox "Nmero Positivo" Else _
MsgBox "Nmero negativo"
End Sub

Estructuras if...then

Sub Positivos_Negativos_Cero()
a = InputBox("Ingrese un nmero")
If a > 0 Then
MsgBox "Nmero Positivo"
ElseIf a < 0 Then
MsgBox "Nmero negativo "
ElseIf a = 0 Then
MsgBox " Cero "
End If
End Sub

La funcin IIF de VBA es parecida a la funcin IF (SI) de Excel


IIF(expresin, parte verdadera, parte falsa)
Sub Descuento()
MsgBox IIf(Range("A1") = 0, "Cero", "Distinto de Cero")
End Sub

Estructuras select case

La estructura Select Case es til para elegir entre tres o ms opciones


Sub Positivos_Negativos_Cero()
a = InputBox("Ingrese un nmero")
Select Case a
Case Is > 0
Msg = "Nmero Positivo"
Case Is < 0
Msg = "Nmero negativo"
Case Else
Msg = "Cero"
End Select
MsgBox Msg
End Sub

Sub Descuento1()
Cantidad = InputBox("Introducir cantidad: ")
Select Case Cantidad
Case "": Exit Sub
Case 0 To 24: Descuento = 0.1
Case 25 To 49: Descuento = 0.15
Case 50 To 74: Descuento = 0.2
Case Is >= 75: Descuento = 0.25
End Select
MsgBox "Descuento: " & Descuento
End Sub

Tambin se pueden anidar estructuras Select Case


El siguiente procedimiento, verifica el estado de la ventana de Excel
(maximizada,minimizada o normal) y despus presenta un mensaje describiendo
dicho estado. Si el estado de la ventana de Excel es norma, el procedimiento verifica
el estado de la ventana activa y despus presenta otro mensaje.

Sub AppWindow()
Select Case Application.WindowState
Case xlMaximized: MsgBox "App Maximizada"
Case xlMinimized: MsgBox "App Minimizada"
Case xlNormal: MsgBox "App Normal"
Select Case ActiveWindow.WindowState
Case xlMaximized: MsgBox "Libro Maximizado"
Case xlMinimized: MsgBox "Libro Minimizado"
Case xlNormal: MsgBox "Libro Normal"
End Select
End Select
End Sub

Bucles for...next
Esta sentencia de iteracin se ejecuta un nmero determinado de veces
Su sintaxis es:
For contador = empezar To finalizar [Step valorincremento]
[Instrucciones]
[Exit For]
[instrucciones]
Next [contador]

Sub SumaNmeros
Sum = 0
For Count = 0 To 10
Sum = Sum + Count
Next Count
MsgBox Sum
End Sub

Sub SumaNmerosPares
Sum = 0
For Count = 0 To 10 Step 2
Sum = Sum + Count
Next Count
MsgBox Sum
End Sub
Sub BuclesAnidados
Dim MiMatriz (1 To 3, 1 To 3)
For i = 1 To 3
For j = 1 to 3
MiMatriz(i,j) = 2
Next j
Next i
End Sub

Bucles do...while

Do While se ejecuta mientras se verifica una condicin especificada. Do While


puede tener cualquiera de estas dos sintaxis.
Do [While condicion]
[instrucciones]
[Exit Do]
[instrucciones]
Loop

Do
[instrucciones]
[Exit Do]
[instrucciones]
Loop[While condicion]

Sub DoWhileDemo()
Do While IsEmpty(ActiveCell)
ActiveCell.Value = 0
ActiveCell.Offset(1, 0).Select
Loop
End Sub

Bucles do...until

El bucle se ejecuta hasta que la condicin llegue a ser verdadera. Do Until puede
tener cualquiera de estas dos sintaxis.
Do Until condicion]
[instrucciones]
[Exit Do]
[instrucciones]
Loop
Do
[instrucciones]
[Exit Do]
[instrucciones]
Loop[Until condicion]
Sub DoUntilDemo()
Do
ActiveCell.Value = 0
ActiveCell.Offset(1, 0).Select
Loop Until Not IsEmpty(ActiveCell)
End Sub

Controles

Propiedades comunes a todos los controles

Categora apariencia
Backcolor y Forecolor: Color del fondo del control y color del texto.
Caption: Informa el texto que aparece en el control.
Picture: Indica el nombre de un fichero grfico que se mostrar como fondo del
control.
Categora comportamiento
Enabled: Propiedad del tipo True/False que especifica si el control est activo o no en
tiempo de ejecucin; un control no activo es visible pero el usuario no puede
interactuar con l, y se visualiza con un color distinto.
Visible: Otra propiedad True/False, que indica si el control est visible u oculto en
tiempo de ejecucin.
TabIndex: El orden por el cual nos movemos con la tecla TAB, entre los controles, se
establece con esta propiedad. Es un valor numrico, 0, 1 ...
TabStop: Es del tipo True/False y establece si un control puede ser accesible con la
teca TAB.

Categora fuente
Font: Permite elegir el tipo, estilo, tamao, etc... de letra del texto mostrado por el
control.
Categora posicin
Left y Top: La primera contiene la coordenada columna y la segunda la coordenada
lnea de pantalla donde se sita el control.
Width y Height: Cuando un control es redimensionable, esto es, que sus dimensiones
son variables, tendr estas dos propiedades que nos informan del ancho y la altura
del control.
Ejemplo
1) Inserte un formulario en l proyecto
2) Inserte un botn de comando
3) Haga doble click sobre el botn para acceder a la ventana de cdigo
4) En el procedimiento de evento click aada las siguientes lneas de cdigo:
Private Sub CommandButton_Click()
CommandButton1_Height = UserForm1.Height / 2
CommandButton1_Width= UserForm1.Width / 2
CommandButton1_Left = UserForm1.Width / 4
CommandButton1_Top = UserForm1.Height / 4
CommandButton1_Caption = redimensionado

End Sub
5) Ejecute el procedimiento presionando la tecla F5 y observe como cambia el ttulo
del control CommandButton y su tamao y posicin al hacer clic sobre l.

Eventos comunes a todos los controles

Para nombrar un evento correspondiente a un control, la nomenclatura es siempre la


misma:
nombre_del_control.nombre_del_evento
Command Button.Click
Click: Se activa al hacer clic sobre el control, pero tambin al pulsar la barra de
espacios o la tecla Enter si se trata de un botn CommandButton
MouseMove : Se activa al mover el puntero del ratn por encima del control.
EJEMPLO
1) Acceda a la ventana de cdigo del control command Button del ejemplo anterior.
2) Observe que en la parte superior de la ventana de cdigo hay dos listas
desplegables. La de la izquierda muestra el nombre del control CommandButton1y es
una lista de los controles del UserForm. La de la derecha muestra el nombre del evento
Click y es una lista de todos los eventos del control que tenemos seleccionado.
En la ventana de eleccin de eventos, desplegndola, elija el evento MouseMove.

Cdigos ms comunes
Trasladarse a una Celda
Range("A1").Select
Escribir en una Celda
Activecell.FormulaR1C1="Maria"
Letra Negrita
Selection.Font.Bold = True
Letra Cursiva

Selection.Font.Italic = True
Letra Subrayada
Selection.Font.Underline = xlUnderlineStyleSingle
Centrar Texto
With Selection
.HorizontalAlignment = xlCenter
End With
Alinear a la izquierda
With Selection
.HorizontalAlignment = xlLeft
End With
Alinear a la Derecha
With Selection
.HorizontalAlignment = xlRight
End With
Tipo de Letra(Fuente)
With Selection.Font
.Name = "AGaramond"
End With
Tamao de Letra(Tamao de Fuente)
With Selection.Font

.Size = 15
End With
Copiar
Selection.Copy
Pegar
ActiveSheet.Paste
Cortar
Selection.Cut
Ordenar Ascendente
Selection.Sort Key1:=Range("A1"), Order1:=xlAscending , Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Orden Descendente
Selection.Sort Key1:=Range("A1"), Order1:=xlDescending , Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Buscar
Cells.Find(What:=" Maria ", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False).Activate
Insertar Fila
Selection.EntireRow.Insert
Eliminar Fila

Selection.EntireRow.Delete
Insertar Columna
Selection.EntireColumn.Insert
Eliminar Columna
Selection.EntireColumn.Delete
Abrir un Libro
Workbooks.Open Filename:="C:\Mis documentos\cuentas.xls"
Grabar un Libro
ActiveWorkbook.SaveAs Filename:="C:\Mis documentos\cuentas.xls ", FileFormat _
:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:= _
False, CreateBackup:=False
Ejecutar un procedimiento desde

otro procedimiento

Podemos llamar a un procedimiento Sub desde otro procedimiento


escribiendo su nombre dentro del procedimiento que lo llama. Por
ejemplo, para llamar al procedimiento mi_nombre, escribimos el
cdigo:
Sub
llama_proc()
mi_nombre
End Sub

Si dos o ms mdulos contienen un procedimiento con el mismo nombre,


debemos incluir el nombre del mdulo, adems del nombre del procedimiento.
Por ejemplo, supongamos que tenemos un proyecto que se llama Ejemplos2.xls
con tres mdulos: Mdulo1, Mdulo2 y

Mdulo3, y en los Mdulo1 y Mdulo3 tenemos dos procedimientos


llamados encabezado. Para llamar al procedimiento encabezado que
se encuentra en el Mdulo3, deberemos escribir la siguiente sintaxis:
Sub llama_proc2()
Mdulo 3.encabezado
End Sub

Tambin podemos llamar a un procedimiento empleando la clusula Call.


Veamos el siguiente ejemplo:
Sub llama_proc2()
Call mi_nombre
End Sub

Aunque no debamos pasarle ningn argumento a un procedimiento


cuando lo invocamos, es aconsejable que empleemos la sentencia Call. De
esta forma, podemos identificar de manera rpida las llamadas que
realizamos a otros procedimientos.

Creando formularios
Un formulario es una ventana de Windows que se programa por medio de controles y
estos controles responden a sucesos que tambin se pueden programar. Todo esto
se encuentra dentro de Visual Basic.
Presione La Teclas Alt + F11, para entrar al editor de Visual Basic. Activa las
siguientes opciones: De clic en el Men Ver y elija la opcin Explorador de Proyectos
De clic en el Men ver y elija la opcin Ventana Propiedades Del Men Insertar elija
la Opcin UserForm. Esto inserta el Formulario que programaremos con controles.
En el Explorador de Proyecto se observara que se inserto el UserForm.

Tambin cuando de clic en el Formulario USERFORM1 se debe activar el Cuadro de


Herramientas, si no se activa de clic en el Men Ver y elija la opcin Cuadro de
Herramientas.
Elija del Cuadro de Herramientas el Control Etiqueta el que tiene la A y Arrastre
dibujando en el Formulario USERFORM1 la etiqueta. Quedara el nombre Label1,
despus de un clic en la etiqueta dibujada y podr modificar el nombre de adentro y
pondremos ah Nombre. Si por error da doble clic en la etiqueta y lo manda a la
pantalla de programacin de la etiqueta, solo de doble clic en UserForm1 que se
encuentra en el Explorador de Proyecto. Elija del Cuadro de Herramientas el
control Cuadro de Texto el que tiene ab y arrastre dibujando en el formulario
USERFORM1 el cuadro de texto a un lado de la etiqueta que dice Nombre. El cuadro
de texto debe de estar vaco y su nombre ser Textbox1, el nombre solo aparecer
en el control. Haga los dos pasos anteriores igualmente poniendo Direccin en la
Label2 y Telfono en la Label3 y tambin dibjeles su Textbox. Esto quedara as
despus de haberlo hecho

Si tiene algn problema al dibujar las etiquetas o los cuadros de texto, solo cmbiele
el nombre a la etiqueta o el cuadro de texto en la Ventana Propiedades la opcin se
llama (Name). Es conveniente identificar los controles con nombres que sean
representativos de sus funciones, por ejemplo LblNombre, LblDireccion, Txttelefono,
txtEmail. No utilice caracteres especiales para identificar los controles, ni acentos, ni
espacios, No altere el resto de las propiedades si no las conoce

Elija del Cuadro de Herramientas el control Botn de Comando y Arrastre dibujando


en el Formulario USERFORM1 el Botn, despus de un clic en el nombre del Botn
dibujado y podr modificar el nombre y pondremos ah Insertar. Si por error da doble
clic en la Botn y lo envia a la pantalla de programacin de la etiqueta, solo de doble
clic en UserForm1 que se encuentra en el Explorador de Proyecto.

As quedara el Formulario formado por los controles:

Haga doble clic sobre el control Textbox1 para programarlo y despus inserte el
siguiente cdigo:
Private Sub TextBox1_Change()
Range("A9").Select
ActiveCell.FormulaR1C1 = TextBox1
End Sub
Esto indica que se valla a A9 y escriba lo que hay en el Textbox1
Observe que como se comento anteriormente cada modulo de ejecucin Excel lo
encierra entre las palabras reservadas Private Sub y End Sub
Para volver al Formulario y programar el siguiente Textbox de doble clic en
UserForm1 que se encuentra en el Explorador de Proyecto, o simplemente de clic
en Ver Objeto en el mismo Explorador de Proyecto.
Haga doble clic sobre el control Textbox2 para programarlo y despus inserte el
siguiente cdigo:
Private Sub TextBox2_Change()
Range("B9").Select
ActiveCell.FormulaR1C1 = TextBox2
End Sub
Esto indica que se valla a B9 y escriba lo que hay en el Textbox2

Para volver al Formulario y programar el siguiente Textbox de doble clic en


UserForm1 que se encuentra en el Explorador de Proyecto, o simplemente de clic
en Ver Objeto en el mismo Explorador de Proyecto.
Ahora de doble clic sobre el control Textbox3 para programarlo y despus inserte el
siguiente cdigo:
Private Sub TextBox3_Change()
Range("C9").Select
ActiveCell.FormulaR1C1 = TextBox2
End Sub
Esto indica que se valla a C9 y escriba lo que hay en el Textbox3
Para volver al Formulario y programar el Botn de Comando Insertar de doble clic
en UserForm1 que se encuentra en el Explorador de Proyecto, o simplemente de
clic en Ver Objeto en el mismo Explorador de Proyecto.
Haga doble clic sobre el control Botn de Comando para programarlo y despus
inserte el siguiente cdigo:
Private Sub CommandButton1_Click()
Rem inserta un rengln
Selection.EntireRow.Insert
Rem Empty Limpia Los Textbox
TextBox1 = Empty
TextBox2 = Empty
TextBox3 = Empty
Rem Textbox1.SetFocus Enva el cursor al Textbox1 para volver a capturar los
datos
TextBox1.SetFocus

End Sub
Nota.- El comando Rem es empleado para poner comentarios dentro de la
programacin, el comando Empty es empleado para vaciar los Textbox.
Presione el botn Ejecutar User/Form que se encuentra en la barra de herramientas
o simplemente la tecla de funcin F5

Se activara el Userform1 y todo lo que escriba en los Textbox se escribir en Excel y


cuando presione el botn Insertar, se insertara un rengln y se vaciaran los Textbox y
despus se mostrara el cursor en el Textbox1.

Trabajando con Variables y Tipos de Datos


Variables y tipos de datos
objetos tales
como rangos de hojas de clculo. Otros se guardan en las variables que se crean.
Una variable es una localizacin de almacenamiento con nombre, dentro de la
las variables:
Se pueden usar caracteres alfabticos, nmeros y algn carcter de puntuacin,
pero el primero de los caracteres debe ser alfabtico
VBA no distingue entre maysculas y minsculas
No se pueden usar espacios ni puntos
No se pueden incrustar en el nombre de una variable los siguientes smbolos: #, $,
%,!
Los nombres de las variables pueden tener hasta 254 caracteres

Tipo de dato Bytes usados Rango de valores


Byte

0 a 255

Boolean
Integer
Long
Single

Verdadero o Falso
-32.768 hasta 32.767
-2.147.483.648 hasta 2.147.483.647
-3.402823E38 a -1.401298E-4545
(para valores negativos) y
1.4012298E-45 a 3.42823E38
(para valores positivos)

Double
Currency
Date
Object
String

Del 1 Enero, 0100 hasta 31 de diciembre, 9999

mbito de las variables


El mbito de una variable determina el mdulo y el procedimiento en el que se puede
usar una variable.
Un procedimiento
Incluye instrucciones Dim, Static o Private dentro del procedimiento.
Al nivel de mdulo
Incluye una instruccin Dim antes del primer procedimiento de un mdulo.
Todos los mdulos
Incluye una instruccin Public antes del primer procedimiento de un mdulo.

Variables locales
Una variable local es una variable declarada dentro de un procedimiento. Estas
variables se pueden usar slo en el procedimiento en que se declararon. Cuando el
procedimiento
La manera ms comn de declarar una variable local es situarla dentro de una
instruccin DIM.
Sub MiSub()
DIM x As Integer
DIM First As Long
DIM InerestRate As Single
DIM TodaysDate As Date

DIM UserName As String * 20


Aqu se sita el cdigo del procedimiento
End Sub
Esto tambin es vlido:
DIM x As Integer, y As Integer, z As Integer
Esto no es vlido:
DIM x, y, z As Integer

Variables a nivel de mdulo


Algunas veces se desear que una variable est disponible para todos los
procedimientos de un mdulo. Para ello, se declara la variable antes del primer
procedimiento del mdulo (fuera de cualquier procedimiento o funcin).
DIM fecha As Date
Sub Dias()
Aqu va el cdigo
End Sub
Sub Meses()
Aqu va el cdigo
End Sub

Variables Public
Para que una variable est disponible para todos los procedimientos de un proyecto
de VBA, se declara la variable a nivel de mdulo con el uso de la palabra public.

Public InteresAnual as Long

Variables Static
Las variables estticas son un caso especial. Se declaran a nivel de procedimiento y
retienen su valor despus de que el procedimiento finaliza.
Sub Ejemplo()
Static Counter As Integer
Aqu va el cdigo
End Sub

Declarar Constantes
Las constantes se declaran usando Const.
Const NumTrim As Integer = 4
Const Inters = 0.05, Periodo = 12
Const Nombre Mod as String = Macros Presupuestos
Public Const NombreApp As String = Aplicacin Presupuestos
Al igual que las variables, las constantes tambin poseen un mbito.
Para que una constante est disponible slo dentro de in determinado procedimiento,
hay que declararla despus de Sub o Function para convertirla en una constante local.
procedimientos de un mdulo,
se tiene que declarar antes del primer procedimiento de un mdulo.
de un libro de
trabajo, hay que usar la palabra Public, y declarar la constante antes del primer
procedimiento de un mdulo.

Constantes de VBA
Excel y VBA contienen muchas constantes predeterminadas, que se pueden usar sin
necesidad de declararlas; de hecho no es necesario conocer el valor de estas
constantes para usarlas.
Sub CalcManual()
Application.Calculation = xlManual
End Sub

Trabajar con cadenas


Existen dos tipos de cadenas en VBA:
especfico de caracteres.
La mxima longitud es de 65.536 caracteres.
Cadenas de longitud variable, que tericamente pueden tener hasta 2.000 millones de
caracteres.
Dim MiCadena As String * 50

Dim SuCadena As String

Trabajar con fechas


Dim Hoy As Date
Dim HoraInicio As Date
Const PrimerDa As Date = #1/1/2001#
Const MedioDa As date = #12:00:00#

Expresiones de asignacin
Una expresin de asignacin es una instruccin de VBA que realiza evaluaciones
matemticas y asigna el resultado a una variable o aun objeto.
VBA usa el signo igual = como operador de asignacin.
x=1
x=x+1
x = (y * 2) / (z * 2)
FileOpen= true
Range(Ao). Value = 1995
Se puede usar una secuencia de continuacin (espacio seguido de
un signo de subrayado) para facilitar la lectura de expresiones muy largas.

Operadores
Operadores aritmticos
+ Suma, - Resta, * Multiplicacin, / Divisin, \ Divisin entera, Mod Resto, ^
exponencial, & Concatenacin
Operadores comparativos
= Igual, < Menor, > Mayor, <= Menor o igual, >= Mayor o igual, <> Distinto
Operadores lgicos

Not (negacin lgica), And (conjuncin lgica), Or (disyuncin lgica), XoR (exclusin
lgica), Eqv (equivalencia en dos expresiones), Imp (implicacin lgica)

Trabajando con frmulas


Es de suma importancia saber aplicar Formulas en Macros de Excel, ya que la
mayora de las hojas de clculos las involucran
Presione La Teclas Alt + F11, para entrar al editor de Visual Basic. Activa las
siguientes opciones: De clic en el Men Ver y elija la opcin Explorador de Proyectos
De clic en el Men ver y elija la opcin Ventana Propiedades Del Men Insertar elija
la Opcin UserForm. Esto inserta el Formulario que programaremos con controles.
En el Explorador de Proyecto se observara que se inserto el UserForm.
Ahora crearas un formulario con el siguiente aspecto:

el formulario tendr:
- Tres etiquetas
- Tres Textbox
- Un Botn de Comando
Los datos que se preguntaran sern Nombre y Edad, los Das Vividos se generaran
automticamente cuando insertes la edad. A continuacin se muestra como se deben
de programar estos Controles:
Programacin de los Controles:
Private Sub CommandButton1_Click()
Selection.EntireRow.Insert

TextBox1 = Empty
TextBox2 = Empty
TextBox3 = Empty
TextBox1.SetFocus
End Sub
Private Sub TextBox1_Change()
Range("A9").Select
ActiveCell.FormulaR1C1 = TextBox1
End Sub
Private Sub TextBox2_Change()
Range("B9").Select
ActiveCell.FormulaR1C1 = TextBox2
Rem aqu se crea la Formula
TextBox3 = Val(TextBox2) * 365
Rem El Textbox3 guardara el total de la multiplicacin del Textbox2 por 365
Rem El Comando Val permite convertir un valor de Texto a un Valor Numrico
Rem Esto se debe a que los Textbox no son Numricos y debemos de Convertirlos
End Sub
Private Sub TextBox3_Change()
Range("C9").Select
ActiveCell.FormulaR1C1 = TextBox3

End Sub
Esto va a permitir que cuando se ejecute el formulario y se ingrese la edad el resultado
de los das vividos aparecer en el Textbox3 y se escribir tambin en Excel. El
comando Val es un comando de Visual Basic que te permite convertir un valor de
texto a un valor numrico. Recuerden el Comando Rem se utiliza para poner
Comentarios nicamente y no afecta a la programacin.
Generaremos otro ejemplo, Crea el Siguiente Formulario con los siguientes datos:
- 5 Etiquetas
- 5 Textbox
- 1 Botn de Comando
Los datos que se preguntaran sern Nombre, Das Trabajados, Pago por Da, Bonos
y Sueldo Neto.

Ejemplo
Private Sub CommandButton1_Click()
Selection.EntireRow.Insert
TextBox1 = Empty
TextBox2 = Empty
TextBox3 = Empty
TextBox1.SetFocus

End Sub
Private Sub TextBox1_Change()
Range("A9").Select
ActiveCell.FormulaR1C1 = TextBox1
End Sub
Private Sub TextBox2_Change()
Range("B9").Select
ActiveCell.FormulaR1C1 = TextBox2
End Sub
Private Sub TextBox3_Change()
Range("C9").Select
ActiveCell.FormulaR1C1 = TextBox3
End Sub
Private Sub TextBox4_Change()
Range("D9").Select
ActiveCell.FormulaR1C1 = TextBox4
Rem aqu se crea la formula
TextBox5 = Val(TextBox2) * Val(TextBox3) + Val(TextBox4)
Rem El TextBox5 guardara el total
End Sub
Private Sub TextBox5_Change()

Range("E9").Select
ActiveCell.FormulaR1C1 = TextBox5
End Sub
Cuando se introduzca el Bonos automticamente se generara el Sueldo Neto.

Buscando informacin con un textbox

Se puede buscar informacin con un Textbox programndolo de la siguiente forma:

Dibuje una Etiqueta, un Textbox y un Botn de Comando y agregue el siguiente


Cdigo:
Private Sub TextBox1_Change()
Range("a9").Select
ActiveCell.FormulaR1C1 = TextBox1
End Sub
Private Sub CommandButton1_Click()
Cells.Find(What:=TextBox1, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False).Activate

End Sub
El Botn Buscar Ahora buscara lo que se ingrese en el Textbox1 a la hora de
Presionarse.

Trabajando con el asistente


El asistente es el personaje de Office que se activa para ayudarnos y una de las
ventajas es que podemos Manipularlo, por ejemplo se le puede dar animacin,
Moverse, Hacer Preguntas, Etc.
A continuacin se muestran algunos cdigos del Asistente:

Este cdigo permite hacer visible el ayudante o sea mostrarlo. Si deseas ocultarlo solo
cambia la opcin True por False.
Assistant.Visible = True
Este cdigo permite Mover el Asistente a un nuevo lugar, solo cambia los valores
numricos y cambiara de posicin.
Assistant.Move 430, 230
Este cdigo permite activar un efecto de animacin, cuando escribas el signo Igual
despus de Assistant.Animation = aparecer un men con diferentes efectos de
animacin
Assistant.Animation = msoAnimationListensToComputer

Este ejemplo permite crear un Nuevo Asistente para poderlo manipular con una
pregunta y que tu contestes. La variable t guardara el valor de la respuesta, si el valor
es -3 significa que es Si y por lo tanto borrara el rengln.
With Assistant.NewBalloon
.Text = "Deseas Borrar este Registro"
.Button = msoButtonSetYesNo
.Heading = "Advertencia"
t = .Show
End With
If t = -3 Then
Assistant.Animation = msoAnimationEmptyTrash
Selection.EntireRow.Delete
End If

Elaborando una consulta


Todo Registro de informacin debe de tener su propia Consulta, Baja y
Modificacin, es por eso que en este nuevo capitulo nos concentramos en ello,
primeramente en poder consultar la informacin que ya se escribi en la Hoja de
Excel, obviamente desde una Macro combinada con Visual Basic, observemos el
siguiente ejemplo:
Presione La Teclas Alt + F11, para entrar al editor de Visual Basic. Activa las
siguientes opciones: De clic en el Men Ver y elija la opcin Explorador de Proyectos
De clic en el Men ver y elija la opcin Ventana Propiedades Del Men Insertar elija
la Opcin UserForm. Esto inserta el Formulario que programaremos con controles.
En el Explorador de Proyecto se observara que se inserto el UserForm.
Ahora crearas un formulario con el siguiente aspecto:

el formulario tendr:
- Tres etiquetas
- Tres Textbox
- Tres Botones de Comando
Los datos que se preguntaran sern Nombre, Direccin y Telfono. Los tres botones
nos servirn para lo siguiente: Consultar consultara la informacin que hayamos
insertado desde el botn insertar. Baja podr eliminar algn dato que se consulto y no
lo queremos. Insertar tendr la funcin de insertar los registros que vayamos dando
de alta. A continuacin se muestra como se deben de programar estos Controles

Programacin de los Controles


Boton de consulta
Private Sub CommandButton1_Click()
Cells.Find(What:=TextBox1, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False).Activate
ActiveCell.Offset(0, 1).Select
TextBox2 = ActiveCell
Rem la lnea que contiene el ActiveCell.Offset(0, 1).Select permite moverse una
columna a la derecha, por lo tanto despus de la bsqueda de las primeras lneas con

Cell.Find si encuentra el Nombre de la persona se mueve a la siguiente columna y la


lnea TextBox2 = ActiveCell Permite capturar el valor de la celda al Textbox2 y as
mostrar el dato de la celda en el TextBox2.
ActiveCell.Offset(0, 1).Select
TextBox3 = ActiveCell
Rem Cada vez que se escriba la lnea ActiveCell.Offset(0, 1).Select significa que se
tiene que moverse una columna a la derecha.
End Sub
Boton baja
Private Sub CommandButton2_Click()
Selection.EntireRow.Delete
Range("A9").Select
TextBox1 = Empty
TextBox2 = Empty
TextBox3 = Empty
TextBox1.SetFocus
End Sub
Boton insertar
Private Sub CommandButton3_Click()
Range("A9").Select
Selection.EntireRow.Insert
TextBox1 = Empty
TextBox2 = Empty

TextBox3 = Empty
TextBox1.SetFocus
End Sub
Cuadros de texto
Private Sub TextBox1_Change()
Range("A9").FormulaR1C1 = TextBox1
Range("A9").Select
ActiveCell.FormulaR1C1 = TextBox1[Hoja1]
End Sub
Private Sub TextBox2_Change()
Range("B9").FormulaR1C1 = TextBox2
End Sub
Private Sub TextBox3_Change()
Range("C9").FormulaR1C1 = TextBox3
End Sub
Si con el Botn Consulta tienes un error cuando no encuentra a la persona, entonces
tendrs que agregar esto a tu cdigo del Botn Consultar
[Hoja1]Range("A9").FormulaR1C1=TextBox1 Reemplaza estas dos lneas
Boton de consulta
Private Sub CommandButton1_Click()
On Error Goto noencontro

Rem esta lnea genera una trampa de error si Excel encuentra un error se le dice que
se vaya a la etiqueta noencontro que esta definida mas adelante en el cdigo. No
use la trampa de error si no tiene problemas a la hora de que no encuentra a la
persona. Recuerde si usted comete cualquier error Excel se dirigir a la etiqueta
noencontro.y esquivara cualquier error, hasta uno que usted cometa en la
programacin.
Cells.Find(What:=TextBox1, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False).Activate
ActiveCell.Offset(0, 1).Select
TextBox2 = ActiveCell
ActiveCell.Offset(0, 1).Select
TextBox3 = ActiveCell
Rem Tambin se puede utilizar este cdigo para leer la informacin de las celdas lo
que esta en azul. La diferencia es que se asignan los valores a variables y despus
se descargan a los TextBoxs.
ActiveCell.Offset(0, 1).Select
Direccion = Activecell
ActiveCell.Offset(0, 1).Select
Telefono = Activecell
TextBox2 = Direccion
TextBox3 = Telefono
noencontro:
Rem Aqu se esquiva el error
End Sub

Para realizar este ejercicio debemos permanecer dentro del Editor de Visual Basic
para poder introducir el cdigo en un Modulo, por lo tanto debers seguir los
siguientes pasos:
-

De clic en el Men Insertar y elija la opcin Modulo

Escriba dentro del Modulo el nombre del modulo en este caso Sub Entrada

Cuando usted escriba Sub Entrada aparecer de la siguiente manera:


Sub Entrada()
Load UserForm1
UserForm1.Show
End Sub
Usted deber escribir las dos lneas que estn en medio que son:
Load UserForm1
UserForm1.Show
La primer lnea significa que cargue a la memoria el formulario que se llama
UserForm1, la segunda lnea significa que lo debe mostrar, esto quiere decir que en
el modulo estamos escribiendo el cdigo de una macro que permitir cargar el
formulario desde Excel sin necesidad de entrar al Editor de Visual Basic.
Si te fijas en el explorador de proyecto aparece el Modulo que creamos.

si queremos volver al formulario solo hay que hacer un doble clic en UserForm1
Ahora salimos del Editor de Visual Basic y volvemos a Excel.
-

De clic en el Men Archivo del Editor de Visual Basic

Elija la opcin Cerrar y volver a Microsoft Excel

Ya que estamos en Excel, podemos insertar una imagen o un botn o cualquier


grafico, por ejemplo:
-

De clic en el Men Insertar

Elija la opcin Imagen, seguido por Imagen Prediseada

inserte cualquier imagen e indique el tamao que usted desea.

De clic derecho sobre la Imagen

Elija la opcin Asignar Macro

De clic en la Macro que se llama Entrada, es obvio la nica que hicimos

De Clic en Aceptar

De clic fuera de la imagen en cualquier celda y listo si das un clic en la imagen,


cargara el formulario.

Trabajar con Listbox y Combobox


Bueno empezaremos viendo como agregar informacin a un Combobox y un
Listbox, primeramente debers crear el siguiente formulario dentro de Visual Basic,
recuerda desde Excel se utiliza la tecla ALT + F11 para entrar a Visual Basic, seguido
del Men Insertar y despus Userform, bueno creo que ya lo sabes. Inserta Un
Combobox y un Listbox y un Botn.
Ahora que ya creaste la Interfaz vamos a programar el botn, veremos como se le
puede agregar informacin por medio de cdigo a estos dos controles.
Da doble clic en el Botn y escribe las siguientes lneas dentro del procedimiento.

Private Sub CommandButton1_Click()


ComboBox1.AddItem "Pedro"
ComboBox1.AddItem "Ana"
ComboBox1.AddItem "Jose"
ListBox1.AddItem "Pedro"
ListBox1.AddItem "Ana"

ListBox1.AddItem "Jose"
End Sub
Bueno vamos a analizar el significado de estas lneas:
ComboBox1.AddItem "Pedro "
La opcin AddItem significa que vas a agregar un elemento al ComboBox, por lo tanto
se entiende que vas a agregar a Pedro al Combobox1, por lo tanto yo puedo agregar
los datos que quiera a un Combobox o un Listbox con la opcin AddItem, entonces
al presionar el botn aparecern los datos que se encuentra escritos y podrs
seleccionar cualquiera de ellos, recuerda que la informacin la vas a agregar segn
tus necesidades.
Ahora si deseas agregar nmeros a un Combobox o ListBox escribe el siguiente
cdigo en un botn:
Private Sub CommandButton1_Click()
For X=1 to 50
Listbox1.AddItem str(x)
Next
End Sub
La Instruccin For-Next es un ciclo contador que te permite realizar repeticiones
desde un valor inicial hasta otro. Por ejemplo en este caso le indico que cuente desde
el valor 1 hasta el 50 y lo que se encuentre dentro del ciclo For-Next se ejecutara el
nmero de veces, la X es una variable numrica que guarda el valor, cada vez que el
ciclo da una vuelta se incrementa en una unidad, por lo tanto X va a valer desde 1
hasta 50, y la instruccin Str es para convertir el valor numrico de la X en valor de
Texto, ya que la opcin AddItem guarda solo texto, claro esta que tambin puede
funcionar sin esta instruccin en algunos casos.
Por lo tanto el Listbox1 va a guardar los nmero del 1 al 50, sin necesidad de
ingresarlos uno por uno en forma manual.
Listbox1.AddItem "1"
Listbox1.AddItem "2"

Listbox1.AddItem "3"
Ahora observaremos el cdigo para ingresar un valor de un Listbox a una celda:
Da doble clic en el Listbox y escribe el siguiente cdigo:
Private Sub ListBox1_Click()
Range("a9").Select
ActiveCell.FormulaR1C1 = ListBox1
End Sub
Cada vez que selecciones un dato que se encuentre en un Listbox1 lo enviara a la
celda a9, escribindolo ah. Si lo deseas hacer lo puedes hacer en un Combobox,
solo cambia Listbox1 por Combobox1 o por el nombre que le hayas especificado en
la propiedad Name del ComboBox.
Si deseas agregar los datos al Listbox o Combobox sin ningn botn que presionar
se puede utilizar el siguiente cdigo:
Private Sub UserForm_Activate()
ComboBox1.AddItem "Pedro"
ComboBox1.AddItem "Ana"
ComboBox1.AddItem "Jose"
ListBox1.AddItem "Pedro"
ListBox1.AddItem "Ana"
ListBox1.AddItem "Jose
End Sub
La Clave esta en el procedimiento UserForm_Activate() esto quiere decir que cuando
se active el formulario cargara lo que se le indique en dicho procedimiento, en este
caso va a introducir los datos al Listbox1 y Combobox1 automticamente.

Si deseas tomar informacin de una celda y enviarla a un Combobox o Listbox


escribe el siguiente cdigo en un Botn:
Private Sub CommandButton1_Click()
Range("a9").Select
Do While ActiveCell <> Empty
ActiveCell.Offset(1, 0).Select
ListBox1.AddItem ActiveCell
Loop
End Sub

Primeramente muevo el rango a la celda A9 porque ah esta el inicio de mi informacin,


despus la lnea Do While Activecell<> Empty significa repetir mientras la celda no
se encuentre vaca, la siguiente lnea que es ActiveCell.Offset(1, 0).Select, significa
Baja una fila, la siguiente lnea ListBox1.AddItem ActiveCell, agrega la informacin
de la celda al Listbox1 y la lnea Loop forma parte del ciclo Do While(cierra dicho
ciclo), como el For-Next. Por lo tanto todos los nombres que estn delante de A9
sern enviados al Listbox1 y cuando alcance la celda A15 que se encuentra vaca la

condicin del Do While parara la ejecucin de su cdigo (el cdigo del ciclo Do While).
Esto funciona filas hacia abajo, pero si deseas moverte hacia la derecha por columnas
solo cambia la lnea ActiveCell.Offset( 1, 0).Select por ActiveCell.Offset(0,
1).Select, quiere decir que se mueva por columna, no por fila. La sintaxis de dicha
sentencia es ActiveCell.Offset(Rengln, Columna).Select
Si cambias el 1 por otro numero se mover el numero de veces que le indiques, por
ejemplo si quiero bajar 10 filas:
ActiveCell.Offset(10, 0).Select
Si quiero moverme 20 columnas a la derecha
ActiveCell.Offset(0, 20).Select

Ejecutando las macros


Ahora veremos como se ejecuta una macro a la hora de abrir un libro
Primeramente inserta un Modulo del Men Insertar dentro de Visual Basic y escribe
el siguiente cdigo:
Sub Auto_open()
Load UserForm1
UserForm1.Show
End Sub
El procedimiento Auto_open() permite ejecutar automticamente lo que se encuentre
dentro de el cuando abras un libro que contenga este cdigo, en este ejemplo cuando
se abre el libro se activa el formulario denominado UserForm1.
As que todo lo que agregues dentro de este procedimiento se ejecutara
automticamente cuando abras un libro.
A continuacin veremos como ordenar una informacin por orden alfabtica
ascendente, permite localizar entre otras cosas tomar una porcin de datos y
ordenarlos, sin pasarse una fila en blanco.

Observemos el siguiente ejemplo:


El conjunto de datos comienza en la fila A10 y termina en C16, el siguiente cdigo
detectara donde debe detenerse para poder ordenar los datos. Es necesario crear el
cdigo para ordenar datos, que a continuacin se muestra:

Programar esto en el un botn de comando


Private SubCommandButton1_Click()
Rem este cdigo localiza el ltimo registro recorriendo por filas
Range("a10").Select
Do While ActiveCell <> Empty
ActiveCell.Offset(1, 0).Select
Loop
Rem llega hasta el a17 donde no hay informacin y se regresa un rengln para
ser exacto con la siguiente lnea.
ActiveCell.Offset(-1, 0).Select
Rem este cdigo localiza la ltima columna del ltimo dato

Do While ActiveCell <> Empty


ActiveCell.Offset(0, 1).Select
Loop
ActiveCell.Offset(0, -1).Select
Rem esta lnea guarda en la variable celdaactiva la celda exacta donde esta el
ultimo dato de la ultima columna de informacin, en este caso C16.
celdaactiva = ActiveCell.Address
Rem este cdigo toma el rango desde A10 donde empieza la informacin, hasta
donde encontr el ultimo dato C16, que lo guarda la variable celdaactiva.
Selecciona de A10 hasta C16.
Range("A10:" + celdaactiva).Select
Rem este cdigo ordena los datos en orden ascendente, el cdigo fue generado
en Excel, as que si no sabes generarlo te sugiero que lo copies de este manual.
Selection.Sort Key1:=Range("A10"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
End Sub
As es como funciona este cdigo de Macros de Excel ordenando exactamente desde
A10 hasta donde estn los datos finales.
Bueno ahora para convertir la informacin a Minscula o Mayscula es muy parecido
el cdigo, solo obsrvalo:
Private SubCommandButton1_Click()
Range("a10").Select
Do While ActiveCell <> Empty
ActiveCell.FormulaR1C1 = LCase(ActiveCell)

ActiveCell.Offset(1, 0).Select
Loop
End Sub
La Funcin Lcase convierte a Minsculas y Ucase a Maysculas, empieza en A10 y
hasta que no encuentra celdas vacas deja de convertir a Minsculas.
El siguiente Formulario y cdigo muestra cmo se puede consultar y modificar el dato
que se encontr.

Crea la siguiente Interfaz, 4 Etiquetas, 3 Textbox y 3 Botones, En la etiqueta4 colocar


el valor 9 en la propiedad caption
Copia el siguiente cdigo:
Private Sub CommandButton1_Click()
Rem si no se escribe nada en los Textboxs a la hora de insertar escribe No Tiene
If TextBox1 = Empty Then Range("A9").FormulaR1C1 = "No Tiene"
If TextBox2 = Empty Then Range("B9").FormulaR1C1 = "No Tiene"
If TextBox3 = Empty Then Range("C9").FormulaR1C1 = "No Tiene"
Range("A9").Select
Selection.EntireRow.Insert

TextBox1 = Empty
TextBox2 = Empty
TextBox3 = Empty
TextBox1.SetFocus
End Sub
Private Sub CommandButton2_Click()
On Error GoTo noencontro
Rem Cdigo para buscar, ya lo conocemos
Cells.Find(What:=TextBox1, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False).Activate
ActiveCell.Offset(0, 1).Select
TextBox2 = ActiveCell
ActiveCell.Offset(0, 1).Select
TextBox3 = ActiveCell
Rem la etiqueta 4 toma el valor de la fila activa y permite modificar la informacin
que encontr (se actualiza la informacin al presionar el botn actualizar).
Label4 = ActiveCell.Row
noencontro:
End Sub
Private Sub CommandButton3_Click()

Rem Vuelve a indicar el rengln 9 para escribir en los Textbox, el valor 9 es


arbitrario
Label4 = "9"
Range("a9").Select
TextBox1 = Empty
TextBox2 = Empty
TextBox3 = Empty
TextBox1.SetFocus
End Sub
Private Sub TextBox1_Change()
Rem si nos damos cuenta la etiqueta 4 sirve para llevar un control de la fila
donde introducimos los datos o los modificamos, as que cada textbox que
programemos debe llevar estas lneas.
Range("A" + Label4).FormulaR1C1 = TextBox1
End Sub

Private Sub TextBox2_Change()


Range("B" + Label4).FormulaR1C1 = TextBox2
End Sub
Private Sub TextBox3_Change()
Range("C" + Label4).FormulaR1C1 = TextBox3
End Sub

Grficos en Excel
Ahora trabajaremos con grficos en Excel, veremos como se puede generar una
grafica desde un cdigo generado y alterado en tiempo de ejecucin.

Si observamos los datos que vamos a graficar nos damos cuenta que en la columna
A se encuentran los valores ejes (X) y en la columna B los valores series (Y), estos
datos son necesario para efectuar una grafica que podra quedar as

Esta grafica muestra las edades de 5 personas, los nombres son los valores ejes y
la edad los valores series, ahora veremos como se puede detectar estos datos por
medio de una Macro
Al graficar estos datos se genero el siguiente cdigo:

Sub Macro1()
Range("A5:B10").Select Charts.Add ActiveChart.ChartType =
xlColumnClustered ActiveChart.SetSourceData
Source:=Sheets("Hoja1").Range("A5:B10"), PlotBy:= _xlColumns
ActiveChart.Location Where:=xlLocationAsObject, Name:="Hoja1"
End Sub
La primera lnea indica el rango donde estn los datos, valores ejes y valores series,
La segunda lnea indica que se agrega una grafica La tercera lnea indica el tipo de
grafica que se desea La cuarta lnea indica como se presentan los datos en la grafica
La quinta lnea indica donde se muestra la grafica, si en la misma hoja o en una sola
hoja (observe que estos son los datos que se le proveen al asistente para grficos
cuando uno genera un nuevo grfico en la hoja )

Diferentes tipos de grficos


A continuacin se muestran algunos de los diferentes tipos de grficos:

ActiveChart.ChartType = xlColumnClustered

ActiveChart.ChartType = xlBarClustered

ActiveChart.ChartType = xlLineMarkers

ActiveChart.ChartType = xlPie

ActiveChart.ChartType = xlXYScatter

ActiveChart.ChartType = xlAreaStacked

ActiveChart.ChartType = xlDoughnut

ActiveChart.ChartType = xlRadarMarkers

ActiveChart.ChartType = xlCylinderColClustered

ActiveChart.ChartType = xlConeColClustered

ActiveChart.ChartType = xlPyramidColClustered
Estas sentencias del tipo de grficos se pueden agregar al final del codigo, por
ejemplo:
Sub Macro1()
Range("A5:B10").Select
Charts.Add
ActiveChart.ChartType = xlColumnClustered
ActiveChart.SetSourceData
PlotBy:= _xlColumns

Source:=Sheets("Hoja1").Range("A5:B10"),

ActiveChart.Location Where:=xlLocationAsObject, Name:="Hoja1"


ActiveChart.ChartType = xlPyramidColClustered.

End Sub
Este cdigo se puede programar en un botn o cualquier otro control de Visual Basic.
A continuacin se muestra como se presentan los datos Lnea 4:

ActiveChart.SetSourceData
PlotBy:= _

Source:=Sheets("Hoja1").Range("A5:B10"),

xlRows
En esta lnea se muestra la grafica por Filas

ActiveChart.SetSourceData
PlotBy:= _

Source:=Sheets("Hoja1").Range("A5:B10"),

xlColumns
En esta lnea se muestra la grafica por Columnas

Para presentar el grfico en la misma hoja o simplemente tomar una nueva hoja para
ella, es posible indicar el siguiente cdigo:

ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="Grafico 1"


Esta lnea indica que el grfico ser presentado en su propia hoja y que su nombre
sera Grafico 1.
A Continuacin observamos el cdigo completo relacionado con la presentacin de
grficos en Excel.
Range("A5:B10").Select
Charts.Add
ActiveChart.ChartType = xlColumnClustered
ActiveChart.SetSourceData
PlotBy:= _xlColumns

Source:=Sheets("Hoja1").Range("A5:B10"),

ActiveChart.Location Where:=xlLocationAsObject, Name:="Hoja1"


ActiveChart.ChartType = xlPyramidColClustered
ActiveChart.SetSourceData
PlotBy:= xlColumns

Source:=Sheets("Hoja1").Range("A5:B10"),

ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="Grafico 1"

Confecciona el siguiente formulario con el siguiente cdigo, para observar los


diferentes tipos de grficos y la forma en que se acomodan los datos:

Coloca dos Listbox y un Botn y pega el cdigo dentro del formulario.


Private Sub CommandButton1_Click()
Rem este cdigo genera el grfico en la hoja1
Range("A5:B10").Select
Charts.Add
ActiveChart.ChartType = xlColumnClustered
ActiveChart.SetSourceData Source:=Sheets("Hoja1").Range("A5:B10"), PlotBy:= _
xlColumns
ActiveChart.Location Where:=xlLocationAsObject, Name:="Hoja1"
Rem agrega los diferentes tipos de graficos al Listbox1
ListBox1.AddItem "xlColumnClustered"
ListBox1.AddItem "xlBarClustered"

ListBox1.AddItem "xlLineMarkers"
ListBox1.AddItem "xlPie"
ListBox1.AddItem "xlXYScatter"
ListBox1.AddItem "xlAreaStacked"
ListBox1.AddItem "xlDoughnut"
ListBox1.AddItem "xlRadarMarkers"
ListBox1.AddItem "xlCylinderColClustered"
ListBox1.AddItem "xlConeColClustered"
ListBox1.AddItem "xlPyramidColClustered"
Rem agrega las diferentes formas de acomodar los datos al Listbox2
ListBox2.AddItem "Fila"
ListBox2.AddItem "Columna"
End Sub
Private Sub ListBox1_Click()
Rem este cdigo da el tipo de grafico al dar clic en el Listbox1
If ListBox1 = "xlColumnClustered" Then ActiveChart.ChartType = xlColumnClustered
If ListBox1 = "xlBarClustered" Then ActiveChart.ChartType = xlBarClustered
If ListBox1 = "xlLineMarkers" Then ActiveChart.ChartType = xlLineMarkers
If ListBox1 = "xlPie" Then ActiveChart.ChartType = xlPie
If ListBox1 = "xlXYScatter" Then ActiveChart.ChartType = xlXYScatter
If ListBox1 = "xlAreaStacked" Then ActiveChart.ChartType = xlAreaStacked

If ListBox1 = "xlDoughnut" Then ActiveChart.ChartType = xlDoughnut


If ListBox1 = "xlRadarMarkers" Then ActiveChart.ChartType = xlRadarMarkers
If
ListBox1
=
"xlCylinderColClustered"
xlCylinderColClustered
If
ListBox1
=
xlConeColClustered

"xlConeColClustered"

If
ListBox1
=
"xlPyramidColClustered"
xlPyramidColClustered

Then

Then

Then

ActiveChart.ChartType

ActiveChart.ChartType

ActiveChart.ChartType

End Sub
Private Sub ListBox2_Click()
If ListBox2 = "Fila" Then
ActiveChart.SetSourceData Source:=Sheets("Hoja1").Range("A5:B10"), PlotBy:= _
xlRows
End If
If ListBox2 = "Columna" Then
ActiveChart.SetSourceData Source:=Sheets("Hoja1").Range("A5:B10"), PlotBy:= _
xlColumns
End If
End Sub

Antes de ejecutar esta Macro llenas los datos anteriores en la hoja1 de Excel

Archivos Secuenciales de Texto


E este caso veremos como se pueden archivar los datos de una hoja en un archivo
secuencial de texto

En esta hoja podemos observar 5 nombres. La intencin ser archivarlos en un archivo


de texto y borrarlos de la hoja, para despus volverlos a cargar en la hoja. A esto se
le llamara Registro de datos y Consulta de datos.

Ingresamos a Visual Basic con Alt+F11 e Insertaremos un UserForm, en el cual


dibujaremos dos botones, uno con el nombre de Registro y Otro con el Nombre de
Consulta.
Ahora a programar el botn Registro, para poder archivar los nombres.
Private Sub CommandButton1_Click()
Rem se traslada a la celda a8
Range("a8").Select
Rem si no hay ningn dato en a8 que no archive de nuevo
If ActiveCell = Empty Then GoTo salte
Rem abre un archivo en la unidad c con el nombre de datos.txt
Open "c:\datos.txt" For Output As 1
Rem activa una etiqueta para poder regresar
regresa:
Rem escribe el dato de la celda activa en el archivo
Write #1, ActiveCell
Rem borra el dato de la celda
ActiveCell = Empty
Rem baja una fila para el siguiente nombre
ActiveCell.Offset(1, 0).Select

Rem si la celda esta vaca le indicamos que no regrese


If ActiveCell = Empty Then GoTo salte
Rem regresa a escribir el siguiente nombre en el archivo
GoTo regresa:
salte:
Rem se acabo
Rem cierra el archivo
Close #1
End Sub
Los datos quedaran archivados en la unidad y sern devueltos al presionar el botn
consulta. Que a continuacin se muestra:

Ahora a programar el botn consulta


Private Sub CommandButton2_Click()
Rem se traslada a la celda a8
Range("a8").Select
Rem abre un archivo en la unidad C con el nombre de datos.txt
Rem en forma de Leer (input) en el rea de almacenamiento #1
Open "c:\datos.txt" For Input As 1
Rem el bucle While le indica que lea hasta alcanzar el fin del archivo
Rem esto quiere decir que no deje de leer los datos
Rem hasta que no se llegue al ultimo de ellos

Do While Not EOF(1)


Rem lee un dato
Input #1, nombre
Rem lo escribe en la celda
ActiveCell.FormulaR1C1 = nombre
Rem baja un rengln para el siguiente nombre
ActiveCell.Offset(1, 0).Select
Rem activa el ciclo Do While-que regrese hasta
Rem que se cumpla la condicin
Loop
Rem cierra el archivo
Close #1
End Sub
El siguiente cdigo archiva el nombre, la direccin y el telfono en el archivo, crea un
formulario igual con dos botones.
Private Sub CommandButton1_Click()
Rem se traslada a la celda a8
Range("a8").Select
Rem si no hay ningn dato en a8 que no archive de nuevo
If ActiveCell = Empty Then GoTo salte
Rem abre un archivo en la unidad C con el nombre de datos.txt
Open "c:\datos.txt" For Output As 1

Rem activa una etiqueta para poder regresar


regresa:
Rem captura el nombre en una variable
nombre = ActiveCell
Rem borra el dato de la celda
ActiveCell = Empty
Rem se mueve una columna a la derecha
ActiveCell.Offset(0, 1).Select
Rem captura la direccion en una variable
direccion = ActiveCell
Rem borra el dato de la celda
ActiveCell = Empty
Rem se mueve una columna a la derecha
ActiveCell.Offset(0, 1).Select
Rem captura el telefono en una variable
telefono = ActiveCell
Rem borra el dato de la celda
ActiveCell = Empty
Rem escribe los datos nombre, direccion y telefono en el archivo
Write #1, nombre, direccion, telefono
Rem baja una fila para el siguiente nombre

ActiveCell.Offset(1, 0).Select
Rem retrocede dos columnas
ActiveCell.Offset(0, -2).Select
Rem si la celda esta vaca que no regrese ya
If ActiveCell = Empty Then GoTo salte
Rem regresa para escribir el siguiente nombre en el archivo
GoTo regresa:
salte:
Rem se acabo
Rem cierra el archivo
Close #1
End Sub

Private Sub CommandButton2_Click()


Rem se traslada a la celda a8
Range("a8").Select
Rem abre un archivo en la unidad C con el nombre de datos.txt
Rem en forma de Leer (input) en el rea de almacenamiento #1
Open "c:\datos.txt" For Input As 1
Rem el bucle While se ejecutara hasta que no alcance el fin de archivo

Rem esto quiere decir que no deje de leer los datos


Rem hasta que no se llegue al ultimo de ellos
Do While Not EOF(1)
Rem lee los datos
Input #1, nombre, direccion, telefono
Rem escribe en la celda el nombre
ActiveCell.FormulaR1C1 = nombre
Rem se mueve una columna a la derecha
ActiveCell.Offset(0, 1).Select
Rem escribe en la celda la direccion
ActiveCell.FormulaR1C1 = direccion
Rem se mueve una columna a la derecha
ActiveCell.Offset(0, 1).Select
Rem escribe en la celda el telefono
ActiveCell.FormulaR1C1 = telefono
Rem baja un rengln para el siguiente nombre
ActiveCell.Offset(1, 0).Select
Rem retrocede dos columnas
ActiveCell.Offset(0, -2).Select
Rem activa el ciclo Do While-que regrese hasta
Rem que se cumpla la condicin

Loop
Rem cierra el archivo
Close #1
End Sub

Ejemplo Final
Tambin se puede consultar sin necesidad de leer los datos en la hoja, esto quiere
decir leyendo directo del archivo y trayendo los datos al formulario, en el siguiente
ejemplo, se programa el botn consulta en formulario.

Dibuja el siguiente formulario, los dos primeros botones es el mismo cdigo anterior,
pero el tercer botn incluye el siguiente cdigo:
Private Sub CommandButton3_Click()
Open "c:\datos.txt" For Input As 1
Do While Not EOF(1)
Input #1, nombre, direccion, telefono
If nombre = TextBox1 Then
TextBox2 = direccion
TextBox3 = telefono

End If
Loop
Close #1
End Sub
Usted podr consultar cualquiera de los nombres que se encuentren dentro del
archivo, sin necesidad de que existan en la hoja, claro esta que primero es necesario
presionar el botn registro para archivarlos.

RESUMEN
Funciones InputBox y MsgBox
En algunas ocasiones, necesitamos interactuar con el usuario durante la
ejecucin de una macro, ya sea para mostrarle informacin o para obtener de
este una respuesta. En VBA, podemos emplear los cuadros de dilogo
predefinidos InputBox y MsgBox para establecer este vnculo.

InputBox
Cuando necesitamos solicitar informacin especfica al usuario durante la
ejecucin de un procedimiento, utilizamos la funcin InputBox. Esta muestra
en la pantalla un cuadro de dilogo modal en el cual el usuario podr
introducir la informacin requerida, que luego se almacenar dentro de una
variable.

Figura 1. La funcin InputBox presenta una peticin dentro de un cuadro


de dilogo y devuelve lo que el usuario haya escrito.

Esta funcin devuelve los datos introducidos como una cadena de


caracteres, si el usuario presiona el botn Aceptar o la tecla ENTER; en
cambio, si presiona el botn Cancelar o la tecla ESC, esta funcin

devuelve una cadena de longitud cero (). La sintaxis completa de la


funcin InputBox es la siguiente:
InputBox(promt
[,title][,default][,xpost][,ypost][,helpfile, context])
Donde los argumentos se refieren a:
promt (mensaje): es una cadena o variable del

tipo cadena, cuyo valor es presentado por


VBA en el cuadro de dilogo al momento de
AL ejecucin. El mensaje es el nico
que se debe pasar a esta funcin. USUARIO,
longitud est limitada a 1.024 caracteres LA
aproximadamente. El mensaje no tiene
divisin

PARA SOLICITARLE
su INFORMACIN
parmetro requerido
UTILIZAMOS Su
FUNCIN

de lneas y es preciso aadir explcitamente INPUTBOX


separadores de lnea mediante el carcter de retorno de carro
(Chr(13)) o un carcter de
avance de lnea (Chr(10)). El siguiente cdigo muestra un ejemplo en el
que dividimos el mensaje en dos lneas:
Sub ejemplo_2()
Dim rpta As String
rpta = InputBox(Por favor & Chr(13) & _
Ingrese su nacionalidad: )
End Sub

Los cuadros de dilogo predefinidos son siempre modales. Esta caracterstica significa que los cuadros se
deben cerrar antes de poder continuar trabajando con el resto de la aplicacin. Por ejemplo, un cuadro de
dilogo es modal si se requiere que se haga clic en el botn Aceptar o en el botn Cancelar para poder
continuar ejecutando el procedimiento.

Figura 2. Cuando necesitamos dividir un mensaje en varias


lneas, usamos el carcter Chr(13).

title (ttulo): contiene la palabra empleada en la barra de ttulo del

InputBox. Es opcional; si no se utiliza, la barra de ttulo mostrar:


Microsoft Excel. Este es un ejemplo de cmo cambiar el ttulo:
Sub cuadro_dialogo_titulo()
Dim rpta As String
rpta = InputBox(Ingrese su nacionalidad: , _
Nacionalidad)

End Sub

Para interactuar con los usuarios, adems de los cuadros de dilogo predefinidos de Visual Basic para Aplicaciones,
podemos crear cuadros de dilogo personalizados, llamados formularios, que nos permitan mostrar o introducir datos.
En el Captulo 9, describiremos cmo crear formularios personalizados.

Figura 3. Para cambiar el ttulo del cuadro de


dilogo usamos el argumento Title.

default (valor por omisin): tambin es un

parmetro opcional y permite presentar un EL


por defecto en el cuadro en el que el TITLE
introducir la informacin. Si se
omite, el cuadro aparecer en blanco. Por
TTULO ejemplo, supongamos que estamos
PERSONALIZADO a los usuarios que ingresen
sabemos que la mayora de ellos han nacido
INPUTBOX

PARMETRO texto
PERMITE usuario
INGRESAR UN
pidiendo
su nacionalidad y
en PARA EL

la Argentina, entonces podemos establecer como valor predeterminado


para el cuadro de texto la palabra Argentino, como se muestra en el
siguiente procedimiento:
Sub cuadro_dialogo_default)
Dim rpta As String
rpta = InputBox(Ingrese su nacionalidad: , _

Nacionalidad,

Argentino)
End Sub
De esta manera, el usuario no tiene que escribir nada si la informacin
predeterminada es correcta; solamente deber presionar la tecla ENTER
o hacer clic en el botn Aceptar. Si, en cambio, la informacin
predeterminada no es correcta, el usuario podr sustituir el texto por
defecto con su propia informacin.

Figura 4. El dato por defecto Argentino es


seleccionado (resaltado) de manera automtica.

xpost (posicin x): es un nmero que identifica la distancia

horizontal entre el lado izquierdo de la pantalla y la ventada de


entrada. Si se omite este valor, la ventana aparecer centrada
horizontalmente. La distancia se expresa en twips. Este parmetro es
opcional.
ypost (posicin y): es un nmero que identifica la distancia vertical,

expresada en twips, entre el borde superior de la pantalla y la

SINTAXIS DE LA FUNCIN INPUTBOX


Cada argumento dentro de los parntesis se separa con una coma. Si se omite alguno, tambin debe usarse la coma
como separador. Por ejemplo, respuesta = InputBox(Ingrese su nacionalidad: , , Argentino). Los argumentos
deben ir en el orden correcto (mensaje, ttulo, valor por defecto, posicin horizontal, posicin vertical, archivo ayuda,
nmero de contexto para la ayuda).

ventana de entrada. Si se omite este valor, la ventana se mostrar en el


primer tercio de la pantalla. Este parmetro tambin es opcional.
El siguiente ejemplo muestra cmo cambiar la ubicacin horizontal y vertical
del cuadro de dilogo:
Sub cuadro_dialogo_defaul()
Dim rpta As String
rpta = InputBox(Ingrese su nacionalidad: , _
Argentino, 3000, 1500)
End Sub

Nacionalidad,

Figura 5. Para cambiar la posicin del cuadro de dilogo en la ventana,


usamos los argumentos xpost, ypost.

helpfile (archivo ayuda): identifica el archivo de ayuda que se utilizar

para apoyar la realizacin de esta ventana. Si se ingresa este parmetro,


obligatoriamente se debe especificar el parmetro context.
context (contexto): es el nmero de ndice que corresponde al tema de

ayuda asignado por el autor, cuya funcin es permitir la localizacin del


texto de ayuda que se debe mostrar.

MsgBox
Utilizamos la funcin MsgBox cuando necesitamos obtener respuestas
del tipo s o no de los usuarios, y para mostrar mensajes breves, como
errores, advertencias o alertas en un cuadro de dilogo, durante la
ejecucin de un procedimiento. Este cuadro de dilogo puede tener un
icono e incluir hasta tres botones.

Figura 6. El MsgBox es una buena manera de alertar al usuario acerca de algn


problema o para pedirle una respuesta del tipo s/no.

La funcin MsgBox hace dos cosas: muestra un cuadro de dilogo para


proporcionarle informacin al usuario y devuelve un valor de tipo
Integer en funcin del botn que el usuario ha presionado. Si deseamos
conocer el botn que ha presionado el usuario y actuar en consecuencia,
debemos almacenar en una variable el valor que se genera al pulsar un
botn de mensaje. La sintaxis completa de la funcin es la siguiente:

Un twip es una unidad de medida de pantalla que es igual a 1/20 de punto de impresora. En una pulgada, hay 1440
twips y, en un centmetro, hay 567 twips. Es una unidad de medida utilizada en los lenguajes de programacin para
asegurar la ubicacin y la proporcin de los elementos de la pantalla de la aplicacin.

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


Donde los argumentos se refieren a:
promt (mensaje): es una cadena o variable del tipo cadena, cuyo valor es

presentado por VBA en el cuadro de dilogo al momento de su ejecucin.

Posee las mismas caractersticas que el mismo argumento de los


InputBox. El mensaje es el nico argumento requerido, aunque los
botones y el ttulo se incluyen normalmente. La siguiente sintaxis ilustra
un ejemplo de un MsgBox:
MsgBox La macro termin de ejecutarse

Figura 7. Un simple cuadro de mensaje que solo brinda informacin a los


usuarios acerca de un procedimiento.

buttons (botones): es la suma de valores que especifica varias

propiedades, nmero y tipos de botones por mostrar, estilo de icono, el


botn activado por defecto y la modalidad del cuadro de mensaje. Si se
omite este argumento, el valor predeterminado es 0, que corresponde al
botn Aceptar.
title (ttulo): contiene el nombre empleado en la barra de ttulo del cuadro

de dilogo del MsgBox. Es un argumento opcional; si no se utiliza, la


barra de ttulo mostrar Microsoft Excel.

helpfile, context: estos argumentos opcionales estn disponibles para

agregar una ayuda al cuadro de dilogo.

El argumento buttons
El argumento buttons nos permite mostrar distintos cuadros de
mensajes de acuerdo con el valor que tome este argumento. Este valor
se obtiene combinando diferentes cdigos para definir el tipo de
botones, para especificar el tipo de iconos, para programar el botn
seleccionado por defecto e indicar el modo de ejecucin. En las
siguientes tablas veremos los valores que se pueden tomar:

CUADRO DE MENSAJES DEL ARGUMENTO BUTTONS


Botones por mostrar

Valor

Constante

Aceptar

vbOkOnly

Aceptar y cancelar

vbOkCancel

Anular, reintentar e ignorar

vbAbortRetryIgnore

S, no y cancelar

vbYesNoCancel

S y no

vbYesNo

Reintentar y cancelar

vbRetryCancel

Tabla 1. Valores que puede tomar el argumento buttons.

En el ejemplo que presentamos a continuacin, utilizamos la funcin


MsgBox para mostrar un mensaje en un cuadro de dilogo que contiene
los botones S y No para que el usuario seleccione la respuesta:
Sub ejemplo_botones()
MsgBox Desea eliminar los datos?, _
Informacin Importante

vbYesNo,

End Sub

Figura 8. Solamente podremos presionar los botones S y No para


continuar. Este mensaje no se puede cancelar con la tecla ESC.

De manera alternativa, en lugar de emplear la constante vbYesNo,


podramos utilizar el valor 4, que es el que representa a esa constante,
como podemos observar en el cdigo que presentamos a continuacin.
Las dos posibilidades generan el mismo mensaje.
Sub ejemplo_msgbox()
MsgBox Nombre no vlido, 4
End Sub

Para mejorar el formato de presentacin, en los mensajes de cuadros de dilogo, es posible insertar algunos
caracteres especiales utilizando, por ejemplo, las siguientes constantes: vbCrlf (retorno de carro y salto de

lnea), vbCr (salto de prrafo), vbNullChar (carcter nulo), vbNullString (cadena de longitud nula), vbTab
(tabulacin) y vbBlack (retroceso).

CONSTANTES DEL ARGUMENTO BUTTONS

Constante

Valor

vbCritical

16

vbQuestion

32

vbExlamation

48

vbInformation

62

Tabla 2. Otros valores que puede tomar el argumento buttons.

Continuando con el ejemplo que mostramos anteriormente, en esta


ocasin vamos a utilizar la funcin MsgBox para presentar un mensaje
en el cuadro de dilogo que no solo contiene los botones S y No, para
que el usuario pueda seleccionar una respuesta, sino que tambin muestra
un icono de advertencia:
Sub ejemplo_botones2()
MsgBox Desea eliminar los datos?, _
vbExclamation, Informacin _

vbYesNo +

Importante

End Sub

BOTN ACTIVADO POR DEFECTO


Botn por defecto

Valor

Constante

Primer botn

vbDefaultButton1

Segundo botn

256

vbDefaultButton2

Tercer botn

512

vbDefaultButton3

Cuarto botn

768

vbDefaultButton4

Tabla 3. Opciones que nos permiten programar cul ser

MODALIDAD DE UN MENSAJE
el botn predeterminado.

Modalidad

Valor

Constante

Aplicacin modal

vbApplicationModal

Sistema modal

4096

vbSystemModal

Tabla 4. Opciones que nos permiten establecer la modalidad de un MsgBox.

PRESENTACIN DE UN MENSAJE
Descripcin

Valor

Constante

Muestra la ventana del cuadro

65536

vbMsgBoxSetForeground

Alinea el texto a la derecha.

524288

vbMsgBoxRight

Especifica el orden de lectura de derecha

1048576

vbMsgBoxRtlReading

de mensaje en primer plano.

a izquierda para los sistemas hebreo y rabe.

Tabla 5. Opciones que nos permiten establecer la presentacin de un MsgBox.

Figura 9. Ahora, tenemos un cuadro de mensaje


en el que hemos agregado un icono de exclamacin para
llamar la atencin del usuario.

Por ejemplo, si queremos alinear el texto del mensaje y del ttulo a la


derecha, usamos el siguiente cdigo:
Sub ejemplo_botones2()
MsgBox Desea eliminar los datos?, _
vbExclamation + vbMsgBoxRight, _

vbYesNo +

Informacin

Importante
End Sub

Figura 10. Hemos configurado un cuadro de mensaje cuyo texto


se encuentra alineado a la derecha.

Como vimos anteriormente, cuando un cuadro de dilogo MsgBox se establece como sistema modal, el usuario no
podr continuar el trabajo con ninguna aplicacin hasta que responda el cuadro de mensaje que se le presenta. Por
lo general, esta opcin no es muy empleada, ya que se bloquean todas las aplicaciones hasta que el usuario
responda el mensaje.

Los valores de retorno


Como hemos mencionado con anterioridad, el cuadro de dilogo
MsgBox devuelve un nmero entero entre 1 y 7 dependiendo del botn
que se ha presionado. Este valor puede almacenarse en una variable
para luego tomar decisiones adecuadas sobre la base de la eleccin que
han realizado los usuarios.
En la tabla que presentamos a continuacin, vemos cada uno de los
valores que puede devolver el cuadro de dilogo MsgBox de acuerdo
con el botn que ha presionado el usuario.

VALORES DE RETORNO
Constante

Valor

Botn presionado

vbOk

Aceptar

vbCancel

Cancelar

vbAbort

Anular

vbRetry

Reintentar

vbIgnore

Ignorar

vbYes

vbNo

No

Tabla 6. Opciones que nos permiten establecer el valor de retorno de un MsgBox.

En el siguiente cdigo mostramos cmo podemos utilizar el valor de retorno


de la funcin MsgBox:

Microsoft Excel posee un amplio conjunto de funciones lgicas. Como podemos esperar, la mayora de ellas
utiliza pruebas condicionales para determinar si una condicin especificada es verdadera o falsa. La prueba
condicional es una ecuacin que compara dos nmeros, funciones, frmulas, cadenas o valores lgicos y debe
incluir, al menos, un operador lgico. En el prximo captulo, nos dedicaremos a estudiar las estructuras
condicionales de VBA.

Sub ejemplo_mensaje10()
Dim rpta As Integer
rpta = MsgBox(Desea continuar?, 4)
If rpta = 7 Then
MsgBox (Hasta pronto...)
Exit Sub
Else
MsgBox (Continuamos trabajando)
End If
End Sub

Figura 11. El cuadro de dilogo proporciona retroalimentacin a la macro


segn el botn que ha presionado el usuario.

Cuando este procedimiento se ejecuta, muestra un cuadro de mensaje con los


botones S y No y, luego, recibimos la respuesta del usuario en la variable
rpta. Esta respuesta puede ser 6 o 7 en funcin de si el usuario hace clic en el
botn S o No. Usamos la estructura If Then (ms adelante explicaremos
en detalle el uso de esta estructura) para probar el valor de la variable rpta. Si
el valor es 7, significa que el usuario presion el botn No, por lo tanto, se le
muestra un mensaje y sale de la subrutina, pero si hace clic en el botn S, el
procedimiento contina mostrando otro mensaje en pantalla.

Funciones de conversin de tipo


Como hemos visto en el captulo anterior, las
variables pueden almacenar diferentes tipos de
NO TODOS LOS
datos. El tipo de dato determina la naturaleza
TIPOS DE DATOS SE
del conjunto de valores que toma una variable.
Puede ocurrir que, a veces, necesitemos
importar PUEDEN
CONVERTIR o vincular datos de fuentes externas
o utilizar A
al tipo de dato
CUALQUIER OTRO los datos de manera diferente
predeterminado. Para esto, vamos a utilizar las
TIPO DE DATO
funciones de conversin de tipo que provee
VBA.
Debemos tener en cuenta que no todos los tipos
de datos se pueden convertir a cualquier otro tipo de datos. Cuando
usamos una funcin de conversin de tipo, esta devuelve el valor convertido,
pero no cambia el valor almacenado.
VBA proporciona varias funciones de conversin que podemos usar
para convertir valores en tipos de datos especficos. La sintaxis de las
funciones es la siguiente: Nombre_funcion(argumento). Donde:
Nombre_funcion: determina el tipo de retorno.
argumento: puede ser un valor variable, constante o una expresin.

A continuacin, describiremos cada una de las funciones de


conversin que podemos utilizar en VBA.

Funcin CBool
La funcin CBool convierte una expresin numrica en un valor
booleano. Los valores cero los convierte en Falso (False) y todos los
dems en Verdadero (True). Si la expresin es una cadena de
caracteres alfabticos, se obtiene un error de coincidencia de tipos.
Esta funcin es ideal para usarla en las sentencias condicionales. Su
sintaxis es CBool(argumento) .
Por ejemplo, las siguientes expresiones devuelven Falso porque cada
argumento se evala como cero (0):
X= CBool(0)
X= CBool(27-27)

Figura 12. Un valor booleano puede ser Verdadero o Falso. El


valor Falso es el nmero o el carcter 0.

Las siguientes expresiones devuelven Verdadero, porque todos los


argumentos se evalan como un valor distinto a cero (0):

X= CBool(1)
X= CBool(27-3)

La siguiente expresin devuelve error, porque se utilizan como argumento


caracteres alfabticos:
X= CBool(abc)

Figura 13. Si utilizamos como argumento caracteres alfabticos, se obtiene un error


de coincidencia de tipos.

Funcin CByte

x = CByte(21.267)

La funcin CByte convierte una expresin

Su sintaxis es CByte(argumento). Por ejemplo, la


EN BYTE
En VBA, existen funciones de conversin aparentemente repetidas como str(), cstr(), dbl(), cdbl(), entre otras. Las que no
tienen la c delante son ms antiguas y trabajan en el formato nativo del Basic, el ingls americano, donde, por ejemplo, el
separador decimal es el punto. En cambio, las funciones precedidas por la letra c son ms actuales y usan la configuracin
regional del sistema.

Figura 14. Si la expresin queda fuera del intervalo apropiado para el


subtipo Byte, se produce un error.

Funcin CCur
La funcin CCur convierte una expresin numrica al tipo moneda. El
resultado se redondea a cuatro dgitos despus del punto decimal. Su sintaxis
es CCur(argumento). Este ejemplo devuelve 271.2196:
x = CCur(271.21967)

Funcin CDate
La funcin CDate convierte una expresin numrica o de cadena que tenga
formato de fecha u hora a un tipo de dato Date. Determina vlidos los
formatos fecha/hora de acuerdo con la configuracin regional de Windows.
Su sintaxis es CDate(argumento).
Si la expresin es un valor numrico, CDate convierte la parte entera del
nmero de acuerdo con el nmero de das, desde el 30 de diciembre de
1899. Si la expresin contiene un valor decimal, se convierte a tiempo
multiplicando el decimal por 24. Por ejemplo, la siguiente expresin que
devuelve 02/04/1974 11:12:29 p.m.

CDate(27121.967)

Si el argumento es un valor de cadena, la funcin convierte la cadena siempre


que esta represente una fecha vlida. Por ejemplo, la siguiente expresin que
devuelve 28/10/1996.
CDate(28 octubre 1996)

Figura 15. La funcin CDate reconoce formatos de fecha


definidos en la configuracin regional del sistema.

Funcin CDbl
La funcin CDbl convierte una expresin a un tipo de datos Double. La
expresin debe ser un nmero que est dentro del rango doble. Su
sintaxis es CDbl(argumento). Este ejemplo devuelve 271221,967:
CDbl(27121.967)

Los valores que pasamos a una funcin de conversin deben ser vlidos para el tipo de dato de destino o se producir
un error. Por ejemplo, si intentamos convertir un tipo Long en un Integer, el tipo Long debe estar en el intervalo
vlido de tipo de datos Integer.

Funcin CDec
La funcin CDec convierte una expresin a un tipo de datos Decimal.
Como vimos en los casos anteriores, esta funcin tambin tiene algunas
restricciones que debemos tener en cuenta antes de su aplicacin. La
expresin debe ser un nmero o una cadena numrica que se encuentre
dentro del rango decimal. Su sintaxis es CDec(argumento). Por ejemplo,
tenemos la siguiente expresin que devuelve el valor 271221,967.
CDec(27121.967)

Funcin CInt
La funcin CInt convierte una expresin a un tipo de dato Integer. La
expresin debe ser un nmero o una cadena numrica que se encuentre dentro
del rango de nmero entero (-32678 a 32767). Si el argumento tiene un valor
decimal, VBA redondea al nmero entero ms prximo.
Su sintaxis es CInt(argumento). Por ejemplo, tenemos la siguiente expresin
que devuelve 271222.
CInt(27121.967)

Figura 16. Los valores iguales o mayores a 0,5 se redondean hacia arriba, y los
valores menores a 0,5 se redondean hacia abajo.

Funcin CLng
La funcin CLng convierte una expresin numrica a un entero
largo. La expresin debe ser un nmero o cadena numrica que est
dentro del rango entero largo. Su sintaxis es CLng(argumento). Por
ejemplo, la siguiente expresin que devuelve 272.
CLng(271.967)

Funcin CSng
La funcin CSng convierte una expresin numrica a una de simple
precisin. Su sintaxis es CSng(argumento). Por ejemplo, la siguiente
expresin que devuelve 271967.
CSng(271.967)

String
CStr(argumento)

CStr(x)

Funcin CStr
La funcin CStr convierte una variable de

Por ejemplo, en este caso, tenemos la variable


DATO EN STRING
Visual Basic para Aplicaciones acepta un intervalo de fechas desde el 1 de enero de 100 hasta el 31 de
diciembre de 9999. En cambio Excel para Windows solo admite el intervalo de fechas entre el 1 de enero de
1990 y el 31 de diciembre de 9999, y Excel para Macintosh tiene un intervalo ms pequeo que va desde el 1
de enero de 1904 al 31 de diciembre de 9999.

Figura 17. Empleamos la funcin CStr para transformar un valor


de tipo booleano en una cadena.

Funcin CVar
La funcin CVar convierte cualquier variable al tipo Variant. Podemos
usar esta funcin para conseguir que una expresin no numrica nos
devuelva una numrica. Su sintaxis es CVar(argumento). Por ejemplo,
la siguiente expresin que devuelve 27.
x = CVar(27)

Funcin Val
La funcin Val convierte una cadena en un nmero, quita los espacios en
blanco de un argumento de cadena y convierte los

Si bien VBA realiza la conversin implcita de tipos de datos en tiempo de ejecucin entre tipos de datos compatibles,
es decir, efecta las conversiones de datos sin una sintaxis especial en el cdigo, es preferible que nosotros hagamos
las conversiones empleando las funciones de conversin de tipo para prevenir errores.

caracteres restantes en un nmero. Si la cadena tiene algn carcter


no numrico, devuelve cero (0). Su sintaxis es Val(argumento). Por
ejemplo, la siguiente expresin que devuelve el nmero -123. x =
Val(-123)

Funciones de comprobacin
Visual Basic para Aplicaciones proporciona
un conjunto de funciones que nos ayudarn a
comprobar o validar el tipo de datos ingresados
por el usuario o los datos contenidos en las
celdas. Estas funciones prueban el valor para ver
DE si se trata de un tipo especificado. DATOS
A continuacin, describiremos algunas de las

LAS FUNCIONES DE
COMPROBACIN
VALIDAN EL TIPO
INGRESADO

funciones de comprobacin.POR EL USUARIO

Funcin IsDate
Esta funcin comprueba si la expresin contiene un valor que se
puede convertir a una fecha. Si el contenido representa una fecha
vlida, la funcin devuelve Verdadero (True).
Por ejemplo, el siguiente procedimiento comprueba si el contenido
de la celda A2 es una fecha. Si lo es, devuelve Verdadero en la
celda C2, en caso contrario devuelve Falso.
Sub ejemplo_isdate()
Set x = Range(A2)

r = IsDate(x)
Range(c2).Value = r
End Sub

Figura 18. En este ejemplo, empleamos la funcin IsDate para comprobar


el valor de la celda A2.

Funcin IsNumeric
Esta funcin comprueba si la expresin contiene un valor que se puede
interpretar como nmero. Por ejemplo, el contenido de A3.

Figura 19. En este ejemplo, empleamos la funcin IsNumeric para comprobar


el valor de la celda A3.

Si el contenido es numrico, devuelve Verdadero en la celda C3, en caso


contrario, devuelve Falso.
Sub ejemplo_numeric()
Set x = Range(A3)
r = IsDate(x)
Range(c3).Value = r
End Sub

Funcin IsNull
Esta funcin comprueba si la expresin contiene un valor nulo; devuelve
Verdadero en el caso de que as sea y Falso en el resto de los casos. Por

ejemplo, el siguiente procedimiento devuelve Verdadero porque la


variable x contiene un valor nulo:
Sub ejemplo_isnull()
x = Null
x=
IsNull(x)
MsgBox x
End Sub

Una ventaja de usar la funcin Val es que, si el argumento de cadena no se puede convertir a un nmero, esta funcin
siempre devolver 0 (cero), mientras que las funciones equivalentes (CByte, CCur, CDbl, CDec, CLng, CSng)
devolveran el mensaje de error: No coinciden los tipos.

Funcin IsEmpty
Esta funcin se utiliza para determinar si las variables individuales estn
inicializadas; devuelve Verdadero si esto se cumple y, en caso
contrario, devuelve Falso. El siguiente cdigo comprueba si en la celda
A3 de la hoja activa hay datos:
Sub ejemplo_empty()
MsgBox IsEmpty(Range(A3))
End Sub

Figura 20. Como en la celda A3 no hay datos,


IsEmpty(Range(A3)) devuelve Verdadero.

Una variable Variant tiene el valor Empty antes de asignarle un valor. Este es un valor especial distinto de 0 (cero),
una cadena de longitud cero () o el valor Null, que desaparece en cuanto se le asigna cualquier valor (incluyendo 0,
una cadena de longitud cero o Null). Para restablecer una variable Variant como Empty, se le debe asignar la palabra
clave Empty.

Funcin IsObject
Esta funcin se utiliza para comprobar si una variable representa otra
variable de tipo Object; si es as, devuelve Verdadero. El siguiente
cdigo muestra esta comprobacin:
Sub ejemplo_isobject()
Dim y As Object
MsgBox IsObject(y)
End Sub

Funciones matemticas
Visual Basic para Aplicaciones tambin cuenta con funciones matemticas
propias para realizar operaciones matemticas tales como raz cuadrada y
valor absoluto, que podemos emplear en nuestros procedimientos. A
continuacin, vamos a describir algunas de las funciones matemticas ms
comunes.

Funcin Abs
La funcin Abs devuelve el valor absoluto de un nmero. El valor
absoluto de un nmero es la distancia que hay entre un nmero y el 0, es
decir, dicho nmero sin signo. Su sintaxis es Abs(nmero).
Por ejemplo, tenemos la siguiente instruccin:

Las funciones integradas de Visual Basic para Aplicaciones no son las mismas que las de Microsoft Excel, sin
embargo, podemos utilizarlas en los procedimientos de VBA, mediante el objeto WorksheetFunction, que est
contenido en el objeto Application. Este objeto contiene todas las funciones de Microsoft Excel que podemos
llamar desde los procedimientos de VBA.

Distancia = Abs(B - A)

Siendo A = 35 y B = 45, la funcin devuelve 10.

Figura 21. La funcin Abs devuelve el valor absoluto del trmino


que se encuentra entre parntesis.

Funcin Int
La funcin Int devuelve la parte entera de un nmero decimal. Su sintaxis es
Int(nmero). Por ejemplo, la instruccin que devuelve 27:
Int(27,12)

Si este nmero es negativo, Int devuelve el primer entero negativo que es


menor o igual que el nmero. Por ejemplo, la siguiente instruccin que
devuelve -28:
Int(-27,12)

Funcin Fix
La funcin Fix tambin devuelve la parte entera de un nmero decimal, pero,
a diferencia de la funcin Int, si el nmero es negativo devuelve
el primer entero negativo que es mayor de ese nmero. Su sintaxis es
Fix(nmero). Por ejemplo, la siguiente instruccin que devuelve -27:

Fix(-27,12)

Figura 22. En este cdigo, podemos comparar el uso de las funciones Int y
Fix. Ambas devuelven la parte entera de un nmero decimal.

Funcin Rnd
La funcin Rnd genera un nmero aleatorio entre los valores 0 y 1. Su
sintaxis es Rnd(nmero).
El argumento nmero determina cmo la funcin genera el nmero aleatorio.
Si es 0, se obtiene el ltimo nmero aleatorio generado; si es menor que 0, se
repite el nmero cada vez que se ejecute el procedimiento; en cambio, si es
mayor que 0, genera el siguiente nmero aleatorio en la secuencia. Esto se
debe a que los nmeros generados por la funcin Rnd son solo nmeros
pseudoaleatorios, es decir, la primera vez que se ejecuta la funcin, arranca la
generacin de nmeros aleatorios a partir de un nmero denominado semilla
y ejecuta operaciones matemticas relacionadas con esa semilla para generar
el primer nmero aleatorio. Para solucionar esta pseudoaleatoriedad, se debe
cambiar la semilla que se usa como base para la generacin de nmeros
aleatorios, usando antes de la funcin Rnd, la instruccin Randomize.

Funcin Sqr
La funcin Sqr devuelve la raz cuadrada de una expresin numrica, la cual
debe ser un valor no negativo para evitar que se produzcan errores durante la
ejecucin del procedimiento. Su sintaxis es Sqr(nmero).

Figura 23. En este cdigo, hemos utilizado la funcin Sqr,


que devuelve 5 como resultado.

Funciones de cadenas
Visual Basic para Aplicaciones tambin ofrece una gran cantidad de
funciones diseadas para trabajar con las variables de cadena, que podemos
utilizar, por ejemplo, para analizar una porcin de una cadena, comprobar si
una cadena contiene otra, sustituir partes de una cadena con otro valor y
concatenar cadenas, entre otras posibilidades.
A continuacin, describiremos algunas funciones de cadena ms comunes que
nos permitirn realizar todas estas tareas y tambin algunas otras de gran
utilidad.

Funcin Asc
La funcin Asc devuelve un valor entero

(Integer) entre 0 y 255, que representa el valor


ASCII del primer carcter de la cadena. Es NO
importante tener en cuenta que, si la cadena no
contiene caracteres, se producir un error
CARACTERES, SE ejecutemos el cdigo.
ERROR
Su sintaxis es Asc (cadena).

SI LA CADENA
CONTIENE

Por ejemplo, tenemos la siguiente instruccin


devuelve el nmero 67:

EN EL CDIGO que

cuando
GENERAR UN

Asc(Christian)

Funcin Chr
La funcin Chr es la inversa de la funcin Asc, es decir, devuelve el
carcter de un nmero. El argumento es dato de tipo Long que
identifica a un carcter. Su sintaxis es Chr (cadena).
Por ejemplo, la siguiente instruccin que devuelve el carcter C:
Chr(67)

Figura 24. En este cdigo, podemos comprobar el


funcionamiento de la funcin Asc y de su inversa Chr.

Funcin Len
La funcin Len se utiliza para determinar el nmero de caracteres
de una cadena; devuelve un entero largo, excepto cuando la cadena
es nula, en cuyo caso devuelve un valor nulo. Su sintaxis es
Len(cadena) .

Figura 25. La funcin Len es una de las funciones de texto ms utilizadas, en


este ejemplo, Len(Categora A), devuelve 11.

Funcin Left
La funcin Left devuelve la serie de caracteres ms a la izquierda
de un argumento de cadena. Su sintaxis es
Lef(cadena,nro_caracteres), donde nro_caracteres indica la
cantidad de caracteres por extraer del argumento cadena. Por
ejemplo, la siguiente instruccin que devuelve Categora:
Left(Categora A,9)

Una de las ventajas de la funcin CInt con respecto a la funcin Val es que utiliza la configuracin regional
del sistema y, por lo tanto, reconoce el separador de miles, mientras que la funcin Val, al no reconocer la
configuracin regional, convierte la expresin 1000 a 1.

Funcin Right
Similar a la funcin anterior, Right devuelve la serie de
caracteres ms a la derecha de un argumento de cadena. Su
sintaxis es
Right(cadena,nro_caracteres), donde nro_caracteres indica la
cantidad de caracteres por extraer del argumento cadena.
Por ejemplo, la siguiente instruccin devuelve la letra A:
Right(Categora A,1)

Funcin Mid
La funcin Mid devuelve los n caracteres de una

cadena

especificada, situados a partir de una MID

DEVUELVE

LOS N determinada posicin. Su sintaxis es

Mid(cadena,

CARACTERES DE UNA start[, lenght]), donde:


CADENA
SITUADOS
start: indica la posicin a partir de la cual A PARTIR DE UNA

vamos a extraer los caracteres. Este nmero


debe ser de tipo Long y mayor que 0. Si es POSICIN mayor que el
nmero de caracteres de la cadena, la funcin devuelve una cadena
de longitud cero.
lenght: indica el nmero de caracteres que queremos extraer. Su
tipo es Log. Este parmetro es opcional; si no se encuentra, la
funcin devolver el resto de la cadena, empezando por la
posicin start.

Por ejemplo, la siguiente instruccin que devuelve la cadena gor:

Mid(Categora A,5,3)

Las funciones trigonomtricas bsicas que proporciona Visual Basic para Aplicaciones son algunas
de las ms utilizadas en esta rea: Sin(nmero) que permite calcular el seno, Cos(nmero) para
calcular el coseno, Tan(nmero) que permite calcular la tangente y Atn(nmero) para calcular el
arcotangente. En estos casos la nica restriccin es que el argumento de estas funciones siempre
debe ser una expresin numrica que exprese un ngulo en radianes.

Figura 26. Las funciones Left, Right y Mid regresan una porcin de
cadena dependiendo de la funcin y de los argumentos proporcionados.

Funcin LTrim
Esta funcin quita los espacios iniciales de una cadena. Su sintaxis
es LTrim(cadena). Por ejemplo, si x contiene Hola devuelve
Hola .
LTrim(x)

Funcin RTrim
Esta funcin quita los espacios finales de una cadena. Su sintaxis es
LTrim(cadena). Por ejemplo, si x contiene Casa devuelve
Casa.
RTrim(x)

Si el mensaje de un cuadro de dilogo es una cadena de texto, lo pondremos entre comillas. Si en cambio es
una variable o una expresin, ir sin comillas. Adems, recordemos que, si queremos escribir ms de una
lnea en el mensaje del cuadro de dilogo, utilizaremos el carcter de cambio de lnea Chr(13).

Funcin Trim
Quita los espacios iniciales y finales de una cadena. Su sintaxis es
Trim(cadena). Por ejemplo, si x contiene rbol devuelve
rbol.
Trim(x)

Figura 27. Las funciones LTrim, RTrim y Trim devuelven un


tipo string que contiene la copia de una cadena determinada a la
que se le han eliminado los espacios en blanco.

Funcin UCase
La funcin UCase convierte en mayscula todos los caracteres de una
cadena de texto. Su sintaxis es UCase(cadena). Por ejemplo, la
funcin Ucase (hola) devuelve la cadena HOLA.

En Visual Basic para Aplicaciones tambin existen otras funciones de cadena, como, por ejemplo, la funcin
StrComp(string1, string2 [comparar], que devuelve un entero como resultado de la comparacin de dos
cadenas, y la funcin StrReverse(cadena), que devuelve una cadena con los caracteres invertidos respecto
a la cadena presentada como argumento.

Funcin LCase
La funcin LCase convierte en minscula todos los caracteres de
una cadena de texto. Su sintaxis es LCase(cadena). Por ejemplo, la
funcin Ucase (HOLA) devuelve hola.

Figura 28. Las funciones UCase y LCase nos permiten pasar


una cadena de caracteres a maysculas y minsculas.

Funcin InStr
La funcin InStr devuelve la posicin de una subcadena dentro
de una cadena. Esta funcin distingue entre maysculas y
minsculas. Su sintaxis es InStr([start,] string1,
string2[comparar]), donde:
start: es un parmetro opcional que indica la posicin donde empieza

a buscar.

VBA tambin posee la funcin Format que permite cambiar el formato de una cadena a maysculas y
minsculas. Por ejemplo, la funcin Format(cadena, >) devuelve la cadena convertida a mayscula,
en cambio, si usamos como cadena de formato <, nos devuelve la cadena convertida a minscula.

string1: es la cadena o expresin de cadena en la que se busca.


string2: es la cadena buscada.
comparar: es una constante opcional que indica que se consideran

cadenas iguales. Si no se escribe, toma el valor por defecto. En la


siguiente tabla, podemos ver las opciones para comparar.

VALORES COMPARAR
Constante VBA

Valor

Descripcin

vbUseCompareOption

-1

Sigue el criterio definido en Option Compare.

vbBinaryCompare

Hace una comparacin a nivel bytes.

vbTextCompare

Compara los textos.

Tabla 7. Opciones que puede tomar el argumento comparar de la funcin InStr.

Por ejemplo, la funcin InStr(1, Christian Germn,


Germn) devuelve 11, porque el argumento Germn comienza
en la onceava posicin dentro de la cadena Christian Germn.

Figura 29. La funcin InStr devuelve


un tipo Variant (Long), que indica la
posicin en la que se encuentra la subcadena
buscada.

La funcin InStrRev es similar a la funcin InStr, solo que la


bsqueda empieza desde el final de la cadena.

Funcin Replace
La funcin Replace se utiliza para reemplazar una subcadena por
otra en una cadena. Su sintaxis es:
Replace(expresin, encontrar, reemplazarCon [, inicio[,
contar[, comparar]]]).

Figura 30. En este caso, MsgBox Replace(Mi auto es azul,


azul, rojo) devuelve la cadena Mi auto es rojo.

Donde
expresin: es la cadena o expresin de cadena en la que se busca.
encontrar: es la subcadena buscada.

Unicode es un esquema de codificacin de caracteres que utiliza 2 bytes por cada carcter. ISO
(Internacional Standards Organization) define un nmero dentro del intervalo 0 a 65.535 por cada
carcter y smbolo de cada idioma, ms algunos espacios vacos para futuras ampliaciones.

remplazarCon: es la cadena que reemplazar a la anterior.


inicio: indica la posicin dentro del texto original (expresin) para

comenzar a reemplazar
comparar: como en la funcin IntStr, es la forma de comparar.

Funciones de fecha y hora


VBA ofrece varias funciones para obtener la fecha y la hora del reloj
del sistema, que podemos utilizar en diferentes procedimientos. A
continuacin, describiremos las principales de esta clase.

Funcin Date
La funcin Date devuelve la fecha actual del sistema operativo de
nuestra computadora en el formato que tengamos definido para la
representacin de fechas del sistema. Su sintaxis es Date.

Funcin Now
La funcin Now devuelve la fecha y la hora actual del sistema
operativo en el formato que tengamos definido para la
representacin de fechas del sistema. Su sintaxis es Now.

Funcin Time
La funcin Time devuelve la hora actual del sistema operativo de
nuestra computadora en el formato que tengamos definido para la
representacin de fechas del sistema. Su sintaxis es Time.

Cuando utilizamos la funcin InputBox, tenemos pocas posibilidades de modificar los componentes del
cuadro de dilogo. Solo podremos cambiar el texto de la barra de ttulo, la solicitud de datos que se
presenta al usuario, la posicin del cuadro de dilogo en la pantalla y si tendr un botn de ayuda o no.

Figura 31. VBA tiene muchas funciones integradas que nos


permiten trabajar con fechas y horas.

Funcin DateDiff
La funcin DateDiff determina la cantidad de tiempo entre dos fechas
diferentes. Esta funcin puede devolver cualquier intervalo de tiempo
entre los valores de fecha especificados, como meses, das, horas,
minutos o incluso segundos. Su sintaxis es:
DateDiff(intervalo, fecha1, fecha2[, primerdasemana[,
primerasemanaao]]).
Donde:
intervalo: es el intervalo de tiempo utilizado para calcular la

diferencia entre fecha1 y fecha2. Hay diez diferentes valores que se


pueden

La funcin Date devuelve la fecha en el idioma del sistema, si es en castellano es dd/mm/aaaa, si es ingls es
mm/dd/aaaa. Para cambiarlo, se puede utilizar la funcin Format. Esta funcin devuelve una cadena formateada de
acuerdo con las instrucciones contenidas en la cadena formato, por ejemplo,
Format(date, dd/mm/aaaa)

especificar para este argumento, los detallamos en la Tabla 8.


fecha1 y fecha2: especifica las dos fechas que se utilizarn en el

clculo. Puede ser una cadena de fecha, el valor devuelto por una
funcin o el contenido de una celda, mientras sea una fecha vlida.
primerdasemana: es una constante que indica el primer da de la

semana. Si se omite, se asume que es domingo. Veamos la Tabla 9.


primerasemanaao: determina la primera semana del ao. Si se

omite, considera como primera semana aquella en la que se encuentre


el 1 de enero, incluso si cae en sbado. Para esto, veamos la Tabla
10.
VALORES INTERVALO
Intervalo

Descripcin

Intervalo

Descripcin

yyyy

Ao

Da de la semana

Trimestre

ww

Semana

Mes

Hora

Da del ao

Minuto

Da

Segundo

Tabla 8. Opciones que puede tomar el argumento intervalo de la funcin DateDiff.

PRIMER DA DE LA SEMANA (PRIMERDASEMANA)


Intervalo
yyyy
q

Descripcin
Ao. Solo compara el ao de ambas fechas 31/12/11 y 1/1/12, devuelve el valor de un ao.
Trimestre. Divide el ao en cuatro trimestres y devuelve el nmero de trimestre entre fechas.

El generador de nmeros aleatorios comienza la generacin de nmeros aleatorios con una semilla
determinada. Cada semilla genera una serie diferente de nmeros aleatorios; eso significa que las series de
nmeros aleatorios se repitan cada vez que el procedimiento se ejecute, a menos que el generador de nmeros
aleatorios se reinicialice con un nuevo valor semilla.

Mes. Solo compara la porcin mes de ambas fechas 31/12/11 y 1/12/12, devuelve
el valor de un mes.

Da del ao. Mismo resultado que usando d.

Da. Nmero de da entre dos fechas.

Da de la semana. Determina el da de la semana de la primera fecha, por ejemplo, mircoles,


y cuenta la cantidad de mircoles entre las fechas.

ww

Semana. Se basa en el valor especificado como el argumento firstdayofwek para determinar


el nmero de semana entre dos fechas.

Hora. Si un horario no est especificado, usa medianoche o 00:00.

Minuto. Nmero de minuto entre dos horarios.

Segundo. Nmero de segundo entre dos horarios.

Tabla 9. Opciones que puede tomar el


argumento primerdiasemana de la funcin
DateDiff.

PRIMERA SEMANA DEL AO (PRIMERASEMANAAO)


Constante

Valor

Descripcin

vbUseSystem

Utiliza la configuracin de la API de NLS.

vbFirstJan1

Empieza con la semana en la que se encuentra el 1 de enero (predeterminado).

vbFirstFourDays

Empieza con la primera semana que tenga al menos cuatro das en el nuevo ao.

vbFirstFullWeek

Empieza con la primera semana que est completamente incluida en el nuevo ao.

Tabla 10. Opciones que puede tomar el argumento primerasemanaao de la


funcin DateDiff.

CUADROS DE DILOGO NO MODALES


Los cuadros de dilogo no modales nos permiten cambiar el enfoque entre el cuadro de dilogo y otro formulario sin
tener que cerrar el cuadro de dilogo. Es decir, podemos continuar trabajando en cualquier parte de la aplicacin actual
y mientras el cuadro de dilogo se encuentra presente.

Por ejemplo, el siguiente procedimiento muestra el nmero de meses


transcurridos entre dos fechas dadas:
Sub ejemplo_DateDiff()
Dim fecha1 As Date, fecha2 As Date
fecha1 =
#10/10/2012#
fecha2 =
#10/11/2012#
meses = DateDiff(d, fecha1, fecha2)
MsgBox Transcurrieron: & meses & meses
End Sub

Modelo de Objetos de Excel


Como explicamos en el Captulo 1, el modelo de objetos de Excel
contiene una gran cantidad de elementos ordenados en forma
jerrquica. Aunque disponemos de muchos objetos, casi siempre
utilizaremos estos cuatro:
Application: aplicacin
Workbook: libro de trabajo
Worksheet: hoja de clculo
Range: celda

A continuacin, explicaremos las caractersticas de cada uno de


estos objetos, como as tambin conoceremos sus principales
propiedades y mtodos, y la manera de personalizarlos.

Application
Application es el objeto de nivel superior en el modelo de objetos de
Excel; representa al programa y al libro de trabajo.
Brinda acceso a las opciones y las configuraciones a nivel de la
aplicacin, como, por ejemplo, de la cinta de opciones, de la impresora
activa, el tamao de la fuente por defecto, entre otras.
Entonces, al modificar las propiedades y los mtodos de este objeto,
estaremos realizando cambios que se van a reflejar en la interfaz de
Excel y en sus diferentes herramientas.

Como Application es el objeto principal dentro del modelo de objetos de Excel y todos los dems objetos derivan
de l, la mayora de las veces no ser necesario referirnos explcitamente a este objeto, ya que se supone que todos
los dems provienen de l. Conocer este detalle nos permite simplificar y abreviar la escritura del cdigo al trabajar
con los distintos objetos de Excel.

Figura 1. Muchas de las opciones que podemos modificar


con el objeto Application son las que encontramos en
Archivo/Opciones.

Propiedades del objeto Application


Application es un objeto que tiene una gran cantidad de propiedades,
algunas definen el ambiente donde se ejecuta Microsoft Excel, otras
controlan la presentacin de la interfaz (como
por ejemplo el aspecto del puntero del mouse en
Excel), y otras devuelven objetos. APPLICATION
continuacin, describiremos algunas de las
propiedades ms importantes.

ES EL A
OBJETO DE NIVEL

SUPERIOR EN EL

Caption

MODELO DE OBJETOS

Esta propiedad devuelve o establece el nombre DE EXCEL que


aparece en la Barra de ttulo de la ventana de la aplicacin
principal (Microsoft Excel).

Por ejemplo, si queremos cambiar el ttulo Microsoft Excel, que es el que


aparece por defecto, por Liquidacin de Haberes, utilizamos la sentencia que
mostramos a continuacin:

Application.Caption = Liquidacin de Haberes

Figura 2. Si establecemos el valor Empty para el nombre, la


propiedad Application.Caption devuelve Microsoft Excel.

Path
Esta propiedad devuelve la unidad y la carpeta donde est instalado Microsoft
Excel, por ejemplo, C:\Program Files (86)\Microsoft Office\ Office14.
Para que nos muestre en un cuadro de mensaje la ubicacin de Microsoft
Excel, podemos usar la siguiente sentencia:
MsgBox Microsoft Excel est instalado en & _
Application.Path

DefaultFilePath
Esta propiedad podemos usarla para establecer la ubicacin predeterminada
que utiliza Microsoft Excel para abrir sus archivos. En este caso, usamos la
siguiente sentencia:

MsgBox La ruta de los archivos por defecto es & _


Application.DefaultFilePath
En cambio, si queremos cambiar la ubicacin predeterminada,
podemos utilizar la siguiente sentencia:
Application.DefaultFilePath = C:\Users\Planillas

StatusBar
Esta propiedad la utilizamos para mostrar
mensajes de texto personalizados en la barra de
mientras se est ejecutando una macro.
MENSAJES
Por ejemplo, si estamos ejecutando un proceso
de actualizacin de datos, podemos mostrar en
PERSONALIZADOS barra de estado el mensaje
Para EN LA BARRA DE esto escribimos la

STATUSBAR estado
MUESTRA

la
Actualizando.
siguiente sentencia:
ESTADO

Application.StatusBar = Actualizando.....

Este mensaje va a permanecer en la barra de estado hasta que otro


mensaje se escriba en ella, ya sea porque le asignamos a la
propiedad StatusBar otro valor o porque Microsoft Excel lo hace.

Figura 3. Para borrar los mensajes de la barra de


estado, le asignamos a la propiedad StatusBar el
valor False o una cadena nula ().

DisplayFormulaBar
Esta propiedad permite mostrar u ocultar la Barra de frmulas. Por
ejemplo, si queremos ocultar la Barra de frmulas para ganar espacio
en la pantalla, podemos utilizar la siguiente sentencia:

Application.DisplayFormulaBar = False
Para restablecerla, asignamos el valor True a la propiedad
DisplayFormulaBar.

DisplayAlerts
Esta propiedad determina si la aplicacin muestra los cuadros de dilogo
de alerta. Por ejemplo, si el cdigo de una macro elimina una hoja de
clculo, Excel normalmente nos mostrar un cuadro de alerta donde se

nos pide que confirmemos la eliminacin. Para suprimir estos mensajes,


establecemos la propiedad DisplayAlerts en False.
Por ejemplo, el siguiente procedimiento elimina la hoja auxiliar y no le
pregunta al usuario si desea confirmar esta accin. Luego, volvemos a
activar los mensajes de alerta, estableciendo la propiedad en True.
Sub ejemplo_elimina_hoja()
Application.DisplayAlerts = False
Worksheets(auxiliar).Delete
Application.DisplayAlerts = True
End Sub

El uso de la propiedad StatusBar es muy til, siempre y cuando la barra de estado est visible. Recordemos que la
interfaz de Excel puede ser personalizada por el usuario, de manera que la barra de estado quede oculta. Antes de
mostrar un mensaje, debemos asegurarnos de que la barra de estado est visible; para esto utilizamos la propiedad
Application.DisplayStatusBar = True.

DisplayFullScreen
Esta propiedad permite establecer si Microsoft Excel se ejecuta en modo
pantalla completa. Adems de maximizar la ventana de la aplicacin, oculta la
barra de ttulo, la cinta de opciones y la barra de estado. Esto nos permite
ampliar la visualizacin de la hoja de clculo. Para esto, escribimos la
siguiente sentencia:

Application.DisplayFullScreen = True

Figura 4. Para volver al modo de pantalla normal, establecemos en False la


propiedad DisplayFullScreen.

Mtodos del objeto Application


Como vimos en captulos anteriores, un mtodo es un conjunto de
comportamientos o acciones que puede realizarse en el objeto. A
continuacin, describiremos algunos de los mtodos que podemos utilizar
con el objeto Application.

OnTime
Este mtodo se puede utilizar para programar los procedimientos que se
ejecuten en momentos especficos del da o en intervalos de tiempo
determinados. Su sintaxis es la siguiente:
Application.OnTime (hora,nombre,hora_lim,programar)
Donde:

hora: es la hora a la que se desea ejecutar el procedimiento.


nombre: es el nombre del procedimiento que se va a ejecutar.
hora_lim: es la hora lmite a partir de la cual ya no se ejecutar el

procedimiento.
programar: puede ser True para programar un nuevo procedimiento

OnTime o False para anular un procedimiento establecido previamente.

Application.OnTime TimeValue(13:00:00),
almuerzo

Figura 5. Podemos usar tambin la expresin Now+TimeValue(hs) para ejecutar un


procedimiento a partir de un tiempo determinado.

OnKey

Este mtodo ejecuta un procedimiento determinado cuando


el usuario presiona una tecla o una combinacin de ellas. Su
sintaxis es la siguiente:

Application.Onkey(tecla, procedimiento)
Donde
tecla: es una cadena que indica la tecla que se debe presionar.
procedimiento: es una cadena que indica el nombre del procedimiento

que se va a ejecutar.
Por ejemplo, si queremos asignarle al procedimiento saludo la
combinacin de teclas CTRL + - (signo menos), usamos la
sentencia: Application.OnKey ^ {-}, saludo

Si deseamos borrar la asignacin de teclas


realizadas con el mtodo OnKey del ejemplo
anterior, utilizaremos la siguiente
sentencia:DETERMINADO CUANDO EL

ONKEY EJECUTA UN
PROCEDIMIENTO

USUARIO

Application.OnKey ^ {-},
PULSA UNA
TECLA

Wait
Este mtodo realiza una pausa hasta que transcurra un momento especificado,
en una macro que se est ejecutando. Cuando llega a la hora determinada,
devuelve el valor True.
Su sintaxis es la siguiente: Application.Wait(hora)

Como argumento para el mtodo OnKey, podemos combinar cualquier tecla individual con las teclas ALT,
CTRL, MAYS, incluso combinar estas ltimas entre s. Para mayor informacin, podemos consultar las
tablas de cdigos que se muestran en la ayuda de Visual Basic para Aplicaciones, presionando la tecla F1.

Donde hora es cuando se desea que se reanude la macro. El siguiente ejemplo


muestra un mensaje luego de haber transcurrido 1 minuto.
If Application.Wait(Now + TimeValue(0:01:00)) Then
MsgBox Finalizo el proceso de
actualizacin End If

Figura 6. El mtodo Wait suspende todas actividades de Microsoft Excel,


exceptuando los procesos de segundo plano.

Quit
Este mtodo nos permite salir de Microsoft Excel. Si tenemos algn libro
abierto y si no hemos guardado los cambios, mostrar un cuadro de dilogo
que pregunta si deseamos guardar los cambios. La sentencia que nos permite
salir de la aplicacin es la siguiente:

Application.Quit
Si establecimos la propiedad DisplayAlerts en False o la propiedad Save de
un libro como True (esta propiedad la veremos ms adelante), al ejecutar la
sentencia Application.Quit, se cerrar la aplicacin sin preguntarnos si
deseamos guardar los cambios realizados en los libros.

Workbooks
El objeto Workbooks se encuentra debajo del objeto Application en la
jerarqua del modelo de objetos de Microsoft Excel. El objeto Workbook
forma parte de la coleccin Workbooks. Este objeto es devuelto por las
siguientes propiedades del objeto Application:
Application.Workbooks: devuelve la coleccin Workbooks.
Application.ActiveWorkbook: devuelve el libro activo. Si no hay libros

abiertos, esta propiedad devuelve Nothing.


Application.ThisWorkbook: esta propiedad devuelve el libro que

contiene la macro que se ejecuta.

Figura 7. Excel 2013 soporta la Interfaz de Documento nico (SDI).


Cada libro tiene su propia ventana de aplicacin de nivel superior.

El objeto Application posee mtodos que nos permiten realizar operaciones relacionadas con la aplicacin activa,
actuar sobre las frmulas y clculos, y sobre las celdas, entre otros. Para conocer ms sobre ellos, podemos abrir el
Examinador de objetos presionando la tecla F2.

A continuacin, describiremos algunas de las propiedades y mtodos de


los objetos Workbooks y Workbook.

Propiedades de los objetos


Workbooks y Workbook
Tengamos en cuenta, cuando trabajamos con objetos y colecciones, que
muchos objetos de la coleccin comparten las mismas propiedades y
mtodos que sus miembros. Dependiendo del objeto que utilicemos, los
parmetros que son necesarios o que estn disponibles para estos
miembros pueden variar.

Item
Como mencionamos anteriormente, el objeto Workbook forma parte de
la coleccin Workbooks. Cada libro de la coleccin puede ser
identificado por la propiedad Item, que hace referencia a un nico
elemento de la coleccin. Por lo tanto, podemos acceder a un libro en
particular usando un nmero de ndice (Item). Una vez que hemos
hecho alusin a un objeto Workbooks mediante la propiedad Item,
podemos trabajar con l a travs de sus propiedades y mtodos. Por
ejemplo, para referirnos al tercer libro de la coleccin, podemos usar la
siguiente sentencia:
Workbooks.Item(3)
O simplemente:

Workbooks.(3)

La instruccin Kill solo permite eliminar archivos, no carpetas. Para borrar carpetas, usamos la instruccin RmDir. Su
sintaxis es RmDir Path, donde Path, es la cadena de acceso de la carpeta que queremos eliminar. Por ejemplo RmDir
(C: :\Ventas). Si omitimos la ruta, VBA intentar eliminar la carpeta actual.

ActiveWorkboo
k

Esta instruccin solo elimina carpetas vacas, de lo contrario dar error.

Tambin es posible referirnos a un libro


especfico de una coleccin Workbooks a
travs del nombre del archivo, el cual debe
estar entre comillas. Por ejemplo, si queremos
referirnos al archivo llamado sueldos.xlsm
tenemos que hacerlo de la siguiente manera:

Applicatio
n

Workbooks(sueldos.xlsm).Activate

Name
Esta propiedad devuelve el nombre de un libro. Por ejemplo, el siguiente
procedimiento muestra el nombre del libro activo:
Sub ejemplo()
Dim libro As String

libro =

ActiveWorkbook.Name
MsgBox El nombre del libro activo es :
& libro End Sub

Este otro ejemplo muestra el nombre del tercer libro de la coleccin


Workbooks.
Sub ejemplo()
Dim libro As String

libro = Workbooks(3).Name

MsgBox El nombre del tercer libro es : & libro


End SubEnd Sub

FullName
Esta propiedad devuelve el nombre y la ruta completa de un libro
especificado. Por ejemplo, el siguiente procedimiento muestra el nombre
y la ruta del documento activo.

Los objetos Workbooks y Workbook poseen otras propiedades como CreateBackup, que indica si creamos una
copia de seguridad cuando grabamos el archivo, y Password que devuelve o define la contrasea necesaria para abrir
un libro. Para conocer ms acerca de estas y de otras propiedades, podemos consultar la ayuda de VBA presionando
la tecla F1.

Sub ejemplo_fullname()
a = ActiveWorkbook.FullName
MsgBox El nombre y la ruta del archivo es: & a
End Sub

Figura 9. A diferencia de la propiedad FullName, la propiedad


Path solo devuelve la ruta completa del archivo.

Saved
Esta propiedad devuelve el valor False para indicar que se han realizado
cambios desde la ltima vez que se guard el archivo. En el caso contrario,
devuelve True. Por ejemplo, el siguiente procedimiento

Podemos investigar y conocer an ms acerca de las propiedades, mtodos y eventos de los objetos de Microsoft
Excel consultando la referencia del modelo de objetos en Microsoft Developer Network (MSDN) en el sitio de:
http://msdn.microsoft.com/es-es/library/bb149081.aspx.

muestra un mensaje que indica si se han guardado o no los cambios realizados


en el libro de trabajo.

Sub ejemplo_Saved()
cambios =
ThisWorkbook.Saved
If cambios = False Then
MsgBox No se guardaron los cambios en el libro
Else
MsgBox Se guardaron los cambios en el libro
End If
End Sub

Mtodos de los objetos


Workbooks y Workbook
A continuacin, veremos algunos de los mtodos que podemos utilizar con
los objetos Workbooks y Workbook.

Add
Este mtodo pertenece a la coleccin Workbooks y permite crear un nuevo
libro de Microsoft Excel. Cuando se genera un nuevo libro, VBA crea un
nuevo objeto Workbook y lo suma a la coleccin Workbooks. Su sintaxis
es:

Workbooks.Add(Template)
Donde Template es un argumento opcional que determina cmo se crear el
nuevo libro. Este argumento puede ser:
Una cadena que especifica el nombre de un
Hay cuatro tipos de
esta constante:
archivo existente de Microsoft Excel para
ADD ES UN
usarlo de plantilla. Cuando utilizamos un
MTODO
archivo de plantilla, lo que hace Excel es
DE WORKBOOKS
copiar todos los elementos de la hoja de
QUE CREA UN
clculo especificada, incluyendo los textos y
NUEVO LIBRO DE
las macros, en el nuevo libro.
EXCEL
Una constante XLWBATemplate que
permite especificar el tipo de libro que se va
a crear.
xlWBATWorksheet: para crear un libro con una sola hoja de
clculo.
-

xlWBATChart: para crear un libro que contiene un grfico.

xlWBATExcel4IntlMacroSheet: para crear una hoja de macro

Excel 4.0. - xlWBATExcel4MacroSheet: para crear una hoja


internacional de macros.
Si no especificamos este argumento, Microsoft Excel crea un libro
nuevo con varias hojas en blanco.
El siguiente ejemplo crea una variable (libro) del tipo Workbook y
luego a esta variable le asignamos el mtodo Add.
Sub nuevo_libro()
Dim libro As Workbook
Set libro = Workbooks.Add

End Sub

La Ventana Inmediato dentro del Editor de Visual Basic para Aplicaciones es una herramienta muy til para
explorar objetos, propiedades y mtodos. En ella, podemos ejecutar instrucciones VBA y, de esta manera,
vemos el resultado en forma inmediata. Para abrirla, simplemente presionamos la combinacin de teclas
CRTL + G o la seleccionamos desde el men Ver.

Figura 10. Una vez que le asignamos a una variable el mtodo Add, podemos
usarla para cambiar las propiedades del libro.

En este ejemplo, creamos tres libros de trabajo:


Sub crea_libros()
Dim x As Integer
For x = 1 To 3
Workbooks.Add
Next x
End Sub

Cuando trabajamos con muchos libros en simultneo, podemos guardar un rea de trabajo. En ese caso, Microsoft Excel
tendr en cuenta la posicin de todos los libros que estn abiertos, al igual que muchas de sus caractersticas. Las reas
de trabajo almacenadas tienen la extensin .XLW. En VBA, para hacerlo usamos el mtodo SaveWorkspace.

En este ejemplo, creamos un nuevo libro con una hoja de grfico.


Sub nuevo_libro()
Dim libro As Workbook
Set libro = Workbooks.Add(xlWBATChart)
End Sub

SaveAs
Despus de crear un libro, es probable que deseemos guardarlo. Para esto,
contamos con el mtodo Save As. Su sintaxis ms bsica es:

Workbook.SaveAs(FileName)
Donde FileName es el nico parmetro requerido, y se utiliza para
especificar el nombre y la ubicacin del archivo. En el siguiente ejemplo,
creamos un procedimiento que agrega un nuevo libro y lo guarda con el
nombre Ejemplo.xlsm.
Sub GuardarComo1()
Workbooks.Add
ThisWorkbook.SaveAs (Ejemplo.xlsm)
End Sub

Su sintaxis completa es la siguiente:

Workbook.SaveAs(FileName FileFormat, Password,


WriteResPassword,
ReadOnlyRecommended,
CreateBackup,
AccessMode,
ConflictResolution, AddToMru, Local).
Donde:
FileFormat: contiene la constante XFileFormat que indica el formato

para guardar el archivo, por omisin es el libro de Excel (xlNormal).


Password: como contrasea para abrir el archivo podemos escribir hasta

quince caracteres. Distingue entre maysculas y minsculas.


WriteResPassword: contiene la contrasea de restriccin de escritura de

un archivo.
ReadOnlyRecommended: si esta es True, aparece un mensaje que

recomienda que el archivo se abrir como de solo lectura.


CreateBackup: crea una copia de seguridad del archivo.
AccessMode: contiene un valor constante xlNoChange, XlExclusive o

slShared, que indica el modo de acceso.


ConflictResolution: contiene una constante que indica la forma de

resolver conflictos, xlLocalSessionChanges acepta cambios del usuario


local, xlOtherSessionChanges acepta cambios de otros usuarios.
AddToMru: predeterminado como False. Si se establece como True, se

agrega el libro a la lista de archivos usados recientemente.


Local: guarda los archivos en el idioma de Microsoft Excel si es True. Si

es False, los archivos se guardan en el idioma VBA.


En este ejemplo, el procedimiento crea un nuevo libro y lo guarda como
Ventas.xlsm en Mis Documentos. Le asignamos una contrasea:

Sub Ejemplo_GuardaComo()
Dim ruta As String, nombre As String
ruta =
C:\Users\Pepe\Documents\
nombre = Ventas.xlsm
ActiveWorkbook.SaveAs ruta & nombre, _
FileFormat:= xlOpenXMLWorkbookMacroEnabled, _
Password:=123, _
ReadOnlyRecommended:=False
End Sub

Figura 11. El formato xlOpenXMLWorkbookMacroEnabled especifica


que el archivo se guardar
en el formato Libro de Open XML con macros habilitadas.

Save

Utilizamos el mtodo Save para guardar los diferentes cambios que hemos
realizado en un libro despus de haberlo guardado por primera vez. Su
sintaxis es la siguiente:
Workbook.Save
La siguiente sentencia guarda el libro activo:

ThisWorkbook.Save

El mtodo Close cierra todos los libros de trabajo, pero Microsoft Excel sigue abierto. En cambio, si usamos el
mtodo Quit del objeto Application, este tambin cerrar Excel. Si tenemos libros abiertos, se cerrarn primero
los libros, y, si alguno contiene cambios, la aplicacin nos pedir que los guardemos.
Siempre y cuando no hayamos usado la propiedad DisplayAlerts.

Si conocemos el nombre del archivo, por ejemplo Ventas.xlsm, podemos


usar la siguiente sintaxis:
Workbooks(Ventas.xlsm).Save

Close
Este mtodo aplicado al objeto Workbooks permite cerrar un libro, y no
acepta ningn argumento. Su sintaxis es:

Workbooks.Close
Podemos hacer referencia a un libro de la coleccin Workbooks, a travs de
su nombre o su ndice. Por ejemplo, si tenemos tres libros abiertos y
queremos cerrar el segundo, empleamos la sentencia:

Workbooks(2).Close
El siguiente ejemplo cierra el libro Ventas.xlsm:

Workbooks(Ventas.xlsm).Close

Figura 12. Si no guardamos los cambios en el libro, al ejecutar esta sentencia


nos preguntar si deseamos hacerlo.

En el caso de que no especifiquemos ningn libro, todos los libros


que tengamos abiertos se cerrarn.
En cambio, el mtodo Close del objeto Workbook puede aceptar
hasta tres argumentos, por lo tanto, nos va a permitir cerrar un libro en
particular. Su sintaxis es la siguiente:
Workbook. Close(SaveChanges, Filename,_
RouteWorkbook)

Donde:

SaveChanges: guarda los cambios del libro

que se cierra, si se

especifica el valor True. En EL MTODO

CLOSE cambio, si se

indica el valor False, el libro se DEL OBJETO

cierra sin guardar

los cambios realizados.


Filename: podemos especificar un nombre

guardar el archivo, siempre que le hayamos

para WORKBOOKS
PERMITE CERRAR

indicado el valor True a SaveCanges.


RouteWorkbook: este parmetro se emplea UN LIBRO cuando

necesitamos distribuir el libro entre otros usuarios para trabajar en grupo.

La sintaxis que presentamos a continuacin cierra el libro que se


encuentra activo. Si, con anterioridad, no se han guardado los cambios
realizados, se mostrar un cuadro de dilogo que nos pregunta si
deseamos hacerlo antes de cerrar el libro.

ThisWorkbook.Close

La instruccin Kill elimina un archivo de Excel o de cualquier otro tipo. Su sintaxis es Kill Path&Filename.
Por ejemplo: KillFile = C:\Planilla\Ventas.xlsx. Podemos eliminar uno o varios archivos a la vez
usando los smbolos de comodn: el asterisco (*) para reemplazar una secuencia de caracteres o el signo de
interrogacin (?) que reemplaza un solo carcter.

La siguiente sintaxis permite cerrar el libro activo y abre el cuadro


de dilogo Guardar como:

ThisWorkbook.Close SaveChanges:=True
Tengamos en cuenta que, si no especificamos el parmetro
SaveChange, Microsoft Excel comprobar cada libro de trabajo
para asegurarse de que se han guardado desde su ltima
modificacin. Si el libro contiene cambios, Excel nos pedir que
los guardemos.

Open
Empleamos este mtodo para abrir un archivo de Microsoft
Excel.
Cada vez que abrimos un libro, este se agregar a la coleccin
Workbooks. Al igual de lo que sucede con el
comando
Archivo/Abrir de la cinta de opciones de EL
libro que abramos ser el libro activo. Su
LIBRO QUE Excel, el
sintaxis ms bsica es la siguiente:
ABRAMOS CON
EL MTODO OPEN

Workbooks.Open(FileName)

PASAR A SER
Donde FileName es el nico parmetro
EL LIBRO
ACTIVOrequerido, e indica el nombre y la ruta
del archivo por abrir. Si solo proporcionamos el nombre del
archivo, Excel lo buscar en la carpeta actual. Por ejemplo, para
abrir el archivo Ventas.xlsm que se encuentra en la carpeta actual,
escribimos la siguiente sentencia:

Workbooks.Open (Ventas.xlsm)

En lugar de especificar en el cdigo el archivo que deseamos abrir, podemos mostrar el cuadro de dilogo
Abrir a travs del mtodo GetOpenFilename. Al utilizar este mtodo, cuando el usuario hace clic en el
botn Aceptar, el nombre del archivo seleccionado se almacena en una variable, y esta variable se le asigna
al mtodo Open.

Si en cambio queremos abrir el archivo Liquidacion.xlsm que se encuentra


en la carpeta Planillas del disco C, escribimos la sentencia:

Workbooks.Open (C:\Planillas\Liquidacion.xlsm)

Figura 13. Cuando Excel no encuentra el archivo que queremos


abrir, presenta un mensaje de error.

Este mtodo posee diecisis parmetros diferentes que determinan la manera


en que Microsoft Excel va a abrir el libro. La sintaxis completa de este
mtodo es la siguiente:
Workbooks.Open(FileName, UpdateLinks, ReadOnly,
Format, Password,
WriteResPassword, IgnoreReadOnlyRecommended,
Origin, Delimiter, Editable,
Notify, Converter, AddToMru, Local, CorruptLoad)

Describiremos a travs de ejemplos solo alguno de ellos. Si queremos abrir


un archivo como de solo lectura, usaremos el argumento ReadOnly,
asignndole un valor True.
Workbooks.Open Filename:=Ventas.xlsm, _
ReadOnly:=True
Para abrir un archivo que est protegido con una contrasea, utilizamos el
argumento Password, como muestra la siguiente sentencia:
Workbooks.Open Filename:=Ventas.xlsm, _
Password:=clave

Para agregar el archivo a la lista de usados recientemente, tenemos el


argumento AddToMru, como vemos en la sentencia:
Workbooks.Open Filename:=Ventas.xlsm, _
Addtomru:=True

Worksheet
Como sabemos, un libro de Excel contiene hojas de clculo que podemos
insertar, borrar, copiar o desplazar a cualquier lugar que deseemos. Como as
tambin, renombrarlas, seleccionarlas y editarlas en conjunto, es decir,
introducir un dato y aplicar formatos al mismo tiempo a todas las celdas de
varias hojas de clculo.
En Visual Basic para Aplicaciones, una hoja de clculo es un objeto del tipo
Worksheet, y las diferentes hojas de clculo que vamos a utilizar se
almacenan en la coleccin Worksheets.

Propiedades del objeto Worksheet


El objeto Worksheet se encuentra debajo del objeto Workbook en la
jerarqua del modelo de objetos de Excel. A continuacin veremos algunas de
sus propiedades.

Item
Cuando abrimos un archivo de Microsoft Excel, por defecto se crea un libro
de trabajo que contiene una hoja de clculo. Para hacer referencia a una
determinada hoja de la coleccin, utilizamos la
propiedad Item. Por ejemplo, para
PARA HACER
REFERENCIA
A
referirnos a la segunda hoja del libro
UNA HOJA DE UN
activo, escribimos la siguiente sentencia:
LIBRO, USAMOS LA
Worksheets.Item(2).Activate O
PROPIEDAD ITEM
simplemente:
Worksheets(2).Activate
Tambin podemos referirnos a una hoja de clculo en concreto de una
coleccin Worksheets a travs de su nombre, el cual debe estar entre
comillas. Por ejemplo, hacemos referencia a la hoja Norte de la siguiente
manera:
Worksheets(Norte).Activate

En el caso de que necesitemos hacer referencia a la hoja activa, usamos la


siguiente sentencia:

ActiveSheet

Figura 14. La coleccin Worksheets tambin recibe el


nombre de Sheets.

Name
Esta propiedad se emplea para establecer o devolver el nombre de una
hoja de clculo. Por ejemplo, tenemos el siguiente procedimiento que
muestra el nombre de la Hoja3.
Sub nombre()
MsgBox Worksheets(3).Name
End Sub

Si queremos cambiar el nombre de la Hoja1 por Enero, podemos


utilizar la siguiente sentencia:
Worksheets(hoja1).Name = Enero

Tambin podramos usar la siguiente sentencia:


Sheets(hoja1).Name = Enero

CodeName
Cuando en el cdigo de una macro hacemos referencia a la hoja de
clculo por el nombre de la pestaa o por su ndice, corremos el riesgo
de generar un error, porque el nombre de las hojas o su posicin en el
libro pueden variar. Una forma de salvaguardar el cdigo que se refiere a
hojas especficas es usando la propiedad CodeName. Esta devuelve el
nombre clave que Microsoft Excel le asigna a la hoja de clculo cuando

REFERENCIA A UNA HOJA DE CLCULO


Podemos declarar una variable del tipo Worksheet para obtener la referencia a una hoja de clculo. La inicializamos
mediante la propiedad Item y la asignamos a la variable mediante el operador Set. Por ejemplo, para asignar a la
variable

Ene

la

hoja

Enero

del

libro

Ventas.xlsm,

escribimos

lo

siguiente:

Set

Ene

Workbooks(Ventas.xlsm).Worksheets(Enero).

la crea (Hoja1, Hoja2, Hoja3, etctera). La siguiente sentencia devuelve


el nombre clave de la Hoja1 y activa la Hoja3.
MsgBox Worksheets(1).CodeName
Hoja3.Activate

Figura 15. En la ventana del Explorador de proyectos, los


CodeName son los que figuran fuera de los parntesis.

Visible
Esta propiedad permite mostrar u ocultar una
defecto, tiene el valor True; si LA PROPIEDAD
valor False ocultamos la hoja de VISIBLE
Por ejemplo, si queremos ocultar la hoja
Enero, escribimos la siguiente
U OCULTAR

hoja de clculo. Por


le asignamos el
PERMITE clculo.
sentencia:MOSTRA

UNA HOJA DE
CLCULO
Worksheets(Enero).Visible = False

Con esta sentencia, el usuario puede volver a visualizar esta hoja


empleando el comando Ocultar
y mostrar del grupo Celdas/Formato que se encuentra en la ficha Inicio de
la interfaz de Microsoft Excel.
Si en cambio, queremos ocultar la hoja para que la nica forma de
hacerla visible sea a travs del cdigo, empleamos la sentencia:

Worksheets(Enero).Visible = xlSheetVeryHidden

En este caso, para volver a mostrar esta hoja, tenemos que asignarle el
valor True a la propiedad Visible.

Count
Esta propiedad de la coleccin Worksheets y Sheets devuelve el
nmero de elementos que hay en la coleccin actual. Por ejemplo, si
queremos saber cuntas hojas tiene un libro, utilizamos la siguiente
sentencia:
MsgBox Worksheets.Count

UsedRange
Cuando necesitamos saber cul es el rango utilizado en una hoja de
clculo, usamos la propiedad UsedRange del objeto Worksheet. La
siguiente sentencia selecciona el rango utilizado en la hoja Enero.
Worksheets(Enero).UsedRange.Select

Mtodos de los objetos


Worksheets y Worksheet
A continuacin, explicaremos algunos de los diferentes mtodos de los
objetos Worsheets y Worksheet.

Si bien podemos ponerles cualquier nombre a las hojas, el que utilicemos determinar el ancho de la pestaa, en la
parte inferior de la ventana del libro de trabajo. Por lo tanto, debemos dar a las hojas nombres concisos, de tal forma
que podamos ver ms de dos o tres solapas a la vez.

Add
Este mtodo del objeto Worksheets o Sheets permite agregar
hojas de clculo, de grfico o de macros a un libro de Excel. Su
sintaxis es la siguiente: Objeto.Add(Before, After, Count, Type)
Donde:
Objeto: puede ser un objeto Worksheets o Sheets.
Before: indica que la hoja se agrega antes de la hoja activa. Si se omite

este parmetro o el parmetro After, la nueva hoja se agregar antes de la


hoja que se encuentra activa.
After: indica que la hoja se agrega despus de la hoja activa.
Count: permite indicar la cantidad de hojas que vamos a agregar. Si

omitimos este parmetro,


solamente se agregar una hoja.EL MTODO
Type: especifica el tipo de hoja que

WORKSHEETS crear. Si se trata de una hoja

ADD
queremos DE
de clculo,

usamos el valor xlWorksheet; si en cambio


AGREGA HOJAS DE
queremos crear una hoja de grfico, usamos
CLCULO, DE
hoja de
GRFICO el valor xlChart. Para crear una
macros, usamos el valor
xlExcel4MacroSheet O DE MARCROS o
xlExcel4IntlMacroSheet. Si se omite este argumento se crear una hoja
de clculo.
Por ejemplo, el procedimiento que presentamos a continuacin
agrega una nueva hoja de clculo despus de la hoja Febrero y
modifica el nombre de la nueva hoja por Marzo.

Sub metodoAdd()
Worksheets.Add after:=Worksheets(Febrero)
ActiveSheet.Name = Marzo
End Sub

Figura 16. La cantidad de hojas de un libro est


condicionada por nuestra necesidad y la memoria de la computadora.

Move
Podemos organizar las hojas de un libro de Excel usando el mtodo Move
del objeto Sheets o Worksheets. Cuando movemos una hoja, debemos
indicar la nueva ubicacin especificando el nombre de la hoja que deseamos
colocar antes o despus de la hoja activa. Su sintaxis es la siguiente:
Objeto.Move(Before, After) Donde:
Objeto: puede ser un objeto Worksheets o Sheets.
Before: se utiliza para indicar la hoja delante de la cual se va a mover la

hoja seleccionada.
After: permite indicar la hoja despus de la cual se desea mover la hoja

seleccionada.

Por ejemplo, si queremos mover la hoja denominada Abril para ubicarla


despus de la ltima hoja del libro, podemos utilizar la sentencia que
mostramos a continuacin:
Sub mover()
ultima = Worksheets.Count
Worksheets(Abril).Move After:=Worksheets(ultima)
End Sub

Si no especificamos los argumentos Before o After, Excel crear un


libro nuevo y mover la hoja a ese libro.

Copy
Este mtodo permite copiar una hoja de clculo especificada a
otra ubicacin dentro del mismo libro o en otro libro. Su sintaxis
es la siguiente:
EL MTODO COPY
Objeto.Copy(Before, After)COPIA UNA HOJA
Donde:DENTRO DE UN
MISMO LIBRO O EN
Objeto: es la hoja que queremos copiar.
Before: indica la hoja delante de la cual vamos a OTRO DISTINTO

copiar la hoja seleccionada.


After: se utiliza para indicar la hoja despus de la cual se desea copiar la

hoja seleccionada.

El siguiente procedimiento crea tres copias de la hoja Zona1,


las ubica a continuacin de esta (la hoja Zona1 tiene ndice 1)
y las renombra como Zona2, Zona3 y Zona4.

Tengamos en cuenta que, si movemos una hoja de clculo antes o despus de una hoja inexistente, se provocar
un error. Para evitar estos errores, especialmente cuando usamos ndices para hacer referencia a una hoja
especfica, debemos usar la propiedad Count que determina la cantidad de hojas del libro.
De esta manera, nos aseguramos de que el ndice que usamos es vlido.

Sub copiar()
For i = 2 To 4
Worksheets(Zona1).Copy After:=Worksheets(i - 1)
Worksheets(i).Name = Zona & i
Next
End Sub

Si omitimos los parmetros Before o After, VBA crear un nuevo libro con
la hoja copiada. Por ejemplo, la siguiente sentencia copia la hoja Zona1 a un
nuevo libro:
Worksheets (Zona1).Copy

Delete
Este mtodo elimina hojas de clculo, de grfico y de macros. Si la hoja de
clculo contiene datos, Excel mostrar un cuadro de dilogo que solicita que
confirmemos si realmente queremos eliminar la hoja. Su sintaxis es la
siguiente:

Objeto.Delete
Donde Objeto puede ser un objeto Worksheets o Sheets.
Por ejemplo, si queremos eliminar la hoja Norte del libro activo, que ocupa
la segunda posicin en la coleccin, podemos usar una de las siguientes
sintaxis:
Worksheets(Norte).Delete Worksheets(2).Delete
Si Norte es la hoja activa, podemos usar la siguiente sentencia:

ActiveSheet.Delete

Figura 17. Cuando eliminamos


una hoja, esta accin se realiza de manera permanente.

Range
El objeto Range se encuentra debajo del objeto Worksheet y puede ser una
celda, una fila, una columna o un conjunto de celdas de una misma hoja o de
otras hojas (rango 3D).

Propiedades de los objetos Range


El objeto Range tiene una amplia variedad de propiedades con las cuales
podemos trabajar; a continuacin, describiremos algunas de ellas.

Las hojas de clculo pueden contener informacin confidencial o datos que no deseamos que sean modificados.
VBA, adems de la proteccin mediante contraseas para los libros, permite proteger los datos de una determinada
hoja. Usamos el mtodo Protect para proteger una hoja y Unprotec para desprotegerla. Si queremos proteger la
hoja activa, usamos la sentencia ActiveSheet.Protect.

ActiveCell
Esta propiedad del objeto Application y Windows devuelve la celda
activa de la ventana activa o seleccionada. Su sintaxis es la siguiente:

Objeto.ActiveCell
Donde Objeto puede ser Application o Windows. Por ejemplo, la
siguiente sentencia muestra el contenido de la celda activa.
MsgBox Application.ActiveCell

Range
Esta propiedad se utiliza para devolver un objeto Range que representa
un rango de celdas. Su sintaxis es:

Objeto.Range (rango)
Donde
Objeto: puede ser un objeto Application, Range o Worksheet.
rango: es una referencia de rango o nombre introducido como texto

(string).

Por ejemplo, tenemos la siguiente sentencia que selecciona el rango


A1:E1 de la hoja que se encuentra activa:

Range(A1:E1).Select

Llamamos celda activa a la celda que ha sido seleccionada. Cuando seleccionamos una nica celda, esta se vuelve
activa. Si, en cambio, tenemos seleccionado un rango, la celda activa (Activecell) ser la primera del extremo
superior izquierdo o desde donde parta la seleccin. Podemos identificarla como la celda resaltada en la seleccin.

Si, en cambio, queremos indicar un rango no contiguo, utilizamos la coma


como operador de unin. Por ejemplo, para el rango A1:A5 y C1:C5,
escribimos la siguiente sentencia:

Range(A1:A5, C1:C5).Select
Tambin es posible hacer referencia a un rango por su nombre. Por ejemplo,
si queremos hacer referencia al rango denominado costo utilizamos la
siguiente sentencia:

Range(costo).Select

Figura 18. El nombre del rango en VBA debe ponerse entre comillas, a
diferencia del uso de los rangos

con nombre en las frmulas dentro de una misma hoja.

Cells
Tambin podemos hacer referencia a celdas especficas de una hoja de
clculo utilizando la propiedad Cells, que devuelve un objeto Range, el cual
puede ser todas las celdas de la hoja de clculo o un rango de celdas. Su
sintaxis es la siguiente:

Objeto.Cells(ndice_fila, ndice_columna)
Donde:
Objeto: puede ser un objeto Application, Range o Worksheet.
ndice_fila: es el nmero de fila de la celda. Si el objeto es una hoja de

clculo, indice_fila se refiere a la fila 1 de la hoja; en cambio, si el objeto


es un rango, se refiere a la primera fila del rango.
ndice_columna: puede ser una letra o un nmero que representa la

columna de la celda. Si el objeto es una hoja de clculo, indice_ columna


B o 2 se refiere a la columna B de la hoja. En cambio, si el objeto es un
rango, B o 2 se refiere a la segunda columna del rango.
Por ejemplo, para referirnos a la celda D4, podemos escribir las siguientes
sentencias:
Cells(4, D)

Cells (4,4)
En este ejemplo, creamos un procedimiento que muestra la tabla de
multiplicar del 2 en el rango A1:A10:
Sub ejemplo_cells()

For i = 1 To 10
Cells(i, 1).Value = 2 X & i & = & 2 * i
Next
End Sub

Rows
Esta propiedad devuelve un objeto Range que hace referencia a una fila de un
objeto Application, Range o Worksheet. Su sintaxis es:

Objeto.Rows (indice)
Donde:
Objeto: puede ser un objeto Application, Range o Worksheet.
indice: es el nmero de fila. Si el objeto es una hoja de clculo, ndice

1 se refiere a la fila 1 de la hoja; en cambio, si el objeto es un rango


de celdas, entonces ndice 1 se refiere a la primera fila del rango. Este
argumento es opcional.
Por ejemplo, si queremos seleccionar la fila 1 de una hoja de clculo,
escribimos la siguiente sentencia:
Rows(1).Select

Columns
Esta propiedad devuelve un objeto Range que

hace referencia a una columna de un objeto LA


Application, Range o Worksheet. Su sintaxis
DEVUELVE

PROPIEDAD
es:
COLUMNS

Objeto.Rows (indice) UN OBJETO QUE HACE


REFERENCIA A UNA
COLUMNA
Donde
Objeto: puede ser un objeto Application, Range o Worksheet.
indice: es el nmero de fila. Si el objeto es una hoja de clculo, ndice 1 se

refiere a la columna A de la hoja; en cambio, si es un rango de celdas,


entonces ndice 1 se refiere a la primera columna del rango. Este es un
argumento opcional.

Las propiedades EntireRow, EntireColumn y CurrentRegion son tiles para realizar operaciones que
permiten ampliar un rango. EntireRow representa una o ms filas del rango especificado, y EntireColumn,
una o ms columnas. CurrentRegion devuelve el rango delimitado por cualquier combinacin de filas y
columnas en blanco.

Por ejemplo, para seleccionar la columna C de una hoja de clculo,


escribimos la siguiente sentencia:
Columns(C).Select

Figura 19. Si en la propiedad Columns omitimos el indice,


devuelve todas las filas de la hoja de clculo.

Offset
Esta propiedad devuelve un objeto Range que est desplazado de un rango
especificado por un cierto nmero de filas y columnas. Su sintaxis es la
siguiente:

Range.Offset ([fila_offset],[columna_offset])
Donde
fila_offset: es el nmero de fila para desplazar. Si el nmero es positivo,

desplaza el rango hacia abajo; si es negativo, lo desplaza hacia arriba y, si


es cero, usa la misma fila.

columna_offset: es el nmero de columna para desplazar. Si el nmero es

positivo, desplaza el rango hacia la derecha; si es negativo, lo desplaza


hacia la izquierda y, si es cero, usa la misma columna.
Por ejemplo, si queremos mover dos celdas a la izquierda de la celda
activa, usamos la siguiente sentencia.
ActiveCell.Offset (0,-2).Select

Value
Esta propiedad permite establecer o devolver
el
valor que tiene una celda especificada dentro de
hoja de clculo. VALUE DEVUELVE
Si la celda elegida se encuentra vaca,
entonces

LA PROPIEDAD una

Value devuelve el valor Empty. EL VALOR QUE


siguiente: TIENE UNA CELDA

Su sintaxis es la

Expresin.ValueESPECIFICADA
Donde Expresin representa un objeto Range.
A continuacin, veamos algunos ejemplos que permiten asignar un valor a
una celda especfica en la hoja activa. Por ejemplo, a la celda A5 le
asignamos el valor 56:

Range(A5).Value = 56
En este ejemplo, insertamos la fecha y hora del sistema a la celda
activa de la hoja activa:

ActiveCell.Value = Now
Si queremos introducir el mismo valor en muchas celdas de la hoja
activa, por ejemplo en el rango C1:E5, agregamos la palabra Hola:

Range(C1:E5).Value = Hola
Para introducir un valor en una celda de una hoja de trabajo
especfica, por ejemplo, en la celda A2 de la hoja Gastos,
ingresamos el texto Comunes de la siguiente manera:

Worksheets(Gastos).Range(A2).Value = Comunes
Si necesitamos introducir en una celda un texto entre comillas dobles,
debemos triplicar las comillas dobles. Por ejemplo, en la celda B1,
ingresamos el texto Sandra entre comillas.

Range(B1).Value = Sandra

Figura 20. No es necesario activar una celda para introducir un valor en ella,
desde cualquier parte de la hoja se puede escribir.

Si queremos llenar el rango A1:J10 con valores consecutivos, podemos usar


el siguiente procedimiento:

Sub
ejemplo()
n=1
For F = 1 To 10
For c = 1 To 10
Sheets(Nros).Cells(F,
c).Value = n

n=n+1

Next c
Next F
End Sub

FormulaLocal
Esta propiedad permite ingresar frmulas y LA
funciones en nuestro propio idioma, cualquiera
que este fuera, en las celdas de Excel mediante
VBA, de la misma manera que la escribiramos
dentro de una celda de ExcelFUNCIONES EN
Su sintaxis es la siguiente:

PROPIEDAD
FORMULALOCAL
PERMITE INGRESAR

NUESTRO IDIOMA
Expresin.FormulaLocal = formula

Donde
Expresin: representa un objeto Range.
Formula: es una frmula o funcin ingresada como texto (String).

Figura 21. Al escribir la funcin en nuestro propio idioma, la


macro solo ser compatible con otro Excel en nuestro idioma.

Supongamos que tenemos una planilla de ventas, como se muestra


en la Figura 21, en la que debemos calcular:
Total anual: es igual a la suma de los perodos por cada vendedor.
Comisin del vendedor: es igual al total anual por el porcentaje de

comisin del vendedor.

Escribimos el siguiente procedimiento:


Sub ejemplo_formula_local()
Range(F7:F15).FormulaLocal = =Suma(B7:E7)
Range(G7:G15).FormulaLocal = =F7*B$3
End Sub

End
Esta propiedad del objeto Range sirve para determinar la direccin
a la cual se extender una seleccin de rango. Su funcin es
desplazar el cursor a la celda que est, a partir de la celda activa, en
direccin hacia arriba (xlUp), abajo (xlDown), derecha
(xlToRight) o izquierda (xlToLeft), dentro del rango actual, es
decir, aquel que est delimitado por una fila o columna en blanco.
Su sintaxis es:

Objeto.End(Direction)
Donde objeto representa a un objeto Range. Por ejemplo, para
desplazarnos desde la celda A2 hasta la ltima celda con datos (no
vaca) hacia abajo, usamos la siguiente sentencia:

Range(A7).End(xlDown).Select
Si, por ejemplo, queremos encontrar la primera fila libre a partir de
la celda A7, usamos el siguiente procedimiento:

Cuando usamos esta propiedad, debemos escribir el nombre de la funcin en ingls. De este modo, nuestra
macro ser compatible con cualquier versin de Excel aunque est en un idioma diferente al que usamos.

Por ejemplo, si queremos sumar el rango de celdas B7:E7, debemos ingresar la sentencia Range
(F7:F15).Formula = =Sum(B7:E7) .

Sub ultima_celda()
Worksheets(Ventas).Select
filalibre = Range(A7).End(xlDown).Offset(1, 0).Row
MsgBox filalibre
End Sub

Figura 22. Esta propiedad equivale a presionar las teclas


FIN + FLECHA ARRIBA, FIN + FLECHA ABAJO, FIN + FLECHA
IZQUIERDA o FIN + FLECHA DERECHA.

Font
Esta propiedad del objeto Range sirve para establecer el tipo de fuente
para los datos contenidos en una celda o un grupo de ellas. Su sintaxis
es la siguiente:

Objeto.Font
Donde objeto es la variable que representa al objeto Range.
Por ejemplo, si queremos cambiarle al rango A1: A10 el tipo de letra a
Comic Sans Ms, cuerpo 10 y Negrita, tenemos que escribir el
procedimiento que mostramos a continuacin:
Sub fuente()
For i = 1 To 10
With Cells(i, 1).Font
.Name = Comic Sans Ms
.Size = 10
.Bold = True
End With
Next i
End Sub

Interior
Esta propiedad permite establecer el color del interior de una celda. Su
sintaxis es la siguiente:

Objeto.Interior
Por ejemplo, el procedimiento que presentamos a continuacin muestra
en la columna A el valor indice correspondiente a la paleta ColorIndex
y, en la columna B, pinta el interior de las celdas con todos los valores
correspondientes a la paleta ColorIndex.
Sub colores()

Dim i As Integer
With Worksheets(relleno)
For i = 1 To 56
Select Case i
Case Is < 15
.Cells(i, 1).Interior.ColorIndex = i
.Cells(i, 2).Value = = & i
Case Is < 29
.Cells(i - 14, 3).Interior.ColorIndex = i
.Cells(i - 14, 4).Value = = & i
Case Is < 43
.Cells(i - 28, 5).Interior.ColorIndex = i
.Cells(i - 28, 6).Value = = & i
Case Is < 57
.Cells(i - 42, 7).Interior.ColorIndex = i
.Cells(i - 42, 8).Value = = & i
End Select
Next i
End With
End Sub

Figura 23. Al pintar el fondo de una celda en rojo, asignamos a la


propiedad ColorIndex del interior un valor 3.

Border
Esta propiedad permite aplicar bordes a una celda o un rango de celdas.
Su sintaxis es la siguiente:

Objeto.Borders
Por ejemplo, este procedimiento aplica un borde grueso, estilo
entrecortado y color azul al rango A1:D5.

Sub bordes()
Worksheets(bordes).Select
With Range(A1:D5).Borders
.LineStyle = xlDash
.ColorIndex = 41
.Weight = 3
End With
End Sub

Mtodos del objeto Range


A continuacin, explicaremos algunos mtodos del objeto Range.

Select
Este mtodo permite seleccionar una celda o un conjunto de ellas. Su
sintaxis es la siguiente:

Objeto.Select
Donde Objeto representa a un objeto Range. Por ejemplo, si queremos
seleccionar una celda, usamos la siguiente sentencia:

Range(A1).Select
Para seleccionar un rango indicado por variables, podemos utilizar
el procedimiento que mostramos a continuacin:
Sub seleccionar()
columna = 5

rango = (B2 & :E & columna)


Range(rango).Select
End Sub

Figura 24. Mediante la propiedad CurrentRegion,


seleccionar el rango que contiene datos.

podemos

Excel emplea una paleta de 56 colores RGB predefinidos, que podemos usar como relleno de celdas, color
de bordes y de fuente. El cdigo RGB se basa en la mezcla de tres colores (red, green, blue) para conseguir
toda la gama completa. El valor de cada uno de los 56 colores puede ser cualquiera de los 16 millones de
colores disponibles, pero en Excel solo podemos usar 56 colores.

Para seleccionar la ltima celda con datos a partir de la celda A7,


usamos el siguiente procedimiento:
Sub ultima_celda()
Worksheets(Ventas).Select
Range(A7).Select
While ActiveCell.Value <>
ActiveCell.Offset(1, 0).Select

Wend

filalibre = ActiveCell.Row
End Sub

Figura 25. Usamos ActiveCell.Offset para


desplazarnos una fila hacia abajo, si la celda activa contiene datos.

El mtodo Cut del objeto Range permite cortar el contenido de una celda o un conjunto de celdas y pegarlo en el
Portapapeles, para luego utilizarlo, o en un destino especificado. Por ejemplo, si necesitamos mover el contenido del
rango A1:A6 al rango C1:C6 de la hoja de clculo activa, tenemos que escribir la sentencia Range(A6:A15).Cut
Range(C6:C15).

DataSeries
Este mtodo permite introducir una serie de datos en un rango de celdas. Su
sintaxis es la siguiente:

Objeto.DataSeries(Rowcol, Type, Date, Step, Stop, Trend)


Donde:
Objeto: es el rango que vamos a usar para la serie de datos.
RowCol: para introducir datos en una fila, usamos la constante xlRows y,

para introducir datos en columnas, usamos la constante xlColumns. Si se


omiten estas constantes, VBA utiliza el tamao y la forma del rango.
Type: es el tipo de serie. Por defecto es xlLinear (serie lineal), pero

tambin puede ser: xlGrowht (serie geomtrica), xlChronological (serie


cronolgica) o xlAutoFill (autorrelleno).
Date: si hemos usado la constante xlChronological para el argumento

Type, permite especificar diferentes intervalos para las series de fecha.


Sus opciones son xlDay, xlWeekday, xlMonth o xlYear.
Step: permite especificar el valor de incremento de la serie, por omisin

este valor es 1.
Stop: para especificar el valor final de la serie. Si este valor se omite,

entonces Excel rellena el rango.


Trend: indica la tendencia. Si el valor es True, crea una serie lineal o

geomtrica. Si el valor es False, crea una serie de datos estndares. Por


omisin, este valor es False.
Por ejemplo, usando el mtodo DataSeries, podemos crear una tabla de
multiplicar como mostramos a continuacin:

Sub TablasMultiplicar()
Worksheets(serie).Activate
For Columna = 1 To 10
Cells(1, Columna) = Columna
Set Rango = Range(Cells(1, Columna), Cells(10, Columna))
Rango.DataSeries Step:=Columna
Next
End Sub

Copy
Este mtodo permite copiar celdas y rangos. Su sintaxis es la
siguiente:

Objeto.Copy(Destination)
Donde Objeto es el rango que vamos a usar para la serie de datos. Por
ejemplo, para copiar el contenido de la celda A6 en la celda B6 de la
hoja activa, usamos la siguiente sentencia:

Range(A6).Copy Range(B6)
Para copiar un rango en una hoja de clculo distinta de la hoja activa,
tenemos esta sentencia:
Worksheets(Ventas).Range(A6:A15).Copy _
Worksheets(Vendedores).Range(A6:A15)

ClearContents
Este mtodo borra el contenido de las celdas, conservando el formato de
ellas. Su sintaxis es la siguiente:

Objeto.ClearContents
Por ejemplo, para eliminar el contenido del rango de celdas A7:G15,
usamos la siguiente sentencia:

Range(A7:G15).ClearContents

La propiedad UsedRange del objeto Range devuelve un rango rectangular que se extiende desde la celda superior
izquierda del rango utilizado (la primera) hasta la celda inferior derecha usada (la ltima del rango). Por ejemplo, si
la celda A1 tiene la palabra Ventas y la celda C6 contiene el nmero 40, el rango utilizado que devolver esta
propiedad ser el rango A1: C6.

Figura 26. Para eliminar el contenido y el formato de un grupo de


celdas, usamos el mtodo Clear.
Por ejemplo: Range(A7:G15).Clear.

Formularios
Los formularios, llamados tambin cuadros de dilogos
personalizados, son ventanas editables que contienen objetos de
menor jerarqua, tales como botones, cuadros de textos, textos
estticos y lista de opciones, entre otros. Se los emplea para mostrar
informacin y para permitirle al usuario introducir o seleccionar
contenido. Se les puede asociar una combinacin de cdigo VBA y
de datos para responder a las acciones del usuario. Un libro de
trabajo puede tener cualquier cantidad de formularios.

Insertar un formulario
Para agregar un formulario a un proyecto, desde la ventana del
Editor de Visual Basic para Aplicaciones hacemos clic en el men
Insertar y, luego, seleccionamos la opcin
denominada UserForm.
insertar el primer formulario a un proyecto,
A TRAVS DE UN Al
FORMULARIO, EL
veremos que en el Explorador de proyectos se
crea
una carpeta llamada
Formularios, que contiene el USUARIO PUEDE
elemento
UserForm1. Esta carpeta tendr todos los
formularios que generemos para nuestro libro.
INGRESAR O
En el sector
derecho de la ventana del Editor de
SELECCIONAR DATOS
VBA, aparecer un
formulario vaco y, como una
ventana flotante, veremos el Cuadro de herramientas que agrupa
los diferentes controles que podemos
incorporar al formulario. Estos controles son los que permiten interactuar con
los usuarios; ms adelante los veremos en detalle.

Los UserForms no son exclusivos de Microsoft Excel, sino que forman parte de la biblioteca de objetos de
Visual Basic para Aplicaciones, y, por lo tanto, los tenemos disponibles para usarlos en todas las aplicaciones
del paquete Microsoft Office, como, por ejemplo, en Word o en PowerPoint.

Figura 1. Tambin podemos insertar un formulario pulsando el botn


Insertar UserForm de la barra de herramientas Estndar.

El formulario es un objeto UserForm y, como cualquier otro objeto de


VBA, tiene sus propios eventos, propiedades y mtodos con los que
podemos controlar su apariencia y su comportamiento.

Propiedades de los formularios


El primer paso para disear formularios consiste en establecer sus
propiedades. Si la ventana Propiedades no se encuentra visible en el
Editor de VBA, para acceder a ella pulsamos la opcin Ventana
Propiedades del men Ver o hacemos un clic con el botn derecho
del mouse sobre el formulario y, en el men, seleccionamos
Propiedades. Debemos tener presente que una sola propiedad puede
pertenecer a

Es posible establecer las propiedades de un formulario tanto en tiempo de diseo, mientras lo estamos armando,
desde la ventana Propiedades del Editor de VBA, como en tiempo de ejecucin, al escribir el cdigo, es decir,
mientras se ejecuta realmente la aplicacin y se interacta con ella. No hay una forma mejor que la otra, sino que la
eleccin depender de nuestro gusto.

diferentes objetos. Por ejemplo, es posible definir un tipo y tamao de


letra para los cuadros de texto, los botones de comando y las etiquetas,
entre otros elementos disponibles.

Figura 2. La ventana Propiedades tiene dos fichas que presentan las


propiedades por categora o en orden alfabtico.

A continuacin, describiremos algunas de las propiedades ms comunes


de los formularios.
Name: permite establecer el nombre con el que haremos referencia al

formulario en el cdigo. Cuando agregamos un formulario, VBA, de


manera predeterminada, le asigna el nombre UserForm1, UserForm2,
UserForm3, y as sucesivamente. Es conveniente darle a esta propiedad
un valor ms significativo, como, por ejemplo, frmEntrada, para un
formulario de entrada de datos.

Cuando seleccionamos la propiedad BackColor, veremos el valor &H8000000F&, el cual est codificado. Esto se
debe a que Visual Basic describe los cdigos de color utilizando un cdigo hexadecimal (base 16). El empleo de
cdigos hexadecimales, en teora, permite la definicin de hasta 16.772.216 colores diferentes.

Caption: permite ingresar un texto

personalizado que se mostrar en la barra de LA


del formulario.
BACKCOLOR PERMITE
Height: permite establecer la altura del

PROPIEDAD ttulo

formulario en puntos. CAMBIAR EL COLOR


Width: permite determinar el ancho del DE

FONDO DEL

formulario en puntos
BackColor: permite elegir el color de fondo del FORMULARIO

formulario. Para seleccionar un color diferente al predeterminado,


debemos desplegar el
men del cuadro de valores mediante un clic sobre su contenido y luego
sobre la flecha de la derecha. Veremos que este men contiene dos fichas:
Sistema y Paleta. La ficha Sistema muestra una paleta de colores que
Windows generalmente utiliza para sus distintos objetos. En cambio, la
ficha Paleta presenta todos los colores que se encuentran disponibles para
el fond de los formularios. Esta propiedad tambin la podemos modificar
desde el cdigo. Su sintaxis es Objeto.BackColor [=Long]. Donde
Objeto es cualquier objeto vlido, y Long es un argumento opcional que
determina el valor numrico que representa un color vlido.

Figura 3. Haciendo un clic con el botn derecho del


mouse sobre los casilleros en blanco de la ficha
Paleta, podemos crear nuestros propios colores.

BorderStyle: permite establecer un tipo de borde para el formulario. Tiene


dos opciones: 0 - fmBorderStyleNone para un control sin lnea, y 1 fmBorderStyleSingle para un control con una lnea. La segunda opcin es
la predeterminada para el objeto formulario.
BorderColor: permite definir el color del borde; se emplea junto a la
propiedad BorderStyle.
StartUpPosition: permite determinar la ubicacin exacta del formulario

en la pantalla, como, por ejemplo, centrado.


Picture: permite incluir una imagen de fondo para el formulario.

Figura 4. Haciendo un clic en el botn ... del cuadro de valores de la propiedad


Picture, podremos seleccionar un archivo de imagen.

PictureAlignment: permite alinear la imagen dentro del formulario. Las

opciones disponibles son: 0 - fmPictureAlignmentTopLeft alinea la


imagen en la parte superior izquierda del formulario;

1 - fmPictureAlignmentTopRight alinea la imagen en la parte superior


derecha del formulario; 2 - fmPictureAlignmentCenter centra la imagen
en el formulario (es la opcin predeterminada);
3 - fmPictureAlignmentBottomLeft alinea la imagen en la parte inferior
izquierda del formulario y 4 - fmPictureAlignmentBottomRight alinea
la imagen en la parte inferior derecha del formulario.
PictureSizeMode: permite ajustar el tamao de la imagen. Tiene
diferentes opciones disponibles: 0 - fmPictureSizeModeClip mantiene el
tamao original de la imagen. Si este supera el tamao del formulario, solo
se mostrar una parte de la imagen; 1 - fmPictureSizeModeStretch
autoajusta la imagen, en direccin vertical y horizontal, para que entre en
el formulario. Esta opcin distorsionar la imagen; 3 fmPictureSizeModeZoom autoajusta la imagen al tamao del formulario,
pero, a diferencia de la opcin anterior, no distorsiona la imagen.

Mtodos de los formularios


A continuacin, vamos a conocer los distintos mtodos que nos permiten
manejar los formularios.
Show: muestra el formulario en pantalla. Para esto, Visual Basic para

Aplicaciones primero comprueba que el formulario est cargado en la


memoria y, si no lo est, procede a cargarlo. La sintaxis bsica es
NombreFormulario.Show. Por ejemplo, tenemos el siguiente
procedimiento que muestra el formulario llamado frmEjemplo.
Sub mostrar_formulario()
frmEjemplo.Show End Sub

Load: carga el formulario en memoria, pero no lo hace visible. Su sintaxis

es Load NombreFormulario.
Hide: oculta el formulario, sin descargarlo de la memoria. Si bien los

controles no estarn al alcance del usuario, podemos seguir haciendo


referencia a ellos a travs del cdigo. Esto quiere decir que los valores de
las variables a nivel formulario no desaparecen, sino que permanecen
ocultas. Su sintaxis es NombreFormulario.Hide. Por ejemplo, el
procedimiento que presentamos a continuacin oculta el formulario
llamado frmEjemplo.
Sub mostrar_formulario()

frmEjemplo.Hide

End Sub
Unload: descarga el formulario de la memoria, y, de esta manera,
todos los controles volvern a los valores que tenan por defecto. Su
sintaxis es Unload NombreFormulario.

Eventos de los formularios


A continuacin, veremos los principales eventos de un formulario.
Initialize: se produce al cargar por primera vez el formulario, a travs

del mtodo Show o Load. Esto significa que, si en una aplicacin


cargamos un formulario por primera vez, se va a realizar este evento,
pero, si descargamos el formulario y luego lo volvemos a cargar, esta
segunda vez y las sucesivas no se producir este evento.
Activate: ocurre cuando el formulario se vuelve activo, es decir, cada

vez que se hace visible (mtodo Show). Esto sucede mltiples veces
si tenemos en la aplicacin ms de un formulario, pero solo uno de
ellos puede ser el formulario activo.

Controles de un formulario
La gran mayora de los formularios que diseemos se utilizar para que
los usuarios puedan ingresar y seleccionar datos de una manera fcil,
por eso, es necesario que contengan controles. Microsoft Excel posee
una gran variedad de controles que podemos agregar a un formulario.
Para esto, usaremos el Cuadro de herramientas que aparece al insertar
o abrir un formulario y que contiene los controles ms utilizados.
Primero elegimos el control que necesitamos, luego lo seleccionamos y
lo arrastramos al formulario.

Me es una palabra reservada de acceso directo que se refiere al objeto UserForm que contiene el cdigo. Al escribirla
seguida por un punto (.), veremos automticamente todas las propiedades para el formulario.
Por ejemplo, para ocultar el formulario activo podemos utilizar la siguiente sentencia Me.Hide.

Figura 5. El editor de VBA carece de comandos de men para


agregar controles al formulario.

Si el Cuadro de herramientas no se encuentra visible, debemos ir al men


Ver y seleccionar la opcin Cuadro de herramientas o presionar el botn
Cuadro de herramientas de la barra de herramientas Estndar.
A continuacin, describiremos las principales propiedades, mtodos

y eventos de los controles ms comunes.

Etiquetas (Label)
El control Etiqueta (Label) se utiliza para
mostrar informacin que los usuarios no
pueden modificar y para identificar a otros
controles, como, por ejemplo, los cuadros de
texto y las barras de desplazamiento.

Al igual que en los


formularios, es
posible
EN EL CUADRO DE
HERRAMIENTAS DE
LOS FORMULARIOS
ENCONTRAMOS LOS
CONTROLES

Propiedades
establecer las propiedades de cualquier control
en tiempo de diseo, a travs de la ventana Propiedades, o en tiempo
de ejecucin, asignando la propiedad en el cdigo. Las principales
propiedades del control Etiqueta son:
Name: permite establecer el nombre con el que haremos referencia a
la etiqueta en el cdigo. Por omisin, se le asigna el nombre Label1.
Caption: el contenido que muestra una etiqueta es asignado por esta
propiedad. Por ejemplo, si a la etiqueta llamada lbl_titulo le
queremos asignar el texto Ejemplo Etiqueta en tiempo de
ejecucin, usamos la siguiente sentencia: lbl_titulo.Caption =
Ejemplo Etiqueta.

Figura 6. Podemos ajustar el tamao de la Etiqueta desde el


men Formato/Ajustar tamao al contenido.

TextAlign: especifica la alineacin del texto dentro del control. Las

opciones disponibles son: 1 - fmTextAlignLeft alinea el texto hacia


la izquierda; 2 - fmTextAlignCenter centra el texto y 3 FmTextAlignRight alinea el texto hacia la derecha. Por ejemplo, si
queremos centrar el texto de la etiqueta lbl_titulo en tiempo de
ejecucin, utilizamos la siguiente sintaxis: lbl_titulo.TextAlign =
fmTextAlignCenter.
AutoSize: determina si el tamao del control se ajusta de manera

automtica a su contenido. El valor que puede tomar es True o


False.
Font: establece la fuente, el estilo y el tamao del texto del control.

Por ejemplo, si queremos que el texto de la etiqueta lbl_titulo tenga


fuente Arial, estilo Negrita, tamao 14 y color azul tenemos que usar la
sentencia que presentamos a continuacin:

With lbl_titulo
.Font.Name = Arial
.Font.Size = 14
.Font.Bold = True
.Font.Italic = True
.ForeColor = RGB(0, 0, 255) End With

BorderStyle: al igual que en los formularios, esta propiedad

establece el tipo de borde para la etiqueta.


BorderColor: permite definir el color del borde de la etiqueta.

Figura 7. Por convencin, como nombre de un Label se emplea el


prefijo lbl seguido de un nombre significativo. Por ejemplo: lbl_titulo.

Cuando agregamos controles a un formulario, en algn momento de nuestro trabajo vamos a tener que
seleccionarlos, ya sea para cambiar su tamao o bien para modificar su ubicacin. Para esto, utilizaremos
el seleccionador de objetos, que es el primer icono que aparece en el Cuadro de herramientas. Esta
herramienta se encuentra seleccionada por defecto.

Eventos
Los eventos ms empleados en las etiquetas son:
Click: se produce cuando se pulsa el control.
DbClick: ocurre cuando se hace doble clic sobre el control.

Cuadro de texto (TextBox)


El control Cuadro de texto (TextBox) se suele utilizar para
mostrar informacin o para que el usuario ingrese datos. El
contenido puede ser editado por el usuario.

Propiedades
Las propiedades ms importantes de los cuadros de texto son:
Name: permite establecer el nombre con el que haremos

referencia al cuadro de texto en el cdigo. De manera


predeterminada, se le asigna el nombre TextBox1.
Text: el contenido que muestra un cuadro de texto es controlado

por esta propiedad. Se puede establecer de tres maneras


diferentes. En tiempo de diseo, desde la ventana Propiedades.
En tiempo de ejecucin, mediante cdigo, por ejemplo:
txt_mensaje.Text = Ingrese sus datos aqu. Por ltimo, a
travs del texto que escribe el usuario en tiempo de ejecucin. El
contenido se puede recuperar si se lee la propiedad Text en
tiempo de ejecucin.

Font: esta propiedad establece la fuente, el estilo y el tamao

para el texto contenido en el control.


Enabled: a partir de los valores True o False, determina si el

control puede responder a eventos generados por el usuario. Esta


propiedad

Si seleccionamos varios controles, podremos cambiar de manera simultnea sus propiedades para acelerar
nuestro trabajo. Pero debemos tener en cuenta que, cuando seleccionamos dos o ms controles, en la
ventana Propiedades nicamente veremos las propiedades compartidas por esos controles.

la utilizamos para habilitar y deshabilitar los controles.


Cuando le asignamos el valor False, el usuario no podr
interactuar con el control. Es decir, el cuadro de texto
quedar inhabilitado para responder al usuario hasta que
cambiemos al valor True.
Por ejemplo, si queremos deshabilitar en tiempo de ejecucin el
cuadro de texto llamado txt_Importe, utilizamos la siguiente
sentencia: txt_Importe.Enabled = False.

Figura 8. Por convencin, como nombre de un


TextBox se emplea el prefijo txt seguido
de un nombre significativo. Por ejemplo: txt_nombre.

Locked: especifica si el control puede ser editado. Puede adoptar dos

valores: True o False. Si le asignamos el valor True, el usuario no


podr modificar el texto de este control.
MaxLength: establece la longitud mxima de caracteres permitida

para el cuadro de texto. Si no se establece o si se pone valor 0,


permite cualquier longitud de texto.

En un cuadro de texto, es posible tomar el contenido de una celda determinada, utilizando la propiedad
ControlSource. Esta propiedad es la que permite hacer referencia a una celda, por ejemplo, la A1. Tambin
podemos tomar el valor de una celda para usarlo en un cuadro de texto empleando el procedimiento de
evento TextBox_Change del cuadro de texto.

MultiLine: de manera predeterminada, el cuadro de texto presenta

una nica lnea de texto y no muestra las barras de desplazamiento;


por lo tanto, si un texto es ms largo que el ancho de un cuadro de
texto, solo veremos una parte de este. Si le asignamos el valor True a
esta propiedad, el cuadro de texto aceptar mltiples lneas.
ScrollBars: permite agregar barras de desplazamiento verticales

(fmScrollBarsVertical), horizontales (fmScrollBarsHorizontal) o


ambas (fmScrollBarsBoth). Por omisin, el cuadro de texto carece
de barras de desplazamiento.
PasswordChar: a veces, es conveniente que no se pueda leer lo que
se escribe en el cuadro de texto, como, por ejemplo, la entrada de una
contrasea. Esta propiedad permite especificar el carcter empleado
para ocultar el texto que realmente contiene un control.

Figura 9. El contenido de la propiedad Text no cambia por el


hecho de presentar en pantalla un carcter distinto.

Eventos
Los eventos ms empleados en los cuadros de texto son:
Change: ocurre cuando se modifica el contenido del rea de edicin

del cuadro de texto.


KeyPress: se produce cuando el usuario presiona una tecla.

Cuadro de lista (ListBox)


El control Cuadro de lista (ListBox) presenta una lista de elementos
para que el usuario seleccione uno o varios de ellos. Si el nmero de
elementos supera a los que se pueden mostrar en el cuadro de lista,
aparecen de manera automtica las barras de desplazamiento en el
control, que permiten recorrer todos los elementos.

Propiedades
Las propiedades ms importantes del cuadro de lista son:

RowSource: permite definir los valores de un ListBox o un

ComboBox (este control lo veremos ms adelante). El valor vlido


para esta propiedad es una cadena, que puede ser una direccin de
celda o un nombre de rango. Por ejemplo, si queremos crear un
cuadro de lista con los datos del rango A3:A15 de la hoja de clculo
Hoja1, escribimos la siguiente sentencia en el evento Activate del
formulario, de modo que los datos se carguen en forma automtica al
cuadro de lista al abrir el formulario.
Private Sub UserForm_Activate()
lst_bebidas.RowSource = Hoja1!$A$3:$A$15
End Sub

Figura 10. La propiedad RowSource tambin se puede establecer en


tiempo de diseo, introduciendo el rango sin comillas en la ventana
Propiedades. Por ejemplo: =Hoja1!$A3:A15.

ColumnCount: permite establecer el nmero de columnas que se

mostrarn en un ListBox o ComboBox. El valor por defecto es 1.


ColumnHeads: permite mostrar u ocultar el encabezado de las

columnas. Si establecemos el valor en True, se utilizar la primera


fila de los datos como encabezados de las columnas.

ColumnWidths: permite ajustar el ancho de cada columna de la lista.

Si dejamos este valor en blanco (por defecto) o lo establecemos en -1,


el ancho de la columna ser determinado por Microsoft Excel. Es
importante tener en cuenta dos restricciones para configurar de
manera adecuada este parmetro. Los valores deben estar expresados
en unidades (centmetros, pulgadas) y separados por punto y coma (;).
Por ejemplo: 6 cm; 2 cm. Si no especificamos una unidad de medida,
el ancho de la columna se medir en pulgadas.

Figura 11. Por convencin, como nombre de un


ListBox se emplea el prefijo lst seguido
de un nombre significativo. Por ejemplo: lst_bebidas.

Esta propiedad es la que permite determinar la forma en que veremos la lista de elementos. La opcin
fmListStylePlain es el valor por defecto y muestra la lista sin ningn efecto visual. En cambio,
fmListStyleOption agrega a la lista unos botones de opcin, si se permite seleccionar un solo elemento; o
unas casillas de verificacin, si se permite una seleccin mltiple.

MultiSelect: de forma predeterminada, podemos seleccionar un solo

elemento de la lista, pero esta propiedad nos permite habilitar la


seleccin de varios elementos. Tiene tres opciones: 0 fmMultiSelectSingle habilita la seleccin de un solo elemento de la
lista; 1 - fmMultiSelectMulti permite seleccionar o deseleccionar
ms de un elemento de la lista haciendo un clic con el mouse o
presionando la barra espaciadora; 2 - fmMultiSelectExtended
habilita la seleccin de un rango continuo de la lista, combinando la
tecla SHIFT con el botn izquierdo del mouse, y, para seleccionar
elementos no contiguos, utilizamos la tecla CTRL y el botn
izquierdo del mouse.
ListCount: devuelve el nmero total de elementos que contiene un

cuadro de lista.
ListIndex: devuelve la posicin del elemento seleccionado en el

cuadro de lista. Si no se selecciona ningn elemento, el valor es -1.


Por ejemplo, la siguiente sintaxis muestra un cuadro de dilogo con el
nmero del elemento seleccionado:

MsgBox Se seleccion el elemento &


lst_bebidas.ListIndex & de la lista
Value: devuelve el valor del elemento que ha sido seleccionado

dentro de un ListBox o ComboBox.

Mtodos
Los mtodos ms importantes del cuadro de lista son:

AddItem: permite aadir a un cuadro de lista elementos que no estn

contenidos en un rango de una hoja de clculo. Tambin podemos

La propiedad Selected indica qu elementos han sido seleccionados de la lista. Se emplea en lugar de
ListIndex cuando creamos un cuadro de lista con la propiedad Multiselect en el valor fmMultiSelectMulti
o fmMultiSelectExtended. Los valores que puede tomar esta propiedad son True cuando el elemento ha
sido seleccionado y False cuando el elemento no est seleccionado.

usarlo para recuperar elementos a partir de un rango de una hoja de


clculo o una matriz. Por ejemplo, si queremos cargar un cuadro de
lista llamado lst_aviones con las marcas de ocho aviones, podemos
escribir la siguiente sentencia:
With lst_aviones
.RowSource =
.AddItem Airbus
.AddItem Beechcraft
.AddItem Boeing
.AddItem Bombardier
.AddItem Cesna
.AddItem Embraer
.AddItem Honda
.AddItem Learjet
End With

Figura 12. El mtodo AddItem no funcionar si el


ListBox est enlazado a datos, por lo tanto,
RowSourse se borrar si se hubiera establecido.

Si los datos que queremos que contenga el cuadro de lista se encuentran


en un rango de celdas de una hoja de clculo, podemos usar una
estructura de bucle que recorra el rango de celdas y vaya ingresando
cada elemento al cuadro de lista. Por ejemplo, si tenemos una hoja de
clculo llamada Marcas, que contiene en el rango A3:A10 los elementos
que queremos que aparezcan en el cuadro de lista llamado lst_aviones,
podemos utilizar la siguiente sentencia para cargar los datos al cuadro de
lista.
Worksheets(Marcas).Range(A3).Select Do While ActiveCell
<> Empty

lst_aviones.AddItem ActiveCell

ActiveCell.Offset(1, 0).Select
Loop

Figura 13. Los nombres que estn debajo de A2 sern


enviados al ListBox. Cuando aparezca una celda vaca, la condicin
Do While finalizar la ejecucin del cdigo.

RemoveItem: permite eliminar elementos de un cuadro de lista. Por

ejemplo, si tenemos un cuadro de lista llamado lst_aviones con ocho


elementos y queremos eliminar el segundo, escribimos la sentencia:
lst_aviones.RemoveItem (1).

Si en cambio queremos eliminar el elemento que hemos seleccionado de


la

lista,

usamos

la

sentencia:

lst_aviones.RemoveItem

(lst_aviones.ListIndex).
Clear: permite borrar todos los elementos de un cuadro de lista. Por

ejemplo, si queremos eliminar el contenido del cuadro de lista


llamado lst_aviones, escribimos la sentencia:
Lst_aviones.Clear.

Eventos
Los eventos ms empleados en un cuadro de lista son:
-Click: ocurre cuando el usuario interacta con el control.
-Change: se produce cuando se cambia un elemento de la lista.

Cuadro combinado (ComboBox)


El control Cuadro combinado (ComboBox) es un cuadro de lista
desplegable. Cuando est cerrado, muestra un solo elemento, pero, si
lo desplegamos mediante la flecha que se encuentra a su derecha,
presenta la lista completa de elementos.
Un ComboBox rene las caractersticas de un cuadro de texto
(TextBox) y un cuadro de lista (ListBox), porque le permite al usuario
elegir una opcin de la lista o agregar elementos a la lista.

Propiedades
El cuadro combinado presenta muchas propiedades que son comunes al
control cuadro de lista, como, por ejemplo, RowSource, ColumnCount,

ColumnHeads, ColumnWidths, ListCount y ListIndex. Una


propiedad especfica de este control es Style, que establece el
comportamiento del control y tiene dos opciones:
0 - fmStyleDropDownCombo: es el estilo por defecto; despliega la

lista cuando hacemos clic en la flecha. En este caso, el usuario puede


seleccionar o escribir un valor en el rea de edicin.
2 - FmStyleDropDownList: es similar a la anterior, pero no

permite ingresar texto, solo seleccionar elementos.

Figura 14. Por convencin, como nombre de un


ComboBox se emplea el prefijo cbo seguido
de un nombre significativo. Por ejemplo: cbo_horarios.

Mtodos
Al igual que el control ListBox, que vimos anteriormente, el
control ComboBox posee el mtodo Additem para agregar
elementos a la lista, el mtodo RemoveItem para eliminar un
elemento determinado y el mtodo Clear para eliminar todos los
elementos de la lista.
Por ejemplo, si queremos crear un cuadro combinado llamado cbo_
turnos, podemos utilizar la siguiente sentencia:

cbo_turnos.AddItem Maana
cbo_turnos.AddItem Vespertino
cbo_turnos.AddItem Tarde
cbo_turnos.AddItem Noche

El mtodo RemoveItem solo se puede utilizar con una macro o cdigo VBA. Debemos tener en cuenta que
este mtodo no funcionar si el ListBox o el ComboBox estn enlazados a datos a travs de la propiedad
RowSource. Por tal motivo, esta propiedad debe ser limpiada antes de emplear el mtodo RemoveItem.

Figura 15. Tambin podemos utilizar un Array


para rellenar un ComboBox con elementos que no
estn enlazados a una hoja de clculo.

Eventos
Los eventos ms empleados en un cuadro combinado son:
Click: ocurre cuando el usuario interacta con el control.

Change: se produce cuando se modifica un elemento de la lista.

Botn de comando (CommandButton)


La mayora de los formularios tiene al menos un control Botn de
comando (CommandButton), que le permite al usuario hacer clic
sobre l para realizar acciones, como, por ejemplo, ejecutar una
funcin.

Es posible configurar el espacio que queremos que haya entre los controles de un formulario. Para esto,
seleccionamos los controles; luego, vamos al men Formato y seleccionamos Espacio horizontal (o Espacio
vertical). En funcin del espacio que deseamos modificar, pulsamos Igualar, Aumentar, Disminuir o Quitar.

Por lo general, se utiliza el evento Click para ejecutar alguna accin


cuando se produce dicho evento.

Propiedades
Las propiedades ms importantes del botn de comando son:
Name: permite asignarle un nombre al botn de comando.
Caption: permite ingresar el texto que muestra el botn de comando.
Font: permite elegir la fuente, el estilo y el tamao para el texto

contenido en el botn de comando.


Height: determina el alto del botn.
Width: determina el ancho del botn.
Left: permite establecer la distancia desde el extremo izquierdo del

botn hasta el extremo izquierdo del formulario que lo contiene.


Top: permite configurar la distancia desde el extremo superior del

botn hasta el extremo superior del formulario que lo contiene.

Figura 16. Por convencin, como nombre de un


CommandButton se emplea el prefijo cmd seguido de un
nombre significativo. Por ejemplo cmd_calcular.

BackStyle: permite establecer el estilo de fondo para el botn de

comando. Tiene dos opciones: fmBackStyleTransparent hace


transparente el fondo del botn, es decir, se ve lo que hay detrs de
este objeto; fmBackStyleOpaque establece el fondo del botn en
opaco.
BackColor: permite especificar el color de segundo plano del botn

de comando. Para poder visualizar el color del botn, la propiedad


BackStyle debe ser fmBackStyleOpaque.
Enabled: permite habilitar o deshabilitar el botn. Si tiene el valor

True, el botn estar habilitado y responder a las acciones


generadas por el usuario. Si el valor es False, el botn quedar
inhabilitado para el usuario.

Mtodos
Este control prcticamente no posee mtodos. El ms importante es
SetFocus, que establece el foco en un control VBA, en este caso, el
botn de comando. Para usar este mtodo, el control debe estar
habilitado.

Eventos
El evento ms empleado en el botn de comando es Click, que
ocurre cuando el usuario presiona el botn de comando con el
botn izquierdo del mouse o cuando pulsa la tecla ENTER.

Marco (Frame)
El control Marco (Frame) se utiliza para agrupar otros controles y
darle una mayor funcionalidad a la interfaz. Es especialmente til
cuando el cuadro de dilogo contiene ms de un grupo de controles
de opcin. Tambin podemos usarlo para subdividir un formulario
y organizar su estructura.

Es una buena ayuda escribir el cdigo que usamos en minscula; de esta manera, sabremos de forma rpida
si la sintaxis y la ortografa del cdigo es correcta ya que, al presionar la tecla ENTER, VBA pone
automticamente en mayscula todas las palabras reconocidas. Tambin, podemos recurrir a la ayuda de
las palabras clave, ubicando el cursor sobre el trmino y presionando la tecla F1.

Para ubicar diferentes controles dentro de un marco, primero debemos


dibujar el marco en el formulario y, luego, arrastrar los controles desde
el Cuadro de herramientas al interior del marco.

Propiedades
Las propiedades principales del marco son:

Caption: es la propiedad por defecto de este control, permite agregar

un texto, a modo de ttulo, en la parte superior del marco.


BorderStyle: establece si el marco tendr o no una lnea de borde.

Tiene dos opciones. fmBorderStyleNone para un marco sin borde.


Debemos tener en cuenta que, si le quitamos el borde al control, el
texto que le asignemos en Caption no se visualizar.
fmBorderStyleSingle mostrar un borde de una sola lnea.
Visible: permite ocultar el control. Si Frame contiene otros

controles, y establecemos esta propiedad en False, estos quedarn


ocultos.
Otras propiedades que presenta este control y que ya conocemos son
Font, BackColor, Enabled, Left, Top.

Figura 17. Por convencin, como nombre de un


Frame se emplea el prefijo fra seguido
de un nombre significativo. Por ejemplo: fra_opciones.

Mtodos y eventos
Este control tambin tiene mtodos y eventos, pero, como su uso es
infrecuente, no los veremos en este libro.

Casilla de verificacin (CheckBox)


El control Casilla de verificacin (CheckBox) le ofrece al usuario una
opcin para que d una respuesta del tipo S/No o Verdadero/ Falso. Tambin se
emplea, por lo general, para listar opciones y que el usuario pueda elegir entre
ellas; es muy til cuando el usuario tiene que elegir entre ms de una opcin.
Dependiendo de si la casilla est seleccionada (True) o no (False), se realiza
una accin u otra.

Propiedades
La propiedad Value devuelve y establece el valor seleccionado. Tiene tres
posibles valores: Null indica que la casilla de verificacin no est
seleccionada, ni desactivada; True indica que la casilla est marcada, y
False, que se encuentra desactivado.
El control tiene otras propiedades que ya conocemos, como Alignmen,
AutoSize, Font y ForeColor.

Figura 18. Por convencin, como nombre de un CheckBox se emplea el prefijo chk
seguido de un nombre significativo. Por ejemplo: chk_auto.

Mtodos
El mtodo ms importante de la casilla de verificacin es SetFocus,
que establece el enfoque a un objeto especfico. Cuando un control
tiene el enfoque (o foco) se convierte en activo y puede responder
directamente a una entrada del usuario con el teclado o con el
mouse.

Eventos
El evento ms empleado es Click, que ocurre cuando el usuario
selecciona de manera definitiva un valor entre otros posibles.

Botn de opcin (OptionButton)


El control Botn de opcin (OptionButton) se
emplea cuando el usuario tiene que seleccionar

solo una opcin entre varias disponibles. Por EL


lo general, se usa en grupos de al menos dos DE
elementos, y es conveniente agrupar los botones
de opcin en un control Frame. SELECCIONAR
en cuenta que todos los ELEMENTO ENTRE
tipo que estn dentro de
un mismo marco actan como un solo grupo,
DISPONIBLES independiente de los botones de

CONTROL BOTN
OPCIN PERMITE
UN Debemos tener
controles de este
VARIOS
opcin que se

encuentran en otros grupos.

Propiedades
Las principales propiedades del botn de opcin son:
Name: permite establecer el nombre con el que haremos referencia

al botn de opcin en el cdigo.


Caption: muestra la descripcin que acompaa al botn de opcin.
Value: los valores que puede tomar esta propiedad son de tipo

boolean. Si el botn est seleccionado, toma el valor True; en caso


contrario, toma el valor False.
El resto de las propiedades que posee son comunes a la mayora de
los otros controles, como Font, Enabled, BackColor, Visible.

Mtodos
El mtodo ms importante que posee es SetFocus, que establece el
enfoque a un objeto especfico, en este caso, el botn de opcin.

Eventos

El evento ms empleado en el botn de opcin es Click, que ocurre


cuando el usuario selecciona de forma definitiva un valor entre otros.

Imagen (Image)
El control Imagen (Image) se utiliza para mostrar una foto, grfico o
ilustracin dentro de un formulario, que puede provenir de un archivo o
del Portapapeles. La imagen se guarda en el libro de trabajo; de esta
manera, es posible distribuir el libro de Excel a cualquier persona sin
incluir una copia del archivo de imagen. Las imgenes pueden ser del
tipo BMP, CUR, GIF, ICO, JPG, WNF.

Figura 19. Por convencin, como nombre de un Image se


emplea el prefijo img seguido de un nombre significativo.
Por ejemplo: img_foto.

El control ToggleButton (botn de alternar) posee dos estados: activado y desactivado. Al hacer clic sobre este
botn, se intercambian estos dos estados, y el botn modifica su apariencia. Si est presionado, toma el valor
verdadero (True), y, en el caso contrario, toma el valor falso (False).

Propiedades
Las principales propiedades del control Imagen son:
AutoSize: establece si la imagen cambia o no de tamao

automticamente. Tiene dos valores: False o True.

Picture: se utiliza para indicar el archivo de imagen que se

mostrar en el control. Cuando se especifica desde el cdigo


VBA, hay que emplear la funcin LoadPicture.
PictureSizeMode: especifica cmo se mostrar la imagen, en

relacin a su tamao original y a la escala. Tiene tres opciones.


fmPictureSizeModeClip es el valor predeterminado, recorta la
imagen que sea ms grande que el formulario.
fmPictureSizeModeStrech agranda la imagen para adaptarla al
formulario, puede distorsionarla horizontal o verticalmente. Con
esta
opcin, no se tendr en cuenta la propiedad
PictureAlignment.
fmPictureSizeModeZoom EL CONTROL
imagen sin distorsionarla.SE UTILIZA PARA
PictureAlignment: especifica la alineacin

IMAGE agranda la

de la imagen. Tiene cinco opciones:


MOSTRAR UNA
FOTO fmPictureAlignmenTopLeft alinea
la DENTRO DE UN
imagen a la esquina superior izquierda;
fmPictureAlignmenTopRight alinea la FORMULARIO imagen a
la esquina superior derecha; fmPictureAlignmenCenter centra
la imagen en el
formulario; fmPictureAlignmenBottomLeft alinea la imagen a la
esquina inferior izquierda; fmPictureAlignmenBottomRight alinea la
imagen a la esquina inferior derecha.
Este control tambin tiene otras propiedades que ya conocemos,
como BorderStyle, BorderColor, Height, Width.

Eventos
Los principales eventos del control Image son:

Click: cuando el usuario hace clic sobre la imagen.


DoubleClick: cuando el usuario hace doble clic sobre la imagen.
MouseMove: cuando el mouse se mueve sobre el rea del control.
MouseDown: cuando el mouse est presionado, antes de Click.
MouseUp: se produce al soltar el botn del mouse.

Pgina mltiple (MultiPage)


El control Pgina mltiple (MultiPage) contiene diferentes fichas.
Cada ficha es una nueva pgina que puede contener un conjunto de
controles diferentes. La seleccin de una pgina oculta a las otras
pginas de la hoja. Este control es til cuando queremos manejar una
gran cantidad de datos que se pueden clasificar en varias categoras,
porque crea una pgina para cada una.

Figura 20. Por convencin, como nombre de un


MultiPage se emplea el prefijo mpg seguido de un nombre
significativo. Por ejemplo: mpg_datos.

El control RefEdit se utiliza para permitirle al usuario seleccionar un rango de una hoja de clculo. Este rango lo
podemos aplicar dentro de un formulario o de una instruccin VBA. El control muestra la direccin de la celda o

rango que el usuario selecciona o introduce. El rango de celdas puede ser una celda o un rango de celdas contiguas
o no.

De manera predeterminada, el control tiene dos pginas, y cada


pgina tiene su propio orden de tabulacin (la activacin de cada
control de una pgina al presionar la tecla TAB). La numeracin del
orden de tabulacin comienza por 0.

Propiedades
La principal propiedad del control MultiPage es Caption, que
establece el nombre que aparece en la ficha del control.

Eventos
El evento predeterminado de este control es el evento Change, que se
produce cada vez que se cambia de pgina.

Barra de desplazamiento (ScrollBar)


El control Barra de desplazamiento
(ScrollBar) permite rpidos desplazamientos a
lo largo de
una lista de elementos. Recorre un determinado
de valores cuando un usuario hace clic en
las flechas de desplazamiento, cuando arrastra el
ScrollBox o hace clic en algn rea entre las
RECORRER de desplazamiento y el Scrollbox.
LISTA DE barras de desplazamiento de cualquier

LA BARRA DE rango
DESPLAZAMIENTO
flechas PERMITE
Es similar a las UNA
programa.
ELEMENTOS

Propiedades
Las principales propiedades que posee la barra de desplazamiento son las que
detallamos a continuacin:

Para unificar el tamao de varios controles, debemos seleccionar los controles, haciendo clic sobre cada
uno de ellos mientras mantenemos presionada la tecla SHIFT, luego vamos al men Formato/Igualar
tamao y, en funcin de lo que deseamos, elegimos una de las siguientes opciones: Ancho, Alto o Ambos.

Value: es el valor actual del cuadro de desplazamiento, consiste en un

nmero entero que se encuentra comprendido entre los valores


asignados a las propiedades Max y Min.
Max: establece el mximo valor de desplazamiento cuando el botn

se encuentra en la posicin ms alta.


Min: establece el mnimo valor de desplazamiento cuando el botn se

encuentra en la posicin ms baja.


SmallChange: determina la cantidad en que la propiedad Value

cambia cuando se hace clic sobre el control, va de 1 a 32767.


LargeChange: especifica el cambio incremental cuando un usuario

hace clic en el desplazamiento largo. El valor por defecto es 1.


Orientation: determina si la barra de desplazamiento se ubica en

sentido horizontal o vertical. Tiene tres configuraciones.


-1 - fmOrientationAuto: el alto y el ancho del control definen si la
barra se muestra en forma horizontal o vertical. 0 fmOrientationVertical: el control se mostrar en forma vertical. 1 fmOrientationHorizontal: el control se mostrar en forma
horizontal.

Figura 21. Por convencin, como nombre de un ScrollBar vertical se


emplea el prefijo vsb y para el horizontal, hsb.

Un formulario es no modal cuando el usuario puede hacer clic en cualquier otra parte de la aplicacin mientras el
formulario se encuentra abierto. Estos formularios solo son compatibles con Microsoft Office 2000 y las versiones
posteriores. Si tratamos de generar un formulario no modal en una versin anterior de Office, se producir un error
en tiempo de ejecucin.

Mtodos
El mtodo ms importante es SetFocus, que establece el enfoque a un
objeto especfico, en este caso el ScrollBar.

Eventos
El evento ms utilizado para este control es el evento Change, que
ocurre cada vez que el usuario genera un desplazamiento.

Botn de nmero (SpinButton)


El control Botn de nmero (SpinButton) est
conformado por una flecha hacia arriba y otra hacia

abajo, y permite al usuario seleccionar un valor


BOTN haciendo clic sobre una de las dos
NMERO LE frecuentemente junto con los
de texto o Etiqueta, que muestran el valor
PERMITE AL USUARIO del botn de
SELECCIONAR

EL CONTROL
flechas. Se usa DE
controles Cuadro
actual (Value)
nmero.

UN VALOR Propiedades
Las propiedades ms importantes del botn de nmero son las
siguientes:
Value: determina el valor del SpinButton.
Max: establece el valor mximo que puede tener el control.
Min: determina el valor mnimo que puede tener el control.
SmallChange: indica la cantidad en que la propiedad Value cambia

cuando se hace clic sobre el control. El valor predeterminado es 1.

Un control MultiPage es un contenedor de controles similar a un Frame. Cada pgina tiene un conjunto
diferente de controles, y la seleccin de una pgina oculta las otras. En cambio, el control TabStrip posee
un conjunto de controles del mismo tipo en todas las fichas. El contenido de los controles cambia cuando
seleccionamos una ficha, pero el diseo de los controles sigue siendo igual.

Figura 22. Min, Max y SmallChange toman valores enteros


largos, lo que significa que no hay decimales

Mtodos
El mtodo ms importante es SetFocus, que establece el enfoque a un
objeto especfico, en este caso, el botn de nmero.

Eventos
El evento ms utilizado para este control es Change, que se produce

Fuentes:

Publicacion Digital:Net User/User Net

Material Propio

Ayuda oficial Microsoft Excel

www.todoexcel.com