Está en la página 1de 48

MANUAL DE

EXCEL MACROS
Excel Macros

EXCEL MACROS

OBJETIVOS DE APRENDIZAJE
Al finalizar la actividad se espera que los participantes estén en condiciones de:

y Crear Macros con la grabadora y desde el Editor de VBA

y Crear Funciones definidas por el usuario

y Capturar y manipular errores en tiempo de ejecución

y Asignar macros a: un menú, un botón y una barra de herramientas personalizada.

2 Departamento de Capacitación y Desarrollo


UNIDAD 1
MACROS – GRABADORA DE MACROS
• Automatización de Tareas Repetitivas Mediante Macros

• Seguridad en Macros

• Crear una Macro con la Grabadora de Macros

• Ejecutar la Macro Grabada

Departamento de Capacitación y Desarrollo 3


Excel Macros

AUTOMATIZACIÓN DE TAREAS REPETITIVAS MEDIANTE MACROS


En Excel las tareas repetidas se automatizan con macros.
Una macro es una secuencia de instrucciones que le indican a Excel qué debe hacer.

Las instrucciones están escritas en Visual Basic for Applications (VBA), pero el usuario no
tiene que ser un programador para crear macros, aunque sí debe conocer muy bien las
herramientas y comandos que provee la hoja de cálculo y adaptar su pensamiento a las
estructuras lógicas que cualquier lenguaje de programación requiere.

Excel provee una grabadora de macros que las escribe en forma automática. La grabadora
de macros almacena las acciones que se realizan y los comandos que se eligen mientras
se trabaja con Excel. Después las macros se pueden reproducir o ejecutar para repetir en
forma automática acciones previamente grabadas, ahorrando tiempo y esfuerzo.

Las macros de Excel permiten:

ƒ Combinar un grupo de acciones, que luego pueden ejecutarse con una


combinación de teclas o mediante un icono desde una barra de herramientas.
ƒ Asumir argumentos que devuelven valores como ocurre con una función
predeterminada de la hoja de trabajo.
ƒ Disminuir el tiempo que usted pasa creando, modificando e imprimiendo sus
planillas. Se tornan así fáciles de usar ya que con sólo tocar un icono o un botón
incrustado en la hoja de trabajo, se desencadena una operatoria realizada a
medida.
Después de aprender a grabar y ejecutar macros, descubrirá lo útil que puede ser
personalizarlas más aún, agregándole código en VBA que con la grabadora de macros no
puede ser incorporado.

De esta manera, Excel se puede transformar en una aplicación completamente diferente,


porque Visual Basic contiene herramientas que hacen posible que Excel se adapte a las
necesidades más específicas: desde la automatización de tareas repetidas hasta la
creación de aplicaciones complejas con múltiples características.

SEGURIDAD EN MACROS
El primer paso para automatizar una tarea mediante macros, consiste en establecer el
nivel de seguridad en medio o bajo para poder grabar/ejecutar una macro.

Procedimiento
1. Seleccione del menú Herramientas el comando Macro, Seguridad… o menú
Herramientas, Opciones…ficha Seguridad, botón Seguridad de macros…
2. En la ficha Nivel de seguridad, seleccione el nivel de seguridad Medio o Bajo
y oprima el botón Aceptar.

4 Departamento de Capacitación y Desarrollo


Seguridad en macros

CREAR UNA MACRO CON LA GRABADORA DE MACROS


Una vez definido el nivel de seguridad para la creación/ejecución de las macros, se puede
comenzar a utilizar la grabadora para crear macros.

Grabar una macro

Procedimiento
1. Seleccione del menú Herramientas el comando Macro, Grabar nueva
macro…
2. En el cuadro Nombre de la macro, escriba un nombre para la macro.
El nombre no puede contener espacios ni signos de puntuación. El
primer carácter del nombre de la macro debe ser una letra.
3. Si desea ejecutar la macro presionando un método abreviado,
escriba una letra en el cuadro Método abreviado. Puede utilizarse
CTRL+ letra (para letras minúsculas) o CTRL+ MAYÚS + letra (para
letras mayúsculas), donde letra es cualquier tecla del teclado. La
tecla de método abreviado que se utilice no puede ser ni un número
ni un carácter especial como @ o #.

Departamento de Capacitación y Desarrollo 5


Excel Macros

4. En el cuadro Guardar macro en, haga clic en el libro en que desea


almacenar la macro.
Si desea que la macro esté disponible siempre que utilice Excel,
seleccione Libro de macros personal
5. Si desea incluir una descripción de la macro, escríbala en el cuadro
Descripción.
6. Haga clic en Aceptar
7. Si desea que la macro se ejecute con relación a la posición de la celda
activa, haga clic en el botón Referencias relativas en la barra de
herramientas Detener grabación
8. Ejecute las acciones que desee grabar.
9. Cuando finalice, haga clic en el botón Detener grabación en la barra
de herramientas Detener grabación

Barra de herramientas Detener grabación

EJECUTAR LA MACRO GRABADA


Después de grabar una macro, se puede repetir o ejecutar en cualquier momento. Excel
ejecutará todos los comandos almacenados durante el proceso de grabación de la misma.

Procedimiento
1. Seleccione del menú Herramientas el comando Macro, Macros…
2. Escriba o seleccione la macro que desea ejecutar de la lista de
macros grabadas.
3. Haga clic en Ejecutar. Si desea interrumpir la ejecución, presione ESC

Otra forma de ejecutar una macro es pulsando la combinación de teclas asignada en la


grabación, como método abreviado, o activando el botón Ejecutar macro de la Barra de
herramientas de Visual Basic.

Barra de herramientas Visual Basic

6 Departamento de Capacitación y Desarrollo


UNIDAD 2 -
MACROS – VISUAL BASIC FOR APPLICATION (VBA)

• Introducción a VBA (Visual Basic for Application)

• Ventana del Editor de Visual Basic

• Ventana de Propiedades, de Proyecto y de Código

• Mostrar un Módulo en la Ventana de Código

• Editar y Depurar Macros desde el Editor de Visual Basic

• Crear Macros desde el Editor de Visual Basic

• Variables – Declarar Variables y Alcance de las mismas

• Constantes

• Funciones InputBox y MsgBox

• Estructuras de Control

• Ejecución de Código Basado en Condiciones

• Estructuras para Repetir el Mismo Código (Hacer Bucles)

• Macros Modulares – Procedimientos que Invocan a otros Procedimientos

• Otras Funciones

• Funciones Personalizadas (Definidas por el Usuario)

• Partes de una Función Definida por el Usuario

• Creación de una Función Definida por el Usuario

• Utilización de Funciones Definidas por el Usuario

Departamento de Capacitación y Desarrollo 7


Excel Macros

INTRODUCCIÓN A VBA (VISUAL BASIC FOR APPLICATION)


Visual Basic for Application es el lenguaje macro estándar incorporado a las aplicaciones
de Office, es un entorno de programación diseñado específicamente para macros de
aplicación, está íntimamente relacionado con VB ya que es un derivado del mismo, pero
configurado y optimizado para su uso con aplicaciones.

CONCEPTOS DE PROYECTO, MÓDULO, OBJETOS, PROPIEDADES Y


MÉTODOS

Proyecto
Contenedor del libro donde se trabaja, sus objetos (hojas), los módulos que se crean o
insertan al grabar o escribir una macro y los formularios (UserForms)

Módulo
Contenedor del código de la macro que se crea, es decir, el conjunto de sentencias u
órdenes

Objetos
Elementos distinguibles dentro de la aplicación Excel.
Objetos que encontramos en Excel: WorkSheet (Objeto hoja de cálculo) o Range (Objeto
celda o rango de celdas).

Propiedades
Las propiedades son características que tienen los objetos.
Cualquier objeto tiene propiedades tales como, color, forma y medidas. La propiedad es
una característica, modificable o no, de un objeto.

Métodos
Son acciones que se llevan a cabo sobre un objeto.
Por ejemplo el método Activate, hace activa una celda determinada, el método Clear,
borra el contenido de una celda o rango de celdas, el método Copy, copia el contenido de
la celda o rango de celdas en el portapapeles.

8 Departamento de Capacitación y Desarrollo


Al grabar una macro, la aplicación crea un proyecto VBA.
Un Proyecto VBA es un contenedor que incluye el documento usado para la macro y un
objeto especial: el módulo que contiene el código de la macro.

VBA presenta dos tipos de procedimientos:


ƒ Procedimientos Sub
Que son de órdenes (denominados también subprocedimientos o sub), que
contienen sentencias que son equivalentes a las opciones de menúes y otras
órdenes o comandos de los programas.
Tienen efecto en su entorno; es decir, modifican algo.
ƒ Procedimientos Function
que son las funciones definidas por el usuario: funcionan igual que las funciones
incorporadas. Aceptan argumentos, los manipulan y luego devuelven un
resultado.
Un procedimiento típico presenta las siguientes características:
ƒ Un encabezado y un pie del procedimiento:
Sub nombre_del_procedimiento()


End Sub

Function nombre_de_la_función(arg1,arg2,...)


End Function
Las palabras Sub o Function/End Sub o End Function marcan el comienzo y el final
de un procedimiento, sea éste un procedimiento de orden o una función.

ƒ El nombre del procedimiento: después de la palabra Sub o Function, Excel espera


el nombre del procedimiento seguido por un juego de paréntesis ().

ƒ El código del procedimiento: es el cuerpo principal de las macros. En otras


palabras, son las líneas o sentencias que se encuentran entre el encabezado y el
final de un procedimiento. Cada sentencia de código expresa y ejecuta una
acción.

ƒ Comentarios: Los comentarios son muy útiles para la documentación de una


macro, a manera de explicación de lo que una parte del código o una sentencia
realiza.

Departamento de Capacitación y Desarrollo 9


Excel Macros

VENTANA DEL EDITOR DE VISUAL BASIC


Para visualizar las acciones que se grabaron durante la creación de una macro, se debe
activar la ventana del Editor de Visual Basic.

Barra de herramientas de Visual Basic

Para ello, ejecute alguna de las siguientes opciones:


- Seleccione del menú Herramientas el comando Macro, Editor de
Visual Basic.
- Pulse la combinación de teclas: ALT + F11
- Pulse el botón Editor de Visual Basic en la Barra de herramientas de
Visual Basic.

Ventana del Editor de Visual Basic

10 Departamento de Capacitación y Desarrollo


VENTANA DE PROPIEDADES, DE PROYECTO Y DE CÓDIGO
La ventana del Editor de Visual Basic está dividida en tres áreas:
ƒ El Explorador de proyectos:
Muestra una vista jerárquica del contenido del proyecto activo VBA (Si no se lo
ve, seleccione el menú Ver, Explorador de Proyectos o bien, pulse CTRL + R.
También puede hacer un clic sobre el icono Explorador de Proyectos de la barra
de herramientas)

ƒ La Ventana de Propiedades:
Muestra las distintas propiedades que se encuentran disponibles para cualquier
objeto que esté resaltado en el Explorador de Proyectos (Si no ve la ventana de
propiedades, seleccione el comando Ventana de Propiedades del menú Ver o
pulse F4, o bien haga clic sobre el ícono Ventana de Propiedades de la barra de
herramientas)

ƒ La Ventana del Código o el área de trabajo:


El resto del Editor de Visual Basic queda cubierto por el área de trabajo. Es el
lugar en el que aparecen los módulos con los que trabaja.

MOSTRAR UN MÓDULO EN LA VENTANA DE CÓDIGO


Como se vio anteriormente, las macros se almacenan en contenedores llamados módulos.
Al crear nuevas macros, éstas dan origen a nuevos módulos dentro del mismo proyecto,
por lo tanto, para ver un determinado módulo hay que mostrarlo en la ventana de código.

Procedimiento
1. Active la ventana del Editor de Visual Basic por alguno de los métodos
vistos anteriormente.
2. Seleccione el módulo en el Explorador de Proyectos
3. Ejecute alguna de las siguientes opciones:
ƒ Pulse el icono Ver Código de la barra de herramientas del Explorador
ƒ Pulse la tecla de función F7
ƒ Active el menú Ver, comando Código

Ventana del Explorador de proyectos

Departamento de Capacitación y Desarrollo 11


Excel Macros

EDITAR Y DEPURAR MACROS DESDE EL EDITOR DE VISUAL BASIC


Al mostrar un determinado módulo en la ventana de código, se ve el código del
procedimiento creado al grabar la macro, es decir el cuerpo principal de la macro. En otras
palabras, se ven las líneas o sentencias que se encuentran entre el encabezado y el final
de un procedimiento donde cada sentencia de código expresa y ejecuta una acción.

Ventana de Código

Una macro típica presenta las siguientes características:


Comentarios: las primeras líneas comienzan con una comilla (') que indica a la aplicación
que lo que sigue es un comentario que no será procesado cuando se corra la macro, salvo
que se hayan cambiado las opciones, el texto de los comentarios se muestra en verde.
Sub / End Sub: estas palabras marcan el comienzo (Sub) y final (End Sub) de una macro.
Nombre de la macro: después de la palabra Sub, se introduce el nombre de la macro
seguido por un paréntesis de comienzo y fin (). Los paréntesis se usan para los
argumentos. Los nombres de macros no pueden contener espacios.
Código de la macro: el cuerpo principal de la macro está compuesto por una serie de
sentencias o enunciados. Éstas son las interpretaciones que hizo Excel de las acciones que
el usuario realizó durante la grabación.
Por ejemplo la sentencia
ActiveCell.FormulaR1C1 = "Ventas: Año 2007"
introduce el texto Ventas: Año 2007 en la celda activa. Equivale a escribir manualmente el
texto en la celda activa y presionar Enter.

Las sentencias consisten en palabras claves, operadores, variables y llamadas a


procedimientos.

Las palabras claves son términos que tienen un significado especial en Visual Basic. Si se
desea conocer el significado de las palabras claves, se debe seleccionar la palabra y pulsar
la tecla de función F1 que trae la ayuda correspondiente.

12 Departamento de Capacitación y Desarrollo


La edición y depuración de una macro se realiza en la Ventana de Código del Editor de
visual Basic.

La depuración de una macro puede consistir en agregar comentarios, eliminar líneas de


código erróneo o bien agregar instrucciones que con la grabadora de macros no se
pueden generar.

Procedimiento
1. Seleccione del menú Herramientas el comando Macro, Macros… (o
ALT +F8 para acceder al cuadro de diálogo Macro)
2. En la lista Nombre de la macro, seleccione la macro cuyo código
quiere editar y/o modificar.
3. Pulse el botón Modificar. La aplicación abrirá la ventana del Editor de
Visual Basic y el módulo que contiene a la macro.

CREAR MACROS DESDE EL EDITOR DE VISUAL BASIC


Aunque grabar macros es muy útil para automatizar tareas sencillas, la grabadora de
macros sólo puede registrar acciones que surgen de comandos de menúes, movimientos
del mouse o ingreso de información mediante el teclado.

Pero si se trata de evaluar ciertas condiciones, de solicitar información al usuario o de


enviar mensajes al mismo para ejecutar luego alguna acción, la grabadora es incapaz de
registrar estas circunstancias. Por ende, muchas veces se hace necesario editar y
personalizar las macros grabadas para adaptarlas a las necesidades del usuario o
directamente crearlas sin la intervención de la grabadora de macros.

Para modificar una macro existente se debe activar la ventana de código correspondiente
a esa macro (ver punto anterior) y luego modificar, agregar o eliminar código.

Crear una nueva macro sin la intervención de la grabadora implica que se debe insertar
primero un módulo como objeto contenedor de la macro o crear la macro dentro de un
módulo existente.

Departamento de Capacitación y Desarrollo 13


Excel Macros

Procedimiento
1. Active la ventana del Editor de Visual Basic
(menú Herramientas, Macro, Editor de Visual Basic o ALT +F11 o
mediante el botón Editor de Visual Basic de la Barra de herramientas de
Visual Basic).
2. Si ya existe un módulo, selecciónelo desde el Explorador de Proyectos
haciendo doble clic sobre el módulo y continúe en el paso 4.
3. Si no existe ningún módulo deberá insertarlo:
Active el menú Insertar y seleccione el comando Módulo.
4. Escriba la palabra reservada Sub, un espacio y a continuación el nombre
que tendrá la macro y paréntesis de apertura y cierre. Oprima la tecla
Enter. Automáticamente el Editor de Visual Basic escribirá End Sub para
cerrar el procedimiento.
5. El punto de inserción queda entre el inicio y fin del procedimiento.
Escriba las líneas de código, sentencias o instrucciones que deberá
ejecutar la macro.
6. Pruebe el funcionamiento de la misma y luego asigne la macro a un
botón, un menú o una barra de herramientas personalizada para
ejecutarla.

VARIABLES
Los procedimientos de VBA necesitarán a menudo almacenar valores temporales. En VBA,
al igual que sucede en la mayoría de los lenguajes de programación, esos valores se
almacenan temporalmente en las llamadas variables.

Éstas son espacios definidos y localizados en memoria a los que se les asigna un nombre
para poder recuperar su contenido, que tienen un tamaño de acuerdo al tipo de variable,
que tienen un alcance (es decir, una duración determinada) de acuerdo a su localización.
(Locales, del Módulo o Públicas)

Declarar Variables
Las variables se declaran incluyendo la sentencia Dim (Dim es un apócope de dimension).

La sintaxis de una sentencia Dim es:


Dim nombreVariable As tipoDato
Donde:
nombreVariable es el nombre de la variable y debe cumplir con las siguientes reglas:
- Debe comenzar con un carácter alfabético.
- No puede superar los 255 caracteres.
- No puede ser una palabra clave de VBA
- No puede contener espacios o alguno de los siguientes caracteres:
,!#%&@

14 Departamento de Capacitación y Desarrollo


tipoDato indica el tipo de datos que almacenará la variable:
- Array: Un juego de variables donde a cada elemento del grupo
se le hace referencia por un número índice.
- Boolean: Toma uno de entre dos valores lógicos: True o False.
- Currency: Se usa para cálculos de moneda o de decimal fijo en los que la
exactitud es importante.
El rango va desde -922.337.203.685.477,5808 hasta 922.337.203.685.477,5807.
- Date: Se usa para mantener información de la fecha.
El rango va desde 1/1/1100 hasta 31/12/9999.
- Double: Coma flotante de doble precisión.
Los números van desde -1,79769313486232E308 hasta 4,9406564584124E-
324.
- Integer: Valores de enteros pequeños solamente.
El rango va desde -32.768 hasta 32.767.
- Long: Valores de enteros grandes. El rango va desde -2.147.483.647 hasta
2.147.483.647.
- Object: Se refiere a objetos únicamente.
- Single: Coma flotante de precisión simple. El rango va desde -3,402823E38
hasta 3,402823E38.
- String: Contiene los valores de cadena. Las cadenas pueden llegar hasta 64 KB.
- Variant: Puede tomar cualquier tipo de información.

La declaración de variables inicializa a las mismas con el valor cero si son numéricas y con
el valor nulo si son alfanuméricas.

Ejemplos de declaraciones de variables:


- Dim NomArch As String

- Dim Nro As Integer

- Private Texto As String

- Public Contador As Integer

Alcance de las Variables


El alcance de una variable especifica en qué parte de la aplicación la variable es
reconocida y, por lo tanto, puede utilizarse. Es decir, cuando se declara una variable
ubicada en un procedimiento sólo el código de ese procedimiento puede tener acceso a
ella o cambiar su valor.

Sin embargo, a veces es necesario utilizar una variable con un alcance más amplio, tal
como una variable cuyo valor esté a disposición de todos los procedimientos ubicados en
el mismo módulo de Visual Basic o, incluso, de todos los procedimientos del libro de
trabajo.

El alcance de una variable, depende de cómo se la declare.

Departamento de Capacitación y Desarrollo 15


Excel Macros

Alcance Declaración
Local Dentro del procedimiento
Sub Macro1()
Dim PTotal as Single
::::::
End Sub
Módulo En la parte superior del módulo antes de cualquier procedimiento
Dim PTotal as Single
Sub Macro2()
:::::
End Sub
Público En la parte superior del módulo, declarándola con la palabra reservada
Public en lugar de Dim
Public PTotal as Single
Sub Macro2()
:::::
End Sub

CONSTANTES
Las constantes son elementos con nombre que mantienen un valor constante a través de
la ejecución de un programa. Es un nombre significativo utilizado en lugar de un valor.

Las constantes se definen con el enunciado Const

La sintaxis del enunciado Const es:


Const nombreConstante = expresión

Donde:
nombreConstante es cualquier nombre válido (las reglas son las mismas que las que se
utilizan para los nombres de variables) y expresión se compone de constantes numéricas
o de cadenas de caracteres y de funciones y operadores incorporados.

Debido a que en el módulo las constantes generalmente son utilizadas por más de un
procedimiento, se deben poner los enunciados Const juntos en la parte superior del
módulo, encima de la primera línea del procedimiento.

Const PI = 3.14159265
Const IVA = 0.21
Const NRO_AVOGADRO = 6.0225E+23

16 Departamento de Capacitación y Desarrollo


CUADROS DE DIÁLOGO
Un aspecto importante en la creación de una aplicación personalizada en Excel consiste
en administrar la forma en que el usuario interactúa con la aplicación.

Para el intercambio de información entre la aplicación y los usuarios están los cuadros de
diálogo predefinidos que es un tipo de cuadro de diálogo que puede ser presentado y
diseñado fácilmente.

Las funciones Msgbox e InputBox son dos funciones para presentar mensajes y solicitar
información al usuario a través de cuadros de diálogo, permitiendo así la interacción
entre éste y la aplicación.

FUNCIÓN MSGBOX
Esta función se utiliza para presentar mensajes breves, como mensajes de error o avisos.
El mensaje se muestra en un cuadro de diálogo donde se espera a que el usuario haga clic
en un botón para cerrarlo.

La sintaxis de la función es:


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

Argumento Descripción
prompt Requerido. Expresión de cadena que representa el prompt en el
cuadro de diálogo. La longitud máxima del prompt es de
aproximadamente 1024 caracteres, según el ancho de los caracteres
utilizados. Si prompt consta de más de una línea, puede separarlos
utilizando un carácter de retorno de carro (Chr(13)) o un carácter de
avance de línea (Chr(10)), o una combinación de caracteres de retorno
de carro – avance de línea (Chr(13) y Chr(10)) entre cada línea y la
siguiente.
buttons Opcional. Expresión numérica que corresponde a la suma de los
valores que especifican el número y el tipo de los botones que se
pretenden mostrar, el estilo de icono que se va a utilizar, la identidad
del botón predeterminado y la modalidad del cuadro de mensajes. Si
se omite este argumento, el valor predeterminado para buttons es 0.
title Opcional. Expresión de cadena que se muestra en la barra de título
del cuadro de diálogo. Si se omite title, en la barra de título se coloca
el nombre de la aplicación.
helpfile Opcional. Expresión de cadena que identifica el archivo de Ayuda que
se utiliza para proporcionar ayuda interactiva en el cuadro de diálogo.
Si se especifica helpfile, también se debe especificar context.
context Opcional. Expresión numérica que es igual al número de contexto de
Ayuda asignado por el autor al tema de Ayuda correspondiente. Si se
especifica context, también se debe especificar helpfile.

Departamento de Capacitación y Desarrollo 17


Excel Macros

El cuadro de diálogo de la figura anterior corresponde a la ejecución de la macro llamada


mensaje que a través de la función MsgBox le envía un mensaje recordatorio al usuario:

Sub mensaje()
MsgBox "Recuerde que debe completar todos los datos", vbOKOnly, "Aviso"
End Sub

FUNCIÓN INPUTBOX
Esta función se utiliza para solicitar información al usuario.
La misma presenta un cuadro de diálogo conteniendo un mensaje y un cuadro de texto
donde el usuario debe ingresar información que requiere la macro para continuar
ejecutándose.

La sintaxis de la función es:


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

Argumento Descripción
prompt Requerido. Expresión de cadena que se muestra como mensaje en el
cuadro de diálogo. La longitud máxima de prompt es de
aproximadamente 1024 caracteres, según el ancho de los caracteres
utilizados. Si prompt consta de más de una línea, puede separarlos
utilizando un carácter de retorno de carro (Chr(13)), un carácter de
avance de línea (Chr(10)) o una combinación de los caracteres de
retorno de carro-avance de línea (Chr(13) y Chr(10)) entre cada línea y la
siguiente.
title Opcional. Expresión de cadena que se muestra en la barra de título del
cuadro de diálogo. Si omite title, en la barra de título se coloca el
nombre de la aplicación.
default Opcional. Expresión de cadena que se muestra en el cuadro de texto
como respuesta predeterminada cuando no se suministra una cadena.
Si omite default, se muestra el cuadro de texto vacío.
xpos Opcional. Expresión numérica que especifica, en twips, la distancia en
sentido horizontal entre el borde izquierdo del cuadro de diálogo y el
borde izquierdo de la pantalla. Si se omite xpos, el cuadro de diálogo se
centra horizontalmente.
ypos Opcional. Expresión numérica que especifica, en twips, la distancia en
sentido vertical entre el borde superior del cuadro de diálogo y el borde
superior de la pantalla. Si se omite ypos, el cuadro de diálogo se coloca a
aproximadamente un tercio de la altura de la pantalla, desde el borde
superior de la misma.
helpfile Opcional. Expresión de cadena que identifica el archivo de Ayuda que se

18 Departamento de Capacitación y Desarrollo


utilizará para proporcionar ayuda interactiva para el cuadro de diálogo.
Si se especifica helpfile, también deberá especificarse context.
context Opcional. Expresión numérica que es el número de contexto de Ayuda
asignado por el autor al tema de Ayuda correspondiente. Si se especifica
context, también deberá especificarse helpfile.

El cuadro de diálogo de la figura anterior corresponde a la ejecución de la macro llamada


IngresarDatos, que a través de la función InputBox le solicita información al usuario,
almacenando la respuesta en la variable Rango:

Sub IngresarDatos()
Rango = InputBox("Ingrese rango de celdas", "Rango para centrar título", "A1:J1")
End Sub

ESTRUCTURAS DE CONTROL
Las sentencias que controlan la toma de decisiones y la creación de bucles en Visual Basic,
se denominan estructuras de control.

Las estructuras de control se pueden dividir en:

ƒ Estructuras basadas en condiciones (Toma de decisiones).


ƒ Estructuras para repetir el mismo código varias veces (Hacer bucles).

ESTRUCTURAS BASADAS EN CONDICIONES


Los procedimientos de Visual Basic pueden someter a prueba determinadas condiciones
especificadas dentro del código y, después, según los resultados de dicha prueba, ejecutar
distintas operaciones.

Las estructuras diseñadas para la toma de decisiones que provee Visual Basic son las
instrucciones:

ƒ If…Then
ƒ If…Then…Else
ƒ Select Case

Departamento de Capacitación y Desarrollo 19


Excel Macros

Instrucción If…Then
Utilice la sintaxis If…Then para ejecutar uno o más sentencias según las condiciones
encontradas. Es posible utilizar una sintaxis de una sola línea o sintaxis de varias líneas,
llamada también sintaxis de bloque.

a) Sintaxis simple (una sola línea):


If condición Then sentencia

If FechaIng < Date Then FechaIng = Date

b) Sintaxis de bloque (varias líneas):


If condición Then
sentencia(s)
End If

If FechaIng < Date Then


FechaIng = Date
MsgBox “La fecha de ingreso es: “ & FechaIng
End if

Observe que en la sintaxis simple If…Then no usa el enunciado End If. Si en cambio, desea
ejecutar más de una línea de código cuando la condición es verdadera, se debe utilizar la
sintaxis de bloque If…Then…End If

Instrucción If…Then…Else…End If
Utilice la sintaxis If…Then…Else…End If para definir dos bloques de instrucciones
ejecutables: un bloque que se ejecutará cuando la condición es Verdadera y el otro que se
ejecutará si la condición es Falsa.

La sintaxis de la instrucción es:


If condicion Then
Sentencia(s)
Else
Sentencia(s)
End If

Ejemplo:
If Edad < 16 Then
MsgBox “No puede manejar”
Else
MsgBox “Puede realizar el examen de manejo”
End if

Se pueden añadir instrucciones ElseIf a una instrucción If...Then...Else para comprobar


varias condiciones, reemplazando varios enunciados If…then anidados, abreviando el
código y haciéndolo más fácil de leer.

20 Departamento de Capacitación y Desarrollo


La sintaxis para evaluar varias condiciones es:
If condición1 Then
sentencia(s)
ElseIf condición2 Then
sentencia(s)
ElseIf condición3 Then
sentencia(s)
Else
sentencia(s)
End If

Ejemplo:
If Categoria = 1 Then
Bonificacion = Salario * 0.1*Empleados_a_Cargo
ElseIf Categoria = 2 Then
Bonificacion = Salario * 0.15*Empleados_a_Cargo
ElseIf Categoria = 3 Then
Bonificacion = Salario * 0.2*Empleados_a_Cargo
Else
Bonificacion = 0
End If

Instrucción Select Case


Visual Basic provee la sentencia Select Case como una alternativa a la estructura
If…Then…ElsIf…Else…End If para comparar una misma expresión con varios valores
diferentes.
La sentencia Select Case hace al código más eficiente y legible, ejecutando uno de varios
grupos de instrucciones, dependiendo del valor de una expresión.

La sintaxis de la instrucción es:


Select Case expresión_prueba
[Case lista_expresion-n
[instrucciones-n]] ...
[Case Else
[instrucciones_else]]
End Select

Ejemplo:
Select Case Categoria
Case 1
Bonificacion = Salario * 0.1*Empleados_a_Cargo
Case 2
Bonificacion = Salario * 0.15*Empleados_a_Cargo
Case 3
Bonificacion = Salario * 0.2*Empleados_a_Cargo
Case 4
Bonificacion = Salario * 0.25*Empleados_a_Cargo
Case Else
Bonificacion = 0
End Select

Departamento de Capacitación y Desarrollo 21


Excel Macros

ESTRUCTURAS PARA REPETIR EL MISMO CÓDIGO VARIAS VECES


(HACER BUCLES)
Las estructuras de bucles se utilizan para ejecutar una o más líneas de código repetidas
veces.
Las más utilizadas son:

ƒ While…Wend / Do While…Loop
ƒ For…Next
ƒ For Each…Next
ƒ With…End With

Instrucción While…Wend o Do While…Loop


Ejecuta una serie de instrucciones mientras una condición dada sea Verdadera.

La sintaxis de la instrucción es:


While condición
[intrucciones]
Wend

Do While condición
[intrucciones]
Loop

Si la condición es Veradera, todas las instrucciones se ejecutan hasta que se encuentra la


instrucción Wend o Loop. Después, el control vuelve a la instrucción While y se
comprueba de nuevo la condición. Si aún es Verdadera, se repite el proceso. Si no es
Veradera, la ejecución se reanuda con la instrucción que sigue a la instrucción Wend o
Loop

Ejemplo:
While Contador < 20 Do While Contador < 20
Contador = Contador + 1 Contador = Contador + 1
Wend Loop
MsgBox “El contador quedó en: “ & MsgBox “El contador quedó en: “ &
Contador Contador

En el ejemplo anterior se utiliza la instrucción While...Wend o Do While…Loop para


incrementar una variable llamada Contador. Las instrucciones del bucle se ejecutan
mientras la condición sea Verdadera. El bucle finaliza cuando el Contador es > 19,
presentando un mensaje por pantalla mostrando el valor de la variable Contador.

22 Departamento de Capacitación y Desarrollo


Instrucción For…Next
Repite un grupo de instrucciones un número especificado de veces.

La sintaxis de la instrucción es:


For contador = principio To fin [Step incremento]
[instrucciones]
Next [contador]

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


incremento determina la manera en que se procesa el bucle.
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 ejecución continúa con la instrucción que sigue
a la instrucción Next.

Ejemplo:
For cont = 1 To 20
Range("A" & cont).Value = cont
Next

En este ejemplo, el ciclo For genera una serie aritmética de 1 a 20 en el rango de celdas
A1:A20.

Se pueden anidar bucles For...Next, colocando un bucle For...Next dentro de otro. Para
ello, se debe proporcionar a cada bucle un nombre de variable único como su contador

Ejemplo:
For I = 1 To 10
For J = 1 To 20
...
Next J
Next I

Instrucción For Each…Next


Repite un grupo de instrucciones para cada elemento de una matriz o colección.

La sintaxis de la instrucción es:


For Each elemento In grupo
[instrucciones]
Next [elemento]

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. Después, mientras haya más elementos en grupo, las
instrucciones en el bucle continúan ejecutándose para cada elemento. Cuando no hay
más elementos en el grupo, se sale del bucle y la ejecución continúa con la instrucción
que sigue a la instrucción Next

Departamento de Capacitación y Desarrollo 23


Excel Macros

Ejemplo:
For Each celda In Selection
celda.Value = UCase(celda.Value)
Next

En el ejemplo, se convierten a mayúsculas (mediante la función Ucase) los contenidos del


grupo de celdas previamente seleccionadas, representadas por la palabra Selection.

Instrucción With…End With


Ejecuta una serie de instrucciones sobre un único objeto o sobre un tipo definido por el
usuario.

La sintaxis de la instrucción es:


With objeto
[instrucciones]
End With

La instrucción With permite realizar una serie de instrucciones sobre un objeto


especificado sin volver a calificar el nombre del objeto. Por ejemplo, para cambiar un
número de propiedades diferentes en un único objeto, es más conveniente colocar las
instrucciones de asignación de las propiedades en la estructura de control With, haciendo
referencia al objeto una vez, en lugar de hacerlo con cada asignación de propiedad.

Ejemplo:
With Selection.Font
.Name = "Arial"
.FontStyle = "Negrita"
.Size = 14
.ColorIndex = xlAutomatic
End With

El ejemplo ilustra el uso de la instrucción With para asignar valores a las propiedades
nombre, estilo, tamaño y color del objeto fuente en reemplazo de las sentencias:
Selection.Font.Name = "Arial"
Selection.Font.FontStyle = "Negrita"
Selection.Font.Size = 14
Selection.Font.ColorIndex = xlAutomatic

24 Departamento de Capacitación y Desarrollo


MACROS MODULARES – PROCEDIMIENTOS QUE INVOCAN A OTROS
PROCEDMIENTOS
Mediante el análisis de una tarea, muchas veces se ve que ésta puede ser dividida en
tareas secundarias, cada una de las cuales puede ser manejada por un procedimiento
independiente.

El objetivo del programador consiste en crear procedimientos cortos, reutilizables, fáciles


de mantener y que funcionen en conjunto. Los procedimientos cortos son más fáciles de
diseñar, de poner en práctica, de depurar y de actualizar, debido a que constan de mucho
menos código que un procedimiento grande.

Con el uso de procedimientos múltiples, también es posible evitar escribir varias veces el
mismo código; simplemente se pone el código en común en un procedimiento y se hace
que los otros procedimientos lo llamen en la medida en que lo necesiten.

Un procedimiento puede llamar o ser llamado por otro procedimiento. Llamar o invocar a
un procedimiento significa ejecutarlo. La capacidad de un procedimiento de llamar a otro
o la de varios de invocar al mismo procedimiento es lo que llamamos modularizar las
macros.

Llamar a un procedimiento es como ejecutar una macro, pero la llamada tiene lugar en el
código en Visual Basic. En vez de que el usuario tenga que ejecutar las macros PrepararHoja,
ObtenerDatosAcc e InsertarValores una a continuación de otra mediante tres botones o líneas
de comandos distintos, se ejecutan las tres, en forma secuencial, desde un único procedimiento
asociado a un único botón o comando de un menú.

Por ejemplo, el siguiente procedimiento llamado VentaDeAcciones, llama a otros tres


procedimientos: PrepararHoja, ObtenerDatosAcc e InsertarValores que se ejecutan en
forma consecutiva.

Sub VentaDeAcciones()
PrepararHoja
ObtenerDatosAcc
InsertarValores
End Sub

Notar que los procedimientos invocados por otro procedimiento no llevan paréntesis.

No es necesario que los procedimientos estén contenidos en el mismo módulo ya que


Visual Basic busca a los procedimientos en el módulo que contiene al procedimiento
modularizado y si no lo encuentra, lo busca en el resto de los módulos del mismo
proyecto.
Como norma general, se deben dar nombres únicos a los procedimientos para que no
haya ambigüedad cuando sean invocados.

Departamento de Capacitación y Desarrollo 25


Excel Macros

OTRAS FUNCIONES

IsEmpty
Devuelve un valor de tipo Boolean (True o False) que indica si la expresión pasada como
argumento está vacía o ha sido inicializada.

Sintaxis:
IsEmpty(expresión)

Ejemplo:
IsEmpty(ActiveCell.Value)
La función aplicada a la celda activa devuelve True si la celda está vacía y False si la celda
tiene algún contenido.

VarType
Devuelve un número entero (Integer) que indica el tipo de contenido de la variable que se
pasa como argumento.

Sintaxis:
VarType(nombrevariable)

El argumento nombrevariable requerido, es un tipo Variant que contiene cualquier


variable excepto una variable de un tipo definido por el usuario.

Valores devueltos
Constante Valor Descripción
vbEmpty 0 Empty (no inicializado)
vbNull 1 Null (datos no válidos)
vbInteger 2 Entero
vbLong 3 Entero largo
vbSingle 4 Un número de coma flotante de precisión simple
vbDouble 5 Un número de coma flotante de precisión doble
vbCurrency 6 Valor de moneda
vbDate 7 Valor de fecha
vbString 8 Cadena
vbObject 9 Objeto
vbError 10 Valor de error
vbBoolean 11 Valor booleano
vbVariant 12 Variant (utilizada solamente con matrices de
variantes)

26 Departamento de Capacitación y Desarrollo


vbDataObject 13 Un objeto de acceso a datos
vbDecimal 14 Valor decimal
vbByte 17 Valor de byte
vbUserDefinedType 36 Variantes que contienen tipos definidos por el
usuario
vbArray 8192 Matriz

Ejemplos:
VarType(“Hola”)
La función aplicada a la cadena de caracteres “Hola”, devuelve como resultado la
constante vbString o el valor 8.

Suponiendo que el contenido de la celda activa es el número 138,


VarType(ActiveCell.Value) devuelve como resultado la constante vbInteger o el valor 2

UCase
Convierte a mayúsculas una cadena de caracteres que se pasa como argumento de la
función.

Sintaxis
UCase(cadena)
El argumento cadena necesario es cualquier expresión de cadena válida. Si cadena
contiene Null, se devuelve Null.

Sólo se convierten a mayúsculas las letras minúsculas. Las letras mayúsculas o los
caracteres que no son letras no sufren cambios, pero si la cadena es una fórmula, ésta es
convertida a valor.

Ejemplo:
UCase(“hola”)
La función aplicada a la cadena de caracteres “hola”, devuelve como resultado HOLA.

LCase
Convierte a minúsculas una cadena de caracteres que se pasa como argumento de la
función.

Sintaxis
LCase(cadena)
El argumento cadena necesario es cualquier expresión de cadena válida. Si cadena
contiene Null, se devuelve Null.

Sólo se convierten a minúsculas las letras mayúsculas. Las letras minúsculas o los
caracteres que no son letras no sufren cambios, pero si la cadena es una fórmula, ésta es
convertida a valor.
Ejemplo:
LCase(“HOLA”)
La función aplicada a la cadena de caracteres “HOLA”, devuelve como resultado hola.

Departamento de Capacitación y Desarrollo 27


Excel Macros

Left
Extrae de una cadena de texto, un número especificado de caracteres, desde la izquierda.

Sintaxis:
Left(cadena, cant_caracteres)

Argumento Descripción
cadena Requerido. Expresión de cadena de la cual se devuelven los
caracteres que están más a la izquierda. Si cadena contiene Null,
se devuelve Null.
cant_caracteres Requerido. Es un número que indica cuántos caracteres se van a
extraer. Si es 0, devuelve una cadena de longitud cero (""). Si es
mayor o igual al número de caracteres en cadena, se devuelve la
cadena entera.

Ejemplo:
Left(“HOLA”,2)
La función aplicada a la cadena de caracteres “HOLA”, devuelve como resultado HO.

Right
Extrae de una cadena de texto, un número especificado de caracteres, desde la derecha.

Sintaxis:
Right(cadena, cant_caracteres)

Argumento Descripción
cadena Requerido. Expresión de cadena de la cual se devuelven los
caracteres que están más a la derecha. Si cadena contiene Null,
se devuelve Null.
cant_caracteres Requerido. Es un número que indica cuántos caracteres se van a
extraer. Si es 0, devuelve una cadena de longitud cero (""). Si es
mayor o igual al número de caracteres en cadena, se devuelve la
cadena entera.

Ejemplo:
Right(“HOLA”,2)
La función aplicada a la cadena de caracteres “HOLA”, devuelve como resultado LA.

28 Departamento de Capacitación y Desarrollo


Mid
Extrae de una cadena de texto, desde una posición inicial, un número especificado de
caracteres.

Sintaxis
Mid(cadena, inicio, cant_caracteres)

Argumento Descripción
cadena Requerido. Expresión de cadena de la cual se devuelven los
caracteres. Si cadena contiene Null, se devuelve Null.
inicio Requerido. Posición de carácter en cadena en la cual comienza la
parte que se quiere tomar. Si inicio es mayor que el número de
caracteres en la cadena, Mid devuelve una cadena de longitud cero
("").
cant_caracteres Requerido. Número de caracteres que se van a devolver. Si se omite
se devuelven todos los caracteres desde la posición de inicio hasta el
final de la cadena.

Ejemplo:
Mid(“HOLA”,2,3) o Mid(“HOLA”,2)
La función aplicada a la cadena de caracteres “HOLA”, devuelve como resultado OLA.

Departamento de Capacitación y Desarrollo 29


Excel Macros

FUNCIONES PERSONALIZADAS (DEFINIDAS POR EL USUARIO)


Una función definida por el usuario es como cualquier función para una hoja de cálculo
incorporada en Excel, tal como SUMA o PROMEDIO. Sin embargo, debido a que la función
es creada por el usuario, éste decide exactamente lo que la función debe hacer.

Una función definida por el usuario puede reemplazar una fórmula larga o anidada e
incluso un conjunto de ellas. El reemplazo de varias fórmulas con una sola es parte de lo
que hace que las funciones definidas por el usuario sean más fáciles de recordar y su uso
resulte más eficiente.

Una función definida por el usuario es creada en un módulo de Visual Basic, combinando
expresiones matemáticas, funciones incorporadas de Excel operadores matemáticos y
código en Visual Basic. El usuario proporciona un conjunto de valores a la función, ésta
realiza cálculos con estos valores y devuelve un nuevo valor o resultado.

Una función definida por el usuario es similar a una macro. Pero existen diferencias entre
ambas que se describen en la siguiente tabla:

Macros Funciones definidas por el usuario


Realizan una acción Devuelven un valor, no pueden realizar
acciones.
Pueden ser grabadas Deben ser creadas en un módulo de
Visual Basic
Están encerradas por las palabras Están encerradas por las palabras clave
clave Sub y End Sub Function y End Function

La diferencia más importante es que las macros realizan acciones que de alguna manera
cambian una hoja, mientras que las funciones definidas por el usuario devuelven valores.

PARTES DE UNA FUNCIÓN DEFINIDA POR EL USUARIO


Las funciones definidas por el usuario constan de las siguientes partes:
ƒ Los enunciados Function y End Function. Estas palabras clave marcan el comienzo
y fin de la función.
ƒ Un nombre. Es el identificador singular de la función mediante el cual se la invoca.
ƒ Argumentos. Son los valores que el usuario proporciona, el punto de partida
desde el cual la función realiza los cálculos. Se deben escribir entre paréntesis a
continuación del nombre de la función, separando cada argumento de los demás
por una coma.
ƒ Código y expresiones en Visual Basic. Estas son las instrucciones que informan a
la función qué cálculos debe realizar. Una expresión es una combinación de
números, variables y operadores matemáticos que resulta en un valor.
ƒ El valor devuelto. Es el valor que devuelve la función después de realizar los
cálculos. La forma de especificar un valor devuelto consiste en escribir una
expresión a continuación del nombre de la función:
NombreDeLaFuncion = expresion

30 Departamento de Capacitación y Desarrollo


CREACIÓN DE UNA FUNCIÓN DEFINIDA POR EL USUARIO

Procedimiento
1. Desde la ventana del Editor de Visual Basic, seleccione el módulo que
contendrá a la función o inserte un nuevo módulo.
2. Escriba Function y a continuación el nombre de la función.
3. Escriba la lista de argumentos entre paréntesis, separando cada
argumento de los demás con una coma.
4. Presione Enter para desplazarse a una nueva línea.
Excel verifica la sintaxis de lo que acaba de escribir y agregar las
palabras clave End Function
5. Escriba las líneas de código correspondientes a lo que debe realizar
la función.

La ilustración anterior muestra la función Comisión que calcula la comisión que una casa
de bolsa recibe como resultado de la venta de acciones. Esta comisión varía según el
precio de venta total ya que:
si el monto de venta es <=15000, la comisión es de $25 más tres centavos por acción,
si el monto es >15000, en el cálculo de la comisión solo se incluye un 90% de las
acciones vendidas (se descuenta un 10% del volumen de la transacción).

En el ejemplo se ve la forma en que los argumentos y otras variables trabajan juntos en


las expresiones. Dentro de una función definida por el usuario, el nombre de la función
actúa como variable. El valor devuelto de la función es el valor almacenado en
NombreDeLaFuncion cuando Excel termina de calcular la función.

Departamento de Capacitación y Desarrollo 31


Excel Macros

La función Comision incluye dos enunciados de asignación diferentes que calculan un


valor a devolver:
ƒ Comision = 25 + 0.03 * Acciones
ƒ Comision = 25 + 0.03 * 0.9 * Acciones
El código está escrito de tal manera que sólo una de esas condiciones es verdadera a la
vez. La función devuelve el valor almacenado en la variable Comision.

UTILIZACIÓN DE FUNCIONES DEFINIDAS POR EL USUARIO


Una vez creada la función definida por el usuario, ésta se puede utilizar en una hoja de
cálculo. Una función definida por el usuario se introduce y se utiliza exactamente de la
misma manera que una función incorporada de Excel ya sea escribiendo el nombre que se
le asignó a la función definida por el usuario y sus argumentos o insertando la función
desde el asistente para pegar funciones buscando a la misma en la categoría Definidas
por el usuario.

Seleccionar función definida por el usuario

Procedimiento
1. En la hoja de cálculo, seleccione la celda donde desea introducir la
función (celda donde aparecerá el resultado).

2. Oprima el botón Insertar función


o active el comando Función del menú Insertar.
3. En el cuadro de diálogo Insertar función, seleccione la categoría
Definidas por el usuario.
4. Seleccione el nombre de la función.
5. En el cuadro de diálogo Argumentos de función ingrese los valores
correspondientes a los argumentos de la misma y oprima el botón
Aceptar

32 Departamento de Capacitación y Desarrollo


Argumentos de una función definida por el usuario

Departamento de Capacitación y Desarrollo 33


Excel Macros

UNIDAD 3 -
ASIGNACIÓN DE MACROS
• Agregar una Macro al Menú Herramientas

• Asignar una Macro a un Botón de Comando en una Hoja

• Asignar una Macro a un Botón en una Barra de Herramientas Existente

• Asignar una Macro a un Botón en una Barra de Herramientas Personalizada

34 Departamento de Capacitación y Desarrollo


AGREGAR UNA MACRO AL MENÚ HERRAMIENTAS
Una vez grabada la macro, se puede agregar como una nueva línea de comando en el
menú Herramientas, de modo tal que se la puede elegir al igual que se elige cualquier
otro comando de menú.
Procedimiento
1. Seleccione del menú Ver el comando Barras de herramientas, subcomando
Personalizar…
2. Seleccione la ficha Comandos.
3. Seleccione Macros en el cuadro Categorías y en Comandos seleccione
Personalizar elemento de menú.
4. Arrastre esta selección dentro del menú Herramientas y ubíquela como una
nueva línea de comandos en el menú.
5. Oprima el botón secundario del mouse sobre la línea de comando Personalizar
elemento de menú que se acaba de agregar y en Nombre escriba un nombre
para la línea de comando.
6. Oprima nuevamente el botón secundario del mouse sobre la línea de comando
creada y seleccione Asignar macro…
7. Elija la macro que ejecutará dicha línea de comando de la lista de macros que se
presenta.
8. Oprima el botón Aceptar y luego el botón Cerrar. De esta manera la macro queda
incluida para ser invocada desde el menú Herramientas

Asignar macro al menú Herramientas

Departamento de Capacitación y Desarrollo 35


Excel Macros

ASIGNAR UNA MACRO A UN BOTÓN DE COMANDO EN UNA HOJA


Otra forma de ejecutar una macro es a través de un botón de comando insertado en una
hoja de cálculo.
Cuando se asigna una macro a un botón, ésta se hace visible y fácilmente disponible sólo
cuando se trabaja con la hoja que contiene al botón.

Barra de herramientas Cuadro de controles

Procedimiento
1. Seleccione la barra de herramientas Cuadro de controles del menú Ver,
Barras de herramientas.
2. Tome la herramienta Botón de comando y dibuje un botón en la hoja de
cálculo.
3. Oprima el botón secundario del mouse sobre el botón dibujado y seleccione
el comando Ver código.
4. En la ventana de proyecto que se abre escriba el nombre de la macro sin los
paréntesis entre las palabras reservadas
Private Sub CommandButton1_Click() y End Sub
5. Cierre la ventana de proyecto que se abrió
6. Oprima nuevamente el botón secundario del mouse sobre el botón dibujado
y seleccione el comando Objeto botón de comando, subcomando Modificar.
7. Borre el texto CommandButton1 y escriba el nuevo texto que presentará el
botón.
8. En la barra de herramientas Cuadro de controles, oprima el botón Salir del
modo diseño.
9. Cierre la barra de herramientas Cuadro de controles y haga clic en el botón
dibujado. Se ejecutará la macro asociada al botón.

36 Departamento de Capacitación y Desarrollo


Asignar macro a un botón de comando

ASIGNAR UNA MACRO A UN BOTÓN EN UNA BARRA DE


HERRAMIENTAS EXISTENTE
Cuando se asigna una macro a un botón en una barra de herramientas, la macro se
encuentra disponible para todos los libros de Excel, siempre que la barra de herramientas
esté visible.
Generalmente, el botón de la barra de herramientas al que se asigna una macro es un
botón personalizado.
Después de asignar la macro a un botón personalizado, es posible colocar dicho botón en
cualquiera de las barras de herramientas existentes. El botón así creado funciona de
manera similar a cualquier botón de una barra de herramientas.

Procedimiento
1. Seleccione del menú Ver el comando Barras de herramientas, subcomando
Personalizar…
2. Seleccione la ficha Comandos
3. Seleccione Macros en el cuadro Categorías y en Comandos seleccione Personalizar botón

4. Arrastre la selección a una barra de herramientas que esté visible (por ejemplo la barra
de herramientas de formato), ubicando el nuevo botón en el lugar deseado.
5. Oprima el botón secundario del mouse sobre el botón creado y seleccione el comando
Asignar macro
6. Elija la macro que se ejecutará al oprimir el botón, de la lista de macros que se presenta.
7. Oprima el botón Aceptar
8. Oprima nuevamente el botón secundario del mouse sobre el botón creado y seleccione
el comando Nombre o el comando Cambiar imagen del botón para asignarle un nombre
al botón o para cambiar la imagen del mismo.
9. Finalmente oprima el botón Cerrar

Departamento de Capacitación y Desarrollo 37


Excel Macros

Asignar una macro a un botón personalizado


en una barra de herramientas existente

ASIGNAR UNA MACRO A UN BOTÓN EN UNA BARRA DE


HERRAMIENTAS PERSONALIZADA
Cuando se asigna una macro a un botón en una barra de herramientas personalizada, la
macro se encuentra disponible para todos los libros de Excel, siempre que la barra de
herramientas esté visible.

Previo a crear un botón personalizado, hay que crear la barra de herramientas


personalizada a la que se le agregará el botón personalizado.

Después de asignar la macro a un botón personalizado y éste a la barra de herramientas


personalizada, es necesario que ésta esté visible para poder ejecutar la macro desde el
botón. El botón así creado funciona de manera similar a cualquier botón de cualquier
barra de herramientas.

38 Departamento de Capacitación y Desarrollo


Procedimiento
1. Seleccione del menú Ver el comando Barras de herramientas, subcomando
Personalizar…
2. Seleccione la ficha Barras de herramientas
3. Oprima el botón Nueva…
4. En el cuadro de diálogo que se abre, escriba un nombre para la nueva barra
de herramientas y haga clic en Aceptar.
5. Seleccione la ficha Comandos.
6. Seleccione Macros en el cuadro Categorías y en Comandos seleccione
Personalizar botón
7. Arrastre la selección a la nueva barra de herramientas.
8. Oprima el botón secundario del mouse sobre el botón creado y seleccione el
comando Asignar macro
9. Elija la macro que se ejecutará al oprimir el botón, de la lista de macros que
se presenta.
10. Oprima el botón Aceptar
11. Oprima nuevamente el botón secundario del mouse sobre el botón creado y
seleccione el comando Nombre o el comando Cambiar imagen del botón
para asignarle un nombre al botón o para cambiar la imagen del mismo.
12. Finalmente oprima el botón Cerrar.
La barra de herramientas así creada queda incorporada a la aplicación Excel
para ser utilizada en cualquier libro.

Asignar una macro a un botón personalizado


en una barra de herramientas personalizada

Departamento de Capacitación y Desarrollo 39


Excel Macros

UNIDAD 4 -
CONTROL Y MANIPULACIÓN DE ERRORES
• Errores en Tiempo de Ejecución

• Rutinas de tratamiento de errores

• El objeto Err

• Instrucción Resume, Resume Next y Resume Etiqueta

40 Departamento de Capacitación y Desarrollo


CONTROL Y MANIPULACIÓN DE ERRORES
Los errores en la programación generalmente caen dentro de una de las categorías
siguientes:
– Errores lógicos: cuando el código no recorre el camino que el usuario había
previsto.
– Errores sintácticos: resultan de la incorrecta construcción del código.
– Errores en tiempo de corrida del programa (cuando se intenta una operación que
es imposible de ejecutar). Para ello, se utilizan rutinas de control y manipulación
de errores.
Los errores en tiempo de corrida se pueden detectar mediante la propiedad ERR
del objeto que nos da la posibilidad de saber qué ha ocurrido.

ERRORES EN TIEMPO DE EJECUCIÓN


Los errores en tiempo de ejecución son aquellos errores que ocurren mientras el código
está en ejecución y que son el resultado de intentos de completar una operación inválida.

Errores de este tipo son, por ejemplo, intentar acceder a un archivo inexistente, ingresar
valores incorrectos a través de un cuadro de diálogo o formulario (datos tipo String
cuando se requieren números, etc.).

También entrarían en este tipo de errores aquellos casos excepcionales, pero que deben
ser previstos como, por ejemplo, que se llene la unidad de disco o que la impresora se
quede sin papel.

Rutinas de tratamiento de errores.


Visual Basic permite implementar rutinas de tratamiento de errores cuya finalidad es
interceptar determinados tipo de errores que se producen en la ejecución del código.

La finalidad de estas rutinas es que el programa no se detenga, o al menos si se detiene,


informar sobre la posible causa del error e intentar controlarlo de alguna forma.

La explicación del tratamiento de este tipo de errores se hará mediante un ejemplo:

El procedimiento que figura a continuación pide dos valores al usuario, los suma y los
guarda en la celda A1 de Hoja2.

Sub Prueba()
Dim n1, n2, total As Integer
n1 = InputBox("Entrar un valor", "Entrada")
n2 = InputBox("Entrar otro valor ", "Entrada")
total = n1 + n2
Worksheets("Hoja2").Range("A1").Value = total
End Sub

Generalmente una rutina de tratamiento de errores reacciona ante casos esperados por
el programador. En el ejemplo dado, podría ser que el usuario ingresara caracteres en
lugar de números por lo que el programa generaría el siguiente error:
Departamento de Capacitación y Desarrollo 41
Excel Macros

Mediante una rutina de tratamiento de errores se puede informar el error que se ha


producido y direccionar la ejecución del programa hacia donde interese.

En Visual Basic el tratamiento de errores es una parte normal de la ejecución del


programa. La instrucción para el tratamiento de errores es ON ERROR GOTO línea, donde
línea es una etiqueta o marca de línea que indica hacia donde debe dirigirse el programa
en caso de error.

Una rutina de control de errores no es un procedimiento Sub ni Function. Es una sección


de código marcada con una etiqueta o un número de línea.

Las rutinas de control de errores se basan en el valor de la propiedad Number del objeto
Err para determinar la causa del error.
Una rutina de control de errores debe comprobar y guardar los valores de las propiedades
del objeto Err antes de que pueda producirse otro error o antes de que se llame a un
procedimiento que pueda causarlo.
Los valores de las propiedades del objeto Err reflejan solamente el error más reciente.
El mensaje de error asociado a Err.Number se encuentra en Err.Description.

El formato general de un procedimiento o función donde se implementa una rutina de


tratamiento de errores es la siguiente:

42 Departamento de Capacitación y Desarrollo


Sub Prueba()
On Error GOTO Tratar_errores
'Instrucciones del procedimiento
Exit Sub ' Salir del procedimiento
Tratar_Errores:
Instrucciones de tratamiento de error
End Sub

Con On Error GOTO Tratar_Errores, se indica al programa que en caso que se produzca un
error en tiempo de ejecución vaya a ejecutar las líneas que siguen a la etiqueta o marca
de línea Tratar_Errores.

Ver que antes de la etiqueta Tratar_Errores está la instrucción Exit Sub, que hace que, si el
procedimiento se ha desarrollado correctamente, salga en ese punto, (tener en cuenta
que si no se pusiera esta línea la ejecución continuaría secuencialmente y se ejecutarían
las líneas de la rutina Tratar_Errores).

Si la rutina de tratamiento de errores se implementa en una función se debe poner Exit


Function en lugar de Exit Sub.

A modo de ejemplo, la rutina de tratamiento de errores mostrará información sobre el


tipo de error que se ha producido y detendrá la ejecución del programa. (Esto es lo que
hace de por sí Visual Basic sin necesidad de implementar una rutina de tratamiento de
error, pero sirve, en el ejemplo, para introducir el objeto Err y para ver que teniendo el
número de error se pude determinar la causa del mismo y controlar la ejecución del
programa como más convenga).

EL OBJETO ERR
Siempre que se produce un error en tiempo de ejecución Visual Basic genera (o dispara)
un objeto tipo Err. Este objeto tiene dos propiedades: Number y Description.

- Number es un número que indica el tipo de error que se ha producido, dicho


de otra forma, cuando Visual Basic dispara un objeto Err en tiempo de
ejecución, se puede revisar su propiedad Number para saber que es lo que ha
causado el error.
- Description es el mensaje asociado al número de error y es una cadena de
texto que describe brevemente el error.

Continuando con el ejemplo, el procedimiento quedaría de la siguiente manera:

Departamento de Capacitación y Desarrollo 43


Excel Macros

Sub Prueba()
On Error GoTo Tratar_Errores
Dim n1, n2, total As Integer
n1 = InputBox("Entrar un valor", "Entrada")
n2 = InputBox("Entrar otro valor ", "Entrada")
total = n1 + n2
Worksheets("Hoja2").Range("A1").Value = total
Exit Sub
Tratar_Errores:
MsgBox ("Número de Error : " & Err.Number & Chr(13) & "Descripción : " & _
Err.Description)
End Sub

Al ejecutar el procedimiento anterior, si se ingresa el texto "Hola" como respuesta al


primer InputBox, se producirá un error y el programa bifurcará hacia la rutina de
tratamiento de errores mostrando el número de error y su descripción asociada.

INSTRUCCIÓN RESUME, RESUME NEXT Y RESUME ETIQUETA


Continuar el programa después de la ejecución de la rutina de tratamiento de errores.
En la mayoría de los casos, las rutinas de tratamiento de errores son para que el programa
no se detenga.
El proceso habitual cuando se produce el error es tratar de corregirlo y continuar la
ejecución del programa. La continuación del mismo se consigue mediante la instrucción
Resume. Esta instrucción da tres posibilidades:
• Ejecutar otra vez la instrucción que ha causado el error
Instrucción Resume
• Continuar por la instrucción siguiente a la que ha causado el error
Instrucción Resume Next
• Dirigir la ejecución hacia una línea marcada con una etiqueta
Instrucción Resume Etiqueta

Instrucción Resume.
Ejecuta de nuevo la instrucción que ha causado el error. Esto, en el ejemplo, sería volver a
pedir el ingreso del valor. La rutina de tratamiento de errores quedaría:
Tratar_Errores:
MsgBox ("Número de Error : " & Err.Number & Chr(13) & "Descripción : " & _
Err.Description)
Resume

Cambiando el mensaje que ve el usuario para hacerlo más compresivo. La rutina


quedaría:

Tratar_Errores:
MsgBox ("Debe entrar un valor numérico")
Resume

Instrucción Resume Next.


Permite continuar el programa con la instrucción siguiente a la que ha causado el error, la
rutina quedaría:
44 Departamento de Capacitación y Desarrollo
Tratar_Errores:
MsgBox ("Debe entrar un valor numérico")
Resume Next

En este caso el programa informaría de la causa del error pero continuaría la ejecución
por la línea siguiente a la que ha causado el mismo. No es una buena solución para este
caso, pero los hay en los que es la mejor.

Instrucción Resume ETIQUETA.


Permite continuar con la instrucción que sigue a la ETIQUETA, para lo cual se debe poner
una etiqueta o marca de línea mediante la cual se indicará en qué punto debe continuar
la ejecución del programa. En el ejemplo se hará que el programa vuelva al principio
cuando se produzca un error.

Sub Prueba()
On Error GoTo Tratar_Errores
Dim n1, n2, total As Integer
Inicio: 'Aquí vuelve el programa si se produce un error
n1 = InputBox("Entrar un valor", "Entrada")
n2 = InputBox("Entrar otro valor ", "Entrada")
total = n1 + n2
Worksheets("Hoja2").Range("A1").Value = total
Exit Sub
Tratar_Errores:
MsgBox ("Debe entrar un valor numérico")
Resume Inicio
End Sub

Hasta acá se vio como controlar errores simples y como redirigir la ejecución del
programa. Pero, si se introduce el valor 50000, se producirá un error de desbordamiento
ya que 50000 no es un valor válido para el tipo de datos Integer (recordar que el rango
para los datos tipo Integer es de -32768 a 32767).
La rutina continuará tratando el error y pidiendo nuevamente los datos, pero el mensaje
que verá el usuario seguirá siendo "Debe entrar un valor numérico".
En este caso el error por desbordamiento da como resultado el número 6. Se incluirá
entonces dentro de la rutina de tratamiento de error la instrucción Select Case que
permitirá evaluar los distintos tipos de errores producidos, según su número de error.

Departamento de Capacitación y Desarrollo 45


Excel Macros

El ejemplo quedaría:

Sub Prueba()
On Error GoTo Tratar_Errores
Dim n1, n2, total As Integer
n1 = InputBox("Entrar el primer valor", "Entrada")
n2 = InputBox("Entrar el segundo valor ", "Entrada")
total = n1 + n2
Worksheets("Hoja2").Range("A1").Value = total
Exit Sub
Tratar_Errores:
Select Case Err.Number
Case 13:
MsgBox ("Debe introducir valores numéricos")
Case 6:
MsgBox ("El valor es demasiado grande o demasiado pequeño. " & _
"El número "debe estar comprendido entre -32768 y 32767")
End Select
Resume
End Sub

Es conveniente que se termine siempre la rutina de errores con un Case Else (para
prevenir algún otro tipo de error) de la forma siguiente:

Tratar_Errores:
Select Case Err.Number
Case 13:
MsgBox ("Debe introducir valores numéricos")
Case 6:
MsgBox ("El valor es demasiado grande o demasiado pequeño. " & _
“El número debe estar comprendido entre -32768 y 32767")
Case Else
MsgBox ("Error no previsto. Llame al responsable facilitando la " & _
“información que sigue " & Chr(13) & "Número de Error : " & _
Err.Number & Chr(13) & "Descripción : " & Err.Description)
Exit Sub
End Select
Resume
Con lo cual, si se produce cualquier otro error no previsto, se informa al usuario que avise
a quien corresponda informando del número de error y su descripción.

46 Departamento de Capacitación y Desarrollo


ÍNDICE

Excel Macros

Unidad 1 MACROS – GRABADORA DE MACROS ..........................................................................................3


Automatización de Tareas Repetitivas Mediante Macros .....................................................................................4
Seguridad en Macros.........................................................................................................................................................4
Crear una Macro con la Grabadora de Macros..........................................................................................................5
Ejecutar la Macro Grabada ..............................................................................................................................................6

Unidad 2 - MACROS – VISUAL BASIC FOR APPLICATION (VBA) ................................................................7


Introducción a VBA (Visual Basic for Application) ....................................................................................................8
Conceptos de Proyecto, Módulo, Objetos, Propiedades y Métodos ....................................................................8
Proyecto............................................................................................................................................................................8
Módulo..............................................................................................................................................................................8
Objetos..............................................................................................................................................................................8
Propiedades.....................................................................................................................................................................8
Métodos............................................................................................................................................................................8
Ventana del Editor de Visual Basic............................................................................................................................. 10
Ventana de Propiedades, de Proyecto y de Código ............................................................................................... 11
Mostrar un Módulo en la Ventana de Código ........................................................................................................ 11
Editar y Depurar Macros desde el Editor de Visual Basic .................................................................................... 12
Crear Macros desde el Editor de Visual Basic.......................................................................................................... 13
Variables ............................................................................................................................................................................ 14
Declarar Variables ...................................................................................................................................................... 14
Alcance de las Variables ........................................................................................................................................... 15
Constantes......................................................................................................................................................................... 16
Cuadros de Diálogo......................................................................................................................................................... 17
Función MsgBox .............................................................................................................................................................. 17
Función InputBox ............................................................................................................................................................ 18
Estructuras de Control ................................................................................................................................................... 19
Estructuras Basadas en Condiciones ......................................................................................................................... 19
Instrucción If…Then.................................................................................................................................................... 20
Instrucción If…Then…Else…End If ........................................................................................................................... 20
Instrucción Select Case ............................................................................................................................................. 21
Estructuras Para Repetir el Mismo Código Varias Veces (Hacer Bucles) ....................................................... 22
Instrucción While…Wend o Do While…Loop....................................................................................................... 22
Instrucción For…Next................................................................................................................................................. 23
Instrucción For Each…Next ...................................................................................................................................... 23
Instrucción With…End With .................................................................................................................................... 24
Macros modulares – Procedimientos que Invocan a otros Procedmientos................................................... 25
Otras Funciones ............................................................................................................................................................... 26
IsEmpty .......................................................................................................................................................................... 26
VarType.......................................................................................................................................................................... 26
UCase.............................................................................................................................................................................. 27
LCase............................................................................................................................................................................... 27
Left .................................................................................................................................................................................. 28
Right ................................................................................................................................................................................28
Mid...................................................................................................................................................................................29
Funciones Personalizadas (Definidas por el Usuario) ...........................................................................................30
Partes de una Función Definida por el Usuario.......................................................................................................30
Creación de una Función Definida por el Usuario..................................................................................................31
Utilización de Funciones Definidas por el Usuario.................................................................................................32

Unidad 3 - Asignación de MACROS............................................................................................................... 34


Agregar una Macro al Menú Herramientas .............................................................................................................35
Asignar una Macro a un Botón de Comando en una Hoja ..................................................................................36
Asignar una Macro a un Botón en una Barra de Herramientas Existente ......................................................37
Asignar una Macro a un Botón en una Barra de Herramientas Personalizada .............................................38

Unidad 4 - Control y Manipulación de Errores .......................................................................................... 40


Control y Manipulación de Errores .............................................................................................................................41
Errores en Tiempo de Ejecución...................................................................................................................................41
El objeto Err........................................................................................................................................................................43
Instrucción Resume, Resume Next y Resume Etiqueta ........................................................................................44

También podría gustarte