Vba para excel
-
Upload
carina-grosso -
Category
Documents
-
view
1.907 -
download
8
description
Transcript of Vba para excel
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
Las Macros ¿qué son?
1
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
El Lenguaje VBA
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
2
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
La ficha del Programador (tome nota)
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.
3
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
La Seguridad : centro de confianza
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.)
4
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
La Grabadora de Macros
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
5
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
Ejercicio 1
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
6
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
Asignar Macros a Botones
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
7
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
Ejercicio 2
Cree una macro para eliminar la hoja actual, asígnela a un botón de la barra de herramientas y pruebe su funcionamiento.
8
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
El Editor de VBA
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
PROGRAMADORBotón MODIFICAR dentro del cuadro de
diálogo MACROALT + F11
9
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
LAS VENTANAS
Las activamos con las opciones incluidas en el menú VER
VENTANA DE CÓDIGOEn esta se trabaja directamente con el código de
programación VENTANA INMEDIATOPodemos 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ÓNPodemos 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).
10
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
VENTANA LOCALESPermiten 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 PROYECTOSDesde aquí podremos navegar por las estructura
VBA de los archivos excel que estén abiertos.VENTANA PROPIEDADESVisualiza las diferentes propiedades de cada uno
de los objetos de VBA que seleccionemos.
11
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
PASO POR PASOSub 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 With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorLight2 .TintAndShade = 0.399975585192419 .PatternTintAndShade = 0 End WithEnd Sub FIN DE LA MACRO
La línea que genera el cambio de color es ThemeColor…Probemos Depurando.Veamos que sucede al quitar Range(…).Select
12
WITH…END WITH (tome nota)
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 = TrueSelection.Font.Name = “Arial”Selection.Font.Size = 16Selection.Font.Underline = xlUnderlineStyleNoneTambién se podría usar así:With Selection.Font
Bold = TrueName = “Arial”Size = 16Underline = xlUnderlineStyleNone
End With
13
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
A Practicar !
Agregue la ficha de opciones Programador.Recorra los distintos comandos incluídos en el grupo
CódigoCon 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.
14
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
A Practicar!
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.
15
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
MÉTODOS, PROPIEDADES, OBJETOS Y COLECCIONES
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
16
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
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 Sub17Asoc. club de Programadores -Macros-VBA
- Lic. Carina V. Grosso
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.
18Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
MACROS POR EVENTOS
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.
19
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
Ejecutar una macro al abrir Archivo
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
20
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
Último Registro - Offset
Supongamos que tenemos una hoja con varios datos y queremos posicionarnos en el último para seguir cargando.Sheets(“Datos”).SelectRange(“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ímosActiveCell.Offset(1,0).Select
OFFset: nos permite desplazarnos a partir de una celda fijaOffset(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.
21
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
Ejecutar Macros al cerrar Archivos
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 WorkbookActivate 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.
22
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
Eventos Worksheet
Estos procedimientos de eventos se encuentran relacionados con la hoja en la que se encuentra insertado el código VBA
Activate, DeactivateBeforeRightClick (presionamos el botón
derecho del mouse.
23
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
Para tener en cuenta
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 + QPara 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 Settings\Datos de Programa\Micrososft\Excel\XLSTART
Para modificar las característcas del Editor vamos al menú Herramientas/Opciones…
24
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
A Practicar!
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
25
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
Las Variables
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 VariablesEl 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 FunctionMó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
26
Las Variables
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
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
27
Si queremos que sea pública:Public variable1 as string
Tipo de Datos de Variables
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
28
Variables
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 = 10num2 = 20
'se mostrará un mensaje con la suma de las variables con el resultado 30MsgBox num1 + num2
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
29
Mas variables
La ventana locales es fundamental cuando trabajamos con variables ya que nos permite visualizar los valores que toman.
Públicas, privadas y estáticasLa instrucción Public nos permite declarar variables que se
utilizan en cualquier procedimiento de un proyectoPublic mivariable as integer
Private: (equivalente a utilizar Dim) sólo podrán ser utilizadas a nivel del mismo móduloPrivate 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
30
Constantes
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
31
Constantes
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
Option Explicit
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 OpcionesEn la ficha Editor, marca "Requerir declaración de variables".
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
33
Cajas con Mensajes
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
34
Los InputBoxCon 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).
Argumentos del InputBox
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
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.
Ejemplo con InputBox
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 Stringcadena = 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
36
Macro Para realizar sumas
Sub Sumatoria()Dim valor1 As DoubleDim valor2 As DoubleDim total As Doublevalor1 = InputBox("Ingrese el primer valor a sumar")valor2 = InputBox("Ingrese el segundo valor a
sumar")total = valor1 + valor2Range("A1") = totalEnd Sub
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
37
Los MsgBox
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.SintaxisMsgBox(prompt[, buttons][, title][, helpfile, context])La sintaxis de la función MsgBox consta de estos argumentos:
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
38
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.
Argumento Buttons - iconos
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
39
Buttons
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
40
Ejemplo
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
41
Ejercicios
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
42
Para tener en cuenta
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
43
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
El libro Personal (1)
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
44
El libro Personal (2)
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
45
El libro Personal (3)
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
46
El libro Personal (4)
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
47
Construcciones Condicionales
Construcción If…Then…ElseCon 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ónElse
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
48
Ejemplos
Sub Ejemplo_if()If Range(“A1”) = 12 Then
Range(“B1”)=Range(“A1”).ValueElse
Range(“B3”)=Range(“A1”).ValueEnd IfEnd Sub
Construcciones sin instrucciones Else
If Range(“A1”) > 1000Range(“B1”)=Range(“A2”) .Value+ 100
End IfAsoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
49
ElseIfSub Operaciones_Msg()Dim valor1 As DoubleDim valor2 As DoubleDim total As DoubleDim operacion As StringDim signo As Stringvalor1 = 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 signo = "*"ElseIf operacion = "DIVIDE" Then total = valor1 / valor2 signo = "/"End IfMsgBox ("El resultado de:" & valor1 & signo & valor2 & " es: " & total)
End Sub
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
50
Ucase:convierte de minus. a mayus.Lcase :de mayusc. A minusc
Al abrir un archivo
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 IfEnd Sub
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
51
Valores devueltos por los botones del MsgBox
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
52
Select Case 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 Singleopcion = 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 SelectEnd Sub
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
53
Funciones Personalizadas
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
54
Los Bucles
Son estructuras que nos permiten realizar repeticiones de instrucciones
Tipos de BuclesDo While condición
instruccionesLoop
Ejecutará el bloque mientras se cumpla una determinada condición
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
55
DO…LOOP…WHILE
DO WHILE…LOOP DO…LOOP WHILE
Sub bucledo_while()Dim cantidad As IntegerDim condicion As Integercantidad = 0condicion = 15
Do While condicion > 0 condicion = condicion - 1 cantidad = cantidad + 1LoopMsgBox ("el bucle se ejectuto " & cantidad & " veces")End Sub
Sub bucle_do_loop_while()Dim cantidad As IntegerDim condicion As Integercantidad = 0condicion = 15
Do condicion = condicion - 1 cantidad = cantidad + 1Loop While condicion > 0MsgBox ("el bucle se ejectuto " & cantidad & " veces")End Sub
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
56
Los Bucles
Do Until condicióninstrucciones
LoopSe 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
57
DO…UNTIL…LOOP
DO UNTIL…LOOP DO…LOOP UNTIL
Sub bucledo_until()Dim cantidad As IntegerDim condicion As Integercantidad = 0condicion = 0
Do Until condicion = 15 condicion = condicion + 1 cantidad = cantidad + 1LoopMsgBox ("el bucle se ejectuto " & cantidad & " veces")End Sub
Sub bucledo_loopuntil()Dim cantidad As IntegerDim condicion As Integercantidad = 0condicion = 0
Do condicion = condicion + 1 cantidad = cantidad + 1Loop Until condicion = 15MsgBox ("el bucle se ejectuto " & cantidad & " veces")End Sub
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
58
FOR…NEXT
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
59
Ejemplo con For…Next
Sub bucle_for()Dim i As IntegerDim contador As IntegerFor i = 1 To 15 contador = contador + 1Next iMsgBox "El bucle for se ejecutó " & contador & "
veces", vbInformation, "Aviso“End Sub
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
60
For Each…Next
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 mihojaFor Each mihoja In WorksheetsIf mihoja.Range("g1") = "" Then mihoja.Range("g2") = "funciona?"End IfNext mihojaEnd SubAsoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
61
Exit
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
62
Ejemplo
Sub do_celdas_exit()Dim mifilaDim micolmifila = 1micol = 1Do Until mifila = 100 Cells(mifila, micol).Select If ActiveCell = 100 Then Exit Do End If mifila = mifila + 1Loop
End Sub
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
63
Input con Validación
Sub validar_numero()Dim mivalorDo 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
64
SUMO POR COLORES
Function sumarporcolores(rango_suma)Dim colorDim miceldaDim sumacolor = ActiveCell.Interior.ColorIndex
For Each micelda In rango_sumaIf micelda.Interior.ColorIndex = color Then sumarporcolores = sumarporcolores + micelda.ValueEnd IfNext
End Function
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
65
Ocultar todo
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
66
LOS FORMULARIOS
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
67
Formularios
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
68
Formularios
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
69
Mostrar un formulario
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_formuserform1.hide
End Sub
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
70
Los controles de un Formulario
Haga click aquí para ver el documento Resumen de controles de Formulario
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
71
El Primer Formulario
Introducimos un UserformModificamos el nombre con la propiedad
Name y el título con la propiedad CaptionA 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
72
Mi Primer Formulario
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
73
Código del botón
Private Sub boton1_Click()
Dim nombre_actual As StringDim nombre_nuevo As StringDim nro As Integer
nombre_actual = Formulario1.CaptionMsgBox "El título actual del formulario es " & nombre_actualnro = Right(Formulario1.Caption, 2) + 1nombre_nuevo = "Mi Formulario " & nroFormulario1.Caption = nombre_nuevoMsgBox "El título nuevo del formulario es " & nombre_nuevo
End Sub
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
74
Procedimientos y Eventos
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
75