Está en la página 1de 146

2016

Curso: Macros Excel


Programacin VBA

Daniel Zegarra Zavaleta


Manual de Microsoft Excel Programacin VBA

Microsoft Excel Programacin VBA

1. Cmo se crea un programa en Excel?


a. La grabadora de macros
b. El Editor de Visual Basic para Excel

2. Uso de la Grabadora de Macros


a. Macros con referencias Absolutas
b. Macros con referencias Relativas
c. Asignar una macro a un objeto
d. Como eliminar una macro
e. Diferencia de Macros en Excel 2003 y en Excel 2007/2010

3. Escritura de Macros en el Editor de Visual Basic para Excel


a. Ingreso al Editor de Visual Basic de Excel
b. Qu es un programa en Visual Basic
c. Estructura de un programa para Excel
d. El Cdigo en Visual Basic
i. Sentencias de Declaracin
ii. Sentencias de Asignacin
iii. Sentencias Ejecutables
e. La ventana Explorador de Proyectos
f. Ejecucin de macros paso a paso

4. Manejo de Rangos, Hojas y Archivos


a. Propiedades y Mtodos
b. Seleccin de rangos: Directa y relativa
c. Desplazamiento y seleccin: Propiedad Rango y Offset
d. Nombres de rangos y nombres de hojas: Directa y relativa
e. Abrir, cerrar, guardar y eliminar archivos
f. Uso de funciones de Visual Basic
g. Uso de funciones de hoja de clculo en Visual Basic

5. Sentencias de Control
a. If...thenelse
b. Select Case
c. Do While/Until
d. For Next
e. For Each Next
f. With End With

Elaborado por: Daniel Zegarra Zavaleta Pag. 1


Manual de Microsoft Excel Programacin VBA

6. Uso de botones de formulario


a. Ejecucin de macros con botones de formulario

7. Las funciones MsgBox e InputBox


a. Cajas de salida de informacin MsgBox
b. Cajas de ingreso de informacin InputBox

8. Creacin de formularios UserForm


a. Herramientas de formularios
b. La ventana Propiedades
c. Diseo de formularios interactivos

9. El Cdigo en Visual Basic para Excel


a. Sentencias de declaracin
i. Constantes
ii. Variables
1. Publicas
2. Privadas
3. Estticas
iii. Arreglos
b. Sentencias de asignacin
i. De datos
ii. De objetos (Set)
c. Tipos de objetos
i. Aplicaciones, libros, hojas, rangos, celdas, grficos, formas, etc.
ii. Colecciones de objetos
10. Control del flujo de un programa
a. Sentencias de bifurcacin
b. Sentencias de repeticin o bucle
c. Sentencia de ejecucin mltiple con un objeto
d. Las Sentencias: Goto, Call, Exit
11. Manejo de Rangos
a. Mover y copiar rangos
b. Nombrar rangos
c. Obteniendo la interseccin de rangos
d. Proteger y desproteger rangos
12. Manejo de hojas
a. Insertar hojas
b. Nombrar hojas
c. Eliminar hojas
d. Ocultar y mostrar hojas
e. Proteger y desproteger hojas
13. Manejo de archivos
a. Abrir un archivo
b. Abrir un archivo de texto como hoja de calculo
c. Abrir un archivo elegido por el usuario
d. Cerrar archivos
e. Eliminar archivos
f. Verificar si un archivo existe

Elaborado por: Daniel Zegarra Zavaleta Pag. 2


Manual de Microsoft Excel Programacin VBA

g. Verificar si un libro est abierto


14. Uso de arreglos
a. Declarar un arreglo
b. Arreglos multidimensionales
c. Convertir una lista en un arreglo
d. Redimensionar un arreglo
15. Formularios avanzados
a. Inicializar formularios
b. Formularios de fichas mltiples
c. Formulario para ingreso de fechas con calendario
d. Formularios para ingreso de usuarios con contrasea
16. Crear Funciones personalizadas
a. Crear funciones de usuario
17. Uso de botones de control ActiveX
a. Propiedades de los controles
b. Cdigo VBA de los controles
18. Manejo de grficos
a. Redefinir los rangos a graficar
b. Mostrar grficos en una ventana de formulario
19. Manejo de formas e imgenes
a. Mover, copiar, cambiar tamao
b. Escribir formulas en las formas
20. Manejo de eventos de Excel
a. Macros autoejecutables
i. Para libros
ii. Para hojas
iii. Para rangos de celdas
iv. Para acciones del mouse
v. Para acciones del teclado
21. Manejo de mdulos
a. Insertar un modulo
b. Eliminar un modulo
c. Ocultar los mdulos (contrasea)
22. Control de pausas al ejecutar sentencias
a. Application.Wait
b. Application.OnTime
23. Control de errores
a. On Error Resume Next
b. On Error GoTo
c. Err.Number
d. Err.Description
e. Control de mensajes de alerta (DisplayAlert)
f. Control de actualizacin de pantalla (Screen.Updating)
24.
1. El Cdigo en Visual Basic para Excel
a. Sentencias de declaracin
i. Constantes
ii. Variables
1. Publicas
2. Privadas
3. Estticas

Elaborado por: Daniel Zegarra Zavaleta Pag. 3


Manual de Microsoft Excel Programacin VBA

iii. Arreglos
b. Sentencias de asignacin
i. De datos
ii. De objetos (Set)
c. Tipos de objetos
i. Aplicaciones, libros, hojas, rangos, celdas, grficos, formas, etc.
ii. Colecciones de objetos
2. Control del flujo de un programa
a. Sentencias de bifurcacin
b. Sentencias de repeticin o bucle
c. Sentencia de ejecucin mltiple con un objeto
d. Las Sentencias: Goto, Call, Exit
3. Manejo de Rangos
a. Mover y copiar rangos
b. Nombrar rangos
c. Obteniendo la interseccin de rangos
d. Proteger y desproteger rangos
4. Manejo de hojas
a. Insertar hojas
b. Nombrar hojas
c. Eliminar hojas
d. Ocultar y mostrar hojas
e. Proteger y desproteger hojas
5. Manejo de archivos
a. Abrir un archivo
b. Abrir un archivo de texto como hoja de calculo
c. Abrir un archivo elegido por el usuario
d. Cerrar archivos
e. Eliminar archivos
f. Verificar si un archivo existe
g. Verificar si un libro est abierto
6. Uso de arreglos
a. Declarar un arreglo
b. Arreglos multidimensionales
c. Convertir una lista en un arreglo
d. Redimensionar un arreglo
7. Formularios avanzados
a. Inicializar formularios
b. Formularios de fichas mltiples
c. Formulario para ingreso de fechas con calendario
d. Formularios para ingreso de usuarios con contrasea
8. Crear Funciones personalizadas
9. Uso de botones de control ActiveX
a. Propiedades de los controles
b. Cdigo VBA de los controles
10. Manejo de grficos
a. Redefinir los rangos a graficar
b. Mostrar grficos en una ventana de formulario
11. Manejo de formas e imgenes
a. Mover, copiar, cambiar tamao
b. Escribir formulas en las formas

Elaborado por: Daniel Zegarra Zavaleta Pag. 4


Manual de Microsoft Excel Programacin VBA

12. Manejo de eventos de Excel


a. Macros autoejecutables
i. Para libros
ii. Para hojas
iii. Para rangos de celdas
iv. Para acciones del mouse
v. Para acciones del teclado
13. Manejo de mdulos
a. Insertar un modulo
b. Eliminar un modulo
c. Ocultar los mdulos (contrasea)
14. Control de pausas al ejecutar sentencias
a. Application.Wait
b. Application.OnTime
15. Control de errores
a. On Error Resume Next
b. On Error GoTo
c. Err.Number
d. Err.Description
e. Control de mensajes de alerta (DisplayAlert)
f. Control de actualizacin de pantalla (Screen.Updating)

Elaborado por: Daniel Zegarra Zavaleta Pag. 5


Manual de Microsoft Excel Programacin VBA

La Programacin en Excel
g. Uso de la grabadora de macros
A pesar que la programacin se realiza internamente utilizando el lenguaje de
Visual Basic, no es necesario que los usuarios de Excel sepan necesariamente el
uso de este lenguaje. Y esto es as, gracias a que existe la posibilidad de que se
puedan grabar las acciones que necesitamos utilizando para ello una grabadora
de macros, la cual almacena en memoria todas las acciones a grabar, e
internamente convierte a estas en un programa en Visual Basic.

h. Que es la grabadora de macros


Es un programa de Office que se encarga de almacenar todos los pasos y
acciones que se realizan en la pantalla, ya sea usando para ello el teclado o el
mouse. Todo lo que se realice ser grabado como un grupo de acciones que
luego podrn repetirse cuantas veces quiera y en el momento que se desee.

Para crear una macro haciendo uso de la grabadora de macros se siguen los
siguientes pasos:
1.- Llamar al men Herramientas/
Macro/Grabar nueva macro
2.- Escribir un nombre para la
macro a grabar. Este nombre
no deber contener espacios en
blanco.
3.- Al aparecer el mensaje
Grabando en la barra de
estado, hay que realizar
cuidadosamente y en forma
secuencial, todas las acciones
que se desean grabar.

4.- Para finalizar la grabacin hacer un clic en el botn: , o llamar al


men Herramientas/Macro/Finalizar grabacin, con lo cual deber
desaparecer el mensaje Grabando en la barra de estado.
Nota.- Las macros al ser creadas pueden grabarse en el libro actual, como se puede apreciar
en la ventana de dialogo anterior en la opcin: Este libro , con lo cual la macro solo
funcionar en ese libro; o tambin se pudo elegir en la ventana de dilogo la opcin:
Libro de macros personal, para cuyo caso la macro podra funcionar tambin en
todos los libros de Excel, sin embargo hay que tener cuidado; pues si se graba en el
libro de macros personal esto har que dicha macro y todas las que se encuentren all
sean cargadas en memoria RAM cada vez que se ingrese a Excel, restando con ello
memoria al computador innecesariamente quizas.

Una vez creada, veamos a continuacin como se hace para que la macro
funcione:

Elaborado por: Daniel Zegarra Zavaleta Pag. 6


Manual de Microsoft Excel Programacin VBA

i. Ejecucin de una macro


Una macro puede ejecutarse con el men Herramientas/Macro/Macros, o
presionar Alt + F8 y en la ventana de dialogo, seleccionar su nombre y luego
elegir el botn Ejecutar.
Sin embargo, un modo mas controlado y fcil de ejecutar una macro es
asignndola a un elemento de imagen, como puede ser a un dibujo de
Autoformas, a un botn de herramientas personalizado o incluso hasta a un
grfico.
Para asignar una macro a un botn de Autoformas realizar lo siguiente:

Clic derecho
----------------
----------------
----------------
Asignar macro...
----------------
----------------

1.- Sealar con el mouse el borde del botn y hacer un clic derecho para llamar
al men contextual
2.- En el men elegir la opcin Asignar macro.
3.- Seleccionar el nombre de la macro de la lista y luego clic en Aceptar.

Ejemplo
Se va ha crear una macro que alinee
verticalmente al centro, el contenido
de una celda:
1.- Para esto primero escribir en
una celda un dato.
1.- Llame al men
Herramientas/Macro/Grabar
nueva macro y escriba como
nombre de la macro:
CentradoVertical (sin dejar
espacio en blanco entre las 2
palabras), y luego Aceptar.
2.- Al aparecer el mensaje
Grabando en la barra de
estado, realizar la accin de centrado, esto es: llamar al men

Elaborado por: Daniel Zegarra Zavaleta Pag. 7


Manual de Microsoft Excel Programacin VBA

Formato/Celdas y en la ficha Alineacin elegir en la opcin Alineacin del


texto Vertical, la alternativa Centrar, luego elegir el botn Aceptar.
3.- Finalmente terminar la macro con el botn Detener grabacin o con el
men Herramientas/ Macro/Detener grabacin.

4.- A continuacin dibuje en la hoja


un botn con Autoformas y
haciendo un clic derecho en l,
asgnele la macro
CentradoVertical.
5.- Ahora, al escribir en una celda
un dato podr centrar el dato
verticalmente haciendo un clic
en el botn de la macro.

j. Cmo es el programa creado por la grabadora de macros


Para la macro del ejemplo anterior, el programa o subrutina en el lenguaje de
Visual Basic que se habra generado automticamente, sera el siguiente:

Sub CentradoVertical()
'
' Macro creada por Daniel Zegarra - UNI
'
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.ShrinkToFit = False
.MergeCells = False
End With
End Sub
Este programa se encontrara escrito en una hoja de Modulo insertada dentro del
libro actual de Excel, y para ver esta hoja de mdulo habra que ingresar a la
ventana del Editor de Visual Basic.

k. Como ver el programa en el Editor de Visual Basic


Se puede hacer de dos formas:
i. Presionando teclas Alt+F8, o llamando al men Herramientas/Macro/
Macros
ii. Presionando las teclas Alt+F11, o llamando al men
Herramientas/Macro/ Editor de Visual Basic.

La primera forma para ver una macro es llamando al men


Herramientas/Macro/Macros o presionar las teclas Alt + F8 y seleccionando el

Elaborado por: Daniel Zegarra Zavaleta Pag. 8


Manual de Microsoft Excel Programacin VBA

nombre de la macro deseada, luego hacer un clic en el botn de Modificar de la


ventana de dialogo.

La segunda forma de ver una macro es llamando al men Herramientas/Macro/


Editor de Visual Basic.
Si al ingresar al Editor de Visual Basic la ventana estuviese totalmente vaca,
llamar al men Ver y elegir la opcin Explorador de Proyectos, o presionar
Ctrl+R. Se ver entonces la siguiente ventana en la pantalla:

Elaborado por: Daniel Zegarra Zavaleta Pag. 9


Manual de Microsoft Excel Programacin VBA

En la ventana de Proyecto de la izquierda, haga doble clic en el elemento


Modulo1 para abrir la ventana conteniendo el cdigo en Visual Basic de la
macro.

l. Cmo eliminar una macro


Se puede hacer de dos formas:
i. Presionando teclas Alt+F8, o llamando al men Herramientas/Macro/
Macros, seleccionando el nombre de la macro a eliminar, y luego
haciendo clic en el botn Eliminar. Finalmente hacer clic en el botn Si.

ii. Ingresando al / Editor de Visual Basic, y luego de seleccionar las


sentencias de la macro a eliminar, presionar la tecla Suprimir.

Nota.- Si al crear una macro con la grabadora de macros, se le da como nombre el de una
macro ya existente, aparecer una ventana consultndonos si se desea sobrescribir esa
macro. Si se le contesta que Si, entonces se borrar la macro existente y se grabar
una nueva en su lugar.

Elaborado por: Daniel Zegarra Zavaleta Pag. 10


Manual de Microsoft Excel Programacin VBA

Elaborado por: Daniel Zegarra Zavaleta Pag. 11


Manual de Microsoft Excel Programacin VBA

Ejercicio N 1: Acciones repetitivas con macros

Hay ocasiones en que se necesita en la hoja de calculo repetir un grupo de


acciones muchas veces para diferentes rangos de celda. En estos casos es cuando
las macros nos sern de gran ayuda.
Suponga que se dispone de una lista diaria de clientes que asisten durante un
mes a realizar sus compras a una zapatera, y se desea ordenar esta lista en
grupos semanales, y cada semana ordenada descendentemente segn la cantidad
de clientes asistentes. Una vez ordenada cada semana en orden descendente
poner en negrita y de color rojo la cantidad maxima de personas que asistieron
en cada semana.
Veamos como se soluciona este caso con ayuda de las macros:

1ra Parte: Crear la tabla de clientes que asisten a una zapatera.


1.- En una hoja en blanco escriba lo siguiente:

2.- Seleccionando la celda A5, llame al men Formato/Celdas y en la ficha


Nmero, categora personalizada, disee el siguiente formato en la casilla
Tipo:
ddd dd mmm
La fecha aparecer como:
Mi 01 Jun

3.- Luego con el botn


derecho del mouse
arrastre el cuadro de
relleno de la celda A5
hasta llegar a la celda
A26, y cuando al soltar el
botn del mouse
aparezca un men
contextual, elegir la
opcin Rellenar das de
la semana, para copiar
la serie de das laborales del mes de Junio. (Solo aparecern 5 das
laborables en cada semana)

Elaborado por: Daniel Zegarra Zavaleta Pag. 12


Manual de Microsoft Excel Programacin VBA

Luego en la columna B vamos a escribir


la cantidad de personas que asistieron
cada da a la zapatera. Para simular la
cantidad de personas vamos a hacer que
Excel escriba nmeros al azar entre 10 y
150:
4.- Escriba la siguiente formula en la
celda B5:
=10+ENTERO(ALEATORIO()*140)
5.- Ahora copie esta formula haciendo
doble clic en el cuadro de relleno.
Luego convierta el resultado de estas
formulas en valores:
6.- Seleccione el rango B5:B26 y elija
el men Edicin/Copiar, luego en el
men Edicin/Pegado especial,
marque la opcin Valores y
Aceptar. Finalmente [Esc].

2da Parte: Dividir las personas en grupos semanales ordenados


descendentemente.
Como se explic al principio, se desea una macro que haga lo siguiente:

7.- Primero seleccione la celda A8.


8.- Llame al men Herramientas/Macro/Grabar nueva macro
9.- Como nombre para la macro escriba la palabra Grupos y como letra de
mtodo abreviado escriba la letra "k". Luego Aceptar

Elaborado por: Daniel Zegarra Zavaleta Pag. 13


Manual de Microsoft Excel Programacin VBA

10.- Al aparecer el mensaje


"Grabando" en la barra de
estado, verifique que se
encuentre activado el botn
de herramientas Referencia
relativa:

11.- Luego realice los siguientes pasos:


Llamar al menu Insertar/Fila
Seleccionar la celda A7 y presionar las teclas Ctrl+* para seleccionar la
regin actual (A5:B7)
Llamar al men Datos/Ordenar y elegir ordenar por Columna B, en
orden Descendente y verifique
que No se considere tener fila
de encabezamiento. Luego
haga clic en el botn Aceptar.
Seleccionar la celda B5 y
ponerla en Negrita, y de color
de fuente Roja.
Seleccione la celda A14 y haga
un clic en el botn Detener
grabacin.
13.- Guarde el libro con el nombre de
archivo Asistencia.
Con esto ya tendremos ordenado el
primer grupo delos das
correspondientes a la primera semana de Julio. Y como el puntero de celda se
encuentra en A14, solo bastar con presionar las teclas Ctrl+k para ejecutar la
macro y que esta se encargue de ordenar el grupo de la segunda semana, y as
sucesivamente hasta terminar con el resto del mes.

Elaborado por: Daniel Zegarra Zavaleta Pag. 14


Manual de Microsoft Excel Programacin VBA

16. Escritura de programas en el Editor de Visual Basic


a. Que es Visual Basic para Aplicaciones
Es un lenguaje de programacin por medio del cual se pueden escribir
instrucciones secuenciales y detalladas dentro de uno o varios programas, para
lograr as automatizar el uso de las aplicaciones del paquete Office. A este grupo
de instrucciones escritas para una aplicacin se la conoce como una Macro
(Macro instruccin o grupo de varias instrucciones)

b. El Editor de Visual Basic


La escritura de estas instrucciones se realiza con ayuda de un Editor de Visual
Basic, que es una ventana de aplicacin adicional a Excel o a cualquier otra
aplicacin de Office, pero la macro que se crea a travs del Editor ser guardada
conjuntamente con el libro de Excel para el cual se han escrito estas
instrucciones.
Para ingresar al Editor de Visual Basic:
Estando en cualquier libro de Excel, llamar al men Herramientas/
Macro/Editor de Visual Basic, o sino, presionar las teclas Alt+F11.

Si al ingresar al Editor de Visual Basic, no estuvieran visibles el explorador de


proyectos o la ventana de mdulo, entonces proceda del siguiente modo:
1.- Llamar al men Ver/Explorador de proyectos.
2.- Llamar al men Insertar/Mdulo.

Elaborado por: Daniel Zegarra Zavaleta Pag. 15


Manual de Microsoft Excel Programacin VBA

El Explorador de proyectos nos muestra en un rbol de carpetas los diferentes


archivos o libros abiertos en Excel, y dentro de cada libro se pueden apreciar los
objetos que existen en su interior: hojas de clculo, hojas de mdulos,
formularios, etc.
La ventana de Mdulo es donde se escribirn las instrucciones que nos
permitirn crear las Macros en Visual Basic.

17. Las instrucciones de Visual Basic

Aclaracin previa:
Si para usted es la primera vez que va a escribir un programa para computadora,
entonces al principio esto le parecer que es algo complicado, y lo que
inicialmente vemos escrito dentro de un programa es como leer chino, pero no se
desanime; lo que ocurre es que a pesar de que el computador es una mquina
inteligente, sta sin embargo, no razona como lo hara cualquier persona; as que
cuando hay que darle ordenes al computador hay que establecer ciertas reglas
estrictas con el fin de que entienda claramente que es lo que deseamos que haga.
Por ejemplo
Si en su casa se ha puesto la tetera para hervir agua en una cocina a gas, y
comienza a hervir el agua; entonces usted podra ordenarle a su hijo menor que
por favor apague la cocina.
Si su hijo aun es pequeo, cmo cree que hara para apagar la cocina?:
- Comienza a soplar la hornilla hasta que se apaga?
- Hecha agua a la hornilla para apagarla?
- Gira la perilla de encendido para apagar la hornilla?
Usted tendra que ser ms preciso en darle las instrucciones al pequeo para que
pueda apagar la cocina como es debido sin que ocurra ninguna desgracia, pues l
quizs aun no se percata exactamente del peligro que esta accin conlleva.
Pues veamos ahora, el computador tampoco se da cuenta de lo que en realidad
est haciendo, el solo cumple las ordenes que le damos, de all que estas rdenes
deben ser muy precisas, sin ambigedades para que no lleven a errneas
suposiciones por parte del computador. Es as que primeramente cada orden
dada al computador tiene una forma exacta de escribirse; a esta forma exacta de
escribir las rdenes se conoce como la sintaxis de las instrucciones.

Por ejemplo, si en vez de ordenar "apaga la cocina", se le dijese al nio "paga


la cocina". El no va a poder obedecernos porque no conoce como se realiza esa
accin ya que aun no maneja dinero y no sabe cmo se paga un artefacto. Esto es
un error de sintaxis, la palabra est mal escrita.
Pero adems las instrucciones deben seguir una cierta lgica adecuada porque si
no tambin se estara incurriendo en un error de lgica al escribir el programa.
Por ejemplo, un error de lgica podra ser que se le diga al nio: " por favor
apaga la cocina y luego srveme un caf". La orden aparentemente parece

Elaborado por: Daniel Zegarra Zavaleta Pag. 16


Manual de Microsoft Excel Programacin VBA

correcta. Pero el nio podra ir y apagar la luz de la cocina y luego intentar a


oscuras servirme un caf. Esto se conoce como un error de lgica. Entonces
debimos haber dicho: "por favor apaga la hornilla derecha de la cocina y
luego srveme un caf". Algo as es como funciona la lgica de un computador,
y teniendo en cuenta todo esto es que se escriben los programas de computadora.
Observe adems que la lgica empleada para dar rdenes a un nio en algn
lugar de nuestro planeta es independiente de si estas rdenes las damos en
cualquier idioma, ya sea en espaol, o ingls, o ruso o japons; dependiendo del
lugar donde nos encontremos. Es decir; el idioma puede ser diferente, pero la
lgica es la misma.
La lgica de las computadoras es siempre la misma, pero el lenguaje que usamos
para dar las instrucciones es la que puede ser diferente; en nuestro caso usaremos
el lenguaje de Visual Basic para Aplicaciones de Office.

Una instruccin de Visual Basic puede incluir palabras clave, operadores,


variables, constantes y expresiones. Todas las instrucciones pertenecen a una de
las tres categoras siguientes:
1. INSTRUCCIONES DE DECLARACIN, que dan nombre a una variable,
constante o procedimiento y pueden tambin especificar su tipo de datos.
2. INSTRUCCIONES DE ASIGNACIN, que asignan un valor o expresin
a una variable o constante.
3. INSTRUCCIONES EJECUTABLES, que inician acciones. Estas
instrucciones pueden ejecutar un mtodo o funcin y pueden saltar o evitar
bloques de cdigo. Las instrucciones ejecutables a menudo contienen
operadores condicionales o matemticos.

a. Continuar instrucciones en mltiples lneas


Una instruccin cabe normalmente en una lnea, pero puede continuarse en la
siguiente lnea utilizando un carcter de continuacin de lnea que es un carcter
de subrayado o guin bajo ( _ ) precedido siempre por un espacio en blanco. En
el siguiente ejemplo, la instruccin ejecutable MsgBox se extiende dos tres
lneas: Guin bajo precedido de un
espacio en blanco.

Sub Mensaje()
Dim Cliente As String
Cliente = "Jos Samuel"
MsgBox Prompt:="Hola " & Cliente, Title:="Cuadro de saludo", _
Buttons:=vbExclamation
End Sub

b. Aadir comentarios
Los comentarios pueden explicar un procedimiento o una instruccin en
particular a cualquier persona que tenga que leer el cdigo. Visual Basic ignora
los comentarios cuando ejecuta los procedimientos. Las lneas de comentario
comienzan por un apstrofe (') o con la palabra clave Rem seguida por un
espacio y puede colocarse en cualquier lugar del procedimiento. Para aadir un
comentario a la misma lnea que ocupa una instruccin, debe insertarse un

Elaborado por: Daniel Zegarra Zavaleta Pag. 17


Manual de Microsoft Excel Programacin VBA

apstrofe despus de esta, seguido por el comentario. Los comentarios aparecen


en pantalla en color verde, color predefinido.
Sub Mensaje()
Macro que muestra un mensaje de saludo en la pantalla
Dim Cliente As String Declara la variable Cliente como
String
Cliente = "Jos Samuel" Asigna un texto a la variable Cliente
La siguiente sentencia muestra una ventana con el mensaje de
saludo
MsgBox Prompt:="Hola " & Cliente, Title:="Cuadro de saludo", _
Buttons:=vbExclamation
End Sub

c. Comprobar errores de sintaxis


Si se presiona la tecla Enter despus de escribir una lnea de cdigo y esta lnea
aparece en pantalla en color rojo (puede que aparezca tambin un mensaje de
error), esto indica que se ha incurrido en un error de sintaxis, o sea la instruccin
est mal escrita y se debe observar cul es el problema en la instruccin y
corregirlo.

18. Escribir instrucciones de declaracin


Las instrucciones de declaracin se usan para dar nombre y definir
procedimientos, variables, matrices y constantes. Cuando se declara un
procedimiento, variable o constante, tambin se define su alcance que depende
del lugar en que se coloque la declaracin y de las palabras clave que se usan
para ello.
El siguiente ejemplo contiene tres declaraciones.
Sub DarFormato()
Const Limite As Integer = 33
Dim miCelda As Range
End Sub

La instruccin Sub, la instruccin Const y la instruccin Dim, son instrucciones


de declaracin.
La instruccin Sub (con la correspondiente instruccin End Sub) declara un
procedimiento llamado DarFormato. Todas las instrucciones que aparecen entre
las instrucciones Sub y End Sub se ejecutan cuando el procedimiento
DarFormato se ejecuta o se llama.
La instruccin Const declara la constante Limite, especificando el tipo de datos
Integer y un valor de 33.
La instruccin Dim declara la variable miCelda. El tipo de datos es objeto, en
este caso, un objeto Range de Microsoft Excel. Se puede declarar una variable
que sea cualquiera de los objetos que estn accesibles a la aplicacin que se est
usando. Las instrucciones Dim son un tipo de instruccin que se utiliza para
declarar variables. Otras palabras clave utilizadas en las declaraciones son
ReDim, Static, Public, Private, Function y Const.

Elaborado por: Daniel Zegarra Zavaleta Pag. 18


Manual de Microsoft Excel Programacin VBA

a. Qu son los tipos de datos Variant


El tipo de datos Variant se especifica automticamente si no se especifica otro
tipo de datos al declarar una constante, variable, o argumento. Las variables
declaradas como del tipo de datos Variant pueden contener valores numricos,
cadenas de texto, fecha, hora o Booleans y pueden convertir los valores que
contienen de forma automtica. Los valores numricos Variant ocupan 16 bytes
de memoria (lo que slo es significativo en procedimientos grandes o mdulos
complejos) y son ms lentos a la hora de su acceso que las variables de tipo
explcito de los restantes tipos. Es muy raro utilizar el tipo de datos Variant para
una constante. Los valores de cadena Variant necesitan 22 bytes de memoria.
Las siguientes instrucciones crean variables Variant:

Dim SUELDO
Dim EDAD As Variant
EMPRESA = "Editora Macro"

La ltima instruccin no declara explcitamente la variable EMPRESA, sino que


la declara implcitamente, o automticamente. Las variables que se declaran
implcitamente se especifican como del tipo de datos Variant.

Nota: Si se especifica un tipo de datos para una variable o argumento y a continuacin se


utiliza un tipo errneo de datos, se producir un error de tipo de datos. Para evitar
errores de tipo de datos, se deben usar slo variables (del tipo de datos Variant) o
declarar explcitamente todas las variables y especificar para ellas un tipo de datos. El
ltimo mtodo es el preferible.

19. Escribir instrucciones de asignacin


Las instrucciones de asignacin, asignan (almacenan o guardan) un valor o
expresin a una variable o constante. Las instrucciones de asignacin incluyen
siempre un signo igual (=).
El siguiente ejemplo almacena la coordenada de la celda activa en la variable
Lugar. Luego MsgBox muestra esta coordenada en una ventana.

Sub Ubicacion()
Dim Lugar As String
Lugar = ActiveCell.Address
MsgBox "La celda actual es " & Lugar
End Sub

Este otro ejemplo utiliza InputBox para preguntar el nombre a una persona y
luego asignar la respuesta a la variable Nombre. Luego MsgBox muestra el
nombre de la persona en una ventana.

Sub Pregunta()

Elaborado por: Daniel Zegarra Zavaleta Pag. 19


Manual de Microsoft Excel Programacin VBA

Dim Nombre As String


Nombre = InputBox("Cmo se llama usted?")
MsgBox "Su nombre es " & Nombre
End Sub

La instruccin Set se utiliza para asignar un objeto a una variable que ha sido
declarada como objeto. La palabra clave Set es necesaria. En el siguiente
ejemplo, la instruccin Set asigna la celda A1 de la Hoja3 a la variable de objeto
Celda. Luego le asigna la propiedad Bold e Italica al objeto Font y finalmente
asigna a Celda el valor 2013.

Sub DarFormato()
Dim Celda As Range
Set Celda = Worksheets("Hoja3").Range("A1")
With Celda.Font
.Bold = True
.Italic = True
End With
Celda= 2013
End Sub

Las instrucciones que establecen valores de propiedad son tambin instrucciones


de asignacin. El siguiente ejemplo asigna la propiedad Bold (negrita) del objeto
Font (fuente) para la celda activa: Como resultado el contenido de la celda activa
aparecer en negrita.

ActiveCell.Font.Bold = True

20. Trabajo con celdas en Visual Basic

Es una tarea comn en Visual Basic especificar una celda o un rango de celdas,
y a continuacin realizar alguna accin en ellas, como ingresar un dato, escribir
una frmula o cambiar el formato. Normalmente esto se realiza en una
instruccin que primero identifica el rango y luego adems cambia una
propiedad o aplica un mtodo sobre ese rango.
Un objeto Range en Visual Basic puede ser una celda individual o un rango de
celdas. Los siguientes temas muestran las maneras ms usuales de identificar y
trabajar con objetos Range.

a. Referencia a celdas y rangos utilizando la notacin A1


La siguiente tabla muestra algunas referencias de estilo A1 utilizando el mtodo
Range.
Referencia Significado
Range("A1") Celda A1
Range("A1:B4") Rango A1:B4
Range("A1:B4,E3:F9") Mltiple reas separadas

Elaborado por: Daniel Zegarra Zavaleta Pag. 20


Manual de Microsoft Excel Programacin VBA

Referencia Significado
Range("A:A") Toda la columna A
Range("3:3") Toda la fila 3
Range("A:C") Columnas de la A a la C
Range("1:5") Filas de la 1 a la 5
Range("1:1,3:3,8:8") Mltiples filas 1, 3 y 8
Range("A:A,C:C,F:F") Mltiples columnas A, C y F
Range("A1:B4","E3:F9") Equivalente a todo el rango
A1:F9

Utilice la propiedad Rows o Columns para trabajar con filas o columnas enteras.
Estas propiedades devuelven un objeto Range que representa un rango de celdas.
La siguiente tabla muestra algunas referencias de fila y columna, utilizando las
propiedades Rows y Columns.

Referencia Significado
Rows(1) Fila uno
Rows Todas las filas de la hoja de clculo
Columns(1) Columna uno
Columns("A") Columna uno
Columns Todas las columnas de la hoja de
clculo

b. Sentencias usadas para manejar celdas y rangos de


celdas
Los mtodos:
Range Select Activate
Clear ClearContents ClearFormats
Delete Insert
Las propiedades:
Selection ActiveCell CurrentRegion
Offset Columns, Rows Count

21. Para seleccionar celdas y rangos de celdas


a. Seleccin directa de celdas y rangos

Sintaxis: Range(referencia).Select

Elaborado por: Daniel Zegarra Zavaleta Pag. 21


Manual de Microsoft Excel Programacin VBA

Donde: referencia puede ser un rango de celdas o un nombre de rango,


escritos entre comillas

Selecciona el rango B5
Range("B5").Select

Selecciona el rango B5:B9


Range("B5:B9").Select

Selecciona el rango B5:B9


Range("B5", "B9").Select

Selecciona solo dos celdas B5 y B9


Range("B5,B9").Select

Selecciona los rangos B5:B7 y B14:B16


Range("B5:B7,B14:B16").Select

Selecciona el rango llamado TABLA


Range("TABLA").Select

Otra forma para seleccionar un rango, es escribindolo entre


corchetes:

Sintaxis: [referencia].Select
Donde: referencia puede ser un rango de celdas o un nombre de rango,
escritos entre comillas

Selecciona el rango B5:C7


[B5:C7].Select

Selecciona el rango llamado TABLA


[TABLA].Select

b. Seleccin de rangos de manera relativa:

Sintaxis: ActiveCell.Range(referencia).Select
Donde: referencia Es un rango de celdas que considera a la celda
actual como si fuera la primera celda superior izquierda de la hoja
de calculo

Selecciona 4 celdas hacia abajo a partir de la celda actual


ActiveCell.Range("A1:A4").Select

Selecciona 4 celdas hacia la derecha a partir de la celda actual


ActiveCell.Range("A1:D1").Select

Selecciona 4 celdas hacia abajo ubicadas 2 columnas a la derecha de la


celda actual
ActiveCell.Range("C1:C4").Select

Selecciona la regin actual

Elaborado por: Daniel Zegarra Zavaleta Pag. 22


Manual de Microsoft Excel Programacin VBA

ActiveCell.CurrentRegion.Select

c. Seleccin consecutiva de celdas ocupadas o vacas:

Sintaxis: End(xlDown) hasta la ltima celda hacia abajo


End(xlUp) hasta la ltima celda hacia arriba
End(xltoRight) hasta la ltima celda hacia la derecha
End(xltoLeft) hasta la ltima celda hacia la izquierda

Selecciona todas las celdas ocupadas o vacas hacia abajo, a partir de B4


Range("B4").Select
Range("B4", ActiveCell.End(xlDown)).Select

Selecciona todas las celdas ocupadas o vacas hacia abajo, a partir de B4


Range("B4", Range("B4").End(xlDown)).Select

Selecciona todas las celdas ocupadas o vacas hacia abajo, a partir de la


celda actual
Range(ActiveCell, ActiveCell.End(xlDown)).Select

Selecciona todas las celdas ocupadas hacia abajo + 1 adicional


Range(ActiveCell, ActiveCell.End(xlDown).Offset(1,
0)).Select

Selecciona una fila de 4 celdas y a partir de ellas hacia abajo todas las
celdas ocupadas + 5 filas adicionales
Range(ActiveCell.Range("A1:D1"), ActiveCell.End(xlDown). _
Offset(5, 0)).Select

d. Seleccin directa de Columnas

Selecciona toda la columna E


Range("E:E").Select

Selecciona todas las columnas desde la E hasta la K


Range("E:K").Select

Selecciona todas las columnas desde la E hasta la K


Range("EE,K:K").Select
Selecciona nicamente las columnas E y K
Range("E:E,K:K").Select

e. Seleccin relativa de Columnas

Selecciona toda la columna de la celda actual


ActiveCell.EntireColumn.Select

Elaborado por: Daniel Zegarra Zavaleta Pag. 23


Manual de Microsoft Excel Programacin VBA

Selecciona todas las columnas del rango seleccionado


Selection.EntireColumn.Select

Selecciona en la regin actual las celdas hacia abajo a partir de la celda


actual
inicio = ActiveCell.Row
fin = ActiveCell.CurrentRegion.Rows.Count + _
ActiveCell.CurrentRegion.Row - 1
Range(ActiveCell.EntireColumn.Cells(inicio, 1), _
ActiveCell.EntireColumn.Cells(fin, 1)).Select

Selecciona en la regin actual las celdas hacia abajo a partir de la celda


actual
Range(ActiveCell.EntireColumn.Cells(ActiveCell.Row, 1), _

ActiveCell.EntireColumn.Cells(ActiveCell.CurrentRegion.Rows. _
Count + ActiveCell.CurrentRegion.Row - 1, 1)).Select

f. Seleccin directa de Filas

Selecciona toda la fila 12


Range("12:12").Select

Selecciona todas las filas desde la 7 hasta la 12


Range("7:12").Select

Selecciona unicamente las filas 4, 12 y 20


Range("4:4,12:12,20:20").Select

g. Seleccin indirecta de Filas

Selecciona toda la fila de la celda actual


ActiveCell.EntireRow.Select

Selecciona todas las filas del rango seleccionado


Selection.EntireRow.Select

Elaborado por: Daniel Zegarra Zavaleta Pag. 24


Manual de Microsoft Excel Programacin VBA

h. Para desplazar el puntero de celda:

Uso de la sentencia Offset:

Sintaxis: Activecell.Offset(filas, columnas).Select


Donde: filas Cantidad de filas que se desplaza hacia abajo,
si filas es positivo
Cantidad de filas que se desplaza hacia arriba,
si filas es negativo
columnas Cantidad de columnas que se desplaza hacia la
derecha, si columnas es positivo
Cantidad de columnas que se desplaza hacia la
izquierda, si columnas es negativo

Baja el puntero 5 celdas a partir de la celda B4


Range("B4").Select
ActiveCell.Offset(5, 0).Select

Baja el puntero 5 celdas a partir de la celda B4


Range("B4").Offset(5, 0).Select

Mueve el puntero 2 celdas abajo y 3 a la derecha a partir de la celda B4


Range("B4").Offset(2, 3).Select

Uso de la sentencia While:

Sintaxis While condicin


intrucciones
Wend
Donde:
condicin Es una expresin numrica o expresin de cadena cuyo
valor es Verdadero o Falso. Si condicin es Null,
condicin se considera Falso.
instrucciones Opcional. Una o ms instrucciones que se ejecutan
mientras la condicin sea Verdadera.

Selecciona la primera celda vaca debajo de una columna de datos


Range("B4").Select
While ActiveCell <> Empty
ActiveCell.Offset(1, 0).Activate
Wend

Selecciona la ltima celda ocupada hacia abajo en la columna actual


While ActiveCell.Row <> 65536
Selection.End(xlDown).Select
Wend
Selection.End(xlUp).Select

Elaborado por: Daniel Zegarra Zavaleta Pag. 25


Manual de Microsoft Excel Programacin VBA

Selecciona la ultima celda de la region actual


ActiveCell.CurrentRegion.Cells(ActiveCell.CurrentRegion.Rows. _
Count, ActiveCell.CurrentRegion.Columns.Count).Select

Selecciona la ultima celda de la region actual (otra forma)


With ActiveCell.CurrentRegion
.Cells(.Rows.Count, .Columns.Count).Select
End With

i. Para borrar rangos de celdas:

Uso de la sentencia Clear, Clear.Contents y Clear.Format:

Sintaxis: Referencia.Clear
Referencia.ClearContents
Referencia.ClearFormats
Donde: Referencia Es un rango de celdas

Borra el contenido de la celda actual


ActiveCell.ClearContents

Borra todo en el rango C4:C7 (Contenido y Formato)


Range("C4:C7").Clear

Borra el formato del rango llamado CUADRO


Range("Cuadro").ClearFormats

j. Para eliminar filas o columnas enteras:

Uso de la sentencia Delete:

Sintaxis: Referencia.Delete
Donde: Referencia Es un rango de filas o columnas

Elimina la columna de la celda actual


ActiveCell.EntireColumn.Delete

Elimina la fila de la celda actual


ActiveCell.EntireRow.Delete

Elimina las columnas del rango seleccionado


Range("F4:G4").Select
Selection.EntireColumn.Delete

Elimina las filas del rango seleccionado


Range("F4:G4").Select
Selection.EntireRow.Delete

k. Para insertar filas o columnas:

Uso de la sentencia Insert:

Elaborado por: Daniel Zegarra Zavaleta Pag. 26


Manual de Microsoft Excel Programacin VBA

Sintaxis: Referencia.Insert
Donde: Referencia Es un rango de filas o columnas

Inserta una columna en la celda actual


ActiveCell.EntireColumn.Insert

Inserta una fila en la celda actual


ActiveCell.EntireRow.Insert

Inserta varias columnas en el rango seleccionado


Range("F4:G4").Select
Selection.EntireColumn.Insert

Inserta varias filas en el rango seleccionado


Range("F4:G4").Select
Selection.EntireRow.Insert

l. Para nombrar un rango de celdas:

Selecciona el rango A4:C10 y le asigna el nombre TABLA


Range("A4:C10").Select
Selection.Name="TABLA"

Asigna el nombre TABLA al rango A4:C10


Range("A4:C10").Name="TABLA"

Selecciona la regin actual y le asigna el nombre CUADRO


ActiveCell.CurrentRegion.Select
Selection.Name ="CUADRO"

Asigna el nombre CUADRO a la regin actual


ActiveCell.CurrentRegion.Name ="CUADRO"

Elaborado por: Daniel Zegarra Zavaleta Pag. 27


Manual de Microsoft Excel Programacin VBA

Ejercicio N 2: Procedimientos Sub para seleccionar rangos

Vamos a suponer que usted no sabe nada de programacin, asi que vamos a
crear una serie de macros simples para que realicen varias de las acciones a las
cuales estamos acostumbrados a realizar nosotros mismos en la hoja de calculo
con el mouse y el teclado.

1.- En una hoja en blanco escriba los cuadros que se muestran en la imagen
anterior y luego guarde el archivo con el nombre Muebles.
2.- Dle nombre a los siguientes rangos de celda:
A3:C7 Tabla E3:F7 Precios B10:D12 Resumen
3.- Ingrese al Editor de Visual Basic con las teclas Alt+F11 y luego inserte una
nueva hoja de mdulo (Men Insertar/Mdulo).
4.- En la hoja de mdulo escriba el siguiente procedimiento Sub:

5.- Regrese a la hoja de clculo de Excel y seleccione la celda A1.

Elaborado por: Daniel Zegarra Zavaleta Pag. 28


Manual de Microsoft Excel Programacin VBA

6.- Para ejecutar ahora la macro presione las teclas Alt+F8, luego en la
ventana que aparece elegir la macro Prueba con un clic y a continuacin
Clic en Ejecutar.

La macro se ejecutar y mover el puntero a la celda B4:


A continuacin presentamos una serie de ejemplos de procedimientos Sub para
realizar diversos tipos de seleccin de celdas. Para poder observar cual es el
efecto de cada uno de estos ejemplos, escrbalos en la hoja de modulo anterior
debajo del procedimiento Prueba. A medida que los escriba puede nombrar cada
procedimiento como Prueba2, Prueba3, etc. A medida que los vaya escribiendo
regrese a la hoja de Excel y pruebe ejecutarlos con las teclas Alt+F8 y eligiendo
la macro que quiera ejecutar respectivamente. Compare luego sus resultados con
las imgenes que aqu se muestran en cada caso.

Elaborado por: Daniel Zegarra Zavaleta Pag. 29


Manual de Microsoft Excel Programacin VBA

Ejemplos de procedimientos Sub para seleccionar celdas:

1) Seleccionar la celda B4
Range("B4").Select

2) Seleccionar el rango de celdas A3:C7


Range("A3:C7").Select

3) Seleccionar el rango de celdas A3:C7 y luego convertir a la celda B5 en


activa sin perder la seleccin del rango anterior
Range("A3:C7").Select
Range("B5").Activate

Nota.- Para seleccionar un rango de celdas, use el mtodo Select. Para activar slo una
celda, puede utilizar el mtodo Activate. Si se activa una celda que se encuentra dentro
del rango seleccionado entonces no se pierde la seleccin, pero si la celda que se
activa est fuera del rango seleccionado la seleccin se perder y solo quedar
seleccionada la celda activa.

4) Seleccionar el rango de celdas cuyo nombre es Tabla


Range("Tabla").Select

5) Seleccionar el rango Tabla y luego seleccionar la primera celda de ese rango.


Range("Tabla").Select
ActiveCell.Select

Elaborado por: Daniel Zegarra Zavaleta Pag. 30


Manual de Microsoft Excel Programacin VBA

6) Seleccionar los rangos Tabla, Precios y Resumen (rangos separados)


Range("Tabla, Precios, Resumen").Select

7) Seleccionar los rangos desde Tabla hasta Resumen (el resultado es un rango
mayor que incluye Tabla y Resumen, y todas las celdas que se encuentran
entre estos dos rangos separados)
Range("Tabla", "Resumen").Select

8) Seleccionar el rango de celdas de la regin actual, (Regin actual es el rango


de las celdas ocupadas que rodean la celda activa.)
ActiveCell.CurrentRegion.Select

9) Seleccionar el rango A3:C7 y luego "mover la seleccin" 2 filas hacia abajo


y una columna hacia la derecha
Range("A3:C7").Select
Selection.Offset(2,1).Select

Elaborado por: Daniel Zegarra Zavaleta Pag. 31


Manual de Microsoft Excel Programacin VBA

10) Seleccionar el rango A3:C7 y luego "activar la celda" 2 filas hacia abajo y
una columna hacia la derecha dentro del rango seleccionado
Range("A3:C7").Select
Selection.Offset(2,1).Activate

11) Seleccionar el rango A3:C7 y luego "mover el puntero de celda" 2 filas


hacia abajo y una columna hacia la derecha dentro del rango seleccionado

Range("A3:C7").Select
ActiveCell.Offset(2,1).Select

12) Seleccionar la regin actual y luego seleccionar la celda en blanco situada al


final de la primera columna de la regin actual

Elaborado por: Daniel Zegarra Zavaleta Pag. 32


Manual de Microsoft Excel Programacin VBA

ActiveCell.CurrentRegion.Select
ActiveCell.Offset(Selection.Rows.Count, 0).Select

13) Seleccionar la regin actual y luego seleccionar la ltima celda ocupada al


final de la primera columna de la regin actual
ActiveCell.CurrentRegion.Select
ActiveCell.Offset(Selection.Rows.Count - 1, 0).Select

14) Suponiendo una tabla con una fila de encabezado, a continuacin se


muestran 2 formas para seleccionar la tabla sin seleccionar la fila de
encabezados. Debe haber una celda activada en algn lugar de la tabla antes
de ejecutar el ejemplo.
ActiveCell.CurrentRegion.Select
ActiveCell.Offset(1, 0).Resize(Selection.Rows.Count - 1, _
Selection.Columns.Count).Select

ActiveCell.CurrentRegion.Rows(2).Select
Range(Selection, ActiveCell.Offset(ActiveCell.CurrentRegion. _
Rows.Count - 2, 0)).Select

Elaborado por: Daniel Zegarra Zavaleta Pag. 33


Manual de Microsoft Excel Programacin VBA

La Propiedad End

Desplaza el puntero a la celda situada al final de la regin que contiene el rango fuente.
Equivale a presionar las teclas FIN+FLECHA ARRIBA, FIN+FLECHA ABAJO,
FIN+FLECHA IZQUIERDA o FIN+FLECHA DERECHA.

Sintaxis:

Expresin.End(Direccin)

Donde:

Expresin.- Objeto a partir del cual se realizar el desplazamiento, (por ejemplo:


ActiveCell, Range("A3"), Selection).

Direccin puede ser una de las siguientes constantes:

xlUp hacia arriba


xlDown hacia abajo
xlToRight hacia la derecha
xlToLeft hacia la izquierda

Ejemplos del uso de la propiedad End:

1) Seleccionar la celda B3 y luego seleccionar la ultima celda ocupada al final


de esa columna
Range("B3").select
ActiveCell.End(xlDown).Select

2) Selecciona la primera celda superior de la columna B, en la regin que


contiene la celda B6
Range("B6").End(xlUp).Select
3) Selecciona la ltima celda de la derecha de la fila 4, en la regin que
contiene la celda A4
Range("A4").End(xlToRight).Select
4) Ampla la seleccin desde la celda B4 hasta la ltima celda ocupada hacia la
derecha
Range("B4", Range("B4").End(xlToRight)).Select

Elaborado por: Daniel Zegarra Zavaleta Pag. 34


Manual de Microsoft Excel Programacin VBA

Ejercicio N 3: Nombrar rangos, Seleccionar columnas y


Borrar

1.- En una hoja en blanco escriba el siguiente cuadro y luego guarde el archivo
con el nombre Destinos.
2.- Ingrese al Editor de Visual Basic con las teclas Alt+F11 y luego de insertar
una nueva hoja de modulo (Men Insertar/Mdulo) al igual que en el
ejercicio anterior, escriba los siguientes procedimientos Sub:

Ejemplos de procedimientos Sub:

1) Definir con el nombre abc al rango seleccionado. (Se supone que


previamente se ha seleccionado un rango como B3:E7)
Selection.Name="abc"

2) Definir con el nombre abc a la regin actual. (previamente ubicar el puntero


de celda en cualquier celda ocupada del cuadro)
ActiveCell.CurrentRegion.Name="abc

Nota.- Para los dos ejemplos anteriores que nombran un rango como abc, en el primer caso
hay que seleccionar el rango y despus ejecutar la macro. En el segundo caso basta
con que el puntero de celda se encuentre dentro del cuadro y al ejecutar la macro, a
todo el cuadro (Regin actual) se le dar el nombre de rango.

3) Seleccionar la segunda columna del rango llamado abc


Range("abc").Columns(2).Select

4) Seleccionar la segunda columna de la regin actual. (Ubicar previamente el


puntero en cualquier celda dentro del cuadro)

Elaborado por: Daniel Zegarra Zavaleta Pag. 35


Manual de Microsoft Excel Programacin VBA

ActiveCell.CurrentRegion.Columns(2).Select

Nota.- Este ejemplo es semejante al anterior, con la diferencia que funciona para cualquier
cuadro sin importar su tamao, basta con seleccionar una celda del cuadro y cuando
se ejecute la macro se seleccionar solo la 2da columna del cuadro. Observe que la
2da columna del cuadro no es la columna B, sino en este caso la columna C.

5) Seleccionar toda la columna de la celda activa


ActiveCell.EntireColumn.Select

6) Seleccionar todas las columnas de la seleccion


Selection.EntireColumn.Select

7) Seleccionar todas las columnas de la region actual


ActiveCell.CurrentRegion.EntireColumn.Select

8) Seleccionar las 3 columnas a partir de la celda activa. Suponer que la celda


activa es la B5.
ActiveCell.Columns("A:C").EntireColumn.Select

Nota.- En este ejemplo la referencia "A:C" es considerada como una referencia relativa, o sea
que no indica que se seleccionen las 3 primeras columnas A,B y C de la hoja de
calculo, sino que se seleccionen las 3 primeras columnas de la regin actual.

9) Seleccionar la 3ra columna a partir de la celda activa. Suponer que la celda


activa es la celda B5.
ActiveCell.Columns(3).EntireColumn.Select

Elaborado por: Daniel Zegarra Zavaleta Pag. 36


Manual de Microsoft Excel Programacin VBA

Nota.- En este ejemplo siendo B5 la celda activa, al ejecutarse la macro se seleccionar la


tercera columna a partir de la columna B.

10) Seleccionar todas las columnas del rango abc


Range("abc").Select
Selection.EntireColumn.Select

11) Seleccionar las columnas del rango abc y del rango xyz. (rangos separados)
Range("abc, xyz").Select
Selection.EntireColumn.Select

12) Seleccionar dentro de la regin actual la columna de la celda activa. Suponer


que la celda activa es la C4.
ActiveCell.CurrentRegion.Columns(ActiveCell.Column ActiveCell _
.CurrentRegion.Column + 1).Select

13) Borrar el contenido del rango C5:D7

Elaborado por: Daniel Zegarra Zavaleta Pag. 37


Manual de Microsoft Excel Programacin VBA

Range("C5:D7").ClearContents

m. Para ingresar datos en celdas y rangos de celdas


Uso de la Propiedad:
Formula
Uso de la funcin:
Date
Cuando se trabaja en la hoja de clculo de Microsoft Excel, usualmente hay que
seleccionar primero una o varias celdas y a continuacin realizar una accin
sobre estos rangos, como escribir valores o darles formato. Pero en cambio, en
Visual Basic normalmente no es necesario "seleccionar" las celdas antes de
modificarlas, bastara nicamente con referirnos a ellas y entonces Visual Basic
podr modificar sus propiedades.

Nota.- Si desea escribir en una celda utilizando Visual Basic, no es necesario seleccionar la
celda, slo necesita devolver el objeto Range y a continuacin asignarle el dato que
desee, como se muestra en los siguientes ejemplos:

Ejercicio N 4: Asignar valores a celdas y rangos

1.- Abra un nuevo libro en blanco, y ubique el puntero en cualquier celda de la


Hoja1.
Ejemplos de procedimientos Sub para asignar valores:

1) Escribir el titulo CUENTAS en la celda A1, luego los ttulos SERVICIOS y


PAGOS en las celdas A3 y B3, y finalmente el nmero 120 en la celda B4.
Range("A1") = "CUENTAS"
Range("A3") = "SERVICIOS"
Range("B3") = "PAGOS"
Range("B4") = 120

Nota.- Cuando se asigna un valor a un objeto la asignacin va de derecha a izquierda, es


decir; el valor escrito a la derecha del signo igual, es asignado al objeto situado a la
izquierda.

Elaborado por: Daniel Zegarra Zavaleta Pag. 38


Manual de Microsoft Excel Programacin VBA

2) Las siguientes instrucciones realizan de manera equivalente la misma tarea


anterior. Observe el uso de la propiedad offset para desplazar la referencia de
celda y escribir datos en ella:
Range("A1").select
ActiveCell = "CUENTAS"
ActiveCell.offset(2,0) = "SERVICIOS"
ActiveCell.offset(2,1) = "PAGOS"
ActiveCell.offset(3,1) = 120

3) Escribir el nmero 120 en todas las celdas del rango llamado Pagos. (El
rango llamado Pagos es B4:B9)
4) Escribir el contenido de la celda B4 multiplicado por 2, en la celda B9
5) Escribir la funcin SUMA del rango Pagos, en la celda B10, y luego poner
en negrita la celda B10.
6) Escribir la fecha actual en la celda C3
Range("Pagos") = 120
Range("B9") = Range("B4")*2
Range("B10").Formula = "=SUM(Pagos)"
Range("B10").Font.Bold = True
Range("C3") = Date

Nota.- Cuando se escriben formulas en las instrucciones de Visual Basic, estas formulas
debern estar encerradas entre comillas dobles, los argumentos de las funciones
siempre se escribirn separados con comas y adems los nombres de las funciones

Elaborado por: Daniel Zegarra Zavaleta Pag. 39


Manual de Microsoft Excel Programacin VBA

debern estar escritas tal y como se escribiran en la versin en ingls de Excel, es


decir los nombres de funcin no se escriben como las conocemos en espaol, sino en su
equivalente segn la versin original. Por ejemplo:
SUMA como SUM
PROMEDIO como AVG
CONTAR como COUNT
ENTERO como INT
BUSCARV como VLOOKUP
SI como IF
REDONDEAR como ROUND
ESBLANCO como ISBLANK

Nota.- Si al escribir alguna formula en Visual Basic no se conoce su equivalente en ingls, lo


que hay que hacer es regresar a la ventana de Excel y encender la grabadora de
macros, luego escribir la frmula en espaol en cualquier celda, apagar la grabadora
y observar en la hoja de modulo como ha escrito el editor de Visual Basic su
equivalente en la versin en ingls.

n. Usos del mtodo Select y la propiedad Selection


El mtodo Select activa las hojas y los objetos de las hojas.
La propiedad Selection devuelve un objeto que representa la seleccin actual de
la hoja activa del libro activo.
Antes de utilizar la propiedad Selection, debe activar un libro, o activar o
seleccionar una hoja y luego a continuacin, seleccionar un rango, u otro objeto,
con el mtodo Select.
La grabadora de macros suele crear una macro que utiliza el mtodo Select y
la propiedad Selection. El siguiente procedimiento Sub se cre utilizando la
grabadora de macros, y muestra cmo trabajan juntas Select y Selection.

Sub Macro1()
Range("A3").Select
ActiveCell.FormulaR1C1 = "CLIENTE"
Range("B4").Select
ActiveCell.FormulaR1C1 = "PAGOS"
Range("A3:B3").Select
Selection.Font.Bold = True
End Sub

El siguiente ejemplo en cambio, realiza de manera equivalente la misma tarea


anterior, pero sin activar ni seleccionar las celdas.

Sub Macro2()
Range("A3") = "CLIENTE"
Range("B3") = "PAGOS"

Elaborado por: Daniel Zegarra Zavaleta Pag. 40


Manual de Microsoft Excel Programacin VBA

Range("A3:B3").Font.Bold = True
End Sub

Este segundo ejemplo evidentemente es ms simple y a la vez ms eficiente que


el anterior, pues la macro no pierde tiempo desplazando el puntero de celda en la
pantalla para seleccionar ningun rango previamente al ingreso de los datos; la
imagen en la pantalla permanece esttica y solo se vern que aparecen los datos
en las celdas correspondientes.

Elaborado por: Daniel Zegarra Zavaleta Pag. 41


Manual de Microsoft Excel Programacin VBA

Ejercicio N 5: Procedimientos Sub para Cambio de moneda


Caso1:
Se desea crear un procedimiento en Visual Basic para convertir soles a su
equivalente en dlares.
1.- En una hoja en blanco escriba lo siguiente:

2.- Ingrese al Editor de Visual Basic con Alt+F11


3.- Inserte una hoja de modulo con el men Insertar/Modulo
4.- En la hoja de modulo escriba el siguiente procedimiento Sub:
Sub Dolares()
Monto = range("B3")
tcambio = range("B4")
Range("B5") = Monto / tcambio
End Sub

Como puede verse, las instrucciones en este procedimiento hacen lo siguiente:


- El contenido de la celda B3 lo guarda en la variable Monto
- El contenido de la celda B4 lo guarda en la variable Tcambio
- Divide el valor de la variable Monto entre la variable Tcambio y el
resultado lo guarda en la celda B5.
4.- Regrese a la hoja de clculo y dibuje un botn como el que se muestra en la
figura anterior (use Autoformas/Formas bsicas/Bisel)
5.- Asigne la macro Dolares a este botn.
Cuando haga un clic en el botn de la macro Dlares, el procedimiento se
ejecutar y aparecer el resultado en la celda B5.
Nota.- Cuando se ejecuta esta macro, observe que en el contenido de las celdas no existe
ninguna frmula, todos los clculos se realizaron en Visual Basic y en las celdas
solamente aparecen los resultados. Habr otros casos como ya se ver ms adelante en
los cuales se va a desear que la macro escriba tambin formulas en las celdas.

Caso2:

Elaborado por: Daniel Zegarra Zavaleta Pag. 42


Manual de Microsoft Excel Programacin VBA

Crear otro procedimiento en Visual Basic para convertir dlares a su equivalente


en soles.
1.- En la misma hoja de clculo anterior borre la celda B3 y escriba un monto
en la celda B5:

2.- Ingrese a la ventana de Visual Basic y debajo del procedimiento anterior


escriba este otro procedimiento Sub:
Sub Soles()
Monto = range("B5")
tcambio = range("B4")
Range("B3") = Monto * tcambio
End Sub

En esta ocasin, las instrucciones de este procedimiento hacen lo siguiente:


- El contenido de la celda B5 lo guarda en la variable Monto
- El contenido de la celda B4 lo guarda en la variable Tcambio
- Multiplica el valor de la variable Monto por la variable Tcambio y el
resultado lo guarda en la celda B3.
3.- Regrese a la hoja de clculo y dibuje otro botn para la macro Soles como
se muestra en la figura anterior.
4.- Luego asigne la macro Soles a este segundo botn.
Cuando haga un clic en el botn de la macro Soles, se ejecutar el procedimiento
y los dlares de la celda B5 se convertirn a soles que aparecern en la celda B3.

Caso3:
Ahora crear un procedimiento que borre el contenido del rango B3:B5 y luego
seleccione la celda B3.
1.- Ingrese a la ventana de Visual Basic y debajo del procedimiento anterior
escriba este otro procedimiento Sub:

Sub Borrar()
Range("b1:b3").ClearContents

Elaborado por: Daniel Zegarra Zavaleta Pag. 43


Manual de Microsoft Excel Programacin VBA

Range("b1").Select
End Sub

2.- En la hoja de clculo dibuje otro botn para la macro Borrar como se
muestra en la siguiente figura:

3.- Luego asigne la macro Borrar a este botn.


Cuando haga un clic en el botn de la macro Borrar, se borraran las celdas B3,
B4 y B5 y se ubicar el puntero de celda en B3.

Elaborado por: Daniel Zegarra Zavaleta Pag. 44


Manual de Microsoft Excel Programacin VBA

Ejercicio N 6: Procedimientos Sub para Ahorro personal

Caso1:
Se desea crear un procedimiento en Visual Basic para controlar los ahorros en
una cuenta personal.
1.- En una hoja en blanco escriba lo siguiente:

2.- Nombre los siguientes rangos de celda:


B2 Fecha B3 Anterior B4 Deposito
B5 Retiro B6 Actual
2.- Ingrese al Editor de Visual Basic con Alt+F11
3.- Inserte una hoja de modulo con el men Insertar/Modulo y escriba el
siguiente procedimiento Sub:
Sub Ahorro()
Range("Fecha") = Date
Range("Deposito") = InputBox("Ingrese Depsito")
Range("Retiro") = InputBox("Ingrese Retiro")
Range("Anterior") = Range("Actual")
Range("Actual") = Range("Anterior")+Range("Deposito")-
Range("Retiro")
End Sub

Las instrucciones en este procedimiento hacen lo siguiente:


- Guarda la fecha actual en la celda llamada Fecha
- La sentencia InputBox mostrar una ventana solicitando que se ingrese el
monto del deposito, y luego almacena este monto en la celda llamada
Depsito.
- Luego otra ventana solicitar el monto de retiro el cual se almacena en la
celda llamada Retiro. (si no existe un monto de retiro, al aparecer la ventana
solicitando el retiro solo se debe presionar Enter o hacer clic en Aceptar)
- Guarda el valor de la celda llamada Actual en la celda llamada Anterior
- Calcula el nuevo saldo actual y lo guarda en la celda llamada Actual
4.- Regrese a la hoja de clculo y dibuje un botn como el que se muestra en la
figura anterior (use Autoformas/Formas bsicas/Bisel)

Elaborado por: Daniel Zegarra Zavaleta Pag. 45


Manual de Microsoft Excel Programacin VBA

5.- Luego asigne la macro Ahorro a este botn.


Cuando haga un clic en el botn de la macro Ahorro, ingrese un monto de
depsito y si desea tambin de retiro, y al aceptar aparecern los resultados en la
hoja de clculo.

Nota.- Este procedimiento tal y como esta diseado, una vez que ya se ha ingresado un
depsito y nos est solicitando ingresar ahora el retiro, no nos da opcin a enmendar
el anterior ingreso si es que hubo un error en l. Ms adelante en otro ejercicio
veremos como insertar instrucciones condicionales que permitan abortar una
transaccin o continuar ejecutndola.

La macro anterior a medida que se realizan movimientos en la cuenta va


calculando el nuevo saldo, pero no lleva un registro de todos los movimientos
efectuados.
Para poder guardar cada uno de los depsitos o retiros efectuados da tras da,
ser necesario crear en la misma hoja de clculo un cuadro adicional de 4
columnas que registre la fecha, los depsitos y retiros, y el saldo final en cada
uno de los movimientos efectuados en la cuenta de ahorros. Para ello haga usted
lo siguiente:
6.- Escriba en la hoja de clculo anterior lo siguiente:

7.- Ingrese a la ventana de Visual Basic y al procedimiento anterior agrguele


las siguientes instrucciones:
Sub Ahorro()
Range("Fecha") = Date
Range("Deposito") = InputBox("Ingrese Depsito")
Range("Retiro") = InputBox("Ingrese Retiro")
Range("Anterior") = Range("Actual")
Range("Actual")=Range("Anterior")+Range("Deposito")-Range("Retiro")
Range("A9").Select
ActiveCell.CurrentRegion.Select
ActiveCell.Offset(Selection.Rows.Count, 0).Select
ActiveCell = Date
ActiveCell.Offset(0, 1) = Range("Deposito")
ActiveCell.Offset(0, 2) = Range("Retiro")
ActiveCell.Offset(0, 3) = Range("Actual")

Elaborado por: Daniel Zegarra Zavaleta Pag. 46


Manual de Microsoft Excel Programacin VBA

MsgBox ("Su saldo Actual es de " & Range("Actual") & " soles")
End Sub

Luego de haber ingresado el depsito o el retiro, y haber calculado el saldo


final, las instrucciones adicionales en este procedimiento hacen lo siguiente:
- Primero selecciona la celda A9
- Selecciona la regin actual
- Desplaza el puntero de celda hasta la ultima celda ocupada de la regin
actual y se ubica en una celda vaca de la columna A.
- En esa celda vaca de la columna A escribe la fecha actual
- Se desplaza una celda a la derecha de A y escribe el monto del depsito
- Se desplaza dos celdas a la derecha de A y escribe el monto del retiro
- Se desplaza tres celdas a la derecha de A y escribe el saldo final
- Finalmente muestra un mensaje en pantalla indicando cual es el monto del
saldo actual en la cuenta.
8.- Regrese a la hoja de clculo y haga un clic en el botn de la macro para
registrar uno o varios movimientos en la cuenta.
Si la macro funciona como se espera, regrese a la ventana de Visual Basic y
agregue al procedimiento los siguientes comentarios con la finalidad de entender
mejor cual es la funcin de cada grupo de instrucciones dentro de la macro.
(Recuerde que los comentarios deben empezar a escribirse con un apstrofe ().)
Sub Ahorro()
Range("Fecha") = Date
'Solicita datos
Range("Deposito") = InputBox("Ingrese Depsito")
Range("Retiro") = InputBox("Ingrese Retiro")
Range("Anterior") = Range("Actual")
'Calcula el saldo actual
Range("Actual") = Range("Anterior")+Range("Deposito")-
Range("Retiro")
'Ubica el puntero al final del registro de movimientos
Range("A9").Select
ActiveCell.CurrentRegion.Select
ActiveCell.Offset(Selection.Rows.Count, 0).Select
'Registra los datos
ActiveCell = Date
ActiveCell.Offset(0, 1) = Range("Deposito")
ActiveCell.Offset(0, 2) = Range("Retiro")
ActiveCell.Offset(0, 3) = Range("Actual")
'Muestra un mensaje con el saldo actual
MsgBox ("Su saldo Actual es de " & Range("Actual") & " soles")
End Sub

Elaborado por: Daniel Zegarra Zavaleta Pag. 47


Manual de Microsoft Excel Programacin VBA

Elaborado por: Daniel Zegarra Zavaleta Pag. 48


Manual de Microsoft Excel Programacin VBA

22. Uso de funciones de hoja de clculo de Microsoft


Excel en Visual Basic

Aunque el lenguaje de Visual Basic para aplicaciones tiene una lista propia de
funciones disponibles, habrn casos en los cuales se va ha desear que las macros
utilicen las funciones de hoja de calculo de Excel, pero no para escribir estas
funciones en las celdas, sino para obtener un resultado con ellas y utilizar este
resultado dentro del programa en Visual Basic.
Se pueden usar la mayora de las funciones de hoja de clculo de Microsoft Excel en
las instrucciones de Visual Basic.

a. Lista de las funciones de hoja de clculo que se pueden


usar en Visual Basic

Elaborado por: Daniel Zegarra Zavaleta Pag. 49


Manual de Microsoft Excel Programacin VBA

A Contar.Si Distr.Norm.Estand.In
v
Acos ContarA
Distr.Norm.Inv
Acosh Cosh
Distr.T
Asen Covar
Distr.T.Inv
Asenoh Crecimiento
Atan2 Cuartil E
Curtosis Elegir
Atanh
D EncontrarB
B
Error.Tipico.XY
BDContar DB
EsErr
BDContarA DDB
Decimal EsError
BDDesvEst
EsLogico
BDDesvEstP Despejar
EsNod
BDExtraer DesvEst
EsNoTexto
BDMax DesvEstP
EsNumero
BDMin Desvia2
Espacios
BDProducto DesvProm
EsTexto
BDPromedio Dias360
Estimacion.Lineal
BDSuma DiaSem
Estimacion.Logaritmi
BDVar Dist.Weibull
ca
BDVarP Distr.Beta
F
Binom.Crit Distr.Beta.Inv
Fact
Buscar Distr.Binom
Fisher
Buscar Distr.Chi
Fonetico
BuscarH Distr.Exp
Frecuencia
BuscarV Distr.F
G
C Distr.F.Inv
Gamma.Ln
Coef.De.Correl Distr.Gamma
Grados
Coeficiente.Asimetria Distr.Gamma.Inv
Distr.Hipergeom H
Coeficiente.R2
Distr.Log.Inv Hallar
Coincidir
Distr.Log.Norm HallarB
Combinat
Distr.Norm I
Contar
Distr.Norm.Estand ndice
Contar.Blanco
Elaborado por: Daniel Zegarra Zavaleta Pag. 50
Manual de Microsoft Excel Programacin VBA

Int.Pago.Dir PagoPrin
Interseccion.Eje Pearson
Intervalo.Confianza Pendiente
Jerarquia Percentil
K.Esimo.Mayor Permutaciones
K.Esimo.Menor Pi
L Poisson
Ln Potencia
Log Probabilidad
Log10 Producto

M Promedio

Max Pronostico

MDeterm Prueba.Chi

Media.Acotada Prueba.Chi.Inv

Media.Armo Prueba.F

Media.Geom Prueba.Fisher.Inv

Mediana Prueba.T

Min Prueba.Z

MInversa R
MMult Radianes
Moda Rango.Percentil
Moneda Redondea.Impar
Multiplo.Inferior Redondea.Par
Multiplo.Superior Redondear

N Redondear.Mas

NegBinomDist Redondear.Menos

NomPropio
Normalizacion
NPer
Numero.Romano
P
Pago
PagoInt
Elaborado por: Daniel Zegarra Zavaleta Pag. 51
Manual de Microsoft Excel Programacin VBA

Reemplazar SumaX2MasY2 Transponer


ReemplazarB SumaX2MenosY2 U
Repetir SumaXMenosY2 USDollar
RTD Sustituir V
S SYD VA
SenoH T Var
SLn TanH VarP
Subtotales Tasa Vdb
Suma Tendencia VF
Suma.Cuadrados Texto VNA
SumaProducto Tir
Sumar.Si TirM

Importante: Tenga en cuenta que en Visual Basic, el nombre de la funcin debe


escribirse en su equivalente en ingls.

Nota.- Algunas funciones de hoja de clculo no tienen utilidad en Visual Basic. Por ejemplo, la
funcin Concatenar no se necesita, ya que en Visual Basic puede usar el operador de
concatenacin & para unir varios valores de texto..

b. Como llamar a una funcin de hoja de clculo desde Visual


Basic
Cuando se desee usar una funciones de hoja de calculo en Visual Basic, esta funcin
deber ejecutarse mediante el objeto WorksheetFunction.
El siguiente procedimiento Sub usa la funcin MN para obtener el valor ms pequeo
de un rango de celdas. Primeramente, se declara la variable CUADRO como un objeto
Range, y a continuacin se la asigna como el rango A1:C10. Luego a la variable
MINIMO se le asigna el resultado de aplicar la funcin MN a CUADRO. Finalmente,
el valor de la variable MINIMO es utilizada para obtener un clculo y escribirlo en la
celda A12.

Sub UsarFuncion()
Dim CUADRO As Range
Set CUADRO = Range("A1:C10")
MINIMO = Application.WorksheetFunction.Min(CUADRO)
Range("A12") = MINIMO * 100
End Sub

Otra manera ms simple de obtener el mismo resultado que la macro anterior sera de
la siguiente forma:

Elaborado por: Daniel Zegarra Zavaleta Pag. 52


Manual de Microsoft Excel Programacin VBA

Sub OtraFuncion()
Range("A12") = Application.WorksheetFunction.Min(Range("A1:C10"))*100
End Sub

Si usa una funcin de hoja de clculo que requiere como argumento una referencia de
rango, deber especificar un objeto Range. Por ejemplo, puede usar la funcin de hoja
de clculo BUSCARV para efectuar una bsqueda en un rango de celdas.
En una celda de hoja de clculo, podra insertar una frmula como
=BUSCARV(4,A1:B10,2,0). No obstante, en un procedimiento de Visual Basic, para
obtener el mismo resultado debe especificar un objeto Range para referirse al rango
A1:B10.
En el siguiente ejemplo, el procedimiento Sub BuscarDato asigna a la variable RPTA
el resultado de la funcin VLOOKUP (que es el nombre en ingls de la funcin
BUSCARV) y luego muestra en pantalla un mensaje con el valor de la variable RPTA.

Sub BuscarDato()
RPTA = Application.WorksheetFunction.VLOOKUP(4,Range("A1:B10"),2,0)
MsgBox RPTA
End Sub

Nota.- Las funciones de Visual Basic no usan el calificador WorksheetFunction. Una funcin de
Visual Basic puede tener el mismo nombre que una funcin de Microsoft Excel y, sin embargo,
dar otros resultados. Por ejemplo, Application.WorksheetFunction.Log, y la funcin
Log dan resultados diferentes.

c. Insertar una funcin de hoja de clculo en una celda


En cambio, si lo que se quiere es que la macro escriba un funcin de hoja de clculo en
una celda, entonces habr que especifique la funcin como el valor de la propiedad
Formula del objeto Range correspondiente.
En el siguiente ejemplo el procedimiento Sub InsertarFormulas, escribir en varias
celdas del la Hoja2, diversas funciones de hoja de calculo:
Sub InsertarFormulas()
Worksheets("Hoja2").Activate
. Range("A3:A5").Formula = "=RAND()"
Range("A6").Formula = "=SUM(A3:A5)"
Range("A7").Formula = "=AVG(A3:A5)"
Range("A8").Formula = "=COUNT(A3:A5)"
End Sub

El equivalente de la funcin ALEATORIO es RAND

SUMA es SUM

PROMEDIO es AVG

CONTAR es COUNT

Elaborado por: Daniel Zegarra Zavaleta Pag. 53


Manual de Microsoft Excel Programacin VBA

d. La Funcin InputBox

Muestra un mensaje en un cuadro de dilogo, espera que el usuario escriba un texto o


haga clic en un botn y devuelve el dato escrito
Si el usuario hace clic en Aceptar o presiona Enter , la funcin InputBox devuelve lo
que haya escrito en el cuadro de texto como un dato tipo String (texto). Si el usuario
hace clic en Cancelar, la funcin devuelve una cadena de caracteres de longitud cero
("").

Sintaxis
InputBox (Mensaje , titulo, defecto, xpos, ypos, ayuda, contexto)

Donde:
Mensaje Obligatorio. Texto que se muestra como mensaje en el cuadro de
dilogo. Si mensaje consta de ms de una lnea, puede separarlos
utilizando un carcter de retorno de carro Chr(13), un carcter de
avance de lnea Chr(10) o una combinacin de los caracteres de retorno
de carro-avance de lnea Chr(13) y Chr(10) entre cada lnea y la
siguiente.
titulo Opcional. Texto que se muestra en la barra de ttulo del cuadro de
dilogo. Si omite titulo, en la barra de ttulo se coloca el nombre de la
aplicacin Excel
defecto Opcional. Texto que se muestra en el cuadro de texto como respuesta
predeterminada cuando no se suministra una cadena. Si omite defecto,
se muestra el cuadro de texto vaco.
xpos Opcional. Numero que especifica, en pixels, la distancia en sentido
horizontal entre el borde izquierdo del cuadro de dilogo y el borde
izquierdo de la pantalla. Si se omite xpos, el cuadro de dilogo se centra
horizontalmente.
ypos Opcional. Expresin numrica que especifica, en pixels, la distancia en
sentido vertical entre el borde superior del cuadro de dilogo y el borde
superior de la pantalla. Si se omite ypos, el cuadro de dilogo se coloca
a aproximadamente un tercio de la altura de la pantalla.
ayuda Opcional. Texto que identifica el archivo de Ayuda que se utilizar para
proporcionar ayuda interactiva para el cuadro de dilogo. Si se
especifica ayuda, tambin deber especificarse contexto.
contexto Opcional. Expresin numrica que es el nmero de contexto de Ayuda
asignado por el autor al tema de Ayuda correspondiente. Si se
especifica contexto, tambin deber especificarse ayuda.

Nota.- Si desea especificar ms que el primer argumento con nombre, debe utilizar InputBox en una
expresin. Si desea omitir algunos argumentos de posicin, debe incluir los delimitadores de
coma correspondiente.
Inputbox("Ingrese nombre:", ,"Desconocido")

Elaborado por: Daniel Zegarra Zavaleta Pag. 54


Manual de Microsoft Excel Programacin VBA

e. El Mtodo InputBox

Muestra un cuadro de dilogo para que el usuario introduzca informacin. Devuelve la


informacin introducida en el cuadro de dilogo.

Sintaxis:
expresin.InputBox (Mensaje, titulo, defecto, xpos, ypos, ayuda, contexto, tipo)

Donde:
expresin Expresin obligatoria que asigna un objeto Application.
Mensaje Dato obligatorio que se mostrar en el cuadro de dilogo. Puede ser
un texto, un nmero, una fecha o un valor Boolean (Excel convierte el
dato en texto antes de que muestre).
Title Opcional. Titulo del cuadro de entrada. Si este argumento se omite, el
ttulo predeterminado ser "Entrada".
Defecto Opcional. Especifica un valor que aparecer en el cuadro de texto
cuando se muestre inicialmente el cuadro de dilogo. Si este argumento
se omite, el cuadro de texto permanecer vaco. Este valor puede ser un
objeto Range.
xpos Opcional. Especifica la posicin X del cuadro de dilogo con respecto
a la esquina superior izquierda de la pantalla, en puntos.
ypos Opcional. Especifica la posicin Y del cuadro de dilogo con respecto
a la esquina superior izquierda de la pantalla, en puntos.
Ayuda Opcional. El nombre del archivo de Ayuda para este cuadro de
entrada.
Contexto Opcional. La identificacin de contexto del tema de Ayuda.
Tipo Opcional. Especifica el tipo de datos que se devuelve. Si este
argumento se omite, el cuadro de dilogo devolver texto. Puede ser
uno de los siguientes valores o bien una suma de ellos.

Valor Significado
0 Una frmula
1 Un nmero
2 Texto (una cadena)
4 Un valor lgico (True o False)
8 Una referencia a una celda, como un objeto Range.
16 Un valor de error, como por ejemplo #N/A
64 Una matriz de valores

Es posible usar una suma de valores permitidos para Tipo. Por ejemplo, para que un
cuadro de entrada acepte texto o nmeros, establezca Tipo como 1 + 2.
Use InputBox para mostrar un cuadro de dilogo sencillo que permite introducir
informacin para usarla en una macro. El cuadro de dilogo tiene un botn Aceptar y
un botn Cancelar. Si elige el botn Aceptar, InputBox devolver el valor introducido
en el cuadro de dilogo. Si elige el botn Cancelar, InputBox devolver False.
Si Type es 0, InputBox devolver la frmula en forma de texto, por ejemplo,
"=2*PI()/360". Si existen referencias en la frmula, se devolvern como referencias de

Elaborado por: Daniel Zegarra Zavaleta Pag. 55


Manual de Microsoft Excel Programacin VBA

estilo A1. (Utilice ConvertFormula para realizar conversiones entre estilos de


referencia).
Si Type es 8, InputBox devolver un objeto Range. Debe usar el enunciado Set para
asignar el resultado a un objeto Range, como se muestra en el ejemplo siguiente:

Set TABLA = Application.InputBox("Ejemplo", type := 8)

Si no usa el enunciado Set, se asignar a la variable el valor contenido en el rango y no


el objeto Range mismo.

Conclusin:
El mtodo InputBox difiere de la funcin InputBox en que el primero permite la
validacin selectiva de las entradas del usuario y en que puede usarse con objetos,
valores de error y frmulas de Excel. Tenga en cuenta que Application.InputBox llama
al mtodo InputBox, y el dato que se escriba puede ser considerado de diferentes tipos
(texto, numero, formula, etc); en cambio InputBox sin calificador de objeto llama a la
funcin InputBox, y el dato escrito ser considerado siempre como del tipo texto.

Ejemplos
En este ejemplo se solicita un nmero al usuario.
EDAD = Application.InputBox("Escriba su edad:")

En este otro ejemplo se solicita al usuario que seleccione una celda de la Hoja1. Se usa
el argumento Type para asegurar que al hacer clic en una celda, se considere como que
se hubiese escrito la coordenada de esta celda con el teclado.
Worksheets("Hoja1").Activate
Set SUELDO = Application.InputBox("Seleccione su sueldo", Type:=8)

Elaborado por: Daniel Zegarra Zavaleta Pag. 56


Manual de Microsoft Excel Programacin VBA

Ejercicio N 7 - Pago de un prstamo hipotecario

En este ejemplo se usa la funcin de hoja de clculo PAGO para calcular el pago
mensual de un prstamo hipotecario.

1ra Solucin:
1.- En la Hoja1 de un nuevo libro
escribir los siguientes datos que se
muestran en la imagen adjunta.
2.- Luego, en la celda B7 escribir la
funcin PAGO siguiente:

=PAGO(B3/1200,B4,-B5)

Inters Monto del


prstamo

Nmero de pagos

3.- Guarde el archivo con el nombre Pago de Hipoteca.

2da Solucin:
Ahora, el mismo caso anterior se va ha resolver pero utilizando ntegramente un
procedimiento Sub. Es decir no se necesitarn en absoluto datos de ninguna celda.
1.- Ingresar al Editor de Visual Basic con Alt+F11 y luego inserte una hoja de mdulo
con el men Insertar/Modulo.
2.- En la hoja de mdulo escriba las siguientes instrucciones:

Sub PagoMensual()
Interes = Val(InputBox("Ingrese el Inters:"))
Periodos = Val(InputBox("Ingrese los Periodos:"))
Prestamo = Val(InputBox("Ingrese el Prstamo:"))
Pago = Application.WorksheetFunction.Pmt(Interes/1200, _
Periodos,-Prestamo)
MsgBox ("El Pago mensual es de: " & Format(Pago, "Currency"))
End Sub

Como la funcin Inputbox devuelve datos tipo texto al escribir el Inters, los
Perodos o el Prstamo, entonces, se le antepone la funcin Val para convertir esos
datos en nmeros, y as poder operarlos matemticamente con la funcin Pago (que
en ingles su equivalente es Pmt)
3.- Con Autoformas/Formas bsicas/Bisel dibuje un botn en la hoja de calculo y
asgnele la macro PagoMensual.

Elaborado por: Daniel Zegarra Zavaleta Pag. 57


Manual de Microsoft Excel Programacin VBA

Cuando la macro se ejecute mostrar las siguientes ventanas en la pantalla, en las


cuales en cada caso se deber escribir los datos que se solicitan y hacer clic en el botn
Aceptar:

4.- Guarde nuevamente el archivo con Ctrl+G.


En conclusin, como puede verse, Excel puede resolver el mismo problema de dos
formas distintas:
En el primer caso, calcula el pago mensual de la hipoteca escribiendo y
calculando los datos en el interior de las celdas de la hoja de clculo.
En el segundo caso, realiza el mismo calculo pero ingresando y mostrando los
resultados ntegramente en el ambiente de Visual Basic, sin utilizar en absoluto
las celdas de la hoja de clculo.
Habrn otros casos como hemos visto ya, en los cuales para resolver los problemas es
necesario utilizar ambos ambientes en forma combinada, es decir; usar los datos y
clculos existentes en las celdas, y tambin los datos y clculos provenientes de las
instrucciones de Visual Basic.

3ra Solucin:
Una tercera forma de ingresar los datos para el calculo del pago de la hipoteca es
haciendo uso del Mtodo Inputbox, en vez de la Funcin Inputbox.
1.- Ingresar al Editor de Visual Basic con Alt+F11 y en la hoja de mdulo escriba las
siguientes instrucciones:

Elaborado por: Daniel Zegarra Zavaleta Pag. 58


Manual de Microsoft Excel Programacin VBA

Sub OtroPago()
Interes = Application.InputBox("Seleccione el Inters:")
Periodos = Application.InputBox("Seleccione los Periodos:")
Prestamo = Application.InputBox("Seleccione el Prstamo:")
Pago = Application.WorksheetFunction.Pmt(Interes / 1200, _
Periodos, -Prestamo)
MsgBox ("El Pago mensual es de: " & Format(Pago, "Currency"))
End Sub

En este caso el mtodo Inters = Application.Inputbox trata al dato que uno escribe,
directamente como del tipo numrico, ya no como texto. Por esta razn ya no es
necesario usar la funcin Val.
2.- Luego asigne esta macro al mismo botn de autoformas del caso anterior.
Cuando la macro se ejecute y aparezcan las ventanas para introducir datos, se podrn
escribir los datos o sino tambin se podr seleccionar con el mouse las celdas que
contienen los datos que se solicitan y hacer luego clic en el botn Aceptar:

Elaborado por: Daniel Zegarra Zavaleta Pag. 59


Manual de Microsoft Excel Programacin VBA

23. Funciones propias de Visual Basic


a. Lista breve de las funciones ms comunes

Val Convierte los nmeros contenidos en una cadena como un valor numrico del tipo
adecuado.

Por ejemplo, Val("15 aos"), da como respuesta el nmero: 15

Str Convierte en un tipo texto (String) la representacin de cadena de un nmero.

Por ejemplo, Str(15) & "aos", da como respuesta el texto: 15 aos

Left Extrae un nmero especificado de caracteres del lado izquierdo de una cadena.

Por ejemplo, Left("Limatambo",4), da como respuesta el texto: Lima.

Right Extrae un nmero especificado de caracteres del lado derecho de una cadena.

Por ejemplo, Rigth("Limatambo",5), da como respuesta el texto: tambo.

Mid Extrae un numero especificado de caracteres de la parte interior de una cadena.

Por ejemplo, Mid("Limatambo",3,4), da como respuesta el texto: mata.

Int, Fix Las funciones Int y Fix eliminan la fraccin de un nmero y devuelven el valor
entero resultante. La diferencia entre Int y Fix es que si el nmero es negativo, Int
devuelve el primer entero negativo menor o igual a nmero, mientras que Fix
devuelve el primer entero negativo mayor o igual a nmero.

Por ejemplo, Int(-8.4) da como respuesta: -9,

Y en cambio Fix(-8.4) da como respuesta: -8.

Abs Devuelve el valor absoluto de un nmero o expresin de clculo

Por ejemplo, Abs(3-7) da como respuesta: 4

Sgn Devuelve el nmero 1,0, -1 que indica el signo de un nmero.

Por ejemplo, Sgn(34) da como respuesta 1

Sgn(0) da como respuesta 0

Sgn(-23) da como respuesta -1

Len Da como resultado la cantidad de caracteres que tiene una cadena de texto.

Por ejemplo, Len("Limatambo") da como respuesta el nmero: 9

Round Redondea un nmero a una cantidad especificada de lugares decimales.

Elaborado por: Daniel Zegarra Zavaleta Pag. 60


Manual de Microsoft Excel Programacin VBA

Por ejemplo, Round(3.1415927,4) da como respuesta el nmero: 3.1416

Date Obtiene la fecha actual del sistema.

Por ejemplo, Date da como respuesta: 11/05/2005

Timer Obtiene el nmero de segundos transcurridos desde la medianoche.

Hour Obtiene un nmero entero entre 0 y 23, inclusive, que representa la hora del
argumento de la funcin.

Por ejemplo, Hour(3:15:27) da como respuesta: 3

Now Obtiene un nmero que especifica la fecha y hora actuales de acuerdo con la
configuracin de la fecha y la hora del sistema de su equipo.

Por ejemplo, Now da como respuesta: 11/05/2005 3:15:27

Day Obtiene un nmero entero entre 1 y 31, inclusive, que representa el da del mes.

Por ejemplo, Day(Now) da como respuesta: 5

Minute Obtiene un nmero entero entre 0 y 59, inclusive, que representa el minuto de la
hora actual del sistema.

Por ejemplo, Minute(Now) da como respuesta: 15

Second Obtiene nmero entero entre 0 y 59, inclusive, que representa los segundos de la
hora actual del sistema.

Por ejemplo, Second(Now) da como respuesta: 27

Year Obtiene un nmero entero que representa el ao actual del sistema.

Por ejemplo, Year(Now) da como respuesta: 2005

Format formatea un dato de acuerdo a las instrucciones contenidas en una expresin de


formato.

Por ejemplo:

Pago = 3562.4

Z = Format(Pago, "Currency")

Y = Format(Pago, "#,##0.00")

Entonces Z ser igual a: S/. 3,562.40

En cambio Y ser igual a: 3,562.40

Elaborado por: Daniel Zegarra Zavaleta Pag. 61


Manual de Microsoft Excel Programacin VBA

24. Estructuras de Control en las instrucciones macro


f. Que son las sentencias de control
Mediante el uso de instrucciones condicionales (como IF o Select), e instrucciones de
bucle (como While, For, For each, o Do), tambin conocidas como estructuras de
control, es posible escribir cdigo de Visual Basic que tome decisiones y repita
determinadas acciones. Otra estructura de control til es la instruccin With, permite
ejecutar una serie de instrucciones sin necesidad de recalificar un objeto.
Entonces las sentencias de control pueden ser de varias tipos:
Instrucciones Condicionales
Ifthen Else
SelectCase

Instrucciones de Bucle o de lazo repetitivo


WhileWend
ForNext
DoLoop
ForEachNext

Instrucciones de ejecucin mltiple sobre un mismo objeto


With

g. Que hacen las Instrucciones Condicionales

If...Then...Else: Salta a una u otra instruccin cuando una condicin es


verdadera o Falsa

Select Case: Selecciona la instruccin a ejecutar en funcin de un conjunto


de condiciones

h. Que hacen las Instrucciones de Bucle


Empleando bucles es posible ejecutar un grupo de instrucciones de forma repetida.
Algunos bucles repiten las instrucciones hasta que una condicin es Falsa, otros las
repiten hasta que la condicin sea Verdadera. Hay tambin bucles que repiten un
conjunto de instrucciones un nmero determinado de veces o una vez para cada objeto
de una coleccin.

Do...Loop: Sigue en el bucle mientras o hasta que una cierta condicin


sea verdadera.

Elaborado por: Daniel Zegarra Zavaleta Pag. 62


Manual de Microsoft Excel Programacin VBA

For...Next: Utiliza un contador para ejecutar un grupo de iinstrucciones


un nmero determinado de veces.

For Each...Next: Repite un grupo de instrucciones para cada uno de los objetos
de una coleccin.

i. Que hacen las Instrucciones de ejecucin mltiple


Normalmente, en Visual Basic, debe especificarse un objeto antes de poder ejecutar
uno de sus mtodos o cambiar una de sus propiedades. Se puede usar la instruccin
With para especificar un objeto una sola vez y poder aplicar sobre ella una serie
completa de instrucciones.

With: Ejecuta una serie de instrucciones sobre un mismo objeto sin


necesidad de recalificar dicho objeto

25. La Instruccin If...Then...Else

Ejecuta condicionalmente un grupo de instrucciones, dependiendo del valor de una


expresin.
Sintaxis
If condicin Then instrucciones Else instrucciones_else

Puede utilizar la siguiente sintaxis en formato de bloque:


If condicin Then
Instrucciones
ElseIf condicin-n Then
instrucciones_elseif...
Else
instrucciones_else
End If

Donde:
condicin Requerido. Uno o ms de los siguientes dos tipos de
expresiones:
Una expresin numrica o expresin de cadena que puede ser
evaluada como Verdadera o Falsa. Si condicin es Null,
condicin se considera Falsa.
instrucciones Opcional en formato de bloque; se requiere en formato de lnea
sencilla que no tenga una clusula Else. Una o ms instrucciones

Elaborado por: Daniel Zegarra Zavaleta Pag. 63


Manual de Microsoft Excel Programacin VBA

separadas por dos puntos ejecutados si la condicin es


Verdadera.
condicin-n Opcional. Igual que condicin.
instrucciones_elseif Opcional. Una o ms instrucciones ejecutadas si la condicin-n
asociada es Verdadera.
instrucciones_else Opcional. Una o ms instrucciones ejecutadas si ninguna de las
expresiones anteriores condicin o condicin-n es Verdadera.

Puede utilizar la forma de una sola lnea (Sintaxis 1) para pruebas cortas y sencillas.
Sin embargo, el formato de bloque (Sintaxis 2) proporciona ms estructura y
flexibilidad que la forma de lnea simple y, generalmente, es ms fcil de leer, de
mantener y de depurar.

Nota.- Con la sintaxis1 es posible ejecutar mltiples instrucciones como resultado de una decisin
If...Then, pero todas deben estar en la misma lnea y separadas por dos puntos, como en la
instruccin siguiente:
If N > 1 Then A = N * 2 : B = B + N : C = C - N

Una instruccin con formato de bloque If debe ser la primera de la lnea. Las partes
Else, ElseIf y End If, de la instruccin, solamente pueden ir precedidas de un nmero
de lnea o una etiqueta de lnea. El bloque If debe terminar con una instruccin End If.
Para determinar si una instruccin If es un bloque, examine lo que sigue a la palabra
clave Then. Si lo que aparece detrs de Then en la misma lnea no es un comentario, la
instruccin se considera como una instruccin If de una sola lnea.
Las clusulas Else y ElseIf son opcionales. Puede tener en un bloque ElseIf, tantas
clusulas If como desee, pero ninguna puede aparecer despus de una clusula Else.
Las instrucciones de bloque If se pueden anidar; es decir, unas pueden contener a otras.
Cuando se ejecuta un bloque If (Sintaxis 2), se prueba condicin. Si condicin es
Verdadera, se ejecutan las instrucciones que estn a continuacin de Then. Si
condicin es False, se evalan una a una las condiciones ElseIf (si existen). Cuando se
encuentra una condicin Verdadera se ejecutan las instrucciones que siguen
inmediatamente a la instruccin Then asociada. Si ninguna de las condiciones ElseIf es
Verdadera (o si no hay clusulas ElseIf), se ejecutan las instrucciones que siguen a
Else. Despus de la ejecucin de las instrucciones que siguen a Then o Else, la
ejecucin contina con la instruccin que sigue a End If.

a. Como usar las instrucciones If...Then...Else

Se puede usar la instruccin If...Then...Else para ejecutar una instruccin o bloque de


instrucciones determinadas, dependiendo del valor de una condicin.

Elaborado por: Daniel Zegarra Zavaleta Pag. 64


Manual de Microsoft Excel Programacin VBA

b. Ejecutar una sola instruccin cuando la condicin es


Verdadera
Para ejecutar una sola instruccin cuando una condicin es Verdadera, se puede usar la
sintaxis de lnea nica de la instruccin If...Then...Else.
El siguiente ejemplo muestra la sintaxis de lnea nica, en la que se omite el uso de la
palabra clave Else: (Nota: las fechas se escriben entre numerales #)

Sub Cumpleaos()
MiCumple = #23/8/2009#
If MiCumple > Now Then msgbox "An falta para mi cumpleaos"
End Sub

Para ejecutar ms de una lnea de cdigo, es preciso utilizar la sintaxis de mltiples


lneas. Esta sintaxis incluye la instruccin End If, tal y como muestra el siguiente
ejemplo:

Sub HombreMujer() Letra Roja, Negrita y


If Range("Sexo") = "F" Then Cursiva
Range("Sexo").Font.ColorIndex = 3
Range("Sexo").Font.Bold = True
Range("Sexo").Font.Italic = True
End If
End Sub

c. Ejecutar unas instrucciones si la condicin es Verdadera y


ejecutar otras si es Falsa
Use una instruccin If...Then...Else para definir dos bloques de instrucciones
ejecutables: un bloque que se ejecutar cuando la condicin es Verdadera y el otro que
se ejecutar si la condicin es Falsa.
Sub HombreMujer() Letra Roja, Negrita y
If Range("Sexo") = "F" Then Cursiva
Range("Sexo").Font.ColorIndex = 3
Range("Sexo").Font.Bold = True
Range("Sexo").Font.Italic = True
Else Letra Azul, sin
Range("Sexo").Font.ColorIndex = 5 Negrita ni Cursiva
Range("Sexo").Font.Bold = False
Range("Sexo").Font.Italic = False
End If
End Sub

d. Comprobar una segunda condicin si la primera condicin es


False
Se pueden aadir instrucciones ElseIf a una instruccin If...Then...Else para comprobar
una segunda condicin si la primera es Falsa. Por ejemplo, el siguiente procedimiento
funcin calcula una bonificacin salarial dependiendo de la clasificacin del

Elaborado por: Daniel Zegarra Zavaleta Pag. 65


Manual de Microsoft Excel Programacin VBA

trabajador. La instruccin que sigue a la instruccin Else slo se ejecuta cuando las
condiciones de todas las restantes instrucciones If y ElseIf son Falsas.
Sub Remuneracion()
Sueldo = Range("C4")
If Sueldo < 1500 Then
Aumento = Sueldo * 0.20
ElseIf Sueldo < 2000 Then
Aumento = Sueldo * 0.15
ElseIf Sueldo < 3000 Then
Aumento = Sueldo * 0.10
Else
Aumento = Sueldo * 0.05
End If
Range("C5") = Aumento
End Sub

Las instrucciones If...Then...Else se pueden anidar en tantos niveles como sea


necesario. Sin embargo, para hacer ms legible el cdigo quizs sea aconsejable
utilizar una instruccin Select Case en vez de recurrir a mltiples niveles de
instrucciones If...Then...Else anidadas.

26. La Instruccin While...Wend

Ejecuta una serie de instrucciones mientras una condicin dada sea True.
Sintaxis
While condicin
intrucciones
Wend

Donde:
condicin Requerido. Expresin numrica o expresin de cadena cuyo
valor es Verdadero o Falso. Si condicin es Null, condicin se
considera Falso.
instrucciones Opcional. Una o ms instrucciones que se ejecutan mientras la
condicin es Verdadera.

Si condicin es Verdadera, todas las instrucciones se ejecutan hasta que se encuentra la


instruccin Wend. Despus, el control vuelve a la instruccin While y se comprueba
de nuevo la condicin. Si la condicin es an Verdadera, se repite el proceso. Si no es
Verdadera, la ejecucin se reanuda con la instruccin que sigue a la instruccin Wend.
Los bucles While...Wend se pueden anidar a cualquier nivel. Cada Wend coincide con
el While ms reciente.
Nota.- A diferencia de While...Wend, la instruccin Do...Loop proporciona una manera ms
flexible y estructurada de realizar los bucles.

Elaborado por: Daniel Zegarra Zavaleta Pag. 66


Manual de Microsoft Excel Programacin VBA

La siguiente macro busca a partir de la celda B3 hacia abajo una celda que se
encuentre vaca.
Sub BuscaBlanco()
Range("B3").select
While ActiveCell <> Empty
ActiveCell.Offset(1,0).Activate
Wend
End Sub

27. La Instruccin For...Next

Repite un grupo de instrucciones un nmero especifico de veces.


Sintaxis
For contador = principio To fin Step incremento
instrucciones
Exit For
instrucciones
Next contador

Donde:

contador Requerido. Variable numrica que se utiliza como contador de


bucle. La variable no puede ser Booleana (Verdadero o Falso) ni
un elemento de matriz.
principio Requerido. Valor inicial del contador.
fin Requerido. Valor final del contador.
incremento Opcional. Cantidad en la que cambia el contador cada vez que
se ejecuta el bucle. Si no se especifica, el valor predeterminado
de incremento es uno.
instrucciones Opcional. Una o ms instrucciones entre For y Next que se
ejecutan un nmero especificado de veces.

El argumento incremento puede ser positivo o negativo. El valor del argumento


incremento determina la manera en que se procesa el bucle, como se muestra a
continuacin:

Valor El bucle se ejecuta si

Positivo o 0 contador <= fin

Elaborado por: Daniel Zegarra Zavaleta Pag. 67


Manual de Microsoft Excel Programacin VBA

Negativo contador >= fin

Una vez que se inicia el bucle y se han ejecutado todas las instrucciones en el bucle,
incremento se suma a contador. En este punto, las instrucciones del bucle se pueden
ejecutar de nuevo (si se cumple la misma prueba que caus que el bucle se ejecutara
inicialmente) o bien se sale del bucle y la ejecucin contina con la instruccin que
sigue a la instruccin Next.
Sugerencia Cambiar el valor de contador mientras est dentro de un bucle hace difcil
su lectura y depuracin.
Se pueden colocar en el bucle cualquier nmero de instrucciones Exit For como una
manera alternativa de salir del mismo. La instruccin Exit For, que se utiliza a menudo
en la evaluacin de alguna condicin (por ejemplo, If...Then), transfiere el control a la
instruccin que sigue inmediatamente a la instruccin Next.
Se pueden anidar bucles For...Next, colocando un bucle For...Next dentro de otro. Para
ello, proporcione a cada bucle un nombre de variable nico para su contador. La
siguiente construccin es correcta:
For Pais = 1 To 5
For Ciudad = 1 To 3
For Distrito = 1 To 10
...
...
Next Distrito
Next Ciudad
Next Pais

Nota-- Si omite mencionar un contador en una instruccin Next, la ejecucin contina como si este se
hubiera incluido. En cambio si se produce un error si se encuentra una instruccin Next antes
de su instruccin For correspondiente.

a. Como usar las instrucciones For...Next


Las instrucciones For...Next se pueden utilizar para repetir un bloque de instrucciones
un nmero determinado de veces. Los bucles For usan una variable contador cuyo
valor se aumenta o disminuye cada vez que se ejecuta el bucle.
El siguiente procedimiento hace que el equipo emita un sonido 50 veces. La
instruccin For determina la variable contador x y sus valores inicial y final. La
instruccin Next incrementa el valor de la variable contador en 1.
Sub Bips()
For x = 1 To 50
Beep
Next x
End Sub

Mediante la palabra clave Step, se puede aumentar o disminuir la variable contador en


el valor que se desee. En el siguiente ejemplo TotalPares, la variable contador N se

Elaborado por: Daniel Zegarra Zavaleta Pag. 68


Manual de Microsoft Excel Programacin VBA

incrementa en 2 cada vez que se repite la ejecucin del bucle. Cuando el bucle deja de
ejecutarse, Total representa la suma de 2, 4, 6, 8 y 10.
Sub TotalPares()
For Num = 2 To 10 Step 2
Total = Total + Num
Next Num
MsgBox "El total es " & Total
End Sub

Para disminuir la variable contador utilice un valor negativo en Step. Para disminuir la
variable contador es preciso especificar un valor final que sea menor que el valor
inicial. En el siguiente ejemplo OtroTotal, la variable contador Cant se disminuye en 2
cada vez que se repite el bucle. Cuando termina la ejecucin del bucle, Total
representa la suma de 16, 14, 12, 10, 8, 6, 4 y 2.
Sub OtroTotal()
For Cant = 16 To 2 Step -2
Total = Total + Cant
Next Cant
MsgBox "El total es " & total
End Sub

Nota.- En realidad no es necesario incluir el nombre de la variable contador despus de la


instruccin Next. En los ejemplos anteriores, el nombre de la variable contador se ha incluido
solo para facilitar la lectura del cdigo y poder identificar as donde empieza el bucle For y
donde termina. Esto de usar nombre del contador despus de la instruccin Next es de mayor
utilidad cuando existen varias instrucciones ForNext anidadas.

Se puede abandonar una instruccin For...Next antes de que el contador alcance su


valor final, para ello se utiliza la instruccin Exit For. Por ejemplo, si se produce un
error se puede usar la instruccin Exit For en el bloque de instrucciones Verdadero de
una instruccin If...Then...Else o Select Case que detecte especficamente ese error. Si
el error no se produce, la instruccin IfThenElse es False y el bucle continuar
ejecutndose normalmente.

28. La Instruccin Select Case

Ejecuta uno de varios grupos de instrucciones, dependiendo del valor de una expresin.
Sintaxis
Select Case expresin_prueba
Case lista_expresion-n
instrucciones-n...
Case Else
instrucciones_else
End Select

Elaborado por: Daniel Zegarra Zavaleta Pag. 69


Manual de Microsoft Excel Programacin VBA

Donde:
expresin_prueba Requerido. Es cualquier expresin numrica o expresin de
cadena.
lista_expresin-n Requerido si aparece la palabra clave Case. Lista delimitada por
comas de una o ms de las formas siguientes:
expresin,
expresin To expresin,
Is operador_de_comparacin expresin.
La palabra clave especifica un intervalo de valores. Si se utiliza
la palabra clave To, el valor menor debe aparecer antes de To.
Utilice la palabra clave Is con operadores de comparacin para
especificar un intervalo de valores. Si no se escribe, la palabra
clave Is se insertar automticamente.
instrucciones-n Opcional. Una o ms instrucciones ejecutadas si
expresin_prueba coincide con cualquier parte de
lista_expresin-n.
instrucciones_else Opcional. Una o ms instrucciones que se ejecuten si
expresin_prueba no coincide con ninguna de las clusulas
Case.

Si expresin_prueba coincide con cualquier lista_expresin asociada con una clusula


Case, las instrucciones que siguen a esa clusula Case se ejecutan hasta la siguiente
clusula Case o, para la ltima clusula, hasta la instruccin End Select. El control
pasa despus a la instruccin que sigue a End Select. Si expresin_prueba coincide con
una expresin de lista_expresin en ms de una clusula Case, slo se ejecutan las
instrucciones que siguen a la primera coincidencia.
La clusula Case Else se utiliza para indicar las instrucciones que se van a ejecutar si
no se encuentran coincidencias entre expresin_prueba y una lista_expresin en
cualquiera de las otras selecciones de Case. Aunque no es necesario, es buena idea
tener una instruccin Case Else en el bloque Select Case para controlar valores
imprevistos de expresin_prueba. Cuando no hay una instruccin Case Else y ninguna
expresin de la lista en las clusulas Case coincide con la expresin de prueba, la
ejecucin contina en la instruccin que sigue a End Select.
Se pueden utilizar expresiones mltiples o intervalos en cada clusula Case. Por
ejemplo, la lnea siguiente es vlida:

Case 1 To 4, 7 To 9, 11, 17, Is > Grande

Nota.- El operador de comparacin Is no es lo mismo que la palabra clave Is utilizada en la


instruccin Select Case.

Elaborado por: Daniel Zegarra Zavaleta Pag. 70


Manual de Microsoft Excel Programacin VBA

Tambin puede especificar intervalos y expresiones mltiples para cadenas de


caracteres. En el siguiente ejemplo, Case coincide con las cadenas que son
exactamente carnes, cadenas que estn entre nueces y sopa en orden alfabtico y el
valor actual de la variable Fruta

Case "carnes", "nueces" To "sopa", Fruta

Las instrucciones Select Case se pueden anidar. Cada instruccin Select Case debe
tener su correspondiente instruccin End Select.

a. Como usar la instruccion Select Case


La instruccin Select Case se utiliza como alternativa a las instrucciones ElseIf en
instrucciones If...Then...Else cuando se compara una expresin con varios valores
diferentes. Mientras que las instrucciones If...Then...Else pueden comparar una
expresin distinta para cada instruccin ElseIf, la instruccin Select Case compara
nicamente la expresin que evala al comienzo de la estructura de control.
En el siguiente ejemplo, la instruccin Select Case evala el argumento rendimiento
que se pasa al procedimiento. Observe que cada instruccin Case puede contener ms
de un valor, una gama de valores, o una combinacin de valores y operadores de
comparacin. La instruccin opcional Case Else se ejecuta si la instruccin Select Case
no encuentra ninguna igualdad con los valores de la instrucciones Case.

Sub Pago()
Sueldo = Range("C4")
Select Case Sueldo
Case Is <1500
Aumento = Sueldo * 0.20
Case Is <2000
Aumento = Sueldo * 0.15
Case Is <3000
Aumento = Sueldo * 0.10
Case 3000 To 4000
Aumento = Sueldo * 0.05
Case Else
Aumento = 0
End Select
Range("C5") = Aumento
End Sub

29. La Instruccin Do...Loop

Repite un bloque de instrucciones cuando una condicin es Verdadera o hasta que una
condicin se convierta en Falsa.
Sintaxis

Elaborado por: Daniel Zegarra Zavaleta Pag. 71


Manual de Microsoft Excel Programacin VBA

Do While | Until condicin


instrucciones
Exit Do
instrucciones
Loop
O bien, puede utilizar esta sintaxis:
Do
instrucciones
Exit Do
instrucciones
Loop While | Until condicin

Donde:
condicin Opcional. Expresin numrica o expresin de cadena que es
Verdadera o Falsa. Si la condicin es Null, la condicin se
considera Falsa.
Instrucciones Una o ms instrucciones que se repiten mientras (While) o hasta
que (Until) la condicin sea Verdadera.

Se puede utilizar cualquier nmero de instrucciones Exit Do ubicadas en cualquier


lugar dentro de una estructura de control DoLoop, para proporcionar una salida
alternativa de un DoLoop. La instruccin Exit Do se utiliza frecuentemente en la
evaluacin de alguna condicin, por ejemplo, IfThen; en este caso, la instruccin
Exit Do transfiere el control a la instruccin que sigue inmediatamente a la instruccin
Loop.
Cuando se utiliza con instrucciones anidadas DoLoop, la instruccin Exit Do
transfiere control al bucle que est anidado un nivel por encima del bucle donde
ocurre.

a. Como usar las instrucciones Do...Loop


Se pueden usar instrucciones Do...Loop para ejecutar un bloque de instrucciones un
nmero indefinido de veces. Las instrucciones se repiten mientras (While) una
condicin sea Verdadera o hasta (Until) que llegue a ser Verdadera.

b. Repetir instrucciones mientras una condicin es Verdadera


Hay dos formas de utilizar la palabra clave While (Mientras) para comprobar el estado
de una condicin en una instruccin Do...Loop. Se puede comprobar la condicin antes
de entrar en el bucle, o despus de que el bucle se haya ejecutado al menos una vez.
En el siguiente procedimiento WhileInicial, la condicin se comprueba antes de entrar
en el bucle. Mientras la Nota es menor a que 10, aumentar la Nota en 1.Si Nota es

Elaborado por: Daniel Zegarra Zavaleta Pag. 72


Manual de Microsoft Excel Programacin VBA

mayor que 10, las instrucciones contenidas en el bucle no se ejecutarn nunca. En el


procedimiento WhileFinal, las instrucciones contenidas en el bucle al menos se
ejecutarn una vez y aumentarn la Nota en 1, antes de comprobarse que la condicin
es Falsa.

Sub WhileInicial()
Contador = 0
Nota = Range("D4")
Do While Nota < 10
Nota = Nota + 1
Contador = contador + 1
Loop
MsgBox "El bucle se ha repetido " & Contador & " veces."
End Sub

Sub WhileFinal()
Contador = 0
Nota = Range("D4")
Do
Nota = Nota + 1
Contador = contador + 1
Loop While Nota < 10
MsgBox "El bucle se ha repetido " & Contador & " veces."
End Sub

c. Para repetir instrucciones hasta que una condicin llegue a


ser Verdadera
Hay dos formas de utilizar la palabra clave Until (Hasta que) para comprobar el estado
de una condicin en una instruccin Do...Loop. Se puede comprobar la condicin antes
de entrar en el bucle (como muestra el procedimiento UntilInicial) o se pueden
comprobar despus de que el bucle se haya ejecutado al menos una vez (como muestra
el procedimiento UntilFinal). El bucle seguir ejecutndose mientras la condicin siga
siendo Falsa.
Sub UntilInicial()
Contador = 0
Nota = Range("D4")
Do Until Nota = 10
Nota = Nota + 1
Contador = Contador + 1
Loop
MsgBox "El bucle se ha repetido " & Contador & " veces."
End Sub

Sub UntilFinal()
Contador = 0
Nota = Range("D4")
Do
Nota = Nota + 1
Contador = Contador + 1
Loop Until Nota = 10
MsgBox "El bucle se ha repetido " & Contador & " veces."
End Sub

Elaborado por: Daniel Zegarra Zavaleta Pag. 73


Manual de Microsoft Excel Programacin VBA

d. Para salir de Do...Loop desde dentro del bucle


Es posible salir de Do...Loop usando la instruccin Exit Do. Por ejemplo, para salir de
un bucle sin fin, se puede usar la instruccin Exit Do en el bloque de instrucciones
True de una instruccin If...Then...Else o Select Case. Si la condicin es False, el bucle
seguir ejecutndose normalmente.
En el siguiente ejemplo, si se asigna a Edad un valor que crea un bucle sin fin, por
ejemplo si la Edad escrita en D4 es menor que 25. La instruccin If...Then...Else
comprueba esa condicin y ejecuta entonces la salida, evitando as el bucle sin fin.
Sub EjemploSalida()
Contador = 0
Edad = Range("E4")
Do Until Edad = 25
Edad = Edad - 1
Contador = contador + 1
If Edad < 25 Then Exit Do
Loop
MsgBox "El bucle se ha repetido " & Contador & " veces."
End Sub

Nota.- Para detener manualmente la ejecucin de un bucle sin fin que se repite sin control, presione
la tecla Esc o la combinacin de teclas Ctrl+Pausa.

30. La instruccin For Each...Next

Repite un grupo de instrucciones para cada elemento de una matriz o coleccin.


Sintaxis
For Each elemento In grupo
instrucciones
Exit For
instrucciones
Next elemento

Donde:
elemento Requerido. Variable que se utiliza para iterar por los elementos
del conjunto o matriz. Para conjuntos, elemento solamente
puede ser una variable del tipo Variant, una variable de objeto
genrica o cualquier variable de objeto especfica.
grupo Requerido. Nombre de un conjunto de objetos o de una matriz .
instrucciones Opcional. Una o ms instrucciones que se ejecutan para cada
elemento de un grupo.

Elaborado por: Daniel Zegarra Zavaleta Pag. 74


Manual de Microsoft Excel Programacin VBA

La entrada al bloque For Each se produce si hay al menos un elemento en grupo. Una
vez que se ha entrado en el bucle, todas las instrucciones en el bucle se ejecutan para el
primer elemento en grupo. Despus, mientras haya ms elementos en grupo, las
instrucciones en el bucle continan ejecutndose para cada elemento. Cuando no hay
ms elementos en el grupo, se sale del bucle y la ejecucin contina con la instruccin
que sigue a la instruccin Next.
Se pueden colocar en el bucle cualquier nmero de instrucciones Exit For. La
instruccin Exit For se utiliza a menudo en la evaluacin de alguna condicin (por
ejemplo, If...Then) y transfiere el control a la instruccin que sigue inmediatamente a
la instruccin Next.
Puede anidar bucles For Each...Next, colocando un bucle For Each...Next dentro de
otro. Sin embargo, cada elemento del bucle debe ser nico.

Nota.- Si se omite el nombre del elemento en una instruccin Next, la ejecucin contina como si se
hubiera incluido. En cambio si se encuentra una instruccin Next antes de su instruccin For
correspondiente, se producir un error.

a. Como usar las instrucciones For Each...Next


Las instrucciones For Each...Next repiten un bloque de instrucciones para cada uno de
los objetos de una coleccin o para cada elemento de una matriz. Visual Basic asigna
valor automticamente a una variable cada vez que se ejecuta el bucle.

b. Para recorrer un conjunto de elementos


Se puede usar el bucle For Each...Next para recorrer las celdas pertenecientes a un
rango determinado.
El siguiente ejemplo borra todas las celdas cuyo valor es cero dentro del rango
previamente seleccionado. (La palabra Celda es el nombre que representa a cada
elemento del rango. Puede usarse cualquier otro nombre si se desea.)
Sub BorraCeros()
For Each Celda In Selection
If Celda=0 Then Celda.ClearContents
Next
End Sub

El siguiente ejemplo vuelve negrita todas aquellas celdas dentro del rango C4:C20 que
sean mayores que 10.
Sub Negrita()
For Each Casilla In Range("C4:C20")
If Casilla > 10 Then Casilla.Font.Bold = True
Next
End Sub

El cdigo siguiente recorre todas las celdas de un rango, asignado a la variable Cuadro
con la instruccin Set, e introduce el valor de la variable P en aquellas celdas cuyos
contenidos son menores o iguales a 10.

Elaborado por: Daniel Zegarra Zavaleta Pag. 75


Manual de Microsoft Excel Programacin VBA

Sub Escribe()
P = Range("B1")
Set Cuadro = Range("C4:C20")
For Each Cel In Cuadro
If Cel <= 10 Then Cel.Value = P
Next
End Sub

El siguiente ejemplo recorre las celdas del rango B3:B15 y convierte cualquier valor
absoluto menor de 0.01 en 0 (cero).
Sub ValeCero()
Set Lecturas = Range("B3:B15")
For Each Dato in Lecturas
If Abs(Dato.Value) < 0.01 Then Dato.Value = 0
Next
End Sub

El siguiente procedimiento cierra todos los formularios excepto el que contiene al


procedimiento que se est ejecutando.

Sub CierraFormularios()
For Each Ficha In Application.Forms
If Ficha.Caption <> Screen.ActiveForm.Caption Then Ficha.Close
Next
End Sub

Este otro ejemplo agrega tantas hojas nuevas al libro activo como textos hay en el
rango B1:B5, y a continuacin nombra a estas hojas con los textos que va encontrando.
Sub CreaHojas()
For Each Nombre In Range("B1:B5")
If Nombre <> Empty Then
Set NewSheet = Worksheets.Add
NewSheet.Name = Nombre
End If
Next
End Sub

Elaborado por: Daniel Zegarra Zavaleta Pag. 76


Manual de Microsoft Excel Programacin VBA

Este ltimo ejemplo muestra el nombre de cada una de las hojas de clculo del libro
activo.
Sub VerHojas()
For Each Hoja In Worksheets
MsgBox Hoja.Name
Next
End Sub

c. Para salir de un bucle For Each...Next antes de que finalice


Se puede salir de un bucle For Each...Next mediante la instruccin Exit For.
El siguiente ejemplo detecta la primera celda del rango C3:C30 que no contiene un
nmero. Si se encuentra una celda en esas condiciones, se selecciona dicha celda y se
presenta un mensaje en pantalla, luego Exit For abandona el bucle.

Sub EncuentraTexto()
For Each Celda In Range("C3:C30")
If Not IsNumeric(Celda) Then
Celda.Select
MsgBox "El objeto contiene un valor no numrico."
Exit For
End If
Next
End Sub

31. La instruccin With

Ejecuta una serie de instrucciones sobre un nico objeto.


Sintaxis
With objeto
instrucciones
End With
Donde:
objeto Requerido. Nombre de un objeto.
instrucciones Opcional. Una o ms instrucciones que se van a ejecutar sobre
el objeto.

La instruccin With permite realizar una serie de instrucciones sobre un objeto


especificado sin volver a calificar el nombre del objeto. Por ejemplo, para cambiar un
nmero de propiedades diferentes en un nico objeto, es ms conveniente colocar las
instrucciones de asignacin de las propiedades en la estructura de control With,

Elaborado por: Daniel Zegarra Zavaleta Pag. 77


Manual de Microsoft Excel Programacin VBA

haciendo referencia al objeto una vez, en lugar de hacerlo con cada asignacin de
propiedad.

a. Como usar las instrucciones With


La instruccin With permite especificar una vez un objeto o tipo definido por el
usuario en una serie entera de instrucciones. Las instrucciones With aceleran la
ejecucin de los procedimientos y ayudan a evitar el tener que escribir repetidas veces
las mismas palabras.
El siguiente ejemplo introduce en un rango de celdas el nmero 30, aplica a esas celdas
un formato en negrita y hace que su color de fondo sea el amarillo.
Si se deseara seleccionar la celda A1 de la Hoja2 y luego modificar en ella lo
siguiente;
Ancho de columna = 50
Altura de fila = 20
Letra negrita
Tamao de fuente 20 puntos
Color de fuente Roja
Centrado en la celda
Podramos escribir las siguientes instrucciones:
Sub Titulo()
Worksheets("Hoja2").Range("A1").Select
Selection.ColumnWidth = 50
Selection.RowHeight = 20
Selection.Font.Bold = True
Selection.Size = 20
Selection.Font.ColorIndex = 3
Selection.HorizontalAlignment = xlCenter
End Sub

El siguiente ejemplo realiza lo mismo que el caso anterior e ilustra el uso de la


instruccin With para asignar valores a varias propiedades del mismo objeto.
Sub Titulo()
Range("A1").Select
With Selection
.ColumnWidth = 50
.RowHeight = 20
.Font.Bold = True
.Size = 20
.Font.ColorIndex = 3
.HorizontalAlignment = xlCenter
End With
End Sub

Nota Una vez que se ha entrado en un bloque With no es posible cambiar el objeto. Por tanto, no
puede utilizar una nica instruccin With para varios objetos.

Elaborado por: Daniel Zegarra Zavaleta Pag. 78


Manual de Microsoft Excel Programacin VBA

Nota En general, no es aconsejable que salte hacia dentro o hacia fuera de bloques With. Si se
ejecutan instrucciones en bloques With, sin que se ejecuten las instrucciones With o End
With conserva en memoria una variable temporal que contiene una referencia al objeto
hasta que se salga del procedimiento.

Aqu otro ejemplo del uso de With:


Sub RangoFormato()
With Worksheets("Clientes").Range("A1:C10")
.Value = 30
.Font.Bold = True
.Interior.Color = RGB(255, 255, 0)
End With
End Sub
Las instrucciones With se pueden anidar para aumentar su eficiencia.
El siguiente ejemplo inserta una formula en la celda C4 que obtiene la raz cuadrada de
200 y selecciona a continuacin el tipo de letra. Luego modifica el ancho de la
columna. (Note que se especifica que C4 se encuentra dentro de la hoja Clientes del
archivo Pagos.xls. De no hacerse as la macro supondra que se trata de la celda C4 de
la hoja y libro activos en ese instante.)

Sub RaizCuadrada()
With Workbooks("Pagos.xls").Worksheets("Clientes").Range("C4")
.Formula = "=SQRT(200)"
With .Font
.Name = "Arial"
.Bold = True
.Size = 8
End With
.ColumnWidth = 20
End With
End Sub

Elaborado por: Daniel Zegarra Zavaleta Pag. 79


Manual de Microsoft Excel Programacin VBA

32. Creacin de formularios userforms

a. Para crear un formulario


Al igual como se inserta una hoja de mdulo para escribir en ella las macros, tambien
se puede insertar una hoja de formulario para disenar en ella las ventanas de
formulario. Solo tiene que seguir las siguientes instruciones:
1. Ingresar al Editor de Visual Basic y elegir el men Insertar/Userform. Se crear un
formulario llamado UserForm1, tal como se muestra en la figura:

Escriba el Nombre del


formulario

Escriba el Ttulo del


formulario

2. En la ventana Propiedades, escribir en la propiedad (Name): Alumnos, y en la


propiedad Caption escriba: Ficha del Alumno.

b. Para disear un formulario


Una vez creado el formulario lo siguiente es disear los elementos dentro del
formulario. Para ello es necesario habilitar el cuadro de herramientas, para lo cual
deber hacer clic en el boton

Elaborado por: Daniel Zegarra Zavaleta Pag. 80


Manual de Microsoft Excel Programacin VBA

El cuadro de herramientas contiene una serie de controles de, cada uno de los cuales
cumplen una funcin especial una vez que se insertan dentro del formulario.

Controles para formularios del cuadro de herramientas:

Seleccionar Cuadro de texto B.de opcin Pgina Imagen


objetos mltiple
Cuadro de lista B.de alternar Botn de
Barra de nmero
Etiqueta Cuadro combinado Marco tabulaciones
Barra de
Cuadro de texto B.de comando desplazamiento

Como agregar un control al formulario


Utilice cualquiera de los siguientes mtodos para agregar un control del Cuadro de
herramientas al formulario.
Haga clic en un control en el Cuadro de herramientas y despus haga clic en el
formulario. El control aparecer en su tamao predeterminado. Luego puede
arrastrar el control para cambiar su tamao.
Arrastre un control del Cuadro de herramientas al formulario. El control
aparecer en su tamao predeterminado.
Haga doble clic en el control del Cuadro de herramientas y despus haga clic
en el formulario una vez por cada control que desee crear. Por ejemplo, para
crear cuatro botones de comando, haga doble clic en el control
CommandButton del Cuadro de herramientas y despus haga clic cuatro veces
en el formulario.

Ejercicio N 8 - Llenar un Registro de alumnos

Elaborado por: Daniel Zegarra Zavaleta Pag. 81


Manual de Microsoft Excel Programacin VBA

En este ejemplo se usar un formulario para ingresar datos de varios alumnos en una
lista de Excel.

1. En una hoja de Excel escriba el siguiente Registro de alumnos:

2. Seleccionar el rango A3:F6 y presionar Ctrl+Q para convertir el rango en tabla.


3. Seleccionar el rango A3:F6 y elegir la Ficha Frmulas/Crear desde la seleccin,
marque solo la casilla Fila superior, y Aceptar.
4. Con la Ficha Insertar/Formas/Rectngulo, dibuje el botn Abrir Ficha.
5. Al rango A3:F6 dele el nombre LISTA.
6. Ingrese al Editor de Visual Basic, e inserte una hoja de Mdulo (men
Insertar/Mdulo), y un Formulario (men Insertar/UserForm).
7. En la hoja de Mdulo escriba la siguiente subrutina:
Sub FichaAlumno()
Alumnos.Show
End Sub

8. En la ventana de formulario disee el siguiente formulario:

9. Seleccione el formulario y dele las siguientes propiedades:


(Name) : Alumnos

Elaborado por: Daniel Zegarra Zavaleta Pag. 82


Manual de Microsoft Excel Programacin VBA

Caption : Ficha del Alumno


10. Luego defina las siguientes propiedades de los controles en el formulario:
Cuadro combinado:
(Name) : Codigo
RowSource : Codigo
Tab index :1
Cuadro de texto1:
(Name) : Nombre
Tab index :2
Cuadro de texto2:
(Name) : Apellidos
Tab index :3
Cuadro de texto3:
(Name) : Edad
Tab index :4
Cuadro de texto4:
(Name) : Telefono
Tab index :5
Botn de opcin1:
(Name) : Masculino
Botn de opcin2:
(Name) : Femenino
Image1:
(Name) : Foto
PictureSizeMode : 1 - fmPictureSizeModeStretch
CommandButton1:
(Name) : Registrar
CommandButton2:
(Name) : Cerrar
CommandButton3:
(Name) : Nuevo
Luego, haciendo doble clic sobre los siguientes controles escriba para ellos el siguiente
cdigo:
Para el botn Cerrar:
Private Sub Cerrar_Click()

Elaborado por: Daniel Zegarra Zavaleta Pag. 83


Manual de Microsoft Excel Programacin VBA

Unload Me
End Sub

Para el cuadro combinado Codigo:


Private Sub Codigo_Change()
Ruta = ActiveWorkbook.Path
Codigo = UCase(Codigo)
Nombre = ""
Apellido = ""
Edad = ""
Telefono = ""
Masculino = False
Femenino = False
If Len(Codigo) = 4 Then
On Error GoTo SinFoto
Nombre = Application.WorksheetFunction.VLookup(Codigo, _
Range("Lista"), 2, 0)
Apellido = Application.WorksheetFunction.VLookup(Codigo, _
Range("Lista"), 3, 0)
Edad = Application.WorksheetFunction.VLookup(Codigo, _
Range("Lista"), 4, 0)
Sexo = Application.WorksheetFunction.VLookup(Codigo, _
Range("Lista"), 5, 0)
If Sexo = "M" Then Masculino = True
If Sexo = "F" Then Femenino = True
Telefono = Application.WorksheetFunction.VLookup(Codigo, _
Range("Lista"), 6, 0)
Foto.Visible = True
Foto.Picture = LoadPicture(Ruta & "\" & Codigo & ".jpg")
Else
Foto.Visible = False
End If
Exit Sub
SinFoto:
Foto.Visible = False
End Sub

Para el botn Nuevo (New):


Private Sub Nuevo_Click()
Range("Codigo").Select
While ActiveCell <> Empty
ActiveCell.Offset(1, 0).Select
Wend
ActiveCell.Offset(-1, 0).Select
Codigo = "A" & Right("00" & Val(Right(ActiveCell, 3)) + 1, 3)
Nombre.SetFocus
End Sub

Para el botn Registrar:


Private Sub Registrar_Click()
If Codigo = "" Then Codigo.SetFocus: Exit Sub
If Nombre = "" Then Nombre.SetFocus: Exit Sub
Range("Codigo").Select

Elaborado por: Daniel Zegarra Zavaleta Pag. 84


Manual de Microsoft Excel Programacin VBA

ActiveCell.Select
While ActiveCell <> Empty
If ActiveCell = Codigo Then
Rpta = MsgBox("Alumno ya existe desea reemplazarlo?", _
vbYesNo)
If Rpta = vbYes Then GoTo Sigue
Exit Sub
End If
ActiveCell.Offset(1, 0).Select
Wend
Sigue:
If Masculino Then Sexo = "M"
If Femenino Then Sexo = "F"
ActiveCell = Codigo
ActiveCell.Offset(0, 1) = Nombre
ActiveCell.Offset(0, 2) = Apellido
ActiveCell.Offset(0, 3) = Val(Edad)
ActiveCell.Offset(0, 4) = Sexo
ActiveCell.Offset(0, 5) = Telefono
MsgBox ("Alumno registrado con exito")
Range("Codigo").Select
While ActiveCell <> Empty
ActiveCell.Offset(1, 0).Select
Wend
ActiveCell.Offset(-1, 0).Select
Codigo = "A" & Right("00" & Val(Right(ActiveCell, 3)) + 1, 3)
Nombre = ""
Apellido = ""
Edad = ""
Telefono = ""
Masculino = False
Femenino = False
Nombre.SetFocus
End Sub

Para el Formulario:
Private Sub UserForm_Initialize()
Range("Codigo").Select
While ActiveCell <> Empty
ActiveCell.Offset(1, 0).Select
Wend
ActiveCell.Offset(-1, 0).Select
Codigo = "A" & Right("00" & Val(Right(ActiveCell, 3)) + 1, 3)
Nombre.SetFocus
Foto.Visible = False
End Sub

11. Luego regrese a la hoja de Excel y asigne la macro FichaAlumno al botn Abrir
Ficha.
12. Finalmente guarde el archivo como un libro habilitado para macros y pngale el
nombre Registro de alumnos.

Elaborado por: Daniel Zegarra Zavaleta Pag. 85


Manual de Microsoft Excel Programacin VBA

13. En la misma carpeta donde guarde el anterior archivo de Excel, deber guardar
tambin los archivos con formato jpg que contengan las fotos de los alumnos, los
cuales debern tener nombres como: A001.jpg, A002.jpg, etc.

33. Objetos, Colecciones, Mtodos, Propiedades, y


Eventos
Un Objeto representa un elemento de una aplicacin, como una hoja de clculo, una
celda, una columna, un grafico, un formulario o un dibujo. En cdigo de Visual Basic, un
objeto debe identificarse antes de que se pueda aplicar uno de los mtodos del objeto o
cambiar el valor de una de sus propiedades.
Una Coleccin es un objeto que contiene varios objetos que normalmente, pero no
siempre, son del mismo tipo. En Microsoft Excel, por ejemplo, el objeto Worksheets
contiene todas las hojas Worksheet de un libro. En Visual Basic, la coleccin Forms
contiene todos los objetos Form existentes en la aplicacin Excel.
Los elementos de una coleccin se pueden identificar mediante su nmero o su nombre.
Por ejemplo, Woksheets(1) identifica al primer objeto Worksheet de un libro. El siguiente
procedimiento ocultado la Hoja1 del libro actual.
Sub OcultaHoja()
Worksheets(1).Visible = False
End Sub

El siguiente procedimiento utiliza un nombre especificado como cadena de texto para


identificar un objeto Form.
Sub CierraFormulario()
Forms("MiForm.frm").Close
End Sub

Tambin es posible operar al mismo tiempo sobre toda una coleccin de objetos siempre
que los objetos compartan mtodos comunes. Por ejemplo, el siguiente procedimiento
cierra todos los formularios abiertos.
Sub CierraTodosLosFormularios()
Forms.Close
End Sub

Mtodo es toda accin que puede realizar un objeto. Por ejemplo, Add es un mtodo del
objeto ComboBox ya que sirve para aadir un nuevo elemento a un cuadro combinado.
El siguiente procedimiento utiliza el mtodo Add para aadir dos elementos a un
ComboBox.
Sub AadeElementos()
Combo1.AddItem "Masculino"
Combo1.AddItem "Femenino"
End Sub

Elaborado por: Daniel Zegarra Zavaleta Pag. 86


Manual de Microsoft Excel Programacin VBA

Propiedad es uno de los atributos de un objeto, que define una de las caractersticas del
objeto, tal como su tamao, color o localizacin en la pantalla, o un aspecto de su
comportamiento, por ejemplo si est visible o activado. Para cambiar las caractersticas de
un objeto, se cambia el valor de sus propiedades.
Para dar valor a una propiedad, hay que colocar un punto despus de la referencia a un
objeto, despus el nombre de la propiedad y finalmente el signo igual (=) y el nuevo valor
de la propiedad. Por ejemplo, el siguiente procedimiento cambia el ttulo de un formulario
de Visual Basic dando un valor a la propiedad Caption.
Sub CambiaTitulo()
miFormulario.Caption = "Datos del Cliente"
End Sub

Hay propiedades a las que no se puede dar valor. El tema de ayuda de cada propiedad
indica si es posible leer y dar valores a la propiedad (lectura/escritura), leer slo el valor de
la propiedad (slo lectura) o slo dar valor a la propiedad (slo escritura).

Tambin se puede obtener informacin sobre un objeto devolviendo (extrayendo) el valor


de una de sus propiedades. El siguiente procedimiento utiliza un cuadro de dilogo para
presentar el ttulo que aparece en la parte superior del formulario activo en ese momento.
Sub MuestraTitulo()
Titulo = Screen.ActiveForm.Caption
MsgBox Titulo
End Sub

Evento es toda accin que puede ser reconocida por un objeto, como puede ser el clic del
mouse o la pulsacin de una tecla y para la que es posible escribir cdigo como respuesta.
Los eventos pueden ocurrir como resultado de una accin del usuario o del cdigo del
programa, tambin pueden ser originados por el sistema.
El siguiente procedimiento escrito en el cdigo de la Hoja1, establece el zoom al 75% y
selecciona la celda A1. Esto ocurrir cuando se produzca el evento de activar la Hoja1.
Private Sub Worksheet_Activate()
ActiveWindow.Zoom = 75
Range("A1").select
End Sub

Elaborado por: Daniel Zegarra Zavaleta Pag. 87


Manual de Microsoft Excel Programacin VBA

34. Declarar constantes


Al declarar una constante, se puede asignar a un valor un nombre que tenga algn
significado apropiado. La instruccin Const se utiliza para declarar una constante y darle
valor. Una constante no puede modificarse o cambiar de valor una vez que ha sido
declarada.
Se puede declarar una constante dentro de un procedimiento o al principio de un mdulo,
en la seccin de Declarations. Las constantes a nivel de mdulo son privadas, a menos que
se especifique lo contrario. Para declarar una constante pblica a nivel de mdulo, la
instruccin Const debe ir precedida por la palabra clave Public. Se puede declarar
explcitamente una constante como privada colocando la palabra clave Private antes de la
instruccin Const para facilitar la lectura y comprensin del cdigo. Si desea ms
informacin, consulte la seccin "Comprender el alcance y la visibilidad" en la Ayuda de
Visual Basic.
El siguiente ejemplo declara la constante Public EdadCon como un Integer y le asigna el
valor 34.
Public Const EdadCon As Integer = 34
Las constantes se pueden declarar de uno de los siguientes tipos de datos: Boolean, Byte,
Integer, Long, Currency, Single, Double, Date, String, o Variant. Dado que ya se conoce
el valor de una constante, es muy fcil elegir el tipo de datos en la instruccin Const. Si
desea ms informacin sobre tipos de datos, consulte la seccin "Tipo de datos Summary"
en la Ayuda de Visual Basic.
En una sola instruccin se pueden declarar varias constantes. Para especificar un tipo de
datos, debe incluirse el tipo de datos para cada constante. En la siguiente instruccin se
declaran como Integer y Currency a las constantes EdadCon y SalarioCon.
Const EdadCon As Integer = 34, SalarioCon As Currency = 35000

Comprender la sintaxis de Visual Basic


En la seccin de Ayuda de Visual Basic correspondiente a un mtodo, instruccin o
procedimiento Function la sintaxis muestra todos los elementos necesarios para utilizar
correctamente ese mtodo, instruccin o funcin. Los ejemplos siguientes explican cmo
deben interpretarse los elementos sintcticos ms comunes.

Sintaxis del mtodo Activate

objeto.Activate

En la sintaxis del mtodo Activate, la palabra "objeto" en cursiva es la posicin reservada


para la informacin que introduce el usuario en este caso, cdigo que devuelve un
objeto. Las palabras que se muestran en negrita deben escribirse exactamente tal y como
se indica. Por ejemplo, el siguiente procedimiento activa la segunda ventana en el
documento activo.
Sub Activar()
Windows(2).Activate
End Sub

Elaborado por: Daniel Zegarra Zavaleta Pag. 88


Manual de Microsoft Excel Programacin VBA

Sintaxis de la funcin MsgBox

MsgBox(texto[, botones] [, ttulo] [, archivoayuda, contexto])

En la sintaxis de la funcin MsgBox, las palabras en cursiva y negrita son argumentos con
nombre de la funcin. Los argumentos que aparecen entre corchetes son opcionales. (No
escriba los corchetes en el cdigo de Visual Basic). En el caso de la funcin MsgBox, el
nico argumento que se debe incluir es el texto de la pregunta.
Los argumentos para funciones y mtodos se pueden especificar en el cdigo mediante su
posicin o por su nombre. Para especificar argumentos mediante su posicin, siga el orden
que se indica en la sintaxis, separando los argumentos con una coma, por ejemplo:
MsgBox "Su respuesta es correcta!",0,"Cuadro de Respuesta"
Para especificar un argumento mediante su nombre basta con usar el nombre del
argumento seguido de dos puntos y un signo igual (:=) y el valor del argumento. Los
argumentos con nombre se pueden especificar en cualquier orden, por ejemplo:
MsgBox Title:="Cuadro de Respuesta", Prompt:="Su respuesta es correcta!"
La sintaxis de las funciones y algunos mtodos muestran los argumentos entre parntesis.
Estas funciones y mtodos devuelven valores, por eso deben encerrarse los argumentos
entre parntesis al asignar un valor a una variable. Si se ignora el valor de retorno o si no
se pasan argumentos en forma alguna, no deben incluirse los parntesis. Los mtodos que
no devuelven valores no necesitan que sus argumentos aparezcan encerrados entre
parntesis. Estas normas son aplicables tanto si se usan argumentos posicionales o
nominativos.
En el siguiente ejemplo, el valor que devuelve la funcin MsgBox es un nmero que
indica el botn seleccionado almacenado en la variable miVar. Dado que se utiliza el valor
que devuelve la funcin, es preciso utilizar parntesis. Otro cuadro de mensaje presenta
entonces en pantalla el valor de la variable.
Sub Pregunta()
miVar = MsgBox(Prompt:="Me gusta mi trabajo.", _
Title:="Cuadro de respuesta", Buttons:="4")
MsgBox miVar
End Sub

Sintaxis de la instruccin Option

Option Compare {Binary | Text | Database}

En la sintaxis de la instruccin Option Compare, las llaves y la lnea vertical indican una
eleccin obligatoria entre tres opciones. (No escriba las llaves en la instruccin de Visual
Basic).
Por ejemplo, en Visual Basic al comparar dos textos se tienen en cuenta las maysculas y
minsculas, pero si se escribe la siguiente instruccin en el rea de declaraciones dentro
del mdulo (antes de todas las subrutinas) entonces las cadenas de texto que se comparen
no importan ya si se escriben en maysculas o minsculas.
Option Compare Text

Sintaxis de la instruccin Dim

Elaborado por: Daniel Zegarra Zavaleta Pag. 89


Manual de Microsoft Excel Programacin VBA

Dim nombrevariable[([subscriptos])] [As tipo] [, nombrevariable[([subscriptos])] [As tipo]] .


..

En la sintaxis de la instruccin Dim, la palabra Dim es una palabra clave exigida. El nico
elemento necesario es nombrevariable (el nombre de la variable). Por ejemplo, la siguiente
instruccin crea tres variables: miVar, siguienteVar y terceraVar. Estas variables se
declaran automticamente como Variant.
Dim miVar, siguienteVar, terceraVar
El siguiente ejemplo declara una variable como String. Al incluir un tipo de datos se
ahorra memoria y se pueden evitar errores en el cdigo.
Dim miRespuesta As String
Para declarar varias variables en una instruccin, debe incluirse el tipo de datos para cada
variable. Las variables declaradas sin un tipo de datos se declaran automticamente como
Variant.
Dim x As Integer, y As Integer, z As Integer
En la siguiente instruccin, a x e y se les asigna el tipo de datos Variant. Slo a z se le
asigna el tipo de datos Integer.
Dim x, y, z As Integer
Si se declara una variable matriz, deben incluirse los parntesis. Los subscriptos son
opcionales. La siguiente instruccin define las dimensiones de una matriz dinmica,
miMatriz.
Dim miMatriz()

35. Declarar variables


Para declarar variables se utiliza normalmente una instruccin Dim. La instruccin de
declaracin puede incluirse en un procedimiento para crear una variable de nivel de
procedimiento. O puede colocarse al principio de un mdulo, en la seccin Declarations,
para crear una variable de nivel de mdulo.
El siguiente ejemplo crea la variable NombreTexto y especficamente le asigna el tipo de
datos String.
Dim NombreTexto As String
Si esta instruccin aparece dentro de un procedimiento, la variable NombreTexto se puede
usar slo en ese procedimiento. Si la instruccin aparece en la seccin Declarations del
mdulo, la variable NombreTexto estar disponible en todos los procedimientos dentro del
mdulo, pero no para los restantes mdulos del proyecto. Para hacer que esta variable est
disponible para todos los procedimientos de un proyecto, basta con comenzar la
declaracin con la instruccin Public, tal y como muestra el siguiente ejemplo:
Public NombreTexto As String
Si desea ms informacin sobre cmo dar nombre a sus variables, puede consultar la
seccin "Visual Basic Naming Rules" en la Ayuda de Visual Basic.
Las variables se pueden declarar como de uno de los siguientes tipos de datos: Boolean,
Byte, Integer, Long, Currency, Single, Double, Date, String (para cadenas de longitud
variable), String * longitud (para cadenas de longitud fija), Object, o Variant. Si no se
especifica el tipo de datos, el tipo de datos Variant es el predefinido. Tambin es posible
crear un tipo definido por el usuario empleando la instruccin Type. Si desea ms

Elaborado por: Daniel Zegarra Zavaleta Pag. 90


Manual de Microsoft Excel Programacin VBA

informacin sobre tipos de datos puede consultar la seccin "Tipo de datos Summary" en
la Ayuda de Visual Basic.
Se pueden declarar varias variables en una instruccin. Para especificar el tipo de datos se
debe incluir un tipo de datos para cada variable. En la siguiente instruccin se declaran las
variables intX, intY, e intZ como del tipo Integer.
Dim intX As Integer, intY As Integer, intZ As Integer
En la siguiente instruccin, intX e intY se declaran como del tipo Variant; y slo intZ se
declara como del tipo Integer.
Dim intX, intY, intZ As Integer
No es necesario especificar el tipo de datos en la instruccin de declaracin. Si se omite, la
variable ser del tipo Variant.

Utilizar la instruccin Public


La instruccin Public se puede utilizar para declarar variables pblicas de nivel de
mdulo.
Public NombreTexto As String
Las variables pblicas se pueden usar en cualquier procedimiento del proyecto. Si una
variable pblica se declara en un mdulo estndar o en un mdulo de clase, tambin se
podr usar en los proyectos referenciados por el proyecto en que se declara la variable
pblica.

Utilizar la instruccin Private


La instruccin Private se puede usar para declarar variables privadas de nivel de mdulo.
Private MiNombre As String
Las variables Private pueden ser usadas nicamente por procedimientos pertenecientes al
mismo mdulo.
Nota Cuando se utiliza a nivel de mdulo, la instruccin Dim es equivalente a la
instruccin Private. Sera aconsejable usar la instruccin Private para facilitar la lectura y
comprensin del cdigo.

Utilizar la instruccin Static


Cuando se utiliza la instruccin Static en lugar de la instruccin Dim, la variable declarada
mantendr su valor entre llamadas sucesivas.

Utilizar la instruccin Option Explicit


En Visual Basic se puede declarar implcitamente una variable usndola en una
instruccin de asignacin. Todas las variables que se definen implcitamente son del tipo
Variant. Las variables del tipo Variant consumen ms recursos de memoria que la mayor
parte de las otros tipos de variables. Su aplicacin ser ms eficiente si se declaran
explcitamente las variables y se les asigna un tipo de datos especfico. Al declararse
explcitamente las variables se reduce la posibilidad de errores de nombres y el uso de
nombres errneos.
Si no desea que Visual Basic realice declaraciones implcitas, puede incluir en un mdulo
la instruccin Option Explicit antes de todos los procedimientos. Esta instruccin exige
que todas las variables del mdulo se declaren explcitamente. Si un mdulo incluye la
instruccin Option Explicit, se producir un error en tiempo de compilacin cuando Visual

Elaborado por: Daniel Zegarra Zavaleta Pag. 91


Manual de Microsoft Excel Programacin VBA

Basic encuentre un nombre de variable que no ha sido previamente declarado, o cuyo


nombre se ha escrito incorrectamente.
Se puede seleccionar una opcin del entorno de programacin de Visual Basic para incluir
automticamente la instruccin Option Explicit en todos los nuevos mdulos. Consulte la
documentacin de su aplicacin para encontrar la forma de modificar las opciones de
entorno de Visual Basic. Tenga en cuenta que esta opcin no tiene ningn efecto sobre el
cdigo que se haya escrito con anterioridad.
Nota Las matrices fijas y dinmicas (variables de arreglo o arrays) siempre se tiene que
declarar explcitamente.

Declarar una variable de objeto para automatizacin


Cuando se utiliza una aplicacin para controlar los objetos de otra aplicacin, debe
establecerse una referencia a la biblioteca de tipos de la otra aplicacin. Una vez que se ha
establecido la referencia, se pueden declarar variables de objeto conforme a su tipo ms
especfico. Por ejemplo, si desde Microsoft Word se establece una referencia a la
biblioteca de tipos de Microsoft Excel, se puede declarar una variable del tipo Worksheet
desde Microsoft Word para representar un objeto Worksheet de Microsoft Excel.
Si se utiliza otra aplicacin para controlar objetos de Microsoft Access, es posible, en la
mayor parte de los casos, declarar variables objetos del tipo ms especfico. Se puede usar
tambin la palabra clave New para crear automticamente una nueva definicin de un
objeto. Sin embargo, puede ser necesario indicar que se trata de un objeto Microsoft
Access. Por ejemplo, cuando se declara una variable de objeto para representar un
formulario de Microsoft Access desde Microsoft Visual Basic, debe distinguirse entre el
objeto Form de Microsoft Access y un objeto Form de Visual Basic. Para ello se incluye el
nombre de la biblioteca de tipos en la declaracin de la variable, como muestra el
siguiente ejemplo:
Dim frmPedidos As New Access.Form
Algunas aplicaciones no reconocen algunos de los tipos de objetos de Microsoft Access.
En ese caso, incluso despus de establecer una referencia a la biblioteca de tipos de
Microsoft Access, ser necesario declarar todas las variables objeto de Microsoft Access
como del tipo Object. Tampoco puede usarse la palabra clave New para crear una nueva
definicin del objeto. El siguiente ejemplo muestra cmo declarar una variable que
represente una nueva definicin del objeto Application de Microsoft Access desde una
aplicacin que no reconoce los tipos de objeto de Microsoft Access. La aplicacin crea
entonces una nueva definicin del objeto Application.
Dim appAccess As Object
Set appAccess = CreateObject("Access.Application")
Para determinar la sintaxis a utilizar con una aplicacin determinada debe consultarse la
documentacin de la aplicacin.

Elaborado por: Daniel Zegarra Zavaleta Pag. 92


Manual de Microsoft Excel Programacin VBA

36. Resumen de tipos de datos


La tabla siguiente muestra los tipos de datos compatibles, incluyendo el tamao de
almacenamiento y el intervalo.

Tamao de
Tipo de datos almacenamiento Intervalo

Byte 1 byte 0 a 255

Boolean 2 bytes True o False

Integer 2 bytes -32,768 a 32,767

Long 4 bytes -2,147,483,648 a 2,147,483,647


(entero largo)

Single 4 bytes -3,402823E38 a 1,401298E-45 para valores negativos;


(coma flotante/ precisin 1,401298E-45 a 3,402823E38 para valores positivos
simple)

Double 8 bytes -1.79769313486231E308 a


(coma flotante/ precisin -4,94065645841247E-324 para valores negativos;
doble) 4,94065645841247E-324 a 1,79769313486232E308 para
valores positivos

Currency 8 bytes -922.337.203.685.477,5808 a 922.337.203.685.477,5807


(entero a escala)

Decimal 14 bytes +/-79.228.162.514.264.337.593.543.950.335 sin punto


decimal;
+/-7,9228162514264337593543950335 con 28 posiciones a
la derecha del signo decimal; el nmero ms pequeo distinto
de cero es
+/-0,0000000000000000000000000001

Date 8 bytes 1 de enero de 100 a 31 de diciembre de 9999

Object 4 bytes Cualquier referencia a tipo Object

String 10 bytes + longitud de la Desde 0 a 2.000 millones


(longitud variable) cadena

String Longitud de la cadena Desde 1 a 65.400 aproximadamente


(longitud fija)

Variant 16 bytes Cualquier valor numrico hasta el intervalo de un tipo


(con nmeros) Double

Variant 22 bytes + longitud de la El mismo intervalo que para un tipo String de longitud
(con caracteres) cadena variable

Definido por el usuario Nmero requerido por los El intervalo de cada elemento es el mismo que el intervalo de
(utilizando Type) elementos su tipo de datos.

Nota: Las matrices de cualquier tipo de datos requieren 20 bytes de memoria, ms cuatro
bytes para cada dimensin de matriz, ms el nmero de bytes que ocupan los propios

Elaborado por: Daniel Zegarra Zavaleta Pag. 93


Manual de Microsoft Excel Programacin VBA

datos. Puede calcular la memoria que ocupan los datos multiplicando el nmero de
elementos de datos por el tamao de cada elemento. Por ejemplo, los datos de una matriz
unidimensional que consten de cuatro elementos de datos tipo Integer de dos bytes cada
uno, ocupan ocho bytes. Los ocho bytes que requieren los datos ms los 24 bytes
necesarios para la matriz suman un requisito total de memoria de 32 bytes para dicha
matriz.
Un tipo Variant que contiene una matiz requiere 12 bytes ms que la matriz por s sola.

Comprender la vida de las variables


El tiempo durante el que una variable conserva su valor se conoce como vida. El valor de
la variable puede cambiar durante su vida, pero conserva algn valor. Cuando una variable
pierde su alcance, ya no tiene ningn valor.
Cuando un procedimiento comienza a ejecutarse, se inicializan todas las variables. Las
variables numricas se inicializan a cero, las cadenas de longitud variable se inicializan a
una cadena vaca de longitud cero ("") y una cadena de longitud fija se llena con los
caracteres correspondientes al cdigo ASCII 0, o Chr(0). Las variables Variant se
inicializan a Empty. Cada uno de los elementos de una variable de tipo definido por el
usuario se inicializa como si se tratase de una variable independiente.
Cuando se declara una variable de objeto, se reserva el espacio correspondiente en
memoria, pero se le da el valor Nothing hasta que se le asigne una referencia al objeto
mediante la instruccin Set.
Si el valor de una variable no cambia durante la ejecucin del cdigo, conserva su valor de
inicializacin hasta que pierda alcance.
Una variable de nivel de procedimiento declarada mediante la instruccin Dim conserva
su valor hasta que el procedimiento termina de ejecutarse. Si el procedimiento llama a
otros procedimientos, la variable conserva su valor tambin mientras se ejecutan esos
procedimientos.
Si una variable de nivel de procedimiento se declara con la palabra clave Static, la variable
conserva su valor mientras haya cdigo en ejecucin, sea cual sea el mdulo. Cuando todo
el cdigo ha terminado de ejecutarse, la variable pierde su alcance y su valor. Su vida es la
misma que la de una variable de nivel de mdulo.
Una variable de nivel de mdulo es distinta a una variable esttica. En un mdulo estndar
o un mdulo de clase, conserva su valor hasta que se termina de ejecutar el cdigo. En un
mdulo de clase conserva su valor mientras exista una definicin de la clase. Las variables
de nivel de mdulo consumen memoria hasta que sus valores se vuelven a inicializa, por
eso slo se deben utilizar cuando sea necesario.
Si se incluye la palabra clave Static antes de una instruccin Sub o Function, los valores de
todas las variables de nivel de procedimiento del procedimiento se conservarn entre las
sucesivas llamadas.

Comprender los tipos de datos Variant

Elaborado por: Daniel Zegarra Zavaleta Pag. 94


Manual de Microsoft Excel Programacin VBA

El tipo de datos Variant se especifica automticamente si no se especifica otro tipo de


datos al declarar una constante, variable, o argumento. Las variables declaradas como del
tipo de datos Variant pueden contener valores numricos, cadenas de texto, fecha, hora o
Booleans y pueden convertir los valores que contienen de forma automtica. Los valores
numricos Variant ocupan 16 bytes de memoria (lo que slo es significativo en
procedimientos grandes o mdulos complejos) y son ms lentos a la hora de su acceso que
las variables de tipo explcito de los restantes tipos. Es muy raro utilizar el tipo de datos
Variant para una constante. Los valores de cadena Variant necesitan 22 bytes de memoria.
Las siguientes instrucciones crean variables Variant:
Dim miVar
Dim tuVar As Variant
laVar = "Esto es un texto."
La ltima instruccin no declara explcitamente la variable laVar, sino que la declara
implcitamente, o automticamente. Las variables que se declaran implcitamente se
especifican como del tipo de datos Variant.
Sugerencia Si se especifica un tipo de datos para una variable o argumento y a
continuacin se utiliza un tipo errneo de datos, se producir un error de tipo de datos.
Para evitar errores de tipo de datos, se deben usar slo variables (del tipo de datos Variant)
o declarar explcitamente todas las variables y especificar para ellas un tipo de datos. El
ltimo mtodo es el preferible.

Comprender el alcance y la visibilidad


El alcance se refiere a la disponibilidad de una variable, constante, o procedimiento para
ser usado por otro procedimiento. Hay tres niveles de alcance: nivel de procedimiento,
nivel de mdulo privado y nivel de mdulo pblico.
El alcance de una variable se determina cuando se declara. es aconsejable declarar todas
las variables explcitamente para evitar errores de conflicto de nombres entre variables que
tiene alcances distintos.

Definir el alcance de un nivel de procedimiento


Una variable o constante definida desde dentro de un procedimiento no es visible fuera de
ese procedimiento. Slo el procedimiento que contiene la declaracin de la variable puede
usarlos. En el siguiente ejemplo, el primer procedimiento presenta un cuadro de mensaje
que contiene una cadena de texto. El segundo procedimiento presenta un cuadro de
mensaje en blanco ya que la variable strMensaje es local para el primer procedimiento.
Sub VariableLocal()
Dim strMensaje As String
strMensaje = "Esta variable no se puede usar fuera de este
procedimiento."
MsgBox strMensaje
End Sub

Sub FueraAlcance()
MsgBox strMensaje
End Sub

Definir el alcance de nivel de mdulo privado


Se pueden definir variables y constantes de nivel de mdulo en la seccin Declarations de
un mdulo. Las variables de nivel de mdulo pueden ser pblicas o privadas. Las variables

Elaborado por: Daniel Zegarra Zavaleta Pag. 95


Manual de Microsoft Excel Programacin VBA

pblicas estn disponibles para todos los procedimientos de todos los mdulos de un
proyecto; las variables privadas slo estn disponibles para los procedimientos de ese
mdulo. Las variables declaradas con la instruccin Dim en la seccin Declarations tiene
un alcance privado a no ser que se especifique otra cosa. Sin embargo, es aconsejable
colocar la palabra clave Private delante del nombre de la variable para que el alcance sea
evidente al leer el cdigo.
En el siguiente ejemplo, la variable de cadena strMensaje est disponible para cualquier
procedimiento definido en el mdulo. Cuando se llama al segundo procedimiento, presenta
el contenido de la variable de cadena strMensaje en un cuadro de dialogo.
' Aada lo siguiente a la seccin de Declarations del mdulo.
Private strMensaje As String

Sub InicializaVariablePrivada()
strMensaje = "Esta variable no se puede usar fuera de este mdulo."
End Sub

Sub UsaVariablePrivada()
MsgBox strMensaje
End Sub
Nota Los procedimientos pblicos de un mdulo estndar o mdulo de clase estn
disponibles para cualquier proyecto de referencia al proyecto actual. Para limitar el
alcance de todos los procedimientos de un mdulo al proyecto actual, aada una
instruccin Option Private Module a la seccin Declarations del mdulo. Las variables y
procedimientos pblicos seguirn estando disponibles para los restantes procedimientos
del proyecto actual, pero no lo estarn para los proyectos que a los que puedan hacer
referencia.

Definir el alcance de nivel de mdulo pblico


Si se declara una variable de nivel de mdulo como pblica, estar disponible para todos
los procedimientos del mismo proyecto. En el siguiente ejemplo, la variable de cadena
strMensaje se puede usar en cualquier procedimiento de un mdulo del proyecto.
' Incluya esto en la seccin Declarations del mdulo.
Public strMensaje As String
Todos los procedimientos son pblicos a menos que se especifique lo contrario, excepto
en el caso de los procedimientos evento. Cuando Visual Basic crea un procedimiento
evento, la palabra clave Private se inserta automticamente antes de la declaracin del
procedimiento. Para los restantes procedimientos, debe declarar explcitamente con la
palabra clave Private si no desea que sean pblicos.
Se pueden usar procedimientos, variables y constantes pblicas definidas en mdulos
estndar o mdulos de clase de proyectos que hagan referencia al actual. Sin embargo, es
preciso establecer una referencia al proyecto en que estn definidos.
Los procedimientos, variables y constantes pblicas definidas en mdulos que no sean
estndar o de clase, como pueden ser los mdulos de formulario o mdulos de informe, no
estn disponibles desde los proyectos que hacen referencia al actual, ya que estos mdulos
son privados para el proyecto en el que residen.

Elaborado por: Daniel Zegarra Zavaleta Pag. 96


Manual de Microsoft Excel Programacin VBA

Ejercicio N 1: Comportamiento de diversas variables en Visual


Basic

Las variables tienen un comportamiento diferente dependiendo de las condiciones en que


fueron declaradas. En el siguiente ejercicio se declaran las siguientes 5 variables distintas:
La variable "A" dentro de un procedimiento (Macro1)
La variable privada "A" en el rea de declaraciones del Mdulo1
La variable esttica "A" dentro de otro procedimiento (Macro4)
La variable pblica "B" en el rea de declaraciones del Mdulo1
La variable privada "A" en el rea de declaraciones del Mdulo2
A pesar de que 4 de ellas se llaman "A", cada una de estas variables son totalmente
independientes una de la otra.

La variable "A" dentro del procedimiento Macro1:

Elaborado por: Daniel Zegarra Zavaleta Pag. 97


Manual de Microsoft Excel Programacin VBA

Al ejecutarse la Macro1 la sentencia DIM declara a la variable A y esta se inicializa


siempre en cero. Luego la macro le suma 1 a la variable y al finalizar la macro un mensaje
muestra que la variable A tiene el valor de 1. Note que cada vez que termine de ejecutarse
la Macro1 la variable A siempre tendr el valor final de 1.
La variable privada "A" en el rea de declaraciones del Mdulo1:
Al ejecutarse la Macro2 o la Macro3, estas macros incrementan el valor de la misma
variable privada A, esta variable conserva su valor hasta que una de las 2 macros
anteriores se ejecute y le vuelva a sumar 1.
La variable esttica "A" dentro del procedimiento Macro4:
Al ejecutarse la Macro4 se declara la variable esttica A y esta se incrementa su valor en 1
cada vez, pues esta variable conserva su valor cada vez que se ejecuta la macro.
La variable pblica "B" en el rea de declaraciones del Mdulo1:
Al ejecutarse la Macro5 o la Macro7 la variable pblica B incrementa su valor en 1 cada
vez, pues esta variable conserva su valor cada vez que se ejecutan estas macros, a pesar de
que ellas se encuentren en diferentes mdulos.
La variable privada "A" en el rea de declaraciones del Mdulo2:
En cambio al ejecutarse la Macro6 la variable privada A incrementa su valor en 1 cada
vez, pero el valor que conserva esta variable privada del Modulo2 es totalmente
independiente del valor de la variable privada A del Modulo1.

Ejercicio N 2: Para buscar datos en una lista

Este ejercicio muestra tres mtodos distintos, cada uno de ellos ms eficiente y ms rpido
que el otro, para buscar y copiar un dato que se intenta localizar dentro de una lista:

Para Buscar datos en una lista


1er Metodo:
Utiliza el mandato While para recorrer la lista buscando el dato, y se detiene cuando lo
encuentra.
Este mtodo es lento cuando la lista es muy grande.
Sub Busca1()
T = Timer
Range("Valor").ClearContents
Application.ScreenUpdating = False
Range("Lista").Select
While ActiveCell <> Range("Dato")
ActiveCell.Offset(1, 0).Select
Wend
Range("Valor") = ActiveCell.Offset(0, 1)
Range("Valor").Select
Application.ScreenUpdating = True
Range("Tiempo") = Timer - T
End Sub

Elaborado por: Daniel Zegarra Zavaleta Pag. 98


Manual de Microsoft Excel Programacin VBA

2do Metodo:
Utiliza la opcin Buscar de la ficha Inicio/Buscar y reemplazar/Buscar.
Este mtodo es mas rpido que el anterior.
Sub Busca2()
T = Timer
Range("Valor").ClearContents
Dato = Range("Dato")
Cells.Find(What:=Dato, After:=ActiveCell, LookIn:=xlValues, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
Range("Valor") = ActiveCell.Offset(0, 1)
Range("Valor").Select
Range("Tiempo") = Timer - T
End Sub

3er Metodo:
Utiliza la sentencia Find del mismo Visual Basic..
Este mtodo es mucho ms rpido que los anteriores porque ya no utiliza herramientas de
la hoja de calculo de Excel, sino la sentencia Find que es nativa de Visual Basic.
Sub Busca3()
T = Timer
Range("Valor").ClearContents
Dato = Range("Dato")
Set c = Range("Lista").Find(Dato, LookIn:=xlValues)
If Not c Is Nothing Then Celda = c.Address
Range("Valor") = Range(Celda).Offset(0, 1)
Range("Valor").Select
Range("Tiempo") = Timer T
End Sub

Para Abrir archivos


Application.GetOpenFilename:
Utiliza el mandato Application.GetOpenFilename para mostrar en pantalla la ventana de
dialogo tradicional de Excel para abrir un archivo.
Este mtodo permite elegir de la ventana el archivo que se desea abrir de una carpeta
previamente definida.

Elaborado por: Daniel Zegarra Zavaleta Pag. 99


Manual de Microsoft Excel Programacin VBA

Sub AbrirArchivo()
'elije un archivo para abrirlo
ChDrive Left(ActiveWorkbook.Path, 1)
ChDir ActiveWorkbook.Path
Archivo = Application.GetOpenFilename("Archivos del Excel" & _
"(*.xls*),*.xls*", , "Elija el Archivo que desea Abrir")
On Error GoTo Sale
Workbooks.Open Archivo
Archivo = ActiveWorkbook.Name
Rpta = MsgBox("El archivo: " & Archivo & " ha sido cargado" & _
"vbNewLine & "Desea cerrarlo?", vbYesNo)
If Rpta = vbNo Then Exit Sub
Application.DisplayAlerts = False
ActiveWorkbook.Close
Sale:
End Sub

Elaborado por: Daniel Zegarra Zavaleta Pag. 100


Manual de Microsoft Excel Programacin VBA

Verifica si un Libro est abierto


Workbooks.Open:
Utiliza el mandato For eachnext para recorrer por los libros abiertos y verificar si un
cierto archivo ya ha sido abierto anteriormente. Si no es as, abre el archivo, sino, activa la
ventana del archivo ya existente en la memoria.

Sub AbrirLibro2()
Ruta = ActiveWorkbook.Path
Archivo = InputBox("Nombre del archivo a abrir (Ej: Lista.xls
Lista.xlsx)")
If Archivo = "" Then Exit Sub
For Each Libro In Application.Workbooks
If UCase(Libro.Name) = UCase(Archivo) Then
Windows(Archivo).Activate
Exit Sub
End If
Next
On Error GoTo NoHay
Workbooks.Open Ruta & "\" & Archivo
Exit Sub
NoHay:
MsgBox ("El archivo " & Archivo & " no existe en la carpeta actual")
End Sub

Elaborado por: Daniel Zegarra Zavaleta Pag. 101


Manual de Microsoft Excel Programacin VBA

Ingreso de fechas en las celdas a travs de un Calendario


Control de Calendario 12.0:
En el Editor de Visual Basic inserte un formulario, luego haga clic derecho en un lugar
vacio de la ventana Cuadro de Herramientas y elija la opcin "Controles adicionales". En
la ventana que se abre, active la casilla de la opcin "Control de Calendario 12.0" y luego
Aceptar.

Luego con esta nueva herramienta, dibuje el calendario dentro del formulario, y al hacer
doble clic sobre l, agrguele el siguiente cdigo:
Private Sub Calendar1_Click()
ActiveCell = Calendar1.Value
Unload Me
End Sub

Private Sub UserForm_Activate()


Calendar1.Value = date
End Sub

Crear en la hoja de clculo una barra de avance del proceso

Elaborado por: Daniel Zegarra Zavaleta Pag. 102


Manual de Microsoft Excel Programacin VBA

ProgressBar:
Cuando se realicen procesos que demandan mucho tiempo para Excel, quizs se desee
mostrar una barra de avance de este proceso a fin de que el usuario sepa lo que est
ocurriendo.
Por ejemplo si se desea crear este cuadro:

Barra con ActiveX

Realice los siguientes pasos:

1. Ficha Programador/ Insertar/ Controles ActiveX


2. Clic en la herramienta "Mas controles" y seleccionar
la opcin "Microsoft ProgressBar Control, version 6.0"
y clic en Aceptar.

3. Entonces dibujar los siguientes objetos en la hoja de calculo:

4. Luego cambiar las siguientes propiedades:

(Name) Barra1
BorderStyle 1-ccFixedSingle
Scrolling 1-ccScrollingSmooth

(Name) Barra2

Elaborado por: Daniel Zegarra Zavaleta Pag. 103


Manual de Microsoft Excel Programacin VBA

BorderStyle 1-ccFixedSingle
Scrolling 1-ccScrollingStandard

5. En un Modulo de Visual Basic escribir la siguiente macro:

Sub Avance()
Dim i As Double, j As Double
ActiveSheet.Barra1.Visible = True
ActiveSheet.Barra2.Visible = True
Range("A3:C13").ClearContents
Range("A3").Select
For i = 1 To 100
For j = 1 To 200000
Sqr (j)
Next
ActiveCell.Cells(i / 10 + 1, 1) = i
ActiveCell.Cells(i / 10 + 1, 2) = i * i
ActiveCell.Cells(i / 10 + 1, 3) = Sqr(i)
ActiveSheet.Barra1.Value = i
ActiveSheet.Barra2.Value = i
Next
MsgBox ("Terminado")
ActiveSheet.Barra1.Value = 0
ActiveSheet.Barra2.Value = 0
End Sub

6. Finalmente asignar la macro Avance al botn "Barra con


ActiveX"

Elaborado por: Daniel Zegarra Zavaleta Pag. 104


Manual de Microsoft Excel Programacin VBA

Crear un Formulario con una barra de avance del proceso


ProgressBar:

Barra con Formulario

1. Crear el formulario que se muestra a continuacion.


2. En el cuadro de herramientas hacer un clic derecho y elegir
Controles adicionales, luego activar la casilla:
Microsoft ProgressBarr Control, version 6.0, y Aceptar.

3. Con el nuevo control dibuje los controles como se muestran en


la ventana anterior, y cambie las siguientes propiedades:

(Name) Barra1
BorderStyle 1-ccFixedSingle
Scrolling 1-ccScrollingSmooth

(Name) Barra1
BorderStyle 1-ccFixedSingle
Scrolling 1-ccScrollingSmooth

4. Escribir los siguientes codigos para los botones "Calculo" y "Cerrar"

Private Sub Calculo_Click()


Dim i As Double, j As Double
Range("A3:C13").ClearContents
Range("A3").Select
Mensaje.Caption = "Procesando..."
Application.Wait (Now +
TimeValue("00:00:01"))
For i = 1 To 100
For j = 1 To 200000
Sqr (j)
Next
ActiveCell.Cells(i / 10 + 1, 1) = i
ActiveCell.Cells(i / 10 + 1, 2) = i * i
ActiveCell.Cells(i / 10 + 1, 3) = Sqr(i)
Barra.Value = i

Elaborado por: Daniel Zegarra Zavaleta Pag. 105


Manual de Microsoft Excel Programacin VBA

Barra2.Value = i
Next
Mensaje = "Proceso terminado"
Barra.Value = 0
Barra2.Value = 0
End Sub

Private Sub Cerrar_Click()


Unload Me
End Sub

5. En un Modulo de Visual Basic escribir la siguiente macro:

Sub Ventana()
UserForm1.Show
End Sub

6. Finalmente asignar la macro Ventana al botn "Barra con Formulario"


.

Elaborado por: Daniel Zegarra Zavaleta Pag. 106


Manual de Microsoft Excel Programacin VBA

Para pintar de color los objetos


ColorIndex:
Sintaxis: Objeto.ColorIndex = nmero

Elaborado por: Daniel Zegarra Zavaleta Pag. 107


Manual de Microsoft Excel Programacin VBA

Dos formas de ordenar una lista


Sort:
El primer mtodo es el usado por la versin 2003 de Excel y el segundo es de la versin
2007.

Elaborado por: Daniel Zegarra Zavaleta Pag. 108


Manual de Microsoft Excel Programacin VBA

Formulario para ver Video


Windows Media Player:
En el Editor de Visual Basic Insertar un formulario y en la ventana "Cuadro de
Herramientas" activar el control adicional "Windows Media Player"

Luego disear el siguiente formulario:

En la ventana Modulo1 escribir la siguiente Subrutina:


Sub VerVideo()
UserForm1.Show
End Sub

En la ventana del Formulario escribir lo siguiente:


Private Sub Cerrar_Click()
Unload Me
End Sub

Private Sub Pelicula_Change()


If Pelicula = "" Then Exit Sub
RUTA = ActiveWorkbook.Path
Video.URL = RUTA & "\" & Pelicula
End Sub

Elaborado por: Daniel Zegarra Zavaleta Pag. 109


Manual de Microsoft Excel Programacin VBA

En la hoja de clculo asignar la macro VerVideo al botn:

Nota.- Los archivos de video debern estar guardados en la misma carpeta


donde se encuentra el archivo de Excel.

Insertar opciones al Men Contextual


CommandBar:
En el Editor de Visual Basic escribir las siguientes rutinas:

Elaborado por: Daniel Zegarra Zavaleta Pag. 110


Manual de Microsoft Excel Programacin VBA

Prctica De Laboratorio N1

Objetivos:
Entender la diferencia al grabar macros con referencias absolutas y macros con referencias
relativas.
Uso de la grabadora de macros utilizando referencias absolutas y relativas.
Asignacin de macros a botones

Un Empresa de taxis se comunica por radio con sus unidades a fin de establecer la tarifa que
deben cobrar los choferes a sus clientes, teniendo como datos los lugares de origen y destino
de cada carrera.

Para lograr esto, en la central de taxis se cuenta con una hoja de clculo en Excel que contiene
las tarifas a cobrar entre cada punto origen y destino de los distritos de Lima:
El chofer llama a la central informando los sitios origen y destino de la carrera
La central de taxis calcula el monto a cobrar en la carrera y si el cliente la acepta la
central registrar la carrera en el cuadro de viajes

Elaborado por: Daniel Zegarra Zavaleta Pag. 111


Manual de Microsoft Excel Programacin VBA

1ra Parte: Creacin el Cuadro de Viajes y la Tabla de Tarifas

1. En la Hoja1 crear el Cuadro de Viajes, tal y como se muestra a continuacin en la figura.

2. En la Hoja2 crear la siguiente Tabla de Tarifas:

Dar nombre a los siguientes rangos:


A6:A16 ORIGEN
B5:L5 DESTINO
Luego dar nombre de rango a cada fila y columna de la tabla, para lo cual haga lo siguiente:
Seleccionar el rango A5:L16
Elegir la Ficha Formulas/Crear desde la seleccin, y luego Aceptar
3. En la Hoja1 hacer lo siguiente:
Dar nombre al rango G5:G9 CHOFERES
Validar la Celda B5: Permitir: Lista, Origen: =CHOFERES
Validar la Celda C5: Permitir: Lista, Origen: =ORIGEN
Validar la Celda D5: Permitir: Lista, Origen: =DESTINO
4. Dar nombre de rango a cada columna del cuadro de viajes:
Seleccionar el rango A4:E5

Elaborado por: Daniel Zegarra Zavaleta Pag. 112


Manual de Microsoft Excel Programacin VBA

Elegir la Ficha Formulas/Crear desde la seleccin, verificar que solo est marcada la
casilla Fila superior, y luego Aceptar
5. En la celda H5 escribir la siguiente frmula matricial:
{=SUMA(SI((Chofer=G5)*(Dia>=H$2)*(Dia<H$2+1),Precio))}
Luego copiar esta frmula en el rango H5:H9, y finalmente en H10 escribir la
formula: =SUMA(H5:H9).

2da Parte: Grabar la macro que registre las carreras en el Cuadro


de Viajes

6. En la Hoja1 ingresar los siguientes datos en el Cuadro de Viajes:

Para Grabar la macro Registrar:


7. En la ficha Programador verificar que est habilitado el comando Usar referencias
relativas
8. Estando el puntero en la celda D5, en la Ficha Programador elegir el comando Grabar
macro, escribir como nombre de la macro: Registrar, y luego Aceptar.
9. Estando encendida la grabadora de macros realice las siguientes acciones:
Seleccionar la celda E5
Escribir la frmula: =INDIRECTO(B5) INDIRECTO(C5) y presionar Enter.
Seleccionar la celda E5 y presionar Ctrl+C, luego clic derecho Pegado especial,
marcar Valores y Aceptar. Luego presionar Esc.
Seleccionar la celda A5 y escribir la formula =AHORA() y presionar Enter
Seleccionar la celda A5 y presionar Ctrl+C, luego clic derecho Pegado especial,
marcar Valores y Aceptar. Luego presionar Esc.
Seleccionar B5:D5 y con el cuadro de relleno copiar estas 3 celdas en la fila 6.
Seleccionar el rango B6:D6 y presionar al tecla Suprimir.
Seleccionar la celda B6

Elaborado por: Daniel Zegarra Zavaleta Pag. 113


Manual de Microsoft Excel Programacin VBA

Presionar Ctrl+*
Ficha Formulas/Crear desde la seleccin, marcar solo Fila superior, y Aceptar
Seleccionar la celda B6, y luego presionar Ctrl+
Finalmente presionar la tecla una vez

10. Finalizar la grabacin de la macro con un clic en el boton Detener grabacin.


11. La Hoja1 se ver entonces as:

Para Ver y Modificar la macro Registrar en la ventana del Editor de Visual Basic:

12. En la Ficha Programador/Macros, seleccionar la macro Registrar y luego clic en el


boton Modificar. Se abrir la ventana del Editor de Visual Basic y se ver en ella el
cdigo de la siguiente subrutina:
Sub Registrar()
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.FormulaR1C1 = "=INDIRECT(RC[-2]) INDIRECT(RC[-1])"
ActiveCell.Select
Selection.Style = "Currency"
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
ActiveCell.Offset(0, -4).Range("A1").Select
ActiveCell.FormulaR1C1 = "=NOW()"
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
ActiveCell.Offset(0, 1).Range("A1:C1").Select
Selection.AutoFill Destination:=ActiveCell.Range("A1:C2"), Type:= _
xlFillDefault
ActiveCell.Range("A1:C2").Select
ActiveCell.Offset(1, 0).Range("A1:C1").Select
Selection.ClearContents
ActiveCell.Select
Application.CutCopyMode = False
Selection.CurrentRegion.Select
Selection.CreateNames Top:=True, Left:=False, Bottom:=False, Right:= _
False
Range("B4").Select

Elaborado por: Daniel Zegarra Zavaleta Pag. 114


Manual de Microsoft Excel Programacin VBA

Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Range("A1").Select
End Sub

13. El usar la grabadora de macros crea en ocasiones algunas lineas de codigo innecesarias.
Lineas que aparecen en negrita en la subrutina anterior. Si se desea estas lineas se pueden
borrar o modificar para hacer mas eficiente la ejecucion de la macro, adems agregar la
sentencia Application.DisplayAlerts=False, luego de lo cual la subrutina quedara como
se muestra a continuacin:

Sub Registrar()
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "=INDIRECT(RC[-2]) INDIRECT(RC[-1])"

Selection.Style = "Currency"
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues

Application.CutCopyMode = False
ActiveCell.Offset(0, -4).Select
ActiveCell = "=NOW()"
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues

Application.CutCopyMode = False
ActiveCell.Offset(0, 1).Range("A1:C1").Select
Selection.AutoFill Destination:=ActiveCell.Range("A1:C2"), Type:= _
xlFillDefault

ActiveCell.Offset(1, 0).Range("A1:C1").ClearContents

Application.CutCopyMode = False
Selection.CurrentRegion.Select
Application.DisplayAlerts = False
Selection.CreateNames Top:=True, Left:=False

Range("B4").Select
Selection.End(xlDown).Offset(1, 0).Select

End Sub

Nota: La sentencia Application.DisplayAlerts=False evitar que aparezca la ventana de


dialogo advirtiendo que se van a modificar los tamaos de los nombres de rango del
cuadro de viajes.

Elaborado por: Daniel Zegarra Zavaleta Pag. 115


Manual de Microsoft Excel Programacin VBA

Para Escribir la macro Nuevo:


14. Debajo de la sentencia End Sub escriba la siguiente subrutina:

Sub Nuevo()
Range("B4").Select
While ActiveCell <> Empty
ActiveCell.Offset(1, 0).Select
Wend
End Sub

15. Finalmente dibuje los botones Nuevo y Registrar, y asigneles a cada uno las macros
correspondientes.
16. Si en la celda H2 se escribe la fecha, entonces la Hoja1 se deber ver asi:

17. Para ingresar una nueva carrera de taxi, solo habr que elegir en la celda B6 el nombre del
chofer, en C6 el lugar origen, en D6 el lugar destino, y luego bastar con hacer clic en el
boton Registrar para que se complete el registro de un nuevo viaje.

18. Automticamente en la columna H se iran calculando los montos acumulados de los


diferentes choferes en la fecha escrita en la celda H2.

19. Finalmente guarde este archivo como un Libro habilitado para macros y pngale el
nombre Taxi. El archivo se guardar con el nombre Taxi.xlsm

Elaborado por: Daniel Zegarra Zavaleta Pag. 116


Manual de Microsoft Excel Programacin VBA

Prctica De Laboratorio N2

Objetivos:
Se desea ingresar datos en tres diferentes listas ubicadas en hojas distintas de un libro, a
partir de datos escritos en la primera hoja de clculo. Para los cual se van a crear dos
macros:
Una macro que crea cdigos correlativos para cada una de las listas.
Una segunda macro que registra los datos en la lista respectiva.

1. En la hoja Datos escribir lo siguiente:

2. Seleccionar la celda B3 y en la ficha Datos elegir el comando Validacin de datos:


En el casillero Permitir, elegir la opcin Lista.
En el casillero Origen, escribir Personal,Equipo,Materiales
Luego Aceptar.
3. Dibujar tambin los botones rectangulares para las macros Crea Cdigo y Registrar, tal
como se muestra en la figura.
4. En la hoja Personal ingrese lo siguiente:

Elaborado por: Daniel Zegarra Zavaleta Pag. 117


Manual de Microsoft Excel Programacin VBA

5. En la hoja Equipo ingrese lo siguiente:

6. En la hoja Materiales ingrese lo siguiente:

7. Ingresar a Visual Basic y en una hoja de mdulo escriba el siguiente cdigo para las
macros:

Sub CreaCodigo()
If Range("B3") = "" Then Exit Sub
Cuadro = Range("B3")
Sheets(Cuadro).Select
Range("A3").Select
Selection.Sort Key1:=Range("A3"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
Selection.End(xlDown).Select
Cod = Left(ActiveCell, 1) & Right("000" & _
Val(Right(ActiveCell, 4)) + 1, 4)
Sheets("Datos").Select
Range("B4") = Cod
End Sub

Sub Registrar()
Cuadro = Range("B3")
Codigo = Range("B4")
Descripcion = Range("B5")
Unidad = Range("B6")
Costo = Range("B7")
Sheets(Cuadro).Select
Range("A3").Select
While ActiveCell <> Empty
ActiveCell.Offset(1, 0).Select

Elaborado por: Daniel Zegarra Zavaleta Pag. 118


Manual de Microsoft Excel Programacin VBA

Wend
ActiveCell = Codigo
ActiveCell.Offset(0, 1) = Descripcion
ActiveCell.Offset(0, 2) = Unidad
ActiveCell.Offset(0, 3) = Costo
Sheets("Datos").Select
MsgBox ("Los datos han sido registrados exitosamente")
Range("B3:B7").ClearContents
End Sub

8. Regrese a Excel y asigne las macros CreaCodigo y Registrar a los botones


correspondientes.
9. Finalmente guarde el libro con el nombre Registrar Datos en Listas en un archivo
habilitado para macros.

Elaborado por: Daniel Zegarra Zavaleta Pag. 119


Manual de Microsoft Excel Programacin VBA

Prctica De Laboratorio N3

Objetivos:
Utilizar las distintas sentencias de control para la solucin de mltiples tareas en el manejo
de datos. Las sentencias de control a utilizarse son las siguientes:
If..then..else,
Select Case
Whilewend,
Fornext,
For eachnext.

1. En la hoja de clculo escribir los siguientes datos:

2. En Visual Basic insertar una hoja de mdulo y escribir las siguientes subrutinas:

'POSICIONA EL PUNTERO DEBAJO DEL TITULO EDAD

Sub PrimeraEdad1()
Range("A3").Select
ActiveCell.CurrentRegion.Columns(4).Select
ActiveCell.Offset(1, 0).Select
End Sub

Sub PrimeraEdad2()
Range("A3").Select

Elaborado por: Daniel Zegarra Zavaleta Pag. 120


Manual de Microsoft Excel Programacin VBA

ActiveCell.CurrentRegion.Select
ActiveCell.Select
While ActiveCell <> "Edad"
ActiveCell.Offset(0, 1).Select
Wend
ActiveCell.Offset(1, 0).Select
End Sub

'POSICIONA EL PUNTERO EN LA PRIMERA COLUMNA AL FINAL DE LA LISTA

Sub Nuevo()
Range("A3").End(xlDown).Offset(1, 0).Select
End Sub

Sub Nuevo2()
Range("A3").Select
ActiveCell.CurrentRegion.Select
ActiveCell.Offset(Selection.Rows.Count,0).Select
End Sub

Sub Nuevo3()
Range("A3").Select
While ActiveCell <> Empty
ActiveCell.Offset(1, 0).Select
Wend
End Sub

'CUENTA LA CANTIDAD DE ALUMNOS INSCRITOS

Sub ContarInscritos()
Range("A4").Select
N = 0
While ActiveCell <> Empty
N = N + 1
ActiveCell.Offset(1, 0).Select
Wend
MsgBox ("Hay " & N & " alumnos inscritos")
End Sub

'CUENTA LA CANTIDAD DE MUJERES Y HOMBRES INSCRITOS

Sub ContarPorSexo1()
Range("A4").Select
H = 0
M = 0
While ActiveCell <> Empty
If ActiveCell.Offset(0, 2) = "M" Then H = H + 1
If ActiveCell.Offset(0, 2) = "F" Then M = M + 1
ActiveCell.Offset(1, 0).Select
Wend
MsgBox ("Hay " & M & " Mujeres y " & H & " Hombres inscritos")
End Sub

Sub ContarPorSexo2()
Range("A3").Select

Elaborado por: Daniel Zegarra Zavaleta Pag. 121


Manual de Microsoft Excel Programacin VBA

ActiveCell.CurrentRegion.Columns(3).Select
H = Application.WorksheetFunction.CountIf(Selection, "M")
M = Application.WorksheetFunction.CountIf(Selection, "F")
Range("A3").Select
MsgBox ("Hay " & M & " Mujeres y " & H & " Hombres inscritos")
End Sub

'INDICA EL TIPO DE PERSONA SEGUN SU EDAD

Sub TipoPersona()
Edad = Val(InputBox("Ingrese su edad"))
If Edad = Empty Then Exit Sub
If Edad < 18 Then MsgBox ("Ud. es menor de Edad")
If Edad >= 18 Then MsgBox ("Ud. es mayor de edad")
End Sub

'INSCRIBE A UNA PERSONA AL FINAL DE LA LISTA

Sub Inscripcion()
Nombre = InputBox("Ingrese el Nombre de la persona:")
Range("A3").End(xlDown).Offset(1, 0).Select
ActiveCell = Nombre
End Sub

'REGISTRA LA ENTREGA DE CARNET A LOS ALUMNOS

Sub Entrega1()
Range("A3").Select
Nombre = InputBox("Ingrese el Nombre de la persona:")
If Nombre = Empty Then Exit Sub
While ActiveCell <> Empty
ActiveCell.Offset(1, 0).Select
If UCase(ActiveCell) = UCase(Nombre) Then
If ActiveCell.Offset(0, 1) = "Entregado" Then
MsgBox ("A " & Nombre & " ya se le ha entregado su Carnet")
Exit Sub
End If
ActiveCell.Offset(0, 1) = "Entregado"
Exit Sub
End If
Wend
MsgBox (Nombre & " no existe en esta lista")
End Sub

Sub Entrega2()
Range("A3").Select
Nombre = InputBox("Ingrese el Nombre de la persona:")
If Nombre = "" Then Exit Sub
While ActiveCell <> Nombre
ActiveCell.Offset(1, 0).Select
If ActiveCell = Empty Then
MsgBox (Nombre & " no existe en esta lista")
Exit Sub
End If
Wend

Elaborado por: Daniel Zegarra Zavaleta Pag. 122


Manual de Microsoft Excel Programacin VBA

ActiveCell.Offset(0, 1) = "Entregado"
End Sub

'IDENTIFICA EL TIPO DE PERSONA PARA CADA ALUMNO

Sub Persona()
Range("A4").Select
While ActiveCell <> Empty
Edad = ActiveCell.Offset(0, 3)

Select Case Edad


Case Is >= 18
ActiveCell.Offset(0, 4) = "Adulto"
Case 13 To 17
ActiveCell.Offset(0, 4) = "Adolescente"
Case 1 To 13
If ActiveCell.Offset(0, 2) = "M" Then
ActiveCell.Offset(0, 4) = "Nio"
Else
ActiveCell.Offset(0, 4) = "Nia"
End If
End Select
ActiveCell.Offset(1, 0).Select
Wend
End Sub

'CALCULA LA DEUDA DE CADA ALUMNO

Sub CalculaDeuda()
Range("A3").CurrentRegion.Select
Alumnos = Selection.Rows.Count - 1
Range("G4").Select
For N = 1 To Alumnos
ActiveCell = 200 - ActiveCell.Offset(0, -1)
ActiveCell.Offset(1, 0).Select
Next
End Sub

'CUENTA LA CANTIDAD DE MUJERES Y HOMBRES INSCRITOS

Sub ContarPorSexo3()
Range("A3").CurrentRegion.Select
Alumnos = Selection.Rows.Count - 1
Range("C4").Select
H = 0
M = 0
For N = 1 To Alumnos
If ActiveCell = "M" Then H = H + 1
If ActiveCell = "F" Then M = M + 1
ActiveCell.Offset(1, 0).Select
Next
MsgBox ("Hay " & M & " Mujeres y " & H & " Hombres inscritos")
End Sub

Sub ContarPorSexo4()
Range("A3").CurrentRegion.Columns("C").Select
H = 0

Elaborado por: Daniel Zegarra Zavaleta Pag. 123


Manual de Microsoft Excel Programacin VBA

M = 0
For Each Celda In Selection
If Celda = "M" Then H = H + 1
If Celda = "F" Then M = M + 1
Next
MsgBox ("Hay " & M & " Mujeres y " & H & " Hombres inscritos")
End Sub

'BORRA LOS PAGOS QUE SON CERO

Sub BorraCeros()
Range("A3").CurrentRegion.Columns("F:G").Select
N = 0
For Each Celda In Selection
If Celda = 0 Then Celda.ClearContents: N = N + 1
Next
MsgBox "habian " & N & " ceros"
End Sub

'OCULTA TODAS LAS HOJAS MENOS LA ACTIVA

Sub OcultarHojas()
N = 1
For Each H In Worksheets
If ActiveSheet.Name <> H.Name Then H.Visible = False
N = N + 1
Next
End Sub

'MUESTRA TODAS LAS HOJAS

Sub MostrarHojas()
N = 1
For Each H In Worksheets
If ActiveSheet.Name <> H.Name Then H.Visible = True
N = N + 1
Next
End Sub

'CREA 2 HOJAS MUJERES Y HOMBRES Y COPIA A LOS ALUMNOS EN ELLAS

Sub SeparaAlumnos()
Application.DisplayAlerts = False
For Each H In Worksheets
If H.Name = "Hombres" Then Sheets("Hombres").Delete
Next
For Each H In Worksheets
If H.Name = "Mujeres" Then Sheets("Mujeres").Delete
Next
Range("A3").Select
Selection.AutoFilter Field:=3, Criteria1:="M"
Selection.CurrentRegion.Select
Selection.Copy
Sheets.Add
ActiveSheet.Name = "Hombres"
Range("A3").Select

Elaborado por: Daniel Zegarra Zavaleta Pag. 124


Manual de Microsoft Excel Programacin VBA

ActiveSheet.Paste
Application.CutCopyMode = False
ActiveCell.Select
Sheets("Hoja1").Select
Range("A3").Select
Selection.AutoFilter Field:=3, Criteria1:="F"
Selection.CurrentRegion.Select
Selection.Copy
Sheets.Add
ActiveSheet.Name = "Mujeres"
Range("A3").Select
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveCell.Select
Sheets("Hoja1").Select
Range("A3").Select
Selection.AutoFilter
End Sub

Elaborado por: Daniel Zegarra Zavaleta Pag. 125


Manual de Microsoft Excel Programacin VBA

Prctica De Laboratorio N4

Objetivos:
Se desea ingresar datos de diferentes clientes en una lista, utilizando tres mtodos
diferentes:.
Copiando datos del cliente desde un rango de celdas.
Ingresar datos del cliente utilizando ventanas de Inputbox.
Ingresar datos del cliente a travs de formularios

3. En la hoja de clculo escribir los siguientes datos:

4. Luego dibuje tres botones rectangulares tal como se aprecia en la figura.


5. A continuacin ingrese a Visual Basic, inserte una hoja de mdulo y en ella escriba las
siguientes subrutinas:

Sub IngresoDatos1()
Rpta = MsgBox("Seguro desea registrar estos datos?", vbYesNo)
If Rpta = vbNo Then Exit Sub
DNI = Range("B6")

Elaborado por: Daniel Zegarra Zavaleta Pag. 126


Manual de Microsoft Excel Programacin VBA

Cliente = Range("B7")
Telefono = Range("B8")
Range("A11").Select
While ActiveCell <> Empty
If ActiveCell = DNI Then
Rpta = MsgBox("Cliente ya existe, desea reemplazarlo?", vbYesNo)
If Rpta = vbYes Then GoTo Sigue
Exit Sub
End If
ActiveCell.Offset(1, 0).Select
Wend
Sigue:
ActiveCell = DNI
ActiveCell.NumberFormat = "00000000"
ActiveCell.Offset(0, 1) = Cliente
ActiveCell.Offset(0, 2) = Telefono
ActiveCell.Offset(0, 2).NumberFormat = "#-####"
Range("B6:B8").ClearContents
Range("B6").Select
End Sub

Sub IngresoDatos2()
DNI = Val(InputBox("Ingrese DNI"))
Cliente = InputBox("Ingrese nombre del cliente")
Telefono = Val(InputBox("Ingrese numero de telefono"))
Range("A11").Select
While ActiveCell <> Empty
If ActiveCell = DNI Then
Rpta = MsgBox("Cliente ya existe, desea reemplazarlo?", vbYesNo)
If Rpta = vbYes Then GoTo Sigue
Exit Sub
End If
ActiveCell.Offset(1, 0).Select
Wend
Sigue:
ActiveCell = DNI
ActiveCell.NumberFormat = "00000000"
ActiveCell.Offset(0, 1) = Cliente
ActiveCell.Offset(0, 2) = Telefono
ActiveCell.Offset(0, 2).NumberFormat = "#-####"

End Sub

Sub IngresoDatos3()
Ficha1.Show
End Sub

6. Luego inserte una hoja de formulario (men Insertar/Userform) y disee en ella el


formulario tal como se muestra a continuacin:

Elaborado por: Daniel Zegarra Zavaleta Pag. 127


Manual de Microsoft Excel Programacin VBA

7. Seleccione el fondo del formulario, y en la ventana Propiedades pngale en la propiedad


(Name) el nombre Ficha1
8. Tambin pngale nombre a cada cuadro de texto: DNI, Cliente y Telefono,
respectivamente .
9. Igualmente con la propiedad (Name), pngale nombres a los botones de comando:
Registrar, y Cancelar, respectivamente.
10. Luego haga doble clic en el botn Registrar, y escriba el siguiente cdigo:

Private Sub Registrar_Click()


Range("A11").Select
While ActiveCell <> Empty
If ActiveCell = Val(DNI) Then
Rpta = MsgBox("Cliente ya existe, desea reemplazarlo?", vbYesNo)
If Rpta = vbYes Then GoTo Sigue
Exit Sub

Elaborado por: Daniel Zegarra Zavaleta Pag. 128


Manual de Microsoft Excel Programacin VBA

End If
ActiveCell.Offset(1, 0).Select
Wend
Sigue:
ActiveCell = Val(DNI)
ActiveCell.NumberFormat = "00000000"
ActiveCell.Offset(0, 1) = Cliente
ActiveCell.Offset(0, 2) = Val(Telefono)
ActiveCell.Offset(0, 2).NumberFormat = "#-####"
DNI = ""
Cliente = ""
Telefono = ""
DNI.SetFocus
End Sub

11. Seguidamente regrese al formulario y haga doble clic en el botn de comando Cancelar, y
all escriba el siguiente cdigo:

Private Sub Cancelar_Click()


Unload Me
End Sub

12. Regrese a la ventana de Excel, y asigne a cada uno de los botones las macros:
IngresoDatos1,IngresoDatos2, e IngresoDatos3 respectivamente.
13. Finalmente guarde el libro con el nombre Ingreso de Clientes en un archivo habilitado
para macros.

Elaborado por: Daniel Zegarra Zavaleta Pag. 129


Manual de Microsoft Excel Programacin VBA

Prctica De Laboratorio N5

Objetivos:
Se van a confeccionar un cuadro que permita controlar las horas de ingreso y salida del
personal de vigilancia de la empresa, para luego al final de la semana calcular el monto del
pago por este servicio.
Uso de elementos de formulario.
Manejo de Fechas y Horas y sus respectivos formatos
Empleo de las funciones Now y CountA en Visual Basic
Proteccin de la hoja de calculo con contraseas
Como crear macros que asignan otras macros.

Un Empresa contrata los servicios de un vigilante particular el cual debe cumplir con un
horario normal de 8:00 de maana hasta las 4:00 de la tarde, y por lo cual se le pagar un
jornal diario de 90 soles.
Adicionalmente se han acordado estas otras condiciones que debern cumplirse por ambas
partes:
Si trabaja 5 das a la semana sin faltar, hay una bonificacin de 1 jornal adicional.
Por cada minuto de tardanza habr un descuento de 1 sol.
Por tiempo extra de trabajo previamente autorizado, se pagar el doble que las horas
normales.

1ra Parte: Creacin del Cuadro de Pago por Vigilancia

20. En una hoja de clculo de Excel, a la cual se le pondr el nombre Vigilancia, escriba el
siguiente Cuadro de Pagos por Servicio de Vigilancia, tal y como se muestra a
continuacin en la figura.
21. Combinar y centrar los siguientes rangos de celdas:
D2:C2 Tamao de letra 12 puntos
E2:G2, E3:F3, E10:H10, E12:F12 y G12:H12
22. Dar los siguientes colores de relleno a las celdas:
B2:C2 Negro E2:H2 Negro
B3:D3 Azul oscuro E3:F3 Rojo
G3:H3 Oro F4:F8 Rojo
H4:H8 Oro E10:H10 Azul oscuro
D12 Rojo E12:F12 Oro
G12H12 Turquesa claro
23. Seleccionar el rango C3:D8 y llamando al men Formato/Celdas elegir la ficha Numero,
categora Personalizada y elegir el tipo de formato: hh:mm AM/PM, luego en la celda
C3 escribir 8:00, y en D3 escribir 16:00.

Elaborado por: Daniel Zegarra Zavaleta Pag. 130


Manual de Microsoft Excel Programacin VBA

24. En los rangos E4:E9 y F4:F9 darle el formato personalizado: hh:mm

25. A la Hoja1 del libro darle el nombre Semana haciendo doble clic en etiqueta de hoja, y a la
Hoja2 darle el nombre Horas.
26. En la hoja Horas escribir en A1 el ttulo THORAS y en las celdas A3 y A4 las horas 7:30
y 7:31, luego darle a ambas el formato personalizado
hh:mm AM/PM.
27. Seleccionar las celdas A3:A4 y arrastrar el cuadro de
relleno hacia abajo hasta llegar a la celda A873 en la
cual deber aparecer las 10:00 pm.
28. Seleccionar el rango A3:A873 y darle el nombre de
rango THORAS.
29. En las celdas C3 y C4 de la hoja Horas escribir las
fechas 15/1/04 y 12/1/04 que corresponden a los dos
primeros dias Lunes del ao 2004. Luego
seleccionando ambas celdas, arrastrar el cuadro de
relleno hacia abajo hasta la celda C158 que
correspondera al 25/12/06.
30. Seleccionar el rango C3:C158 y darle el nombre de
rango SEMANAS.
31. En las celdas E3:F14 escribir los nmeros y nombres
de los doce meses del ao como se muestra en la figura, y luego seleccionando el rango
E3:F14 darle el nombre de rango MESES.

Elaborado por: Daniel Zegarra Zavaleta Pag. 131


Manual de Microsoft Excel Programacin VBA

32. Regrese a la Hoja Semana y seleccionando el rango B4:C8 llamar al men


Datos/Validacin, en la casilla Permitir elegir Lista y en Origen escribir =THORAS,
luego en la Ficha Mensaje de error desactivar la casilla Mostrar mensaje de error si se
introducen datos no validos, finalmente haga clic en Aceptar.
33. Usando la lista desplegable de validacin ingrese en el rango C4:D8 los siguientes datos
que se muestran en el cuadro:
34. En la hoja Semana definir los siguientes nombres de rango:
F4:F8 ChDctos H4:H8 ChExtras
C4:D8 Horas C4:C8 Ingreso
D4:D8 Salida
35. Tambin escriba las siguientes formulas:
En la celda E2: ="del "&DIA(BUSCARV(HOY(),Semanas,1))&" al "
&DIA(BUSCARV(HOY(),Semanas,1)+4)&" de "
&BUSCARV(MES(BUSCARV(HOY(),Semanas,1)),Meses,2,0
)
En la celda B10: =SI(C12=5,B12,0)

Elaborado por: Daniel Zegarra Zavaleta Pag. 132


Manual de Microsoft Excel Programacin VBA

C12: =CONTAR(C4:C8)

D12: =E9*24*60
E12: =G9*24*B12/4
F12: =B10+B12*C12-D12+E12
E4: =SI(ESTEXTO(C4),"",SI(Y(C4>C$3,C4<>""),C4-C$3,""))
Copie luego la anterior formula con el cuadro de relleno de E4 hasta E8.
G4: =SI(ESTEXTO(D4),"",SI(D4>D$3,D4-D$3,""))
Copie igualmente la anterior formula de G4 hasta G8.
En la celda E9: =SUMAR.SI(F4:F8,VERDADERO,E4:E8)
G9: =SUMAR.SI(H4:H8,VERDADERO,G4:G8)
36. Abra las herramientas de formulario con el men Ver/Barra de herramientas/
Formularios, y con el botn Casilla de verificacin dibuje una casilla y borre
totalmente el texto que lo acompaa.

Elaborado por: Daniel Zegarra Zavaleta Pag. 133


Manual de Microsoft Excel Programacin VBA

37. En la casilla que acaba de crear haga un clic derecho y elija la opcin Formato de control,
luego en la casilla Vincular con la celda escriba F4, marque la casilla Sombreado 3D, y
luego Aceptar.
38. Luego copie esta casilla 4 veces ms otras celdas de la columna F y con la opcin Formato
de control cambie las celdas de vinculacin para que sean F5, F6, F7 y F8
respectivamente. Luego repita el mismo procedimiento para las celdas G4:G8.
39. Cierre el grupo de herramientas de Formulario y luego marque con un check las casillas
reverificacin de las celdas F4, F5, F6, F7, F8, G7 y G8. tal y como se muestra en la figura
ms adelante.
A continuacin vamos a dar formato condicional a las celdas que tienen las horas para que
cambien de color automticamente de la siguiente forma:
las horas de llegada si son ms de las 8:00 am deberan cambiar a color rojo el fondo y
letras blancas.
Si hay descuentos, siempre y cuando este marcado un check en la columna G, entonces
la celda tambin se pintar de fondo rojo y letras blancas.
Las horas extras previamente autorizadas con un check en la columna H se pintarn de
fondo color Oro.
40. Seleccionar el rango C4:C8 y llamando al men Formato/Formato condicional elija lo
siguiente:
En el botn de Formato elija.- Fuente: Color Blanco y en Negrita; Bordes: Contorno;
Tramas: Color Rojo.

41. Seleccionar el rango D4:D8 y dele el siguiente formato condicional:


En el botn de Formato elija.- Fuente: Negrita; Bordes: Contorno; Tramas: Color Oro.

Elaborado por: Daniel Zegarra Zavaleta Pag. 134


Manual de Microsoft Excel Programacin VBA

42. Seleccionar ahora el rango F4:F8 y dele este otro formato condicional:
En el botn de Formato elija.- Fuente: Color Blanco y en Negrita; Bordes: Contorno;
Tramas: Color Rojo.

43. Seleccionar el rango D4:D8 y dele el siguiente formato condicional:


En el botn de Formato elija.- Fuente: Negrita; Bordes: Contorno; Tramas: Color Oro.

44. A continuacin guarde el archivo con el nombre Vigilancia.


45. El cuadro de vigilancia deber verse entonces como se muestra a continuacin:

Elaborado por: Daniel Zegarra Zavaleta Pag. 135


Manual de Microsoft Excel Programacin VBA

2da Parte: Creacin de macros para automatizar el Cuadro

46. Con el botn que se encuentra en las herramientas de Formulario, dibujar los siguientes
botones: Ingreso, Falta, Salida y Borrar Todo, como los que se muestran a
continuacin:

47. Adems hacia el dalo superior derecho del cuadro dibujar con Autoformas/Formas
bsicas/Seal de prohibido, el crculo con diagonal que se muestra en la figura anterior y
luego pntela con la herramienta de color de relleno, de color Rojo. Adems haga un clic
derecho en este botn y elija Formato de autoforma, luego en la ficha Proteger
desactive la casilla Bloqueada.

Elaborado por: Daniel Zegarra Zavaleta Pag. 136


Manual de Microsoft Excel Programacin VBA

48. Luego ingrese al Editor de Visual Basic con Alt+F11 y escriba en la hoja de Mdulo las
siguientes macros:

Sub Ingreso()
N = Application.WorksheetFunction.CountA(Range("Ingreso"))
If N = 5 Then End
Range("Horas").Select
ActiveCell.Select
While ActiveCell <> Empty
ActiveCell.Offset(1, 0).Activate
Wend
On Error GoTo Sale
ActiveCell = Now: Selection.NumberFormat = "h:mm AM/PM"
Range("A1").Select
Sale:
End Sub

Sub Salida()
N = Application.WorksheetFunction.CountA(Range("Salida"))
If N = 5 Then End
Range("Horas").Select
ActiveCell.Select
ActiveCell.Offset(0, 1).Activate
While ActiveCell <> Empty
ActiveCell.Offset(1, 0).Activate
Wend
If ActiveCell.Offset(0, -1) = Empty Then End
ActiveCell = Time: Selection.NumberFormat = "h:mm AM/PM"
Range("A1").Select
End Sub

Sub Falta()
N = Application.WorksheetFunction.CountA(Range("Ingreso"))
If N = 5 Then End
Range("Horas").Select
ActiveCell.Select
While ActiveCell <> Empty
ActiveCell.Offset(1, 0).Activate
Wend
On Error GoTo Sale
ActiveCell = "Falt"
ActiveCell.Offset(0, 1) = "Falt"
Range("A1").Select
Sale:
End Sub

Sub BorraTodo()
Rpta = MsgBox("Seguro desea Borrar todo?", _
vbYesNo + vbCritical + vbDefaultButton2)
If Rpta = vbNo Then End
On Error GoTo Sale
Range("Horas").ClearContents
Range("ChDctos") = True
Range("ChExtras").ClearContents

Elaborado por: Daniel Zegarra Zavaleta Pag. 137


Manual de Microsoft Excel Programacin VBA

Sale:
End Sub

Sub QuitarSeguro()
ActiveSheet.Unprotect
ActiveSheet.Shapes("LLAVE").Select
Selection.OnAction = "PoneSeguro"
Range("a1").Select
MsgBox "Proteccin ha sido retirada"
End Sub

Sub PonerSeguro()
ActiveSheet.Protect Password:="MACRO", DrawingObjects:=True, _
Contents:=True
ActiveSheet.Shapes("LLAVE").Select
Selection.OnAction = "QuitaSeguro"
Range("a1").Select
ActiveWorkbook.Save
MsgBox "La Hoja se encuentra protegida"
End Sub

49. Regrese a la Hoja Semana de Excel y a cada uno de los botones Ingreso, Falta, Salida y
Borrar todo, asgnele su respectiva macro.
50. A la autoforma seal de prohibido (circulo con diagonal rojo) asgnele la macro
PonerSeguro.
51. Ejecute la macro BorrarTodo haciendo un clic en el botn correspondiente.
52. Vuelva a guardar el archivo Vigilancia con Ctrl.+G.
Ahora estamos listos para empezar a registrar las horas de ingreso y salida del vigilante. Sin
embrago, con la finalidad de que nadie mas que usted sea el que se encargue de llevar el
control, el cuadro deber estar protegido constantemente para que nadie pueda modificar su
contenido.
Veamos, si realmente fuera la hora de ingreso en este instante habria que hacer un clic en el
botn Ingreso y se escribira automaticamente la hora en la celda correspondiente del dia
Lunes. Sino, haga un clic en la lista desplegable y elija como hora de ingreso las 7:48 am.
Luego, para proteger el cuadro bastar con hacer un clic en el botn de Seal de Prohibido y
listo. La hoja quedar protegida y adems el archivo Vigilancia se habr grabado tambin
automticamente en disco. En pantalla aparecer un mensaje indicando que la hoja ha
quedado protegida.
Cuando se desee quitar la proteccin, vuelva a presionar el botn de Seal de Prohibido y
cuando le solicite la contrasea escriba la palabra MACRO, que coincide con la palabra que se
escribi tambien en la macro QuitarSeguro de Visual Basic. Esta palabra clave usted la
puede cambiar cuando quiera alli en visual basic, y con ella se podr quitar la proteccin a la
hoja.
Una vez retirada la proteccin, en la pantalla aparecer un mensaje indicando que la hoja se
encuentra sin proteccin y entonces podr usted seguir ingresando las dems horas, tanto de
salida como de ingreso a medida que pasen los dias. Una vez ingresada una fecha recuerde
que debe volver a conectar la proteccin con un clic en el botn correspondiente.

Elaborado por: Daniel Zegarra Zavaleta Pag. 138


Manual de Microsoft Excel Programacin VBA

Si las formulas en la hoja han sido escritas correctamente, los clculos debern realizarse
automticamente.

Las celdas que definen las condiciones de pago y que usted puede cambiar son las siguientes:
La celda B2: Nombre del Vigilante
La celda C3: hora de ingreso oficial (actualmente 8:00 am)
La celda D3: hora de salida oficial (actualmente 4:00 pm)
La celda B12: Jornal diario (actualmente 90 soles)

Elaborado por: Daniel Zegarra Zavaleta Pag. 139


Manual de Microsoft Excel Programacin VBA

Resumen de tipos de datos


La tabla siguiente muestra los tipos de datos compatibles, incluyendo el tamao de almacenamiento y
el intervalo.

Tamao de
Tipo de datos Intervalo
almacenamiento
Byte 1 byte 0 a 255
Boolean 2 bytes True o False
Integer 2 bytes -32,768 a 32,767
Long
4 bytes -2,147,483,648 a 2,147,483,647
(entero largo)
Single -3.402823E38 a 1.401298E-45 para valores
(coma flotante/ 4 bytes negativos; 1,401298E-45 a 3,402823E38 para
precisin simple) valores positivos
-1.79769313486231E308 a
Double
-4,94065645841247E-324 para valores negativos;
(coma flotante/ 8 bytes
4,94065645841247E-324 a
precisin doble)
1,79769313486232E308 para valores positivos
Currency -922,337,203,685,477.5808 a
8 bytes
(entero a escala) 922,337,203.685,477.5807
+/-79,228,162,514,264,337,593,543,950,335 sin
punto decimal;
+/-7.9228162514264337593543950335 con 28
Decimal 14 bytes
posiciones a la derecha del signo decimal; el
nmero ms pequeo distinto de cero es
+/-0.0000000000000000000000000001
Date 8 bytes 1 de enero de 100 a 31 de diciembre de 9999
Object 4 bytes Cualquier referencia a tipo Object
String 10 bytes + longitud de la
Desde 0 a 2.000 millones
(longitud variable) cadena
String
Longitud de la cadena Desde 1 a 65,400 aproximadamente
(longitud fija)
Variant Cualquier valor numrico hasta el intervalo de un
16 bytes
(con nmeros) tipo Double
Variant 22 bytes + longitud de la El mismo intervalo que para un tipo String de
(con caracteres) cadena longitud variable
Definido por el
Nmero requerido por El intervalo de cada elemento es el mismo que el
usuario
los elementos intervalo de su tipo de datos.
(utilizando Type)

Nota Las matrices de cualquier tipo de datos requieren 20 bytes de memoria ms cuatro bytes para
cada dimensin de matriz, ms el nmero de bytes que ocupan los propios datos. Puede
calcular la memoria que ocupan los datos multiplicando el nmero de elementos de datos por
el tamao de cada elemento. Por ejemplo, los datos de una matriz unidimensional que
consten de cuatro elementos de datos tipo Integer de dos bytes cada uno, ocupan ocho bytes.
Los ocho bytes que requieren los datos ms los 24 bytes necesarios para la matriz suman un
requisito total de memoria de 32 bytes para dicha matriz.

Un tipo Variant que contiene una matiz requiere 12 bytes ms que la matriz por s sola.

Nota Use la funncin StrConv para converter un dato sting a otro tipo de dato

Elaborado por: Daniel Zegarra Zavaleta Pag. 140


Manual de Microsoft Excel Programacin VBA

Funciones de conversin de tipos de datos


Cada funcin convierte una expresin a un tipo de datos especfico.

Sintaxis

CBool(expresin) CByte(expresin)

CCur(expresin) CDate(expresin)

CDbl(expresin) CDec(expresin)

CInt(expresin) CLng(expresin)

CSng(expresin) CStr(expresin)

CVar(expresin)

Donde, el argumento obligatorio expresin es cualquier expresin de cadena o expresin numrica.

Tipos devueltos

El nombre de la funcin determina el tipo devuelto, como se muestra a continuacin:

Funcin Tipo devuelto Intervalo del argumento expresin


CBool Boolean Cualquier expresin de cadena o numrica vlida.
CByte Byte 0 a 255.
CCur Currency -922.337.203.685.477,5808 a 922.337.203.685.477,5807.
CDate Date Cualquier expresin de fecha.
-1.79769313486231E308 a
-4,94065645841247E-324 para valores negativos;
CDbl Double
4,94065645841247E-324 a 1,79769313486232E308 para
valores positivos.
+/-79.228.162.514.264.337.593.543.950.335 para nmeros
basados en cero, es decir, nmeros sin decimales. Para
nmeros con 28 decimales, el intervalo es
CDec Decimal
+/-7,9228162514264337593543950335.
La menor posicin para un nmero que no sea cero es
0,0000000000000000000000000001.
CInt Integer -32.768 a 32.767; las fracciones se redondean.
-2.147.483.648 a 2.147.483.647; las fracciones se
CLng Long
redondean.
-3,402823E38 a -1,401298E-45 para valores negativos;
CSng Single
1,401298E-45 a 3,402823E38 para valores positivos.
El mismo intervalo que Double para valores numricos. El
CStr String
mismo intervalo que String para valores no numricos.
El valor de retorno de CStr depende del argumento
CVar Variant
expresin.

Comentarios

Si la expresin del argumento expresin que se pasa a la funcin est fuera del intervalo del tipo de
dato al que se va a convertir, se producir un error.

Elaborado por: Daniel Zegarra Zavaleta Pag. 141


Manual de Microsoft Excel Programacin VBA

En general, el cdigo se puede documentar utilizando las funciones de conversin de tipos de datos
para indicar que el resultado de alguna de las operaciones se debera expresar como un tipo de datos
en particular, no como el tipo de datos predeterminado. Por ejemplo, utilice Ccur para forzar la
ejecucin de operaciones con aritmtica monetaria en los casos en los que se hara con precisin
simple, doble precisin o aritmtica entera.

Debe utilizar funciones de conversin de tipos en lugar de Val para proporcionar conversiones que
reconozcan las variantes internacionales. Por ejemplo, cuando utiliza CCur, se reconocen diferentes
separadores decimales, diferentes separadores de millares y varias opciones monetarias
dependiendo de la configuracin regional establecida en su equipo.

Cuando la parte fraccionaria es exactamente 0,5, CInt y CLng siempre redondean al nmero par ms
cercano. Por ejemplo, 0,5 redondea a 0, y 1,5 redondea a 2. CInt y CLng se diferencian de las
funciones Fix y Int en que truncan la parte fraccionaria de un nmero, en lugar de redondear.
Adems, Fix y Int siempre devuelven un valor del mismo tipo del que se le pasa.

Utilice la funcin IsDate para determinar si se puede convertir date a una fecha o una hora. CDate
reconoce literales de fecha y literales de hora adems de nmeros comprendidos dentro del intervalo
de fechas aceptables. Al convertir un nmero a una fecha, la parte numrica entera se convierte a una
fecha. Cualquier parte fraccionaria del nmero se convierte a la hora del da, comenzando a
medianoche.

CDate reconoce formatos de fecha que se ajusten a la configuracin regional de su sistema. Es


posible que no se determine el orden correcto del da, mes y ao si se proporciona en un formato
diferente del que reconoce la configuracin de fecha. Adems, no se puede reconocer un formato de
fecha largo si contiene la cadena del da de la semana.

Se proporciona una funcin CVDate por compatibilidad con versiones anteriores de Visual Basic. La
sintaxis de la funcin CVDate es idntica a la de la funcin CDate; sin embargo, CVDate devuelve un
Variant de subtipo Date en lugar del tipo Date real. Puesto que ahora hay un tipo de dato intrnseco
Date, no es necesario CVDate. Se puede observar el mismo efecto al convertir una expresin a Date
y asignarla despus a un Variant. Esta tcnica es coherente con la conversin de todos los dems
tipos intrnsecos a sus equivalentes subtipos Variant.

Nota La funcin CDec no devuelve un tipo de dato discreto; en su lugar, siempre devuelve un
Variant con los valores convertidos a un subtipo Decimal.

Conversin, resumen de palabras clave


Accin Palabras clave
Valor ANSI a cadena. Chr
Cadena a minsculas o a maysculas. Format, LCase, UCase
Fecha a nmero de serie. DateSerial, DateValue
Nmero decimal a otra base. Hex, Oct
Nmero a cadena. Format, Str
Un tipo de dato a otro. CBool, CByte, CCur, CDate, CDbl, CDec, CInt,
CLng, CSng, CStr, CVar, CVErr, Fix, Int
Fecha a da, mes, da de la semana o ao. Day, Month, Weekday, Year
Hora a hora, minuto o segundo. Hour, Minute, Second
Cadena a valor ASCII. Asc
Cadena a nmero. Val
Hora a nmero de serie. TimeSerial, TimeValue

Elaborado por: Daniel Zegarra Zavaleta Pag. 142


Manual de Microsoft Excel Programacin VBA

Equivalencia de Funciones en Espaol e Ingls

Elaborado por: Daniel Zegarra Zavaleta Pag. 143


Manual de Microsoft Excel Programacin VBA

Teclas de Funcin en Microsoft Excel

Tecla Funcin Shift Ctrl Alt


Abrir ventana de Abrir o cerrar el Insertar una hoja de
F1
ayuda Panel de Tareas grafico
Modificar la celda Modificar el Men
F2 activa comentario de la Archivo/Guardar
celda activa como
Pegar un nombre en Pegar una funcin Definir un nombre Men
F3
una formula en una formula de rango Insertar/Nombre/Crear
Repetir la ultima Repetir el ultimo Cerrar la ventana Cerrar la ventana de
F4 accin Buscar (Buscar del libro actual Excel
siguiente)
Ir a Men Restaurar el tamao
F5
Edicin/Buscar de la ventana
Ir al siguiente Panel Ir al Panel Anterior Ir a la siguiente Ir a la primera ventana
F6
ventana del libro del libro anterior
Men Mover la ventana
F7 Herramientas/ del libro actual
Ortografa
Ampliar una Agregar selecciones Cambiar el tamao Mostrar la ventana de
F8
seleccin de celdas mltiples de celdas de la ventana dilogo Macro
Calcular todas la Calcular la hoja Minimizar la
F9 hojas de todos los activa ventana del libro
libros abiertos activo
Activar la barra de Presentar un men Maximizar o
F10 men contextual restaurar la ventana
del libro actual
Crear un grafico Insertar una nueva Insertar una hoja de Abrir el Editor de
F11
hoja de calculo Macros (Excel 4.0) Visual Basic
Men Archivo/ Men Archivo/ Men Archivo/
F12
Guardar como Guardar (Ctrl+G) Abrir

Tecla Funcin Shift Ctrl Alt

Elaborado por: Daniel Zegarra Zavaleta Pag. 144


Manual de Microsoft Excel Programacin VBA

Cdigos ASCII para caracteres especiales:

1 26 51 3 76 L 101 e 126 ~ 151 176 201 226 251


2 27 52 4 77 M 102 f 127 152 177 202 227 252
3 28 53 5 78 N 103 g 128 153 178 203 228 253
4 29 54 6 79 O 104 h 129 154 179 204 229 254
5 30 55 7 80 P 105 i 130 155 180 205 230 255
6 31 56 8 81 Q 106 j 131 156 181 206 231
7 32 57 9 82 R 107 k 132 157 182 207 232
8 33 ! 58 : 83 S 108 l 133 158 183 208 233
9 34 " 59 ; 84 T 109 m 134 159 184 209 234
10 35 # 60 < 85 U 110 n 135 160 185 210 235
11 36 $ 61 = 86 V 111 o 136 161 186 211 236
12 37 % 62 > 87 W 112 p 137 162 187 212 237
13 38 & 63 ? 88 X 113 q 138 163 188 213 238
14 39 64 @ 89 Y 114 r 139 164 189 214 239
15 40 ( 65 A 90 Z 115 s 140 165 190 215 240 -
16 41 ) 66 B 91 [ 116 t 141 166 191 216 241
17 42 * 67 C 92 \ 117 u 142 167 192 217 242
18 43 + 68 D 93 ] 118 v 143 168 193 218 243
19 44 , 69 E 94 ^ 119 w 144 169 194 219 244
20 45 - 70 F 95 _ 120 x 145 170 195 220 245
21 46 . 71 G 96 ` 121 y 146 171 196 221 246
22 47 0 72 H 97 a 122 z 147 172 197 222 247
23 48 1 73 I 98 b 123 { 148 173 198 223 248
24 49 2 74 J 99 c 124 | 149 174 199 224 249
25 50 3 75 K 100 d 125 } 150 175 200 225 250

Teclas de Mtodo Abreviado:

Alt + Enter.- Para escribir en la siguiente lnea dentro de la celda actual.


Ctrl + Enter.- Para escribir un mismo dato simultneamente en todas las celdas
previamente seleccionadas.
Ctrl + asterisco.- Para seleccionar la regin actual. (Llmese regin a un grupo
rectangular de celdas ocupadas consecutivamente).
Ctrl + G.- Guarda el documento actual en el mismo destino donde fue guardado
la ltima vez.
Ctrl + espacio.- Selecciona ntegramente todas las columnas del rango seleccionado.
Shift + espacio.- Selecciona ntegramente todas las filas del rango seleccionado.
Ctrl + Shift + espacio.- Selecciona ntegramente todas las celdas de la hoja actual.
Ctrl + Shift + ; .- Escribe la fecha actual en la celda activa.
Ctrl + Shift + : .- Escribe la hora actual en la celda activa, pero como un dato del tipo
texto.
Ctrl + flecha.- Desplaza el puntero de celda hasta la ltima celda ocupada en la
direccin de la flecha.
Ctrl + Shift + flecha.- A partir de la celda actual selecciona todas las celdas hasta la ltima
celda ocupada en la direccin de la flecha.

Elaborado por: Daniel Zegarra Zavaleta Pag. 145