Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
permite automatizar ciertas tareas que la aplicacin no contempla desde las herramientas de la hoja. Por ejemplo, si necesitamos que se inserten automticamente 2 hojas nuevas al abrir un libro, recurriremos a una macro. Otros casos: completar alguna tarea cada vez que se ingresa un valor en una celda o rango de celdas; realizar un cierto control antes de imprimir, guardar o cerrar el libro, etc. Son todas tareas que pueden ser automatizadas mediante rutinas o macros. (*) El lenguaje utilizado en Excel es VBA (Visual Basic for Applications)
Cmo se crea una macro: para automatizar una tarea mediante una macro bsicamente se
necesitan los siguientes elementos:
1- un espacio de trabajo donde escribir las instrucciones o rutinas que harn esas tareas: el Editor de Macros. A este espacio se accede desde men Herramientas, Macros, Editor o con el atajo de teclado Alt+F11. En versin 2007, activar la opcin Programador de la Cinta de Opciones. Una vez en ese 'espacio', escribiremos o copiaremos las rutinas en: a- alguno 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 Userforms. 2- una accin que har que la tarea programada se ejecute. A esto llamamos 'Eventos' que inician una macro y pueden ser: abrir o cerrar un libro, entrar o salir de una hoja, cambios o seleccin de celdas, antes de imprimir o guardar, el 'clic' en un botn de comando, al presionar un atajo de teclado, y otros ms. 3- un lenguaje de programacin. En Excel utilizamos VBA (Visual Basic para Aplicaciones) 4- Ocasionalmente un formulario donde trabajar para luego volcar los resultados en las hojas: llamados Userforms.
Dnde colocar o escribir la macro:
Si las instrucciones se deben ejecutar, por ejemplo, al abrir o cerrar un libro, se colocan en el objeto ThisWorkbook (o EsteLibro segn la versin). Si las instrucciones se deben ejecutar al entrar o salir de una hoja o al seleccionar o modificar una celda, se colocan en el objeto Hoja. Estos objetos se encuentran en el margen izquierdo del Editor, en la ventana Proyecto-VBAProyect Si nuestra rutina ser llamada con un botn, atajo de teclado o desde otra rutina, se colocar en un mdulo (estando en el Editor, men Insertar, Mdulo).
Las instrucciones para los controles de un formulario o Userforms se colocan en la seccin Cdigo del mismo formulario.
Cmo ejecutar una macro: En el punto anterior se menciona que se necesita una 'accin' que
dispare o ejecute una macro grabada. Veamos los distintos casos:
1- Una accin automtica resultado de un evento, ya sea a nivel libro, hoja, rango o celda En este grupo se encuentran las rutinas que se ejecutan en la apertura o cierre de libro, al entrar o salir de una hoja, al seleccionar o cambiar valores en celda Son las que se colocan en el objeto HOJA o ThisWorkbook, como se menciona en tema anterior 2- Al presionar un botn dibujado en la hoja. Podemos utilizar botones de la barra 'Cuadro de controles o ActiveX' o de la barra 'Formularios'. En versin 2003 se encuentra en Men Ver, Barras de Herramientas. En versin 2007 desde la ficha Programador Dibujamos el control en la hoja, ajustamos algunas propiedades como texto, tamao, ubicacin. Al hacer clic derecho sobre el control optamos por 'Ver cdigo' o 'Asignar macro' segn qu barra de herramientas hemos utilizado. a- Cuadro de controles: al optar por 'Ver cdigo' nos llevar al Editor, al objeto HOJA donde se generar automticamente una rutina con estas 2 instrucciones: Private Sub CommandButton1_click() 'aqu escribiremos nuestras instrucciones End Sub b- Formularios: ya debemos tener lista la rutina en un mdulo del Editor y la asignaremos cuando optemos por 'Asignar macro'. Las rutinas para este caso son como el siguiente ejemplo: Sub nombre_rutina() 'nuestras instrucciones End Sub 3- Ejecutar un 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 botn 'Avanzadas' e ingresar una letra, por ejemplo 't' (sin las comillas) Nota: Si Excel ya tiene asignada esta letra la reemplazar por Ctrl+Maysc +t Esto significa que en el momento que necesitemos que la macro se 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 a ningn botn ni a atajo de teclado, la ejecutaremos desde este men de Excel.
Referencias:
Workbook : Libro de trabajo. ActiveWorkbook : Libro activo Workbooks(2) : El segundo libro abierto Workbooks("Libro1.xls") : Llamada al libro de nombre Libro1 Workbooks(milibro) *-Si el nombre del libro se encuenta en una variable, NO lleva comillas Previamente asignamos nombre, por ej: milibro=ActiveWorkbook.name WorkSheet : ActiveSheet : Sheets("Enero") Sheets(3) : [Hoja2] : Hoja de trabajo Hoja activa : Hoja de nombre 'Enero' Nmero de hoja segn el orden de las pestaas. La 2da hoja segn orden de las pestaas
Range o Cells : rango o celda Activecell : la celda activa Range("A2") : la celda A2 Cells(2,1) : la celda A2 . *-Ntese que mientras en Range se introduce la celda en el orden Col,Fila, en Cells es a la inversa: Cells(fila,col) Range("A5:B10") : rango de celdas desde A5 hasta B10 inclusive Range("E:E") : columna E Range("2:2") : fila 2 [A3] : la celda A3 Range("A" & fila) : celda de la col A y fila segn valor de variable
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
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
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
Nuevamacro 'o tambin puede llamarse utilizando la expresin Call 'Call Nuevamacro End Sub
2-Datos de la hoja:
ActiveSheet.Name ActiveSheet.Index 'nombre de la hoja 'nmero de hoja
ActiveSheet.PrintOut Reemplazar PrintOut por PrintPreview para realizar solo una vista preliminar.
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
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
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
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
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"