Vba para excel

75
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

description

 

Transcript of Vba para excel

Page 1: 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

Page 2: Vba para excel

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

Page 3: Vba para excel

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

Page 4: Vba para excel

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

Page 5: Vba para excel

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

Page 6: Vba para excel

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

Page 7: Vba para excel

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

Page 8: Vba para excel

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

Page 9: Vba para excel

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

Page 10: Vba para excel

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

Page 11: Vba para excel

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

Page 12: Vba para excel

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

Page 13: Vba para excel

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

Page 14: Vba para excel

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

Page 15: Vba para excel

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

Page 16: Vba para excel

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

Page 17: Vba para excel

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

Page 18: Vba para excel

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

Page 19: Vba para excel

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

Page 20: Vba para excel

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

Page 21: Vba para excel

Ú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

Page 22: Vba para excel

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

Page 23: Vba para excel

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

Page 24: Vba para excel

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

Page 25: Vba para excel

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

Page 26: Vba para excel

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

Page 27: Vba para excel

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

Page 28: Vba para excel

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

Page 29: Vba para excel

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

Page 30: Vba para excel

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

Page 31: Vba para excel

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

Page 32: Vba para excel

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

Page 33: Vba para excel

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

Page 34: Vba para excel

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).

Page 35: Vba para excel

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.

Page 36: Vba para excel

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

Page 37: Vba para excel

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

Page 38: Vba para excel

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.

Page 39: Vba para excel

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

Page 40: Vba para excel

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

Page 41: Vba para excel

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

Page 42: Vba para excel

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

Page 43: Vba para excel

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

Page 44: Vba para excel

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

Page 45: Vba para excel

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

Page 46: Vba para excel

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

Page 47: Vba para excel

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

Page 48: Vba para excel

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

Page 49: Vba para excel

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

Page 50: Vba para excel

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

Page 51: Vba para excel

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

Page 52: Vba para excel

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

Page 53: Vba para excel

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

Page 54: Vba para excel

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

Page 55: Vba para excel

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

Page 56: Vba para excel

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

Page 57: Vba para excel

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

Page 58: Vba para excel

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

Page 59: Vba para excel

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

Page 60: Vba para excel

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

Page 61: Vba para excel

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

Page 62: Vba para excel

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

Page 63: Vba para excel

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

Page 64: Vba para excel

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

Page 65: Vba para excel

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

Page 66: Vba para excel

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

Page 67: Vba para excel

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

Page 68: Vba para excel

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

Page 69: Vba para excel

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

Page 70: Vba para excel

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

Page 71: Vba para excel

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

Page 72: Vba para excel

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

Page 73: Vba para excel

Mi Primer Formulario

Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso

73

Page 74: Vba para excel

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

Page 75: Vba para excel

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