Está en la página 1de 11

MACRO : Una macro es la ONU Conjunto de Instrucciones Escritas en Lenguaje Visual Basic (*), Que nos

permite automatizar ciertas Tareas de Me application ninguna contemplacin desde las Herramientas de la hoja. Por EJEMPLO, SI NECESITAMOS Que se inserten automaticamente 2 Hojas Nuevas al abrir la ONU Libro, recurriremos una macro Una. Otros Casos: completar Alguna tarea Cada Vez Que se INGRESA ONU valor En Una Celda o Rango de Celdas; realizar sin Cierto Control antes de imprimir, GUARDAR o cerrar el Libro, etc Son TODAS Tareas Que pueden servi automatizadas MEDIANTE Rutinas o macros. (*) El Lenguaje utilizado en Excel es VBA (Visual Basic para Aplicaciones)

Cmo S crea Una macro: prrafo automatizar UNA TAREA MEDIANTE UNA macrobasicamente s
necesitan the following Elementos :

1 - un Espacio de Trabajo Donde ESCRIBIR las instructions o Rutinas Que Harn AEE Tareas: el Editor de Macros . A Este Espacio s acceder desde men Herramientas, Macros, Editor o con el atajo de teclado Alt + F11 . En la versin 2007, Activar L OPCION Programador de la Cinta de OPCIONES. Una Vez en ESE 'espacio', escribiremos o copiaremos las Rutinas en:

a-algno de los Objetos (hoja o libro) Que seleccionemos con doble clic en el Panel de Objetos Que se encuentra a la Izquierda del Editor. b- insertando mdulos c-o insertando Formularios Personales o formularios de usuario .
2 - Una Accin Que Hara Que la tarea Programada s ejecute. A ESTO llamamos 'Eventos ' Que inician Una macro y pueden ser: abrir o cerrar sin Libro, Entrar o Salir De Una hoja, Cambios o Seleccin de Celdas, antes de imprimir o GUARDAR, 'clic' en el comando de la ONU Button, al presionar sin atajo de teclado, Y OTROS MAS. 3 - un Lenguaje de programacin. En Excel utilizamos VBA (Visual Basic Aplicaciones prrafo) 4 - Ocasionalmente ONU Formulario Donde Trabajar prr LUEGO LOS volcar Resultados En Las Hojas: Llamados formularios de usuario.

Donde colocar o ESCRIBIR la macro: . ESTO dependera de Lo Que deba ejecutar our Rutina Si las
INSTRUCCIONES SE Deben ejecutar, POR EJEMPLO, al abrir o cerrar la ONU Libro , s colocan en el Objeto ThisWorkbook (o estelibro segn rubro la versin). Si las INSTRUCCIONES SE Deben ejecutar al Entrar o Salir De Una hoja o al select o Modificar Una Celda , s colocan en el Objeto Hoja . Ests Objetos s encuentran en el margen Izquierdo del Editor, en la ventana Proyecto-VBAProyect Si our Rutina Sera Llamada ONU de la estafa Button, atajo de teclado la ONU mdulo (estando en el Editor, men Insertar, Mdulo). o desde Otra Rutina , s colocar en

Las INSTRUCCIONES Para Los Controles de la ONU Formulario o formularios de usuario s colocan en la Seccin del Cdigo Mismo Formulario.

Como. ejecutar Una macro: En el punto anterior s menciona Que se NECESITA Una ' Accin 'Que
dispare o ejecute Una macro Grabada. veamos los distintos Casos:

1 - Una Accin automtica Resultado de la ONU Evento , ya un mar Nivel Libro, hoja, Rango o Celda In this Grupo s encuentran las Rutinas Que se ejecutan en la Apertura o Cierre de Libro, al Entrar o Salir De Una hoja, al select o switch to values en Celda ... Son las Que se colocan en el Objeto HOJA o ThisWorkbook, se del como menciona en Tema anterior 2 - Al presionar la ONU Button Dibujado en la hoja . Podemos utilizar Botones de la barra 'Cuadro de Controles ActiveX o' o de la barra " Formularios ". En versin 2003 s encuentra en Men Ver, Barras de Herramientas. En la versin 2007 desde la ficha Programador Dibujamos el mando en la hoja, ajustamos algunas Propiedades COMO Texto, Tamano Ubicacin. Al HACER clic Derecho Sobre el control de optamos porcin "Ver Cdigo" o "Asignar macro 'segn rubro QU barra de Herramientas HEMOS utilizado. a- Cuadro de Controles: al OPTAR Por "Ver Cdigo 'nos llevar al Editor, al Objeto HOJA Donde s generar automaticamente UNA RUTINA estafadores ESTAS INSTRUCCIONES 2: Private Sub CommandButton1_click () 'Aqui escribiremos NUESTRAS INSTRUCCIONES End Sub b- Formularios: ya debemos Tener Lista la Rutina En Un mdulo del Editor y la asignaremos CUANDO optemos porcin 'Asignar macro' . Las Rutinas prrafo this Caso hijo Como el siguiente EJEMPLO: Sub nombre_rutina () 'Nuestras INSTRUCCIONES End Sub 3 - Ejecutar sin atajo de teclado : En ESTOS Casos tendremos Una Rutina Como la del punto anterior (b) En Un mdulo . del Editor Desde la hoja Excel, men Herramientas, Macros Macros seleccionarla de la Lista.Presionar el boton " Avanzadas "e ingresar Una letra, POR EJEMPLO 't' (sin las comillas) Nota: Si Excel ya Tiene asignada this letra reemplazar la porcin Ctrl + Maysc + t sto significa Que es El Momento Que necesitemos de Me macro s ejecute presionaremos juntas las Teclas Ctrl + t (o Ctrl + Mayusc + t) 4 - Desde el men Herramientas: si no HEMOS Asignado la Rutina Que se encuentra en un mdulo sin ningun Button ni un atajo de teclado, la ejecutaremos from this men de Excel. En la versin 2007, Activar L OPCION Programador de la Cinta de OPCIONES.

Referencias: veamos los Diferentes Modos de referirnos a libros, Hojas y Celdas:


Libro : Libro de Trabajo.

ActiveWorkbook: Libro Activo libros (2): El Segundo Libro Abierto Libros ("Libro1.xls"): Llamada al Libro de Nombre Libro1 Libros (milibro)
*-Si el Nombre del libro en s encuenta En Una variable NO lleva comillas Previamente asignamos nombre, Por ej: milibro = ActiveWorkbook.name Hoja de trabajo : Hoja de Trabajo

ActiveSheet: Hoja activa Sheets ("Enero"): Hoja de Nombre 'Enero' Hojas (3): Nmero de hoja segn rubro El Orden de las pestaas. [Hoja2]: La 2da hoja segn rubro Orden de las pestaas

Rango o clulas

: Rango o CELDA

Activecell: la Celda activa Range ("A2"): la Celda A2 Cells (2,1): la Celda A2.
* - Ntese Que MIENTRAS EN Pgina de s introducir la Celda en el Orden Col, Fila, cuarto de clulas madre embrionarias a la inversa: las clulas (fila, columna)

Range ("A5: B10"): Rango de Celdas desde A5 Hasta B10 incluido Range ("E: E"): Columna E Range ("02:02"): fila 2 [A3]: la Celda A3 Range ("A" & fila): Celda de la columna A y fila segn rubro valor de variables

Trabajando con Libros


En esta seccin aparecern algunas de las instrucciones 'bsicas' para utilizar con LIBROS. Una vez copiada en el Editor, colocar el cursor sobre la palabra en negrita y presionar F1 para acceder a la Ayuda Excel. All se encontrarn ms explicaciones y ejemplos para cada instruccin. Nota: Al inicio de esta seccin Macros hemos visto las distintas maneras de hacer referencia a Libros, Hojas y Rangos o celdas. A partir de aqu usar solo el objeto activo considerando que puede usarse algunas de las otras expresiones

1-Abrir un segundo libro:


Workbooks.Open "C:\Mis docu\Libro1.xlsb" ' o tambin: Application.Workbooks.Open "C:\.....\Libro1.xlsb" Si el nombre se encuentra en una varible NO lleva comillas (aqu se abre un libro que se encuentra en la misma carpeta que el libro activo. La variable 'libro2' contiene el nombre y la extensin) Workbooks.Open ThisWorkBook.Path & "\" & libro2

2-Activar un segundo libro:


Workbooks("Libro2.xls").Activate 'o tambin: Workbooks(2).Activate , en este caso Libro2.xls es el 2do libro abierto

3-Cerrar un libro (sin guardar):


Workbooks("Libro1.xls").Close False ActiveWorkbook.Close False 'o

4-Cerrar un libro (guardando los cambios):


ActiveWorkbook.Save ActiveWorkbook.Close 'o en 1 sola lnea: ActiveWorkBook.Close True

5-Guardar un libro con otro nombre:


ActiveWorkbook.SaveAs Filename:="C:\Mis doc\Libro1.xls", ReadOnlyRecommended:=False FileFormat:=xlNormal, Password:="clave",

Estas son algunas de las opciones. Si se omiten, escribir la coma, como en el siguiente ejemplo: ActiveWorkbook.SaveAs Filename:="C:\Mis doc\Libro.xls",,, ReadOnlyRecommended:=False *- La carpeta y el nombre del libro pueden guardarse en variables, como en este ej: ruta = ThisWorkbook.Path & "\" 'o quizs: ruta = "C:\" libro = "LibroCopia.xlsm" ActiveWorkbook.SaveAs ruta & libro

6-Guardar un libro cuyo nombre ser el valor de una celda:


ActiveWorkbook.SaveAs Filename:=Range("A2").Value

7-No mostrar aviso al salir, al eliminar hoja, o cualquier aviso que queremos omitir:
Application.DisplayAlerts= False 'volverla a True al finalizar la macro

8-Deshabilitar la opcin de actualizar vnculos al abrir un libro:

Application.DisplayAlerts= False 'volverla a True al finalizar la macro WorkBooks.Open Filename:= "C:\Mis docu\pruebas.xls", UpdateLinks:= 0

9-No mostrar la ejecucin de la macro (movimiento de pantalla):


Application.ScreenUpdating = False 'volverla a True al finalizar la macro

10-Ejecutar una macro al abrir un libro:


Insertar un mdulo y all escribir una rutina: Ejemplo: Sub Nuevamacro () 'instrucciones, por ej: MsgBox "Bienvenid@" End Sub Y agregar esta otra en el objeto ThisWorkbook: Private Sub Workbook_Open () Nuevamacro 'o tambin puede llamarse utilizando la expresin Call 'Call Nuevamacro End Sub

Trabajando con Hojas


En esta seccin aparecern algunas de las instrucciones 'bsicas' para utilizar con HOJAS. Una vez copiada en el Editor, colocar el cursor sobre la palabra en negrita y presionar F1 para acceder a la Ayuda Excel. All se encontrarn ms explicaciones y ejemplos para esa instruccin.

1-Seleccionar la hoja anterior o siguiente:


ActiveSheet.Previous.Select ActiveSheet.Next.Select 'hoja anterior a la activa 'hoja posterior a la activa

2-Datos de la hoja:
ActiveSheet.Name ActiveSheet.Index 'nombre de la hoja 'nmero de hoja

3-Copiar datos de una hoja a la siguiente:


Selection.Copy 'previamente se habr seleccionado algo ActiveSheet.Paste Destination:=ActiveSheet.Next.Range("B2")

4- Ocultar filas o columnas:


ActiveCell.EntireRow.Hidden=True ActiveCell.EntireColumn.Hidden= True ' filas 'col

5-Proteger o desproteger una hoja:


ActiveSheet.Protect "contrasea" ActiveSheet.Unprotect "contrasea" 'proteger con contrasea 'quitar la proteccin

6-Insertar filas o columnas a partir de cierta ubicacin:


'reemplazar i por el nro de columna ActiveSheet.Column(i).Select Selection.EntireColumn.Insert 'reemplazar Column por Row en caso de filas.

7-Conocer el nro de columna de cierta referencia:

Cuando utilizamos la expresin: Cells(fila,col) y queremos hacer referencia a la celda AB5 por ej, necesitamos conocer cul es el nro de columna. Para eso podemos solicitarla en un mensaje con: Sub nrocol() Msgbox Range("AB1").Column End Sub

8-Eliminar filas o columnas:


ActiveSheet.Row(n).Select 'reemplazar n por el nro de fila Selection.EntireRow.Delete

9-Insertar una imagen en una hoja:


ActiveSheet.Pictures.Insert(ruta).Select 'la ruta va entre comillas, por ej: "C:\Mis docu\Foto1.jpg"

10-Imprimir la hoja seleccionada:


ActiveWindow.SelectedSheet.PrintOut Copies:=1, Collate:=True ActiveSheet.PrintOut 'o

Reemplazar PrintOut por PrintPreview para realizar solo una vista preliminar.

Trabajando con Rangos o Celdas


En esta seccin aparecern algunas de las instrucciones 'bsicas' para utilizar con CELDAS o RANGOS. Una vez copiada en el Editor, colocar el cursor sobre la palabra en negrita y presionar F1 para acceder a la Ayuda Excel. All se encontrarn ms explicaciones y ejemplos para esa instruccin.

1- Formas de seleccionar una celda o un rango de celdas:


Range("B7").Select Range("B:B").Select 'selecciona la celda B7 'selecciona toda la columna B

Range("A4:A10, D10, B5:B20").Select 'selecciona rangos discontinuos Range("A" & variable).Select 'selecciona la celda cuya fila ser el valor de la variable Si definimos una variable que contiene la ltima fila a considerar: rango=("B2:E" & variable) , entonces la siguiente instruccin selecciona el rango B2:E hasta la fila indicada en la variable. Range(rango).Select De igual manera puede establecerse el rango de inicio: rango = "B" & ini & ":E" & fini Range(rango).Select *- Ntese que las variables NO llevan comillas Range("A:A, D:F").Select Range("2:2, 4:7").Select 'selecciona las columnas A, D, E y F 'selecciona las filas 2 y desde 4 hasta la 7

Nota: al inicio de la seccin Macros se encuentran otras instrucciones de seleccin

2- Seleccionar celdas a cierta distancia de la celda activa:


Sheets(1).Range("A1").Offset(2,3).Select 'selecciona 2 filas hacia abajo y 3 col a derecha de A1 = D3 ActiveCell.Offset(-10,1).Select 'selecciona la celda que se encuentra 10 filas por encima y 1 columna a la derecha de la celda activa.

3- Asignar Formato a celdas o rangos:


Range("B2:D10").Select 'selecciona el rango y le aplica los siguientes formatos With Selection .Font.Bold=True 'formato negrita .Font.Italic=True 'formato cursiva .Font.Underline=xlUnderlineStyleSingle 'subrayado simple .Font.Color = RGB(255,0,0) 'color de fuente (para estos valores ser rojo) .HorizontalAlignment=xlCenter 'alineacin central (Right=derecha, Left=izquierda) End With

4- Guardar la direccin de una celda en una variable:


lugar= ActiveCell.Address 'guarda la referencia absoluta, por ej: $E$2 lugar= ActiveCell.Address(False, False)

'guarda la referencia relativa, por ej: E2

5- Copiar un comentario en otra celda:


ActiveCell.Offset(0,1).Value = ActiveCell.Comment.Text 'copia el comentario de la celda activa en la celda que se encuentra en la columna siguiente.

6-Seleccionar celdas y borrarlas:


Range(rango). Select 'previamente se asign a la variable rango una ref Selection.ClearContents La expresin Cells.Clearcontents borrar el contenido del total de celdas de la hoja activa

Utilizando solamente Clear se borrarn formatos tambin.

7- Ampliar un rango seleccionado


Selection.Resize(10,4).Select ' (10 filas, 4 columnas) ' si el rango seleccionado fue A1:B5 ahora ser: A1:D10

8- Combinar celdas selecccionadas:


Range("B1:E1").Select Selection.Merge Para quitar la combinacin: Unmerge

9- Seleccionar el rango donde se encuenra la celda activa:


Range("B2").CurrentRegion.Select

10- Seleccionar hasta la ltima celda no vaca:


Range("A2", Range("A2").End(xlDown)).Select 'seleciona desde A2 hacia abajo Range("A2", Range("A2").End(xlToRight)).Select 'selecciona desde A2 hacia la derecha Range("D2", Range("D2").End(xlToLeft)).Select 'selecciona desde D2 hacia la izquierda Range("A20", Range("A20").End(xlUp)).Select 'selecciona desde A20 hacia arriba En cambio, para seleccionar solo la ltima celda con datos ser: Range("A2").End(xlDown).Select Nota: Esta instruccin dar error si la celda A3 se encuentra vaca. Es preferible en ese caso realizar la bsqueda de 'abajo hacia arriba', con: Range("A65536").End(xlup).Select

11- Obtener la primer celda vaca, en col A:


Range("A2").End(xlDown).Row + 1 Range("A65536").End(xlup).Row + 1 'o

Trabajando con Colecciones


En esta seccin aparecern algunas de las instrucciones 'bsicas' para utilizar con COLECCIONES. Una vez copiada en el Editor, colocar el cursor sobre la palabra en negrita y presionar F1 para acceder a la Ayuda Excel. All se encontrarn ms explicaciones y ejemplos para esa instruccin.

Una coleccin es un conjunto de objetos del mismo tipo: hojas, celdas, controles o Shapes, imgenes. Para trabajar con una coleccin se programa un bucle: es decir repetir la misma instruccin para cada elemento de la coleccin. A continuacin algunos ejemplos del bucle: For Each....Next

Ejemplo1: introducir un nombre para cada hoja del libro activo. Esta rutina se coloca en un mdulo:
Sub nombraHojas() Dim MiNombre As String Dim hoja As Worksheet For Each hoja In Worksheets MiNombre = InputBox("Ingrese nombre de hoja: ") hoja.Name = MiNombre Next hoja End Sub

Ejemplo2: introducir valores para cada celda de un rango (se coloca en un mdulo)
Sub colocaValores() Dim celdita as Range For Each celdita in ActiveSheet.Range("A1:B10") celdita.Value = InputBox("Ingrese valor: ") Next celdita End Sub

Ejemplo3: introducir los mismos valores en celdas de todas las hojas (se coloca en un mdulo)
Sub valoresHoja() Dim hoja as Sheets For Each hoja in Sheets hoja.Range("E3").Value = Date hoja.Range("F3").Value = Time Next hoja

End Sub

OTRO TIPO DE BUCLES:

Ejemplo1: realizar una accin por cada valor que tome una variable i (se coloca en un mdulo)
Sub muestraNombre() Dim i as Byte Dim hoja as Worksheet For i=1 to 5 Msgbox WorkSheets(i).Name Next End Sub En este ejemplo se muestra el nombre de cada hoja, desde la nro 1 a la 5

Ejemplo2: realizar una accin mientras se cumpla una condicin (se coloca en un mdulo)
Sub recorreRango() 'Se recorre la col A a partir de la fila 2 hasta encontrar una celda vaca. 'El valor de cada celda se incrementa en 1

Range("A2").Select While Activecell.Value <> "" ActiveCell.Value = ActiveCell.Value + 1 Wend End Sub

Trabajando con Objetos


A continuacin algunos ejemplos de cmo llamar a objetos insertados en hoja, como ser Cuadros de texto, Listas o Cuadros combinados y tambin un Userform.

1- Llamando a un Userform, desde un botn: En una hoja de Excel, los botones que lanzan una accin, pueden ser colocados con la barra de Formularios o Cuadro de Controles.
a.

Botn de formulario: se asigna una macro, como la del ejemplo, que previamente se escribi en un mdulo en el Editor de Visual Basic.Ejemplo:
Sub mostrando () UserForm1.Show End Sub 'nombre del Userform que se desea mostrar

b.

Botn del Cuadro de controles: una vez dibujado en la hoja, clic derecho, opcin Ver cdigo y escribir la rutina (sta se habilita en la hoja donde aparecer el control). Ejemplo:
Private Sub CommandButton1_Click() UserForm1.Show End Sub

2- Asignando valores a los Cuadros de texto: Ejemplos de cmo registrar datos en los textbox dibujados en hoja con la barra 'Cuadro de controles'. Nota: Estas instrucciones como las del punto 3 y 4, se colocan dentro de alguna rutina general, como puede ser un botn para guardar o aceptar.
TextBox1.Value = "CANCELADO" TextBox2 = Sheets("Hoja3").Range("A5").Value TextBox2 = Range("C1").Value + Range("C2").Value

Notese que en Textbox2 se omiti la expresin 'value' ya que esa es su propiedad predeterminada. Puede colocarse o no.

3- Volcar datos de un control Textbox y Combobox a la hoja: Estos controles han sido dibujados con la barra 'Cuadro de controles'
'pasar datos de un control Textbox a la celda indicada en Cells(fila,col) Cells(fila, col).Value = TextBox1.Value 'pasar el valor de un combo a la fila siguiente de la indicada en Cells(fil, col) Sheets("Hoja1").Cells(fila, col).Offset(1, 0).Value = Combobox1.Value

4- Asignar rango a un control Listbox y Combobox: Estos controles han sido dibujados en la hoja con la barra 'Formularios'
'asignar rango de entrada al control Lista

ActiveSheet.Shapes("List Box 1").Select With Selection .ListFillRange = "$F$1:$F$4" End With 'asignar rango de entrada al control Combobox ActiveSheet.Shapes("Drop Down 1").Select With Selection .ListFillRange = "$K$1:$K$7" End With * Otra manera de asignar rango. En este caso el control se dibuj con la barra ActiveX o Cuadro de Controles: ActiveSheet.ListBox1.ListFillRange = "$F$1:$F$4"

5- Cargar datos a un control ListBox de un UserForm:


Private Sub UserForm_Activate() Dim item As Variant For Each item In Range("F1:F6") ListBox1.AddItem item.Value Next item End Sub