Documentos de Académico
Documentos de Profesional
Documentos de Cultura
EXCEL MACROS
Excel Macros
EXCEL MACROS
OBJETIVOS DE APRENDIZAJE
Al finalizar la actividad se espera que los participantes estén en condiciones de:
• Seguridad en Macros
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.
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.
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 #.
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
• Constantes
• Estructuras de Control
• Otras Funciones
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.
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.
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)
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 de Código
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.
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.
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.
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 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.
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.
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.
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
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.
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.
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.
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
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 diseñadas para la toma de decisiones que provee Visual Basic son las
instrucciones:
If…Then
If…Then…Else
Select Case
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.
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.
Ejemplo:
If Edad < 16 Then
MsgBox “No puede manejar”
Else
MsgBox “Puede realizar el examen de manejo”
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
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
While…Wend / Do While…Loop
For…Next
For Each…Next
With…End With
Do While condición
[intrucciones]
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
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
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
Ejemplo:
For Each celda In Selection
celda.Value = UCase(celda.Value)
Next
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
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ú.
Sub VentaDeAcciones()
PrepararHoja
ObtenerDatosAcc
InsertarValores
End Sub
Notar que los procedimientos invocados por otro procedimiento no llevan paréntesis.
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)
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)
Ejemplos:
VarType(“Hola”)
La función aplicada a la cadena de caracteres “Hola”, devuelve como resultado la
constante vbString o el valor 8.
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.
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.
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.
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:
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.
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).
Procedimiento
1. En la hoja de cálculo, seleccione la celda donde desea introducir la
función (celda donde aparecerá el resultado).
UNIDAD 3 -
ASIGNACIÓN DE MACROS
• Agregar una Macro al Menú Herramientas
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.
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
UNIDAD 4 -
CONTROL Y MANIPULACIÓN DE ERRORES
• Errores en Tiempo de Ejecución
• El objeto Err
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.
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
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.
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).
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.
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
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
Tratar_Errores:
MsgBox ("Debe entrar un valor numérico")
Resume
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.
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.
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.
Excel Macros