Este documento describe las macros en Excel y cómo crearlas y utilizarlas. [1] Explica que las macros automatizan tareas mediante código programado que interpreta Excel. [2] Detalla que el lenguaje de programación de macros es VBA y que solo se puede ejecutar dentro de aplicaciones de Microsoft Office. [3] Muestra cómo activar la ficha del programador para interactuar con VBA.
1. Las Macros ¿qué son?
1
DESDE EL PUNTO DE VISTA GENERAL, PODEMOS DECIR
QUE LAS MACROS NOS AYUDAN A AUTOMATIZAR
TAREAS. SON PARTE DE CÓDIGO DE PROGRAMACIÓN
QUE ES INTERPRETADO POR EXCEL Y LLEVA A CABO
DISTINTAS ACCIONES
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
2. El Lenguaje VBA
2
El lenguaje de programación de las macros Visual
Basic para Aplicaciones (VBA), es un lenguaje de
programación común, pero su entorno de desarrollo
está plenamente integrado con las aplicaciones
Microsoft Office, es decir no puede ejecutarse en
forma autónoma.
La forma en la que debemos guardar los archivos de
Excel que contengan macros es “libros de Excel
habilitados para macros”, su extensión será .XLSM
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
3. La ficha del Programador (tome nota)
3
Esta ficha de opciones es específica para interactuar
con VBA, pero no se encuentra disponible con la
instalación básica.
Para activarla seleccionamos el BOTON OFFICE –
OPCIONES DE EXCEL – MAS FRECUENTES –
OPCIONES PRINCIPALES PARA TRABAJAR CON
EXCEL – MOSTRAR FICHA PROGRAMADOR EN
LA CINTA DE OPCIONES.
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
4. La Seguridad : centro de confianza
4
Ficha Programador: grupo código: seguridad de macros.
Distintos grupos de opciones, dentro del Centro de Confianza:
Editores y Ubicaciones de confianza: son macros firmados digitalmente
para verificar la autenticidad. De esta forma, si se ejecuta un código que
no cumpla con estos criterios, el centro de confianza deshabilitará el
código en forma automática y aparecerá un mensaje, para dejar la macro
deshabilitada o habilitarla.
Configuración de ActiveX: permite habilitar o deshabilitar la utilización
de estos controles (Los controles Active X son pequeños bloques empleados para la
creación de programas, que se pueden usar para crear aplicaciones distribuidas que
funcionen a través de Internet empleando navegadores web. Algunos ejemplos
incluyen aplicaciones para la recopilación datos, para la visualización de determinados
tipos de datos o para reproducir animaciones.
El Malware, como los virus informáticos o el spyware, podría infectar accidentalmente
al usuario al visitar éste cualquier sitio web contaminado o malicioso que gestione las
descargas haciendo uso de controles ActiveX.)
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
5. La Grabadora de Macros
5
Se guardan todas las acciones a partir del momento
en que la activamos (Grabar macro).
Los nombres que le asignemos deben comenzar con
una letra o un carácter de subrayado. No es posible
incluir nombres que entren en conflicto, por ejemplo
A2
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
6. Ejercicio 1
6
Creemos una macro que nos permita darle color a
algunas celdas.
Observa el código. Recordemos que nuestras macros
comienzan por defecto con “referencias fijas”, estos
podremos modificarlo activando el botón “usar
referencias relativas” o borrando la línea de código
que hace referencia a la selección de las celdas
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
7. Asignar Macros a Botones
7
Sabemos que podemos ejecutar macros, mediante el
cuadro de diálogo que se abre al presionar el comando
MACROS, pero también podremos asignarles una macro
a diferentes formas y objetos.
LOS BOTONES DE FORMULARIO, son los preferidos,
solo hay que dibujarlos y presionar la opción GRABAR.
También podremos asignar una macro a una imagen,
presionando el botón dcho. sobre ella, encontraremos la
opción ASIGNAR MACRO
Además podemos incluir nuestras macros en la barra de
acceso rápido, para eso dentro de las OPCIONES DE
EXCEL incluidas en el BOTÓN DE OFFICE, elegimos
PERSONALIZAR
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
8. Ejercicio 2
8
Cree una macro para eliminar la hoja actual, asígnela
a un botón de la barra de herramientas y pruebe su
funcionamiento.
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
9. El Editor de VBA
9
Es la herramienta de VBA que nos permite analizar,
instrucción por instrucción el código de
programación de las macros y realizar las
modificaciones necesarias.
Hay varias formas de acceder:
BOTÓN VISUAL BASIC dentro de la ficha del
PROGRAMADOR
Botón MODIFICAR dentro del cuadro de diálogo
MACRO
ALT + F11
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
10. LAS VENTANAS
10
Las activamos con las opciones incluidas en el menú VER
VENTANA DE CÓDIGO
En esta se trabaja directamente con el código de programación
VENTANA INMEDIATO
Podemos ejecutar código VBA, si escribimos directamente la
instrucción y presionamos Enter. Nos permite probar el
funcionamiento de instrucciones, sin tener que ejecutar una
macro en su totalidad.
VENTANA INSPECCIÓN
Podemos seguir el funcionamiento de ciertas instrucciones de
nuestros procedimientos si les agregamos una “inspección”. Estas
expresiones de inspección se actualizan en forma automática
cuando se entra en modo de “interrupción” (suspensión temporal
de la ejecución de la macro).
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
11. 11
VENTANA LOCALES
Permiten ver los valores que poseen las “variables”
definidas dentro de una macro durante su
ejecución, ejecutando en modo paso a paso (F8).
VENTANA EXPLORADOR DE PROYECTOS
Desde aquí podremos navegar por las estructura
VBA de los archivos excel que estén abiertos.
VENTANA PROPIEDADES
Visualiza las diferentes propiedades de cada uno de
los objetos de VBA que seleccionemos.
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
12. PASO POR PASO
12
Sub desplazamiento()
NOMBRE DE LA MACRO (COMIENZA CON SUB)
'
' desplazamiento Macro
COMENTARIOS (COMIENZAN CON ´)
' Selecciono la celdas de la hoja A1 y las pinto en azul, luego me voy a la hoja 2 y hago lo mismo
'
' Acceso directo: Ctrl+Mayús+D
'
Range("A1:A101").Select
SELECCIONA EL RANGO DE LA HOJA ACTIVA
With Selection.Interior
LO TRATAMOS EN LA PROXIMA DIAPOSITIVA
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorLight2
.TintAndShade = 0.399975585192419
.PatternTintAndShade = 0
End With
Sheets("Hoja2").Select
SELECCIONAMOS LA HOJA 2
Range("B2:M22").Select
La línea que genera el cambio
With Selection.Interior
de color es ThemeColor…
.Pattern = xlSolid
Probemos Depurando.
.PatternColorIndex = xlAutomatic
Veamos que sucede al quitar
.ThemeColor = xlThemeColorLight2
.TintAndShade = 0.399975585192419
Range(…).Select
.PatternTintAndShade = 0
End With
End Sub
FIN DE LA MACRO
13. WITH…END WITH
(tome nota)
13
Ejecuta una serie de instrucciones sobre un ÚNICO OBJETO.
Consta de 2 partes: un objeto definido sobre el cual actuarán las
instrucciones y una serie de comandos que actuaran sobre ese
objeto (generalmente cambios en el formato).
Selection.Font.Bold = True
Selection.Font.Name = “Arial”
Selection.Font.Size = 16
Selection.Font.Underline = xlUnderlineStyleNone
También se podría usar así:
With Selection.Font
Bold = True
Name = “Arial”
Size = 16
Underline = xlUnderlineStyleNone
End With
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
14. A Practicar !
14
Agregue la ficha de opciones Programador.
Recorra los distintos comandos incluídos en el grupo
Código
Con la grabadora, realice una macro que permita
desplazarse dentro de una planilla, moviéndose una
pantalla hacia la derecha. Luego haga otras que realicen lo
mismo pero hacia la izquierda, hacia arriba y hacia abajo.
(AvPag y RePag, ALT + AvPag o ALT + RePag) Tenga en
cuenta que será necesario utilizar referencias absolutas.
Asigne las macros anteriores a botones, imágenes y barra
de acceso rápido con su correspondiente ícono.
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
15. A Practicar!
15
Tome las macros anteriores y haga un análisis del
código, elimine líneas innecesarias.
Cree una macro que modifique las opciones de
relleno, fuente, tamaño y color de fuente con la
grabadora. Reemplace la construcción With que
aparece en el código generado por las instrucciones
por separado.
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
16. MÉTODOS, PROPIEDADES, OBJETOS Y
COLECCIONES
16
Hemos trabajado con diferentes objetos, como una
celda, una hoja, un libro, etc. Sobre estos objetos
podemos aplicar MÉTODOS(acciones que pueden
realizar los objetos). En VBA, antes de aplicar un
método debemos identificar al objeto. Ej:
Sub Fuente()
Selection.Font.Bold = True
End Sub
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
17. Podemos definir a los EVENTOS como toda ACCIÓN que
puede ser reconocida por un objeto, por ejemplo, el clic
del mouse sobre un botón o la pulsación de alguna
tecla
Una COLLECIÓN es un OBJETO QUE CONTIENE
VARIOS OBJETOS.Por ej: la colección de
WORKBOOKS (que también es un objeto) contiene
todos los objetos WORKBOOK abiertos.
Sub Cerrar_libro()
ActiveWorkbook. Close
End Sub
Sub Cerrar_todos()
Workbooks.Close
End Sub
Asoc. club de Programadores -Macros-VBA - Lic.
Carina V. Grosso
17
18. Proteger la Hoja Activa
Sub protejohoja()
ActiveSheet.Protect “contraseña”
End Sub
Desproteger la Hoja Activa
Sub desprotejohoja()
ActiveSheet.Unprotect “contraseña”
End Sub
Proteger Macros
En el Editor de Visual Basic, menú Herramientas, submenú Propiedades
de (aquí saldrá el nombre de tu archivo), se abrirá un cuadro de diálogo
con dos fichas General y Protección, en Protección marcá la casilla de
verificación “Bloquear proyecto para su visualización” y establece la
contraseña.
Asoc. club de Programadores -Macros-VBA - Lic. Carina V.
Grosso
18
19. MACROS POR EVENTOS
19
EJECUTAR MACROS AL ABRIR ARCHIVOS
cuando abrimos archivos es posible ejecutar macros que
realicen ciertas acciones en forma automática. Este tipo
de macros son privadas del libro o de la hoja en cuestión
y por lo tanto comienzan con la construcción Private
Sub y terminan con End Sub
Ejemplo:
Realicemos una macro autoejecutable, para que al abrir
el libro nos ubique en la celda C5.
-Seleccionamos el objeto ThisWorkbook, accedemos a la
ventana código y en la lista desplegable elejimos el objeto
Workbook.
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
20. Ejecutar una macro al abrir Archivo
20
Dentro del procedimiento escribimos:
Sheets(1).Select (hace refernecia a la primera hoja ubicada en nuestro libro, independientemente de cual sea su nombre)
Range(“C5”).Select
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
21. Último Registro - Offset
21
Supongamos que tenemos una hoja con varios datos y queremos posicionarnos
en el último para seguir cargando.
Sheets(“Datos”).Select
Range(“A10000”)
Selection.End(xlUp).Select
(Es ideal comenzar desde muy abajo, si lo hacemos con la grabadora nos
ubicamos en la celda A10000 y luego presionamos las teclas CTRL + Flecha
arriba, con esto nos ubicamos en el último registro pero la idea es situarnos una
fila abajo): incluímos
ActiveCell.Offset(1,0).Select
OFFset: nos permite desplazarnos a partir de una celda fija
Offset(Row, column) valores positivos abajo y a la derecha, negativos hacia
arriba y a la izquierda: Offset(2,-1)dos filas hacia abajo, 1 colummna a la
izquierda.
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
22. Ejecutar Macros al cerrar Archivos
22
Esto lo lograremos en la ventana de código del objeto Thisworkbook,
lista desplegable BeforeClose
Private Sub Workbook_BeforeClose(Cancel As Boolean)
End Sub
Otros Eventos del Workbook
Activate y Deactivate (ejecuta la macro cuando tenemos varios libros abiertos a
la vez y activamos o desactivamos alguno).
BeforePrint (antes de imprimir)
PrintPreview (nos mostrara la presentación preliminar de una determinada
selección).
BeforeSave disparará la macro antes de grabar nuestro archivo.
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
23. Eventos Worksheet
23
Estos procedimientos de eventos se encuentran
relacionados con la hoja en la que se encuentra
insertado el código VBA
Activate, Deactivate
BeforeRightClick (presionamos el botón derecho del
mouse.
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
24. Para tener en cuenta
24
Conviene incluir en los métodos abreviados de ejecución de
macro la tecla MAYÚSCULA, para no reemplazar una atajo de
excel, quedaría CTRL + MAYÚSCULA + Carácter
Para salir del editor de VBA podemos utilizar ALT + Q
Para ejecutar una macro en forma automática cuando se abre
el archivo, debemos incluir el código VBA dentro del objeto
THISWORKBOOK
Si deseamos que la macro siempre esté disponible, para que se
pueda cargar en forma automática al abrir Excel debemos
guardarla en c:Documents ad SettingsDatos de
ProgramaMicrososftExcelXLSTART
Para modificar las característcas del Editor vamos al menú
Herramientas/Opciones…
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
25. A Practicar!
25
Cree una macro de inicio que ajuste la visualización
de la pantalla al 75%. Puede utilizar la grabadora
para generar las líneas de código y luego incorporarla
al Thisworkbook
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
26. Las Variables
26
Una variable es un lugar de almacenamiento con nombre, es decir
un espacio de mem0ria que puede contener ciertos tipos de datos y
que , a su vez, se puede modificar durante la ejecución de la macro.
Declaración de Variables
El nombre de las variables debe ser único y no contener más de 255
caracteres. Es recomendable declarar las variables y distinguir tres
situaciones:
Procedimiento: la variable que declaremos dentro de un
procedimiento, Sub o Function
Módulo: serán declaradas fuera de cualquier procedimiento y son
válidas en todo el módulo.
Pública: las variables que declaremos mediante la instrucción Public
estarán disponibles para todos los procedimientos en todos los
módulos de todas las macros.
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
27. Las Variables
27
Para declarar variables utilizamos la instrucción Dim. Si incluímos
esta instrucción a nivel procedimiento, solo tendrá efecto en la macro
en cuestión.
Ej:
Dim variable1 as string
Dim variable2 as boolean
Si queremos utilizar las variables para distintas macros podemos
definirlas en la sección Declaraciones de la ventana código y así lograr
que tengan validez en todo el módulo
Si queremos que sea pública:
Public variable1 as string
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
28. Tipo de Datos de Variables
28
String: puede contener letras, nros, espacios y signos de puntuación:
Dim mivariable$ es igual a
Dim mivariable as string * 20 (20 caracteres de espacio)
Boolean: True o False ( si se convierte a numérico el 0 es false, 1 es true)
Números enteros: dentro de los números enteros tenemos varios tipos de datos
dependiendo el rango que queramos utilizar:
Byte: puede almacenar números enteros dentro del rango desde 0 a 255
Integer: puede almacenar números enteros dentro del rango -32.768 a 32.767 (se
puede declarar con el signo %)
Long: puede almacenar números enteros dentro del rango -2.147.483.648 hasta
2.147.483.648 . (se puede declarar con el signo &)
Currency: útil para cálculos monetarios. (se puede declarar con el signo @)
Números decimales: para almacenar números decimales contamos con los
siguientes tipos de datos:
Single: almacena números decimales en el rango +/- 1e-45 hasta 3e38 (se puede
declarar con el signo !)
Double: desde +/- 5e-324 hasta 1.8e308 (se puede declarar con el signo #)
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
29. Variables
29
Fechas y horas: Para almacenar fechas y horas se utiliza la palabra Date
Tipo variant : Las variables de este tipo pueden almacenar cualquier tipo de
valor, pero ocupan mas memoria.
Ejemplos:
Dim num1 As Integer
Dim num2 As Integer
num1 = 10
num2 = 20
'se mostrará un mensaje con la suma de las variables con el resultado 30
MsgBox num1 + num2
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
30. Mas variables
30
La ventana locales es fundamental cuando trabajamos con variables ya
que nos permite visualizar los valores que toman.
Públicas, privadas y estáticas
La instrucción Public nos permite declarar variables que se utilizan en
cualquier procedimiento de un proyecto
Public mivariable as integer
Private: (equivalente a utilizar Dim) sólo podrán ser utilizadas a nivel
del mismo módulo
Private mivariable as variant
Static: mantendrá su valor entre las distintas llamadas hasta que se
reinicie el módulo
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
31. Constantes
31
Las constantes, como las variables, se utilizan para guardar datos y
valores para nuestro programa, pero a diferencia de estas últimas (las
variables), el contenido que almacenen no cambia, siempre es
constante.
A diferencia de las variables que se declaran con la palabra Dim, las
Constantes se declaran con la palabra Const.
Const numero = 53
En la línea anterior he creado una constante, que la llamé numero y va a
almacenar un número , y este valor, cuando se ejecute mi programa se
mantendrá invariable.
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
32. Constantes
32
Las constantes, como las variables, se utilizan para guardar datos y
valores para nuestro programa, pero a diferencia de estas últimas (las
variables), el contenido que almacenen no cambia, siempre es
constante.
A diferencia de las variables que se declaran con la palabra Dim, las
Constantes se declaran con la palabra Const.
Const numero = 53
En la línea anterior he creado una constante, que la llamé numero y va a
almacenar un número , y este valor, cuando se ejecute mi programa se
mantendrá invariable.
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
33. Option Explicit
33
El Option Explicit se utiliza a nivel de módulo (sin ningún tipo de argumento
al inicio del módulo) para forzar la declaración explícita de todas las variables
en este módulo. Esta declaración debe aparecer en la parte superior del
módulo, antes de cualquier procedimiento.
Cuando esta declaración se usa, un mensaje de error identifica cualquier
variable no definida o mal escrita.
Para que Option Explicit se inserte automáticamente en cada nuevo libro:
Ir a la barra del menú del editor de macros.
Menú Herramientas
Opciones
En la ficha Editor, marca "Requerir declaración de variables".
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
34. Cajas con Mensajes
34
Los InputBox
Con esta herramienta se mostrará un cuadro de diálogo en pantalla,
en el cual se podrá introducir un texto que devolverá un string que se
podrá almacenar en una variable.
Sintaxis
InputBox(prompt[, title][, default][, xpos][, ypos][, helpfile, context])
La sintaxis de la función InputBox consta de estos argumentos:
(Si deseamos omitir algunos argumentos de posición, debemos incluir
el delimitador de coma correspondiente).
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
35. Argumentos del InputBox
35
Parte
Descripción
prompt
Requerido. 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.
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 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.
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
36. Ejemplo con InputBox
36
La siguiente orden genera un cuadro al cual le indicamos texto, título y
asignamos el texto que escriba el usuario a la variable cadena:
Dim cadena As String
cadena = InputBox("Introduzca el nombre del usuario",
"Identificación")
Observar que como asignamos el resultado de la función InputBox a una
variable, debemos encerrar los argumentos entre paréntesis.
El resultado en ejecución es:
Es posible separar las líneas con chr(13) y chr(10), InputBox(“…”& chr(13)& “…”)
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
37. Macro Para realizar sumas
37
Sub Sumatoria()
Dim valor1 As Double
Dim valor2 As Double
Dim total As Double
valor1 = InputBox("Ingrese el primer valor a sumar")
valor2 = InputBox("Ingrese el segundo valor a sumar")
total = valor1 + valor2
Range("A1") = total
End Sub
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
38. Los MsgBox
38
MsgBox: Muestra un mensaje en un cuadro de diálogo, espera a que el usuario haga clic
en un botón y devuelve un tipo Integer correspondiente al botón elegido por el usuario.
Sintaxis
MsgBox(prompt[, buttons][, title][, helpfile, context])
La sintaxis de la función MsgBox consta de estos argumentos:
Parte
Descripción
prompt
Requerido. Cadena que representa el prompt 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.
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.
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
39. Argumento Buttons - iconos
39
Constante
Valor
Descripción
VbOKOnly
0
Muestra solamente el botón Aceptar.
VbOKCancel
1
Muestra los botones Aceptar y Cancelar.
VbAbortRetryIgnore
2
Muestra los botones Anular, Reintentar e Ignorar.
VbYesNoCancel
3
Muestra los botones Sí, No y Cancelar.
VbYesNo
4
Muestra los botones Sí y No.
VbRetryCancel
5
Muestra los botones Reintentar y Cancelar.
VbCritical
16
Muestra el icono de mensaje crítico.
VbQuestion
32
Muestra el icono de pregunta de advertencia.
VbExclamation
48
Muestra el icono de mensaje de advertencia.
VbInformation
64
Muestra el icono de mensaje de información.
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
40. Buttons
40
VbDefaultButton1
0
El primer botón es el predeterminado.
VbDefaultButton2
256
El segundo botón es el predeterminado.
VbDefaultButton3
512
El tercer botón es el predeterminado.
VbDefaultButton4
768
El cuarto botón es el predeterminado.
VbApplicationModal
0
Aplicación modal; el usuario debe responder al cuadro de
mensajes antes de poder seguir trabajando en la aplicación
actual.
VbSystemModal
4096
Sistema modal; se suspenden todas las aplicaciones hasta
que el usuario responda al cuadro de mensajes.
VbMsgBoxHelpButton
16384
Agrega el botón Ayuda al cuadro de mensaje.
VbMsgBoxSetForeground
65536
Especifica la ventana del cuadro de mensaje como la
ventana de primer plano.
VbMsgBoxRight
524288
El texto se alinea a la derecha.
VbMsgBoxRtlReading
1048576
Especifica que el texto debe aparecer para ser leído de
derecha a izquierda en sistemas hebreo y árabe.
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
41. Ejemplo
41
La siguiente orden genera un cuadro al cual le indicamos título, texto, le
ponemos tres botones: Sí, No y Cancelar. Además le incluimos el icono de
pregunta:
MsgBox "¿Esta seguro de que quiere continuar?", vbYesNoCancel +
vbQuestion, "Confirmación"
El resultado en ejecución es:
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
42. Ejercicios
42
1
Establezca y declare tres variables de tipo de dato distintas (String, Long, Date)
a nivel del módulo.
2
Incluya un ImputBox cuyo origen sea una variable del tipo String que luego se
muestre en un MsgBox con botones Sí y No (4) y un icono de pregunta.(32)
3
Modifique la macro que permite realizar sumas para poder hacer
multiplicaciones y haga los ajustes necesarios en el MsgBox.
4
Ajuste el MsgBox del punto anterior para que se muestren en el mismo
mensaje los valores de cada una de las variables y su resultado.
5
Realice una nueva macro con ImputBox que le permita hacer la suma entre dos
valores y luego multiplicarlos por un tercer valor. El resultado debe mostrarlo
en un MsgBox y también volcarlo en alguna celda de la planilla.
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
43. Para tener en cuenta
43
Un punto que debemos tener en cuenta es la actualización de pantalla,
por defecto al ejecutar una macro vemos todas las acciones que se
realizan, esto puede provocar confusión y pérdida de tiempo, para
evitarlo podremos agregar la instrucción:
Application.ScreenUpdating=True
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
44. El libro Personal (1)
44
En excel, disponemos de un libro oculto llamado personal.xls (en Excel 2007, tiene
extensión xlsb, por lo que se llamará personal.xlsb), como seguramente ya conocerás.
También sabrás seguramente, que este libro es de una gran utilidad si utilizas
habitualmente los mismos macros en diferentes libros. En el libro personal.xls (o
personal.xlsb, si usas Excel 2007) podemos tener almacenadas nuestras macros más
habituales, para poder utilizarlas en cualquier otro libro de excel, sin necesidad de tener
que implementar el código VBA en estos nuevos libros que vamos abriendo o creando.
Para grabar una macro en el libro oculto personal.xls (o personal.xlsb, si usas Excel
2007), tan solo deberemos indicar en el momento de su creación, que queremos que se
almacene en el mencionado libro. Para ello, utilizaremos la grabadora de macros.
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
45. El libro Personal (2)
45
Una vez elegido el sitio donde vamos a grabar el macro, esto es, en el libro de macros
personal, bien podemos detener la grabación, o bien podemos realizar las tareas que
queremos que grabe el macro. En cualquiera de los casos, una vez finalizada la grabación
del macro, si accedemos al modo VBA pulsando Alt+F11, nos encontraremos con que
aparece un nuevo proyecto llamado PERSONAL.XLS (o PERSONAL.XLSB, si usas Excel
2007) , tal y como se muestra en la imagen:
Asoc. club de Programadores -Macros-VBA - Lic.
Carina V. Grosso
46. El libro Personal (3)
46
Dentro de la categoría de Módulos, podremos editar el código del macro, borrarlo, o
crear nuevos macros, y todos ellos los tendremos disponibles siempre, aunque estemos
trabajando con uno, cinco, o veinte ficheros de excel diferentes.
Cuando vayamos a ejecutar un macro, llamándolo desde Herramientas, Macro,
Macros…, nos aparecerán las macros propias del libro con el cual estemos trabajando,
junto con las macros grabadas en el fichero personal.xls (o personal.xlsb, si usas
Excel 2007), tal y como se muestra en la siguiente imagen:
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
47. El libro Personal (4)
47
Dos últimas cuestiones que mencionar respecto al libro PERSONAL.XLS (o
PERSONAL.XLSB, si usas Excel 2007):
1.- Podemos ver que realmente se trata de un fichero oculto, desde Ventana, y
seleccionando Mostrar….
2.- Para grabar las macros en PERSONAL.XLS (o PERSONAL.XLSB, si usas Excel
2007), cuando cerremos excel, nos saldrá un y al que tendremos que contestar con un
rotundo sí, si lo que deseamos es grabar esas macros en el libro oculto, para que estén
disponibles siempre que las necesitemos:
Si lo que deseamos es llamar a una función personalizada que tengamos en el libro
personal, lo haremos de esta forma (suponiendo que la función que hayas creado se llame
mifuncion):
=PERSONAL.XLS!mifuncion()
Asoc. club de Programadores -Macros-VBA - Lic.
Carina V. Grosso
48. Construcciones Condicionales
48
Construcción If…Then…Else
Con esta construcción podemos ejecutar un grupo de instrucciones
dependiendo del resultado de una expresión.
If condición Then
instrucciones en caso de cumplirse la condición
Else
instrucciones en caso de no cumplirse la condición. Aquí también es
posible incluír la instrucción ElseIf que nos permitirá incluír un nuevo
bloque If
End if
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
49. Ejemplos
49
Sub Ejemplo_if()
If Range(“A1”) = 12 Then
Range(“B1”)=Range(“A1”).Value
Else
Range(“B3”)=Range(“A1”).Value
End If
End Sub
Construcciones sin instrucciones Else
If Range(“A1”) > 1000
Range(“B1”)=Range(“A2”) .Value+ 100
End If
Asoc. club de Programadores -Macros-VBA - Lic.
Carina V. Grosso
50. ElseIf
Sub Operaciones_Msg()
Dim valor1 As Double
50
Dim valor2 As Double
Dim total As Double
Dim operacion As String
Dim signo As String
valor1 = InputBox("Ingrese el primer valor")
valor2 = InputBox("Ingrese el segundo valor")
operacion = ucase(InputBox("ingrese la operacion:SUMA, RESTA, MULTIPLICA, DIVIDE"))
If operacion = "SUMA" Then
total = valor1 + valor2
signo = "+"
ElseIf operacion = "RESTA" Then
total = valor1 - valor2
signo = "-"
ElseIf operacion = "MULTIPLICA" Then
total = valor1 * valor2
Ucase:convierte de minus. a
signo = "*"
mayus.
ElseIf operacion = "DIVIDE" Then
Lcase :de mayusc. A minusc
total = valor1 / valor2
signo = "/"
End If
MsgBox ("El resultado de:" & valor1 & signo & valor2 & " es: " & total)
End Sub
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
51. Al abrir un archivo
51
Private Sub Workbook_Open()
Application.DisplayAlerts = False
If ActiveWorkbook.ReadOnly Then
MsgBox "El archivo está siendo utilizado por otro
usuario, vuelva a intertarlo mas tarde, gracias",
vbExclamation
ActiveWorkbook.Close savechanges:=False
End If
End Sub
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
52. Valores devueltos por los botones del MsgBox
52
Constante
Valor
OK
1
CANCEL
2
ABORT
3
RETRY
4
IGNORE
5
YES
6
NO
7
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
53. Select Case
53
Ejecuta uno o varios grupos de instrucciones, dependiendo del valor
que resulte de la condición de prueba.
Sub uso_del_case()
Dim opcion As Single
opcion = InputBox("Elija una opción")
Select Case opcion
Case 1 To 4
Sheets(1).Select
Range("A1").Select
Case 5, 6
Sheets(2).Select
Range("A10").Select
Case Is = 7
Sheets("Hoja3").Select
Range("b15").Select
Case Is > 8
MsgBox "Opcion fuera de rango", 0 + vbCritical, "Aviso"
End Select
End Sub
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
54. Funciones Personalizadas
54
Este tipo de procedimientos se incluíra dentro de una estructura
Function…End Function, u debemos designar variables que
formarán los argumentos o parámetros de esta función:
Function Cargas(salario As Double, tipo As Integer)
If tipo = 1 Then
Cargas = salario * 0.33
ElseIf tipo = 2 Then
Cargas = salario * 0.25
ElseIf tipo = 3 Then
Cargas = salario * 0.18
End If
End Function
(Se ejecuta en excel desde la barra : =cargas(c5;d5)
Asoc. club de Programadores -Macros-VBA - Lic. Carina V.
Grosso
55. Los Bucles
55
Son estructuras que nos permiten realizar
repeticiones de instrucciones
Tipos de Bucles
Do While condición
instrucciones
Loop
Ejecutará el bloque mientras se cumpla una determinada
condición
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
56. DO…LOOP…WHILE
56
DO WHILE…LOOP
DO…LOOP WHILE
Sub bucledo_while()
Dim cantidad As Integer
Dim condicion As Integer
cantidad = 0
condicion = 15
Sub bucle_do_loop_while()
Dim cantidad As Integer
Dim condicion As Integer
cantidad = 0
condicion = 15
Do While condicion > 0
condicion = condicion - 1
cantidad = cantidad + 1
Loop
MsgBox ("el bucle se ejectuto " &
cantidad & " veces")
End Sub
Do
condicion = condicion - 1
cantidad = cantidad + 1
Loop While condicion > 0
MsgBox ("el bucle se ejectuto " &
cantidad & " veces")
End Sub
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
57. Los Bucles
57
Do Until condición
instrucciones
Loop
Se ejecutará el bloque de condiciones hasta que la
condición incluída tome el valor true
Asoc. club de Programadores -Macros-VBA - Lic.
Carina V. Grosso
58. DO…UNTIL…LOOP
58
DO UNTIL…LOOP
DO…LOOP UNTIL
Sub bucledo_until()
Dim cantidad As Integer
Dim condicion As Integer
cantidad = 0
condicion = 0
Sub bucledo_loopuntil()
Dim cantidad As Integer
Dim condicion As Integer
cantidad = 0
condicion = 0
Do Until condicion = 15
condicion = condicion + 1
cantidad = cantidad + 1
Loop
MsgBox ("el bucle se ejectuto " &
cantidad & " veces")
End Sub
Do
condicion = condicion + 1
cantidad = cantidad + 1
Loop Until condicion = 15
MsgBox ("el bucle se ejectuto " &
cantidad & " veces")
End Sub
Asoc. club de Programadores -Macros-VBA - Lic. Carina V.
Grosso
59. FOR…NEXT
59
Esta construcción de bucle se puede utilizar para ejecutar un grupo de
instrucciones un determinado número de veces. Los bucles For…Next
usan una variable contador cuyo número se aumenta o disminuye
cada vez que se ejecuta el bucle, hasta alcanzar el valor establecido en la
condición.
Por defecto este bucle aumenta su valor en 1, pero es posible dar pasos
mas grandes si utilizamos la instrucción Steep. Ejemplo:
For i = 1 to 40 steep 2
avanza de 2 en 2
También podemos ir hacia atrás
For i = 40 to 1 steep -2 retrocede de 2 en 2
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
60. Ejemplo con For…Next
60
Sub bucle_for()
Dim i As Integer
Dim contador As Integer
For i = 1 To 15
contador = contador + 1
Next i
MsgBox "El bucle for se ejecutó " & contador & " veces",
vbInformation, "Aviso“
End Sub
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
61. For Each…Next
61
Esta variante del bucle For…Next repite el grupo de instrucciones para
cada uno de los objetos de una colección o para cada elemento de una
matríz. Por ejemplo, podríamos afectar a todas las celdas de un
determinado rango o a todos los objetos Sheet de la colección Sheets.
En el siguiente ejemplo recorreremos cada uno de los objetos Hojas de la
colección worksheets, para comprobar que la celda A1 esté vacía:
Sub forhojas()
Dim mihoja
For Each mihoja In Worksheets
If mihoja.Range("g1") = "" Then
mihoja.Range("g2") = "funciona?"
End If
Next mihoja
End Sub
Asoc. club de Programadores -Macros-VBA - Lic. Carina V.
Grosso
62. Exit
62
Con esta instrucción podemos salir de un bucle y
hasta de una función o de un procedimiento.
EXIT DO: es la instrucción para salir de un bucle
Do…Loop. Le transfiere el control a la instrucción
siguiente a Loop.
EXIT FOR: sale de un bucle For…Next o For Each…
Next. Le transfiere el control a la instrucción
siguiente a Next.
EXIT FUNCTION, EXIT SUB: nos permiten salir
inmediatamente de un procedimiento o función
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
63. Ejemplo
63
Sub do_celdas_exit()
Dim mifila
Dim micol
mifila = 1
micol = 1
Do Until mifila = 100
Cells(mifila, micol).Select
If ActiveCell = 100 Then
Exit Do
End If
mifila = mifila + 1
Loop
End Sub
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
64. Input con Validación
64
Sub validar_numero()
Dim mivalor
Do
mivalor = InputBox("Ingrese el precio de venta del
artículo: ")
Loop Until IsNumeric(mivalor)
[b4] = mivalor * 0.2
End Sub
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
65. SUMO POR COLORES
65
Function sumarporcolores(rango_suma)
Dim color
Dim micelda
Dim suma
color = ActiveCell.Interior.ColorIndex
For Each micelda In rango_suma
If micelda.Interior.ColorIndex = color Then
sumarporcolores = sumarporcolores + micelda.Value
End If
Next
End Function
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
66. Ocultar todo
66
Sub ocultar_todo()
Dim mihoja As Worksheet
For Each mihoja In Worksheets
mihoja.Visible = xlVeryHidden
' mihoja.visible=xlsheetvisible ' para mostrar
On Error GoTo salida 'el libro tiene que tener por lo menos 1 hoja
visible, así que se pone esta sentencia para que no dé error
Next mihoja
salida:
Exit Sub
End Sub
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
67. LOS FORMULARIOS
67
Los formularios son ventanas o cuadros de
diálogo de VBA que pueden contener distintos
controles y formularios secundarios. Permiten la
interacción entre la aplicación y el usuario. Un
formulario es un objeto Userform de la colección
Userforms
Elegimos Menú Insertar: Userform
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
68. Formularios
68
Al insertar un formulario, se dispondrá del cuadro de
herramientas compuesto por un conjunto de botones de
control del formulario, los que se muestra en la siguiente
figura.
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
69. Formularios
69
Por debajo de la ventana de proyectos se dispondrá de la Ventana de Propiedades.
En esta ventana se visualizará las propiedades que posee un determinado
objeto. En la siguiente imagen se muestra la ventana de propiedades de un
formulario, ya que éste es el que está activo.
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
70. Mostrar un formulario
70
Para mostrar un objeto Useform podemos utilizar
los métodos Show y Hide. De esta forma, con una
macro podemos llamar a un formulario.
Sub Mostrar_form()
userform1.show
End Sub
Sub oculto_form
userform1.hide
End Sub
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
71. Los controles de un Formulario
71
Haga click aquí para ver el documento Resumen de controles de Formulario
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
72. El Primer Formulario
72
Introducimos un Userform
Modificamos el nombre con la propiedad Name y el
título con la propiedad Caption
A modo de ejemplo incluíremos un control
CommandButton que al hacer clic sobre él
cambie su nombre.
Al hacer doble clic sobre un control, accedemos al
código VBA Private asignado a una determinada
acción
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
74. Código del botón
74
Private Sub boton1_Click()
Dim nombre_actual As String
Dim nombre_nuevo As String
Dim nro As Integer
nombre_actual = Formulario1.Caption
MsgBox "El título actual del formulario es " & nombre_actual
nro = Right(Formulario1.Caption, 2) + 1
nombre_nuevo = "Mi Formulario " & nro
Formulario1.Caption = nombre_nuevo
MsgBox "El título nuevo del formulario es " & nombre_nuevo
End Sub
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
75. Procedimientos y Eventos
75
Siempre que trabajamos con formularios utilizamos macros relacionadas
con eventos o acciones, ya sea al hacer un clic en un botón o
desplegar una lista. También es posible ejecutar macros relacionadas
con eventos del formulario.
Si hacemos doble clic sobre el cuerpo del formulario, accedemos al código
VBA relacionados con eventos del formulario
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso