Macros en Excel 2010-2013

December 30, 2016 | Author: luzita-b | Category: N/A
Share Embed Donate


Short Description

Download Macros en Excel 2010-2013...

Description

MACROS EN EXCEL Sub Macro1() 'Nombre de la macro 'Creado por: 'Comentario 'Acceso Directo: Activecell.value=“Mi primera macro” End Sub

Macros en Excel

1

QUÉ SON LAS MACROS? Es un conjunto de instrucciones de código (programado) que permiten realizar una tarea determinada como así también expandir e incrementar las prestaciones de Excel. Las macros se escriben en lenguaje de programación VBA (Visual Basic for Applications). Con las macros podrás ahorrar mucho tiempo y eliminar / automatizar trabajo Excel manual Programando una macro Excel, tareas que llevaban horas o días de trabajo manual se Pueden realizar en segundos. Macros en Excel

2

COMO EMPEZAMOS? Partes de la Ventana principal de Excel Cinta de Opciones Barra de Acceso rápido

Barra de Título

Herramienta de la Ci

nta de Opciones

Área de trabajo

Pestañas de Hojas Barra de Estado

Macros en Excel

3

CINTA DE OPCIÓN “PROGRAMADOR” Es posible que no veamos esta ficha, porque se encuentra oculta en forma predeterminada. Para habilitarla en Excel 2010 - 2013 deberemos seguir los siguientes pasos. Paso 1: Ir a menú Archivo. Paso 2: Presionamos sobre el botón Opciones y se abre una ventana. Paso 3: Hacemos clic sobre Personalizar cinta de opciones. Paso 4: Ubicamos la sección denominada fichas principales, allí veremos los nombres de cada ficha de la cinta de opciones y junto a ellos, Marcamos la casilla que corresponde a la ficha Desarrollador. Paso 5: Presionamos Aceptar.

1 4 3 2 5 Macros en Excel

4

SEGURIDAD DE LAS MACROS Para deshabilitar la Advertencia de seguridad seguimos los siguientes pasos.

1 Clic en Seguridad de Macros

3

2 5

4

6 Macros en Excel

5

QUE DEBEMOS CONOCER? Cuando hablamos de macros hablamos de Objetos, Propiedades y Métodos (OPM). Estos son los 3 conceptos generales más importantes que debes conocer a la hora de programar las macros. De momentos solo te daremos una sencilla definición y luego iremos profundizando más en ellos. Hay un ejemplo muy práctico para comprender lo que son los Objetos, Propiedades y Métodos (OPM). Supongamos que tenemos una canasta con frutas.

¿Cuales serían los OPM de la misma? Objetos: Los objetos de la canasta de frutas serían las mismas frutas (manzanas, naranjas, peras…). Propiedades: Las propiedades serían las características de las frutas (color, olor, sabor, textura…). Métodos: Finalmente los métodos son las acciones que podríamos ejercer sobre las frutas (comprarlas, venderlas, comerlas, almacenarlas, limpiarlas, quitarles la piel,…). Macros en Excel

6

OBJETOS, PROPIEDADES Y MÉTODOS Objetos: prácticamente cada cosa que veas en Excel es un objeto. Ejemplos de objetos son: un libro excel, una hoja, un rango, una celda, un menú, un gráfico, una tabla dinámica, un cuadro de diálogo, las etiquetas de hojas, las columnas, las filas, etc. En fin, cada partecita de Excel es un objeto. Un objeto es algo que puedes ver e identificar con un nombre. Propiedades: las propiedades son las características de los objetos. Por ejemplo, para el objeto "celda" algunas de sus propiedades serían: alto, ancho, color, bloqueada o desbloqueada, vacía, con un número o con una fórmula, etc. Por ejemplo para el objeto "hoja" algunas de sus propiedades serían: visible u oculta, con o sin líneas de división, con o sin barras de desplazamiento vertical y horizontal, etc. Métodos: un método es una acción que podemos realizar sobre el objeto o una de sus propiedades. Por ejemplo sobre el objeto "hoja" podemos: activar, mover, copiar o borrar.

En definitiva, de eso se trata programar una macro: conocer el nombre del objeto, conocer el nombre de alguna propiedad del mismo que quieras modificar y también conocer el nombre de algún método que desees aplicarle. Macros en Excel

7

EJEMPLOS DE OPM Macros = VBA = OPM El lenguaje VBA es muy fácil de entender y siempre gira en torno a seleccionar los objetos, cambiar sus propiedades y/o ejecutarles distintos métodos. Veamos un sencillo ejemplo de algunos objetos de Excel y su denominación en inglés, el idioma utilizado por las macros:

Ejemplos de Objetos VBA (En español) Cell (celda) Range (rango) Worksheet (hoja) Workbook (libro)

Ejemplos de Propiedades VBA (En español) Value (valor) Color (color) Format (formato)

Ejemplos de Métodos VBA (En español) Copy (copiar) Protect (proteger) Delete (borrar)

Macros en Excel

8

EDITOR DE MACROS - VENTANA DE VBA Nuestra forma preferida de acceder al editor de macros es con las teclas ALT + F11 Barra de Menú Barra de Herramientas

Ventana de Proyectos o Explorador de proyectos

Ventana de Código

Ventana de Propiedades

Ventana de Inmediato

Macros en Excel

9

EDITOR DEL VBA – EXPLORADOR DE PROYECTOS Nivel 1: Proyectos Por regla general, cada libro excel tiene asociado un proyecto.

Nivel 2: Carpetas 1. Microsoft Excel Objetos 1.ThisWorkbook: Hace referencia al Libro. Si escribimos una macro aquí la misma afectará a todo el libro, tanto apertura y trabajo en el mismo. 2.Hoja1(Hoja1): Hace referencia las hojas de Excel (habrá 1 por cada hoja de nuestro libro). Si escribimos una macro aquí la misma solo afectará a la hoja en cuestión. 2. Formularios 1. UserForm1: Dentro de esta carpeta se diseñan los formularios interactivos para el usuario llamado UserForm. 3. Módulos 1. Modulo1: Dentro de esta carpeta se escriben o graban las macros. Podemos insertar tantos módulos como necesitemos. Estos módulos operan de forma genérica, sin distinguir entre hojas o libros. Macros en Excel

10

EDITOR DEL VBA – EXPLORADOR DE PROYECTOS Haciendo doble clic izquierdo en cualquiera de estos objetos verás que se habilita la Ventana de Código de la

izquierda (una hoja en blanco grande). En la misma es donde se escriben las macros.

Recuerda! Antes de escribir una macro debes evaluar donde hacerlo. 1.Si es una macro que solo debe afectar una hoja en particular escríbela en los objetos de Hoja, en el nombre de Hoja correspondiente. 2.Si la macro debe afectar a todo un libro en particular escríbela en el objeto ThisWorkbook. Estas suelen ser macros que se ejecutan al abrir, cerrar o guardar el libro. 3. Si la macro es de tipo genérica escríbela en un Módulo. 4. Si quieres hacer un formulario utiliza el objeto Userform.

Macros en Excel

11

EDITOR DEL VBA – VENTANA DE PROPIEDADES Cada objeto tiene sus propiedades. Por ejemplo, si hacemos doble clic en el objeto Módulo1 que vimos en la sección anterior, podremos ver sus propiedades: Algunos objetos tienen muchas propiedades (por ej. los Userforms) así que tenemos la opción de ordenar los mismos de forma alfabética o por categoría. El objeto Módulo1 solo tiene la propiedad (Name)Módulo1. Si quisiéramos podríamos reemplazar el nombre de Módulo1 y asignar otro nombre a gusto.

Consejo! En la medida que vamos insertando muchas macros en nuestro proyecto, conviene ir creando nuevos módulos con nombres apropiados para mantener ordenadas nuestras macros. Macros en Excel

12

EJEMPLO DE PROPIEDADES DE HOJA Propiedades de Hoja1 Item

Valor

Significado

(Name)

Hoja1

Nombre de la Hoja1 del Excel

DisplayPageBreaks

False

Muestra el contorno de impresión de hojas

DisplayRightToleft

False

Muestras las columnas y filas desde el lado derecho.

EnableCalculation

True

Activa el calculo matemático automático en las celdas

EnableFormatConditionsCalculation

True

Activa el calculo lógico automático en las celdas

EnableSelection

0

No habilita las restricciones

Name

-1 -1142 Hoja1

Desactiva las celdas bloqueadas Desactiva todas las celdas Nombre de la Hoja1 en VBA

Visible

-1

Se muestra la Hoja de Excel

0 2

Se oculta temporalmente la Hoja de Excel Se oculta permanentemente la Hoja.

Macros en Excel

13

EDITOR DEL VBA – VENTANA DE CÓDIGO Lo que interesa es más bien el código que escribamos aquí. Puedes escribir todas las macros que quieras en esta ventana. Recuerda que el mismo editor asignará automáticamente los colores al código y además separará con una línea continua cada macro.

En la medida que empecemos a escribir muchas macros, existe una forma rápida de movernos entre ellas. Desde la lista desplegable de la parte superior derecha podremos ver la lista de macros escritas. Haciendo clic en cualquiera de ellas el editor nos posicionará rápidamente en la misma.

14

Macros en Excel

14

EDITOR DEL VBA – VENTANA DE INMEDIATO La ventana inmediato sirve para escribir, ejecutar y probar un código macro rápidamente, sin tener que armar toda la macro con la estructura que comentamos en secciones anteriores. Por ejemplo, si quisiéramos averiguar la cantidad de hojas que tiene un Libro podríamos escribir la siguiente macro en un módulo y ejecutarla presionando desde el teclado la tecla F5: Sub ContarHojas() Dim N As Long N= thisworkbook.Sheets.Count Msgbox N End Sub

Entonces, en la ventana inmediato podemos escribir: ?thisworkbook.Sheets.Count y al presionar Enter en la fila siguiente nos mostrará el número de hojas que posee el libro. El signo ? al comienzo significa que estamos buscando conocer el resultado de algo. El resultado final se vería así, suponiendo que el libro tiene 3 hojas:

15

Macros en Excel

15

CREAR Y/O GRABAR UNA MACRO A la hora de crear una nueva macro existen 3 métodos. • Escribirla manualmente • Utilizar la grabadora de macros • Combinación de los 2 métodos anteriores (grabarla y luego retocarla manualmente) En cada situación utilizarás un método distinto. Por ejemplo, las macros muy sencillas las puedes escribir manualmente porque tienen pocas líneas y ya las conoces. En otros casos la podrás crear con la grabadora de macros y olvidarte del código VBA. Sin embargo, en la medida que progreses con las macros verás que el método más utilizado suele ser el número 3 mediante el cual primero grabarás y luego harás ajustes manuales en el código para hacerlo más eficiente y que se ejecute más rápido. Macros en Excel

16

EJEMPLOS DE MACROS Crea un nuevo libro Excel y guárdalo con el nombre Libro1. 2. Accede al Editor de visual basic con las teclas ALT+F11 3. Inserta un nuevo Módulo desde el menú Insertar > Módulo 4. Dentro del módulo escribe textualmente el siguiente código: Sub MostrarTexto() ' Esta macro muestra un texto en una ventana emergente Msgbox “Bienvenido" End Sub

Esta macro utiliza la instrucción Msgbox que sirve para abrir una ventana con la información que le indiquemos. Sub OcultarLineas() ' Esta macro oculta las líneas de división de las celdas ActiveWindow.DisplayGridlines = False End Sub Esta macro utiliza el objeto ActiveWindow (ventana activa). Luego le asigna la propiedad DisplayGridlines=False (mostrar líneas de división=falso) Macros en Excel

17

EJECUCIÓN DE MACROS Desde el Código: La forma más rápida de ejecutar una macro es desde el mismo código. Cuando terminas de escribir una macro puedes posicionarte en cualquiera de sus líneas de código y presionar la tecla F5. Recuerda que puedes acceder al código de las macros desde el editor de macros, con las teclas ALT+F11. Desde el Menu: Otra forma de ejecutar una macro es desde el menú de macros, que lo puedes visualizar presionando ALT+F8 Verás que se abre un cuadro como el siguiente:

Para ejecutar la macro: 1. Elige el Nombre de la macro de la lista 2. Clic en Ejecutar Desde el Teclado: Otra forma muy práctica de ejecutar una macro es desde el teclado. Esto también se conoce como teclas de método abreviado. Para configurar las teclas con las cuales ejecutar debes hacer los siguiente: 1. Ir al menú de macros presionando ALT+F8 2. Elegir el nombre de la macro de la lista y luego hacer clic en el botón Opciones. Macros en Excel

18

Donde dice Tecla de método abreviado presiona la tecla MAYUSC y luego una letra. En nuestro ejemplo la macro se ejecutará con Ctrl+Mayúsc+Q

Donde dice Tecla de método abreviado presiona la tecla MAYUSC y luego una letra. En nuestro ejemplo la macro se ejecutará con Ctrl+Mayúsc+Q Desde Objetos Haz clic izquierdo en la figura para desplegar su menú de opciones. Elige la opción Asignar macro 19

Macros en Excel

19

MACROS CON EVENTOS EN LIBROS Los eventos de libros permiten disparar automáticamente una macro cuando suceden determinadas acciones a nivel del libro excel en cuestión, por ejemplo al abrirlo, guardarlo, cerrarlo, imprimirlo, etc. Instrucciones para insertar una macro de evento a nivel libro: 1. Las macros de eventos se deben escribir en la carpeta ThisWorkbook del editor de macros. 2. Luego en la primera lista desplegable de la ventana de macros elegimos la opción Workbook.

3.Finalmente, en la lista desplegable de la derecha veremos todos los eventos de libro que podemos utilizar para disparar nuestra macro. 4.Si haces clic en la opción Activate, verás que en la ventana de macros se escribe automáticamente el siguiente código: Private Sub Workbook_Activate() End Sub Luego podrás escribir tu código macro entre esas líneas. En este caso, la macro que escribas se ejecutará cada vez que actives el libro excel en cuestión. Por ejemplo, puedes hacer una macro que muestre un mensaje de saludo cada vez que abres el libro: Entonces, cada vez que abras el libro, la macro se ejecutará automáticamente y verás el saludo: Macros en Excel

20

En el caso de las macros de evento, siempre aparece la palabra Private. Eso significa que esa macro no la podrás ver en la lista del menú de macros. Esto es así porque la macro no se puede ejecutar manualmente, si no que se ejecuta automáticamente cuando ocurre el evento, en este caso cuando se activa el libro excel en cuestión. Existen más de 20 macros de evento a nivel libro. Puedes insertarlas siguiendo las instrucciones dadas al comienzo. Las más importantes son: Private Sub Workbook_BeforeClose(Cancel As Boolean) ' El código que escribas aquí se ejecutará automáticamente al cerrar el libro End Sub Private Sub Workbook_BeforePrint(Cancel As Boolean) ' El código que escribas aquí se ejecutará automáticamente al imprimir el libro End Sub Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) ' El código que escribas aquí se ejecutará automáticamente al guardar el libro End Sub Private Sub Workbook_Open() 'El código que escribas aquí se ejecutará automáticamente al abrir el libro End Sub Macros en Excel

21

MACROS CON EVENTOS EN HOJAS Los eventos de hojas permiten disparar automáticamente una macro cuando suceden determinadas acciones a nivel de hojas excel, por ejemplo al activarla, desactivarla, calcularla, etc. Instrucciones para insertar una macro de evento a nivel hoja: 1.En nuestro caso tenemos Hoja1(Hoja1). Al hacer doble clic en dicha carpeta, la macro que escribamos solo afectará a dicha hoja. 2. Luego en la primera lista desplegable de la ventana de macros elegimos la opción Worksheet.

3.Finalmente, en la lista desplegable de la derecha veremos todos los eventos de hoja que podemos utilizar para disparar nuestra macro automáticamente. 4.Si haces clic en la opción Activate, verás que en la ventana de macros se escribe el siguiente código: Private Sub Worksheet_Activate() End Sub Luego podrás escribir tu código macro entre esas líneas. En este caso, la macro que escribas se ejecutará cada vez que actives la hoja excel en cuestión. Por ejemplo, puedes hacer una macro que muestre un mensaje de saludo cada vez que activas la hoja:

Entonces, cada vez que actives la hoja, la macro se ejecutará automáticamente y verás el saludo: Macros en Excel

2

22

En el caso de las macros de evento, siempre aparece la palabra Private. Eso significa que esa macro no la podrás ver en la lista del menú de macros. Esto es así porque la macro no se puede ejecutar manualmente, si no que se ejecuta automáticamente cuando ocurre el evento, en este caso cuando se activa la hoja excel en cuestión. Existen unas 9 macros de evento a nivel hoja. Puedes insertarlas siguiendo las instrucciones dadas al comienzo. Las más importantes son: Private Sub Worksheet_Activate() 'El código que escribas aquí se ejecutará automáticamente al activar la hoja End Sub Private Sub Worksheet_Calculate() ' El código que escribas aquí se ejecutará automáticamente al calcular la hoja End Sub Private Sub Worksheet_Deactivate() 'El código que escribas aquí se ejecutará automáticamente al desactivar la hoja End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) ' El código que escribas aquí se ejecutará automáticamente al moverte entre las celdas de la hoja (cada vez que seleccionas y te posicionas en una nueva celda) End Sub Private Sub Worksheet_Change(ByVal Target As Range) ' El código que escribas aquí se ejecutará automáticamente al producirse un cambio en la hoja (por ejemplo al introducir un dato en una celda, seleccionar una opción de una lista desplegable, etc.) End Sub Macros en Excel

23

FORMULARIOS Un Formulario (o su denominación en inglés Userform) se utiliza para crear un Cuadro de Diálogo donde el usuario puede introducir información, o realizar otras operaciones. Al ejecutar muchas de las opciones del menú de Excel se abren formularios. Por ejemplo, desde el menú Herramientas > Opciones se abre un formulario como el siguiente, desde donde se pueden activar o desactivar distintas opciones de Excel. Los Userforms se utilizan mucho para crear aplicaciones Excel que luzcan de forma profesional y permitan al usuario introducir datos o elegir opciones de una forma guiada y más intuitiva.

Macros en Excel

24

1. Abrir el editor de macros (por ejemplo, con CTRL+F11). 2. Insertar un objeto Userform. Esto podemos hacerlo fácilmente: 1.Seleccionamos el Libro Excel donde trabajaremos, en nuestro caso VBAProject (Libro2). 2. Hacemos clic derecho en el mismo y elegimos la opción Insertar > Userform 3.Como se ve en la fotografía, veremos que aparece un objeto Userform1 que cuelga de la carpeta Formularios

La idea es que mediante estos controles podremos tanto capturar como enviar información o datos desde o hacia las celdas de Excel respectivamente. También podemos asociar macros a los controles que agreguemos al Userform (todo esto lo veremos en secciones siguientes). Si te posicionas sobre los Controles del Cuadro de herramientas, verás que aparece su nombre. Simplemente hacemos clic izquierdo en el control deseado y luego clic izquierdo en el Userform, en el sitio donde queramos agregar el control. En nuestro caso hemos agregado algunos controles de forma desordenada dentro del Userform. Macros en Excel

25

CONTROLES DEL FORMULARIO Ahora explicaremos brevemente la utilidad de cada control. Los controles se explican en el mismo orden que aparecen en el Cuadro de Herramientas y en la figura anterior (de izquierda a derecha y de arriba hacia abajo).

26

Macros en Excel

26

Macros en Excel

27

Haciendo doble clic en cada control se abrirá una venta donde podremos escribir y asociarle una macro. En la sección siguiente veremos un ejemplo simple sobre como crear un Userform paso a paso. Macros en Excel

28

EJEMPLO DE UN FORMULARIO Objetivo Crear un Userform para que un usuario complete unos datos personales (Nombre, Edad y Fecha de Nacimiento). Luego que el usuario complete sus datos, al apretar un botón, los mismos se volcarán en una tabla de Excel. Los controles que utilizaremos son: Textbox: para que el usuario ingrese los datos Label: para darle el nombre e los Textbox CommandButton: para proceder con el ingreso de datos o cancelar 1. Creamos la tabla en la hoja Excel

2. Creamos un Userform (UF) DatosUF.Show Los UF se crean desde el editor de visual basic. Abrimos el editor con ALT+F11 Desde el menú superior elegimos Insertar > Userform Macros en Excel

29

3. Nombramos el Userform

4. Agregamos un Cuadro de Texto

5. Agregamos un Texto

Macros en Excel

30

6. Agregamos los Cuadros de Texto restantes Agregamos los cuadros de texto y las etiquetas restantes (ya lo hicimos para el nombre así que repetimos para Edad y Fecha de Nacimiento). Repetimos los pasos 4 y 5 y agregamos:

* Un TextBox cuyo (Name) sea UFEdad, con una Etiqueta llamada "Edad" * Un TextBox cuyo (Name) sea UFFecha, con una Etiqueta llamada "Fecha Nac." Es muy importante que no olvides asignar bien los nombres (Name) a los Textbox, si no la macro dará error. Puedes revisar los pasos 4 y 5 para recordar como hacerlo.

Si los textbox no quedan alineados se pueden alinear de la siguiente forma: 1.Clic en el primer TextBox 2. Mantieniendo pulsada la tecla MAYUS, selecciona los otros TextBox 3. Vamos al menú Formato > Alinear > Izquierda 4.Hacemos clic en alguna parte vacía del Userform para seleccionarlo y mostrar el cuadro de herramientas. 31

Macros en Excel

31

7. Agregamos los Botones Para permitir que el usuario ejecute una acción, se pueden agregar un Botón de comando. Nuestro Userform tendrá un botón para Agregar los datos a la tabla Excel y otro botón para Cerrar el Userform. 1.En el Cuadro de Herramientas hacemos clic en Botón de comando. 2. En el Userform hacemos clic en la parte inferior izquierda para agregar el botón. 3.Con el nuevo botón seleccionado hacemos doble clic en la propiedad (Nombre) de la Ventana de Propiedades, tipeamos UFAgregar y luego enter. 4. Con el nuevo botón seleccionado hacemos doble clic en su propiedad Caption en la Ventana de Propiedades, tipeamos Agregar y luego enter. 5.Hacemos clic en alguna parte vacía del Userform para seleccionarlo y mostrar el Cuadro de Herramientas. 6.Repetimos los pasos anteriores para agregar otro Botón de comando llamado UFCerrar y nombre "Cerrar". 7.8 Si fuese necesario podemos reubicar los botones dentro del Userform. Es muy importante que no olvides asignar bien los nombres (Name) a los Botones de comando, si no la macro dará error. Esto se explica en el paso 7.3 y luego deberás repetirlo para el otro botón, tal cual se indica en el paso 7.6.

Macros en Excel

32

8. Agregamos el código al botón Agregar Private Sub UFAgregar_Click() Dim iFila As Long Dim ws As Worksheet Set ws = Worksheets(1) 'encuenta la siguiente fila vacía iFila = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row 'Verifica que se ingrese un nombre If Trim(Me.UFNombre.Value) = "" Then Me.UFNombre.SetFocus MsgBox "Debe ingresar un nombre" Exit Sub End If 'copia los datos a la base de datos ws.Cells(iFila, 1).Value = Me.UFNombre.Value ws.Cells(iFila, 2).Value = Me.UFEdad.Value ws.Cells(iFila, 3).Value = Me.UFFecha.Value 'limpa el formulario Me.UFNombre.Value = "" Me.UFEdad.Value = "" Me.UFFecha.Value = "" Me.UFNombre.SetFocus

Seleccionamos nuestro botón de comando Agregar y hacemos doble clic

9. Agregamos el código al botón Cerrar Private Sub UFCerrar_Click() Unload Me End Sub

10.Permitir al usuario cerrar el Userform con la tecla ESC 1. Seleccionamos el botón de comando Cerrar 2. En la Ventana Propiedades cambiamos la propiedad Cancel a True.

End Sub Macros en Excel

33

MACROS VARIOS Macros privadas Si deseas ocultar las macros del libro en dicho cuadro puedes hacerlo utilizando la instrucción Private cuando escribas tu macro. Debes utilizar dicha instrucción delante de la palabra Sub. De este modo solo ocultarás la macro en cuestión. Ejemplo: Private Sub MiMacro() 'Esta macro no aparecerá en la lista de macros 'Código de tu macro aquí End Sub Si tienes muchas macros en el módulo y quieres ocultarlas todas, en lugar de escribir la palabra Private en cada una de ellas, puedes colocar la siguiente instrucción al comienzo de tu módulo: Option Private Module

Utilizar la instrucción With Cuando tenemos que definir muchas propiedades de un único objeto, no es necesario hacer mención al objeto cada vez, porque esto le quita velocidad de ejecución a la macro. Para ganar velocidad y mantener el código más simple, conviene hacer mención al objeto una única con la instrucción With y luego definir sus propiedades, por ejemplo: Macros en Excel

Sub CambiarFormatoRango() With Range("A1") .Value = 10 .Font.Bold = True .Interior.ColorIndex = 5 End With End Sub 34

INSERTAR FÓRMULAS RELATIVAS Insertar fórmulas relativas Si queremos insertar fórmulas en celdas mediante macros, existe una forma más rápido de hacerlo que con Copiar y pegar. Por ejemplo: Sub CopiarFormula() Range("A1:A10").FormulaR1C1 = "=SUM(RC[1]:RC[5])" End Sub

Evitar el uso de Copiar, Pegar y Seleccionar Cuando se utiliza la grabadora de macros, es común que se genere más código del necesario y esto hace que funcione un poco más lento. Las intrucciones que suelen ser redundantes son Select, Selection.Copy y Paste. Supongamos que queremos copiar un rango en otro rango. Si utilizamos la grabadora el código será el siguiente: Sub CopiaRango() Range("C10:C12").Select Selection.Copy Range("E10").Select ActiveSheet.Paste End Sub

Sub CopiaRango() Range("C10:C12").Copy Range("E10") End Sub

Macros en Excel

35

MACROS Variables: Qué son las variables y cómo se utilizan. Libros: Macros para manipular libros. Hojas: Macros para manipular hojas. Rangos: Macros para manipular rangos. Estructuras: Las estructuras y macros más comunes. Comandos: Diversos comandos útiles muy utilizados.

Macros en Excel

36

VARIABLES Para definir una variable utilizamos una sintaxis del tipo: Dim NombreVariable As TipodeDato

Dim: Indica que estamos creando una variable NombreVariable: Escribimos el nombre de nuestra variable a gusto (sin espacios) As: Necesario para definir el tipo de variable TipodeDato: Debemos indicar si es una variable texto, fecha, valor, etc Veamos un ejemplo sencillo: Sub MiNombre () 'Indicamos que 'Nombre' es una variable 'String' o sea de tipo (texto) Dim Nombre As String 'Le asignamos un valor a la variable (también podríamos indicarle una celda Excel) Nombre = "Pedro" ' Mostramos el valor de la variable en un mensaje Msgbox Nombre End Sub

La idea es que Excel recordará que la variable "Nombre" tiene asignado el valor "Pedro". Podremos utilizar dicha variable más adelante en nuestro código. Macros en Excel

37

Variables Definición Una variable es un lugar de almacenamiento con nombre que puede contener cierto tipo de datos que puede ser modificado durante la ejecución del programa. Cada variable tiene un nombre único que la identifica dentro de su nivel de ámbito. Puede especificar un tipo de datos o no. Los nombres de variable deben comenzar con un carácter alfabético, deben ser únicos dentro del mismo ámbito, no deben contener más de 255 caracteres y no pueden contener un punto o carácter de declaración de tipo. Podemos declarar todo tipo evariables, por ello conviene también adquirir la costumbre de hacer que el propio nombre de nuestras variable resulte descriptivo de la función que cumplirá, por ejemplo: Sub Macro() 'Definimos una variable numérica TipoCambio, que es el factor de conversión entre el euro y la libra Dim TipoCambio As Double ' Variable definida como valor con 2 decimales TipoCambio = 1.45 ' Esta macro multiplica el valor de la celda activa por el valor de la variable anterior ActiveCell.Value = TipoCambio * ActiveCell.Value End Sub

Macros en Excel

38

Variables Declaración Para que siempre nos veamos en la obligación de declarar todas las variables que podamos ir utilizando en nuestros módulos (es decir obligarnos a definir nuestras variables de entrada). Esto lo podemos realizar desde el editor de VBA, a traves del menú Herramientas > Opciones > pestaña Editor > y seleccionar la casilla Requerir declaración de variables Se usa en el nivel de módulo para forzar declaraciones explícitas de todas las variables en dicho módulo, debe aparecer en un módulo antes de cualquier procedimiento. Cuando Option Explicit aparece en un módulo, debemos declarar explícitamente todas las variables mediante las instrucciones Dim, Private, Public, ReDim o Static.

Sub MacroMensaje() ' Declaramos la variable saludo como variable tipo texto Dim saludo As String Variante (Variable no declarada) Dim despedida As String 'Damos un valor a la variable declarada saludo = "Hola que tal" Si se intenta utilizar una 'Damos un valor a la variable declarada despedida = "Adios" variable no declarada se MsgBox saludo obtiene un error en el tiempo MsgBox despedida de compilación End Sub Macros en Excel

39

Variables Tipos de Datos Tipo de datos Byte Boolean Integer Long (entero largo) Single (coma flotante/ precisión simple) Double (coma flotante/ precisión doble) Currency (entero a escala) Decimal

Date Object String (longitud variable) String (longitud fija)

Tamaño byte bytes bytes bytes bytes bytes

Intervalo 0 a 255 True o False -32,768 a 32,767 -2,147,483,648 a 2,147,483,647 -3,402823E38 a -1,401298E-45 para valores negativos; 1,401298E-45 a 3,402823E38 para valores positivos -1.79769313486231E308 a -4,94065645841247E-324 para valores negativos; 4,94065645841247E-324 a 1,79769313486232E308 para valores positivos

bytes

-922.337.203.685.477,5808 a 922.337.203.685.477,5807

bytes

+/-79.228.162.514.264.337.593.543.950.335 sin punto decimal; +/7,9228162514264337593543950335 con 28 posiciones a la derecha del signo decimal; el número más pequeño distinto de cero es +/0,0000000000000000000000000001 1 de enero de 100 a 31 de diciembre de 9999 Referencia a tipo Object 0 a 2.000 millones

bytes bytes bytes + longitud de la cadena longitud de la cadena

Variant (con números) bytes Variant (con bytes + longitud de la caracteres) cadena Definido por el número requerido por los usuario (utilizando elementos Type)

1 a 65.400 aproximadamente valor numérico hasta el intervalo de un tipo Double mismo intervalo que para un tipo String de longitud variable intervalo de cada elemento es el mismo que el intervalo de su tipo de datos.

La macro anterior utiliza bastantes menos recursos que esta próxima que no fuerza la declaración de la variable X (y por lo tanto es considerada como Variant): Macros en Excel

Sub Macro() For X = 1 To 25 Cells(X, 1) = X Next X End Sub

40

Variables Locales Las variables locales se declaran dentro de cada macro, y solo pueden ser utilizadas dentro de la macro en la que han sido creadas, cuando la macro termina de ejecutarse, la variable desaparece y Excel libera la memoria que estaba utilizando recordando a qué hacían referencia. Una variable se declara como local cuando está declarada dentro de la macro que hará uso de la misma, por ej: Si una variable es local todas el resto de las macros podrán utilizar el mismo nombre de la variable tal Sub Macro() que: Dim X As Single Option Explicit Dim Y As Single Option Explicit Dim Z As Single Sub Macro2() X=5 Sub Macro1() Dim Autor As String Y = 10 Dim Autor As String Autor = "Pedro" Z = 50 Autor = "EXCEL" ActiveCell = Autor ActiveCell = X * Y * Z ActiveCell = Autor End Sub MsgBox TypeName(Resultado) End Sub End Sub

Macros en Excel

41

Variables Públicas Las variables declaradas mediante la instrucción Public están disponibles para todos los procedimientos en todos los módulos de todas las aplicaciones, a menos que Option Private Module esté en efecto; en este caso, las variables sólo son públicas dentro del proyecto en el que residen. Este tipo de variables son útiles cuando empezamos a trabajar con macros pues facilitan la comprensión, y nos ahorran el hecho de tener que declarar lo mismo una y otra vez.

Usamos la instrucción Public para declarar el tipo de datos de una variable. Por ejemplo, la instrucción siguiente declara una variable como de tipo Integer: Public NúmeroDeEmpleados As Integer Usamos también la instrucción Public para declarar el tipo de objeto de una variable.

Macros en Excel

Option Explicit Public X As Byte Sub Macro() For X = 1 To 25 Call Macro2 Next X End Sub

Sub Macro2() Cells(X, 1) = X End Sub

42

Variables Estáticas Las variables declaradas con la instrucción Static conservan su valor mientras el código se está ejecutando. Una vez que el código del módulo se está ejecutando, las variables declaradas con la instrucción Static conservan su valor hasta que se reinicie o restablezca el módulo. En los módulos de clase, las variables declaradas con la instrucción Static conservan su valor en cada instancia de clase hasta que se destruye la instancia. En módulos de formulario, las variables estáticas conservan su valor hasta que se cierra el formulario. Use la instrucción Static en procedimientos no estáticos para declarar explícitamente variables que son visibles sólo dentro de un procedimiento, pero cuya vida es la misma que la del módulo en la que se definió el procedimiento. Option Explicit

Sub Macro2() Static x As Byte x=x+5 Rg.Select Rg = x End Sub

Public Rg As Range Sub Macro1() Dim x As Byte For x = 1 To 25 Set Rg = Cells(x, 1) Call Macro2 Next x End Sub Macros en Excel

43

Variables Constantes Por lo general las variables hacen referencia a valores que acostumbran a cambiar tal que, por ej: Pero a veces queremos que una variable no cambie, es decir que siempre haga referencia al mismo valor, ejemplo: mi nombre, la capital de Francia etc. Lógicamente carece de sentido declarar variables como constante si éstas no son públicas. Para declarar una variable como constante utilizamos la instrucción Const, por ej:

Sub Macro() Dim Rng As Range Dim x As Byte For x = 1 To 25 Set Rng = Cells(x, 1) Rng.Select Rng = x Next x End Sub

Option Explicit Const nPaises As Byte = 53 Const UKrate = 1.43, USrate = 0.78 Const autorLibro As String = "TodoEXCEL" En la 1º línea hemos definido una variable como nPaises as byte y su valor sera siempre 53. La 2º línea de código declara dos variables como constantes pero no especifica si son as double o as, con lo cual se consideraran as variant. La 3º linea de código declara autorLibro como una constante de tipo string y le da el valor TodoEXCEL

Macros en Excel

44

Variables Conversión Es posible convertir variables de un tipo a otro. Existen distintas funciones que permiten hacer estas conversiones. Función CBool CByte CCur CDate CDbl

Cdec

Cint Clong CSng

Cstr CVar

Tipo devuelto Boolean Byte Currency Date Double

Intervalo del argumento expresión expresión de cadena o numérica válida. 0 a 255 .337.203.685.477,5808 a 922.337.203.685.477,5807. expresión de fecha .79769313486231E308 a -4,94065645841247E-324 para valores negativos; 4,94065645841247E-324 a 1,79769313486232E308 para valores positivos. +/-79.228.162.514.264.337.593.543.950.335 para números basados en cero, es decir, números sin decimales. Para números con 28 decimales, el intervalo es +/-7,9228162514264337593543950335. La menor posición para un número que no sea cero es 0,0000000000000000000000000001. .768 a 32.767; las fracciones se redondean. .147.483.648 a 2.147.483.647; las fracciones se redondean. ,402823E38 a -1,401298E-45 para valores negativos; 1,401298E-45 a 3,402823E38 para valores positivos. mismo intervalo que Double para valores numéricos. El mismo intervalo que String para valores no numéricos. valor de retorno de CStr depende del argumento expresión.

Si la expresión del argumento expresión que se pasa a la función está fuera del intervalo del tipo de dato al que se va a convertir, se produce un error. En general, el código se puede documentar utilizando las funciones de conversión de tipos de datos para indicar que el resultado de alguna de las operaciones se debería expresar como un tipo de datos en particular, no como el tipo de datos predeterminado. Macros en Excel

45

Variables Conversión Cuando la parte fraccionaria es exactamente 0,5, CInt y CLng siempre redondean al número par más cercano. Por ejemplo, 0,5 redondea a 0, y 1,5 redondea a 2. CInt y CLng se diferencian de las funciones Fix e Int en que truncan, en lugar de redondear, la parte fraccionaria de un número. Además, Fix e Int siempre devuelven un valor del mismo tipo del que se le pasa. Utilizamos la función IsDate para determinar si se puede convertir date a una fecha o una hora. Si tubiéramos una cadena de texto tal que: Sub EjCdate() Dim QAZ As String QAZ = "5/5/2008" If IsDate(QAZ) Then QAZ = CDate(QAZ) MsgBox QAZ & " SI es una Fecha ." Else MsgBox QAZ & " no es una Fecha" End If End Sub

CDate reconoce literales de fecha y literales de hora además de números comprendidos dentro del intervalo de fechas aceptables. Al convertir un número a una fecha, la parte numérica entera se convierte a una fecha. Cualquier parte fraccionaria del número se convierte a la hora del día, comenzando a medianoche.

CDate reconoce formatos de fecha que se ajusten a la configuración regional de tu sistema. Es posible que no se determine el orden correcto del día, mes y año si se proporciona en un formato diferente del que reconoce la configuración de fecha. Además, no se puede reconocer un formato de fecha largo si contiene la cadena del día de la semana. Macros en Excel

46

LIBROS Mediante macros VBA podemos manipular de distintas formas tanto libros Excel como archivos con otras extensiones. En este capítulo veremos como hacerlo. Abrir Libros Para abrir un libro excel utilizamos la instrucción Open. Si queremos abrir un libro determinado podemos utilizar la siguiente macro: Sub AbrirLibro() Dim Nombre As String Nombre = "C:\MiLibro.xls" ' Si no se encuentra el libro hacemos que salga un mensaje de aviso If Dir(Nombre) = "" Then MsgBox Nombre & " no se encuentra" Else Workbooks.Open FileName:=Nombre, updateLinks:=False End If End Sub

Macros en Excel

47

Libros Cerrar Libros Para cerrar un libro utilizamos la instrucción Close: Si quisiéramos cerrar Excel:

Sub Cerrar() ActiveWorkbook.Close End Sub

Sub CierraExcel() Application.Quit End Sub

Guardar Libros Para guardar un libro utilizamos la instrucción SaveAs. Si queremos guardarlo con un nombre que figura en una celda (por ej. si en la celda A1 está el nombre "QAZ"): Sub Macro() On Error Resume Next ' Ponemos On Error Resume Next, para evitar el error derivado de una celda vacía y/o con un caracter con el que excel no permite guardar un libro ActiveWorkbook.SaveAs [A1].Value ' También podríamos poner ' ActiveWorkbook.SaveAs Filename:=Range('A1').Value End Sub Macros en Excel

48

Libros Borrar Libros Para borrar un libro utilizamos la instrucción Delete: Sub BorraLibro () Workbooks("C:\TuLibro.xls").Delete End Sub Conviene recordar que excel nos pedirá confirmación antes de borrarlo. Crear Libros Para crear 1 nuevo libro utilizamos la instrucción Add, por ejemplo: Sub NuevoLibro() Workbooks.Add End Sub

Si quisiéramos crear 2 nuevos libros: Sub NuevoLibro() Workbooks.Add Workbooks.Add End Sub Macros en Excel

49

Libros Imprimir Libros Para imprimir libros u hojas utilizamos la instrucción PrintOut, por ejemplo: Sub Imprimir () ' Imprime el libro activo ActiveWorkbook.Printout End Sub Si queremos imprimir un libro y hoja determinada: Sub Imprimir () ' Imprime el libro y hoja indicados Workbooks("MiLibro.Xls").Sheets("Hoja1").Printout End Sub

Si queremos imprimir un rango determinado, por ejemplo A4:H100 Sub ImprimirRango () ' Imprime el rango indicado Sheets("Hoja1").PageSetup.PrintArea = "$A$4:$H$100" Workbooks("MiLibro.Xls").Sheets("Hoja1").Printout End Sub Macros en Excel

50

Libros Proteger/Desproteger Libros La protección de libros se hace con las instrucciones Protect y Unprotect, por ejemplo: Sub ProtegeLibro() With ActiveWorkbook ' Primero protegemos esctuctura (mover, copiar, insertar hojas) y ventana (cambiar tamaño o mover ven tana) .Protect Structure:=True, Windows:=True ' Desprotegemos con clave 'Excel' .Unprotect ("Excel") ' Protegemos con clave 'Excel' .Protect ("Excel") End With End Sub

Para proteger un libro primero se debe desproteger con Unprotect y luego protegemos con Protect. La clave se pone entre comillas y paréntesis y es sensible a las mayúsculas (si protejo con "Excel" la clave "excel" no funcionará). Para desproteger el libro hacemos: Sub DesprotegeLibro () ActiveWorkbook.Unprotect ("Excel") End Sub Macros en Excel

51

HOJAS Agregar

Para agregar una nueva hoja al libro utilizamos la instrucción Add. Si queremos agregar una nueva hora al libro activo utilizamos el siguiente código: Para agregar una nueva hoja al libro utilizamos la instrucción Add. Si queremos agregar una nueva hora al libro activo utilizamos el siguiente código: Sub AgregarHoja() ActiveWorkbook.Worksheets.Add End Sub Otra forma de hacerlo es: Sub AgregarHoja() Dim Hoja As Worksheet Set Hoja = Worksheets.Add End Sub

Macros en Excel

52

Hojas Seleccionar Para referirnos a una hoja dentro de un podemos utilizar la instrucción Select o Activate. Seleccionar una hoja utilizando su número de hoja contenida dentro del libro, como se ve a continuación: Sub Seleccionar() ' para seleccionar la primera hoja del libro activo ActiveWorkbook.Sheets(1).Select ' para seleccionar la segunda hoja del libro activo ActiveWorkbook.Sheets(2).Select ' para seleccionar y /o activar la hoja con nombre “Hoja3” del libro activo ActiveWorkbook.Sheets(“Hoja3”).Activate End Sub

Utilizando el nombre de la hoja en VBA Hoja1(PrimeraHoja) contenida dentro del libro, como se ve a continuación: Sub Seleccionar() ' para seleccionar la segunda hoja del libro activo Hoja1.Activate ' también podría ser Hoja1.Select End Sub Macros en Excel

53

Hojas Borrar Hojas Cuando se elimina una hoja o un libro, excel siempre nos pide confirmación, del mismo modo que cuando eliminamos cualquier otro fichero. En este ejemplo se elimina la hoja llamada "Hoja1" en caso de que confirmemos la opción que observaremos cuando se ejecute el código: Sub BorrarHoja() Sheets("Hoja1").Delete End Sub En este otro ejemplo se elimina la hoja1 del libro activo sin mostrar el cuadro de diálogo de confirmación: Sub borrarHoja() Application.DisplayAlerts = False Sheets("Hoja1").Delete Application.DisplayAlerts = True End Sub Macros en Excel

54

Hojas Imprimir Hojas Para imprimir la hoja actual hacemos la instrucción PrintOut, tal que: Sub ImprimeHoja () ActiveSheet.PrintOut End Sub Si además deseamos fijar previamente un rango de impresión hacemos: Sub ImprimeRango () ActiveSheet.PageSetup.PrintArea = Range("$A$1:$C$10").Address ActiveSheet.PrintOut End Sub En la macro anterior, cuando queremos imprimir un rango, es necesario agregar la instrucción Address, caso contrario no funcionará. Si deseamos poner un encabezado a la izquierda de cada hoja, con la frase "Reporte Trimestral" (o cualquier otro mensaje): Private Sub Workbook_BeforePrint(Cancel As Boolean) Dim Sht As Worksheet For Each Sht In ThisWorkbook.Sheets With Sht.PageSetup .LeftHeader = "Reporte Trimestral" ' O cualquier otro mensaje... End With Next Sht End Sub Macros en Excel

55

RANGOS Selección de celdas Existen diversas formas de seleccionar celdas, y en todas ellas utilizamos el método Select. Veamos 3 métodos (equivalentes) para seleccionar una celda, por ejemplo la celda C4: ' La forma clásica de seleccionar Sub Seleccionar () Range("C4").Select End Sub ' Esta es otra terminología válida para seleccionar Sub Seleccionar () [C4].Select End Sub ' Finalmente podemos seleccionar de esta otra forma ' El primer Nº equivale a fila y el segundo a columna. Sub Seleccionar () Cells(4, 3).Select End Sub Macros en Excel

56

Rangos Selección de rangos Veamos ahora distintas formas equivalentes de seleccionar un rango: ' Método clásico para seleccionar el rango de celdas B6:B10 Sub Seleccionar () Range("B6:B10").Select End Sub

Sub Seleccionar () 'Otro método para seleccionar el rango de celdas B6:B10 [B6:B10].Select End Sub Supongamos que queremos seleccionar un rango, pero no conocemos su dimensión, por ejemplo porque la misma va cambiando. Un ejemplo puede ser una tabla donde se van agregando nuevos registros. Con la instrucción CurrentRegion Excel seleccionará todo el rango utilizado automáticamente, aunque no conozcamos su tamaño de antemano: ' Selecciona la región actual Sub Seleccionar () Selection.CurrentRegion.Select Macros en Excel End Sub

57

Rangos Con la macro anterior se seleciona el cuadrante, rectángulo y/o cuadrado de celdas adyacentes a nuestra celda activa. El rectángulo queda definido por las celdas con información. También podríamos modificar la macro anterior para que seleccione la región actual desde una celda determinada, por ejemplo: ' Selecciona el rectángulo adyacente a C2. Sub Seleccionar () [C2].CurrentRegion.Select End Sub o también podemos hacer:

' Selecciona el rectángulo adyacente a C2. Sub Seleccionar () Range("C2").CurrentRegion.Select End Sub

Macros en Excel

58

Rangos Selección de filas Para seleccionar filas podemos utilizar la instrucción Rows.Select, tal como vemos en las siguientes macros: ' Seleccionar la Fila 1. Sub SeleccionaFila () Rows("1:1").Select End Sub

' Selecciona la fila 4. Sub SeleccionaFila () Rows("4:4").Select End Sub

' Selecciona desde la fila 4 hasta la 11, ambas inclusive Sub SeleccionaFilas () Rows("4:11").Select End Sub ' Selecciona las siguientes filas a la vez: 4,8,15 y 22. Sub SeleccionaFilas () Range("4:4,8:8,15:15,22:22").Select End Sub Macros en Excel

59

Rangos Selección de columnas Para seleccionar columnas podemos utilizar la instrucción Columns.Select, tal como vemos en las siguientes macros: Sub SeleccionaColumna () ' Selecciona la Columna B Columns("B:B").Select ' Selecciona la Columna H Columns("H:H").Select ' Selecciona des de la Columna C hasta la F Columns("C:F").Select ' Selecciona las siguientes Columnas: A,C,E,G, I y K. Range("A:A,C:C,E:E,G:G,I:K").Select End Sub

Macros en Excel

60

Rangos Otras selecciones Excel considera que pese a que tengamos 65.536 filas y 256 columnas, prácticamente siempre utilizamos una ínfima cantidad de estas filas y columnas. Para saber el rango de celdas que utilizamos basta con utilizar el siguiente código: Sub Rango() ActiveSheet.UsedRange.Select End Sub Para seleccionar desde la celda A1 hasta la última celda del rango utilizado: Sub Rango() Range([a1], ActiveSheet.UsedRange).Select End Sub Para selecionar la última celda con datos del rango utilizado (suponemos que tenemos seleccionado B4:D4): Sub Seleccion () ' Esto daría como resultado 5 R = Range([a1], ActiveSheet.UsedRange).Rows.Count ' Esto daría como resultado 4 C = Range([a1], ActiveSheet.UsedRange).Columns.Count ' Selecionaría la celda D5 Cells(R, C).Select End Sub Macros en Excel

61

Rangos Insertar rangos Como es lógico de suponer, existen numerosas maneras de insertar rangos, para lo cual utilizamos la instrucción Insert: Sub Insertar ()

También podemos insertar tantas nuevas filas o columnas como tenga el rango: Sub Inserta () ' Inserta 3 nuevas columnas a la izqui erda de la columna B Range("B1:D10").EntireColumn.Inser t

' Inserta una nueva fila sobre la fila 1. Rows(1).Insert ' Inserta una nueva columna a la izquierda d e la columna A Columns("A:A").Insert

' También inserta una nueva columna a la izq uierda de la columna A [A1].EntireColumn.Insert

' Inserta 5 nuevas filas sobre la fila 1 0. Rows("10:15").Insert End Sub

' Inserta una nueva fila sobre la fila 1 [A1].EntireRow.Insert End Sub Macros en Excel

62

Rangos Borrar rangos Podemos borrar comentarios, contenidos, formatos, etc. En general utilizamos la instrucción Clear seguida de lo que queremos borrar. A continuación vemos como hacerlo: ' Limpia la celda A1 de cualquier formato que tenga, por ej. color Sub Borrar () [A1].ClearFormats End Sub Si queremos realizar el borrado de diferentes propiedades de un mismo rango podríamos hacer: Sub Borrar () With Range("A1") ' Borra el contenido de la celda A1, no el formato .ClearComments 'Borra comentarios Sub Borrar () .ClearContents 'Borra contenidos Cells(1,1)..ClearContents .ClearFormats 'Borra formatos End Sub .ClearNotes 'Borra notas .Clear 'Borra todo lo anterior End With End Sub ' Borra los comentarios sobre la celda A1 Sub Borrar () Range("A1").ClearComments End Sub

La instrucción Clear sola, como se vé en la macro anterior, borra toda información de la celda (formato, contenido, comentarios, etc). Macros en Excel

63

Rangos Combinar rangos Para combinar celdas utilizamos la instrucción MergeCells. Solo podemos combinar celdas que estén contiguas y siempre que formen o un cuadrado o un rectángulo, pues de lo contrario Excel no lo permitiría. Para combinar un rango de celda hacemos: ' Combinar las celdas del rango B4:D4 Sub Combinar () Application.DisplayAlerts = False Range("B4:D4").MergeCells = True End Sub Conviene recordar que si combinamos desde una macro, y las celdas que queremos combinar no estan vacías, Excel nos pedirá confirmación, pues podríamos perder información. Para evitar la confirmación deberíamos modificar la macro anterior agregando una nueva línea al comienzo: ' Combinar las celdas del rango B4:D4 y evitar confirmación Sub Combinar () Application.DisplayAlerts = False Range("B4:D4").MergeCells = True End Sub

Macros en Excel

64

Rangos Transponer rangos La operación de transponer se realiza cuando queremos que los valores de una fila se copien como una columna o viceversa. Para ello utilizamos la instrucción Transpose. Dicho de otra forma es una manera particular de pegar los datos copiados previamente con lo cual:

Sub Seleccion () ' Convertir fila en columna Range("A1:A15").Copy Range("D4").PasteSpecial Paste:=xlPasteAll, Transpose:=True ' Convertir columna en fila Range("A1:B10").Copy Range("D4").PasteSpecial Paste:=xlPasteAll, Transpose:=True End Sub

Macros en Excel

65

ESTRUCTURAS Las estructuras son conjuntos de instrucciones VBA que deben respetar una sintaxis determinada y que nos permiten realizar diversas operaciones For Next La instrucción For Next repite un grupo de instrucciones un número especificado de veces. La sintaxis es: For contador = principio To fin [Step incremento] [instrucciones] [Exit For] [instrucciones] Next [contador] La sintaxis de la instrucción For...Next consta de las siguientes partes: -Contador (requerido): variable numérica que se utiliza como contador de bucle. La variable no puede ser Booleana ni un elemento de matriz. -Principio (requerido): valor inicial del contador. -Fin (requerido): valor final del contador. -Incremento (opcional): cantidad en la que cambia el contador cada vez que se ejecuta el bucle. Si no se especifica, el valor predeterminado de incremento es uno. -Instrucciones (opcional): una o más instrucciones entre For y Next que se ejecutan un número especificado de veces. Macros en Excel

66

Estructuras For Next Cuando el incremento es negativo es necesario especificar el incremento que va a tener lugar en el bucle mediante la palabra Step tal que: Sub For_Next() Dim X As Integer ' Establece 10 repeticiones, con incremento negativo de 1 For X = 10 To 1 Step -1 Cells(X, 1) = X Next X End Sub En el caso anterior X tomaría los valores 10,9,8,7,6,5,4,3,2,1 sucesivamente. Se pueden anidar bucles For...Next, colocando un bucle For...Next dentro de otro. Para ello, proporcionamos a cada bucle un nombre de variable único como su contador. La siguiente construcción sería la correcta: For I = 1 To 10 For J = 1 To 10 For K = 1 To 10 ... Next K Next J Next I

Macros en Excel

67

Estructuras While Wend La instrucción While Wend ejecuta una serie de instrucciones mientras una condición dada sea True, es decir verdadera, o tenga lugar. Su sintaxis es: While condición [intrucciones] Wend

Condición (requerido): expresión numérica o expresión de cadena cuyo valor es True o False. Si condición es Null, condición se considera False. Instrucciones (opcional): una o más instrucciones que se ejecutan mientras la condición es True. Si condición es True, todas las instrucciones se ejecutan hasta que se encuentra la instrucción Wend. Después, el control vuelve a la instrucción While y se comprueba de nuevo condición. Si condición es aún True, se repite el proceso. Si no es True, la ejecución se reanuda con la instrucción que sigue a la instrucción Wend. Los bucles While...Wend se pueden anidar a cualquier nivel. Cada Wend coincide con el While más reciente.

Macros en Excel

68

Estructuras With End With La instrucción With End With ejecuta una serie de instrucciones sobre un único objeto o sobre un tipo definido por el usuario. Permite realizar múltiples operaciones sobre el mismo objeto. La sintaxis que emplea es: With objeto [instrucciones] End With Objeto (requerido): nombre de un objeto o de un tipo definido por el usuario. Instrucciones (opcional): una o más instrucciones que se van a ejecutar sobre objeto. Veamos un ejemplo sencillo con el cual asignamos un formato a la celda A1:

' Repetimos lo anterior pero con With Sub Macro() With Range("A1") .Font.Bold = True .Font.Size = 50 .Font.ColorIndex = 3 End With End Sub Macros en Excel

69

Estructuras If Then La instrucción If Then permite escoger entre 2 o más posibilidades, para decidir sobre que es lo que queremos, entre una serie de alternativas. La instrucción ejecuta condicionalmente un grupo de instrucciones, dependiendo del valor de una expresión. Su sintaxis es: If condición Then [instrucciones]-[Else instrucciones_else] Tambien podemos utilizar la siguiente sintaxis en formato de bloque: If condición Then [instrucciones] [ElseIf condición-n Then [instrucciones_elseif] ... [Else [instrucciones_else]] End If

Condición (requerido): uno o más de los siguientes dos tipos de expresiones: Una expresión numérica o expresión de cadena que puede ser evaluada como True o False. Si condición es Null, condición se considera False. Una o más instrucciones separadas por dos puntos ejecutados si la condición es True. condición-n (Opcional). igual que -condición. instrucciones_elseif (Opcional): una o más instrucciones ejecutadas si la condición-n asociada es True. instrucciones_else (opcional): una o más instrucciones ejecutadas si ninguna de las expresiones anteriores condición o condición-n es True. Macros en Excel

70

Estructuras If Then Veamos algunos ejemplos de If, escritos en una sola línea: En esta macro si el valor de la celda A1 es > a 15, entonces la condición es verdadera (es decir TRUE) con lo cual se ejecuta la instrucción definida para tal caso, en este ejemplo lanzamos un mensaje, que dice: "La celda A1> 15"

Sub If_Then() If [A1] > 15 Then Msgbox "La celda A1> 15" End Sub En esta otra macro si el valor de la celda es >15 se cumple con la condición demandada con lo cual se ejecuta la primera opción, en caso de que no sea TRUE (es decir en caso de que sea FALSE) ejecutamos la segunda instrucción, en nuestro ejemplo, el mensaje: "La celda A1< 15" Sub If_Then() If [A1] > 15 Then Msgbox "La celda A1> 15" Else MsgBox "La celda A1< 15" End Sub Macros en Excel

71

Estructuras If Then Veamos algunos ejemplos de If, escritos en bloque: En caso de que el valor de la celda A1>15 entonces la condicion es True, y siendo True, lanzaríamos un mensaje y después pondríamos la celda A1 en negrita y con fondo Rojo. Sub If_Then() If [A1] > 15 Then Msgbox "La celda A1> 15" With [A1] .Interior.ColorIndex = 3 .Font.Bold = True End With End If Sub If_Then() End Sub If [A1] > 15 Then ' si la condicion es TRUE MsgBox "La celda A1> 15" ' lanzaríamos un mensaje o bien: [A1].Interior.ColorIndex = 3 ' el fondo de la celda [A1] seria rojo [A1].Font.Bold = True ' y la celda [A1] estaría en negrita Else ' Si la condicion fuera False [A1].Interior.ColorIndex = 10 'el fondo de la celda [A1] sería Verde [A1].Font.Size = 50 ' y la fuente tendría tamaño 50 End If End Sub Macros en Excel

72

Estructuras Select Case La instrucción Select Case se utiliza cuando las alternativas en una estructura de If Then son muchas. En tal caso conviene evitar el If Then y hacer uso de Select Case, que permite ejecutar uno de varios grupos de instrucciones, dependiendo del valor de una expresión. La sintaxis de Select Case es: Select Case expresión_prueba [Case lista_expresion-n [instrucciones-n]] ... [Case Else [instrucciones_else]] End Select

Macros en Excel

73

Estructuras Select Case Veamos un ejemplo: Sub Select_Case() Dim Número As Variant ' la declaramos como Variant para evitar el error de compilación que ' obtendríamos en el caso de que [A1] fuera texto Número = [A1] ' Inicializa variable. Select Case Número ' Evalúa Número. Case 1 To 5: MsgBox "Entre 1 y 5" ' Para Nºs entre 1 y 5, inclusive Case 6, 7, 8: MsgBox "Entre 6 y 8" ' Para Nºs entre 1 y 5, inclusive Case 9 To 10: MsgBox "Mayor que 8" ' Para Nºs entre 9 y 10, inclusive Case Else ' Para otros valores. MsgBox "No está entre 1 y 10" End Select End Sub

Si expresión prueba coincide con cualquier lista expresión asociada con una cláusula Case, las instrucciones que siguen a esa cláusula Case se ejecutan hasta la siguiente cláusula Case o, para la última cláusula, hasta la instrucción End Select. El control pasa después a la instrucción que sigue a End Select. Si expresión prueba coincide con una expresión de lista expresión en más de una cláusula Case, sólo se ejecutan las instrucciones que siguen a la primera coincidencia.

Macros en Excel

74

COMANDOS Mensajes de alerta Los mensajes de alerta son avisos que dispara Excel antes de realizar determinadas acciones. Por ejemplo, al intentar borrar una Hoja, nos aparece una aviso de confirmación. A nivel de macros, es importante tenerlos presentes, tal como vemos a continuación: Sub BorrarHoja() ' Borramos una hoja ActiveSheet.Delete ' Pero esto requiere la confirmacion por parte del usuario... ' Para evitar el mensaje de alerta, ya que Excel siempre nos pedirá confirmación, ' bastará con utilizar la siguiente instrucción: Application.DisplayAlerts = False ' Con lo cual ahora sí podremos borrar la hoja dada sin necesidad de confirmación ActiveSheet.Delete ' Finalmente dejamos a Excel en su estado original de mostrar los mensajes Application.DisplayAlerts = True End Sub Es importante recordar que el Application.DisplayAlerts=False siempre debe ir antes de la acción que requiere confirmación. Al final de la macro conviene volver a asignarle la propiedad True.

Macros en Excel

75

COMANDOS Barra de estado La barra de estado de Excel es la que figura en la parte inferior y suele mostrar distintos mensajes. Esta barra se puede mostrar u ocultar desde el menú Ver > Barra de estado. A continuación se exponen algunas instrucciones para saber como manipularla y modificarla: Sub BarraEstado()

' Si queremos ver la barra de estado original Application.DisplayStatusBar = True ' Si NO queremos verla bastará con: Application.DisplayStatusBar = False ' Por defecto la Barra de estado siempre estará Visible, es decir: Application.DisplayStatusBar = True ' Si queremos que la barra de estado muestre un mensage diferente bastará con: Application.DisplayStatusBar = "Procesando mi reporte..." ' Si queremos que la Barra de Estado este limpia, es decir sin mensaje alguno: Application.DisplayStatusBar = "" End Sub

Macros en Excel

76

COMANDOS Msgbox Un Msgbox es simplemente una ventana que muestra un mensaje. Por ej., con la siguiente instrucción mostraríamos un saludo: Sub Saludo() ' Escribimos el mensaje entre comillas Msgbox "Hola, Excel te saluda!" End Sub

Por defecto, un Msgbox siempre incluye el botón "Aceptar", el cual haría desaparecer el mensaje y continuaría ejecutando el código restante si lo hubiera. También podemos configurar para que en lugar del botón "Aceptar" aparezca un botón de "Ok" y "Cancelar" y de acuerdo al que elija el usuario, la macro continuaría con un código u otro código. Esto lo realizamos agregando la instrucción vbOKCancel, tal como vemos a continuación: Sub Mensaje() Dim Respuesta As Integer Respuesta = MsgBox("Seleccione Aceptar o Cancelar", vbOKCancel) ' verificamos si se presionó 'Cancelar' If Respuesta = vbCancel Then MsgBox "Macro caso Cancelar" ' Aquí continuaría la macro en caso de Cancelar End If ' si se presionó 'Aceptar' If Respuesta = vbOK Then MsgBox "Macro caso Aceptar" ' Aquí continuaría la macro en caso de Aceptar End If End Sub Macros en Excel

77

COMANDOS InputBox Un InputBox se utiliza cuando requerimos un input del Usuario (es decir, cuando esperamos que el usuario introduzca un dato). Básicamente lo que hacemos es asignarle un valor a una variable, pero le damos el control al usuario para que asigne dicho valor o dato a gusto. Dentro del InputBox utilizamos las siguientes instrucciones: Prompt: mensaje del InputBox Title: título del InputBox Default: valor por defecto al abrir el InputBox (si omitimos no aparecerá nada) Type: indica el tipo de dato a introducir (1 Número, 2 Texto, 4 True o False, 5 Rangos) Vamos ahora como queda el InputBox: Sub Nombre() ' el dato que proporcionará el usuario quedará registrado por la Variable Respuesta. Como no sabem os que tipo de dato es lo definimos como una variable de tipo Variant. Dim Nombre As Variant Nombre = Application.InputBox(prompt:="Escriba su nombre", Title:="Colegio de Abogados", _ Default:="Pedro", Type:=2) Msgbox Nombre ' En lugar de este Msgbox continuaría el resto de la macro... End Sub

Macros en Excel

78

LIBRERIAS Borrar Filas Para borrar filas debemos posicionarnos en una celda y utilizar la instrucción EntireRow.Delete Veamos un ejemplo: 'En esta macro recorremos la columna 2 (la B) desde la fila 2000 hasta la 1 'Si la celda tiene el valor "q" entonces borramos la fila Sub BorrarFilas() Dim r As Long For r = 2000 To 1 Step -1 'Debemos ir desde abajo hacia arriba If Cells(r, 2).Value = "q" Then Cells(r, 2).EntireRow.Delete Next r End Sub

Macros en Excel

79

LIBRERIAS Búsquedas Para hacer búsquedas (el equivalente a la función "buscarv" de Excel) utilizamos la instrucción lookupvalue. Veamos un ejemplo: Sub BuscarCodigo() 'Definimos variables Dim lookupvalue As Variant, value As Variant, lookupRange As Range value = Range("A1").value 'celda con el valor buscado Set lookupRange = Range("A10:A100") 'rango donde buscar lookupvalue = Application.VLookup(value, lookupRange, 3, False) 'Queremos la columna 3 'Si no encuentra valor terminamos la macro If IsError(lookupvalue) Then exit sub 'Si lo encuentra lo devuelve Else Msgbox lookupvalue End If End Sub Macros en Excel

80

LIBRERIAS Copiar Pegar

Un ejemplo sencillito sobre copiar una celda y pegarla como valor.

Sub CopiarPegar() Range("A104").Copy Range("A105").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False End Sub

Imágenes Veamos algunas operaciones que podemos realizar con imágenes. 'INSERTAR UNA IMAGEN Public Sub InsertaLogo() Dim vFullName As Variant vFullName = Application.GetOpenFilename("Image Files,*.jpg;*.gif") If vFullName False Then Hoja6.Pictures.Insert CStr(vFullName) End If End Sub Macros en Excel

81

LIBRERIAS Ordenar Macros utilizadas para ordenar 'Con esto ordeno una columna ascendentemente Range("A38:G65536").Sort Key1:=Range("F39"), Order1:=xlDescending, Header:=xlYes, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ DataOption1:=xlSortNormal 'En A38:G38 esta el encabezado. El Key1 es F39 (una fila mas abajo, osea el primer registro)

Macros en Excel

82

LIBRERIAS Tablas Dinámicas Algunas macros de interés relacionadas con tablas dinámicas (TD). 'La siguiente macro actualiza una TD automáticamente al entrar a la hoja 'Esta macro debe estar colocada en la misma hoja que contiene la TD Private Sub Worksheet_Activate() ActiveSheet.PivotTables(1).PivotCache.Refresh End Sub

Macros en Excel

83

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF