Escolar Documentos
Profissional Documentos
Cultura Documentos
que nos permite automatizar ciertas tareas que la aplicación no contempla desde las
herramientas de la hoja.
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.
Cómo se crea una macro: para automatizar una tarea mediante una macro básicamente se
necesitan los siguientes elementos:
1- un espacio de trabajo donde escribir las instrucciones o rutinas que harán esas tareas: el
Editor de Macros. A este espacio se accede desde menú Herramientas, Macros, Editor o
con el atajo de teclado Alt+F11.
2- una acción 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
selección de celdas, antes de imprimir o guardar, el 'clic' en un botón de comando, al
presionar un atajo de teclado, y otros más.
4- Ocasionalmente un formulario donde trabajar para luego volcar los resultados en las
hojas: llamados Userforms.
Dónde colocar o escribir la macro: esto dependerá de lo que deba ejecutar nuestra rutina.
Si las instrucciones se deben ejecutar, por ejemplo, al abrir o cerrar un libro, se colocan en
el objeto ThisWorkbook
Si nuestra rutina será llamada con un botón, atajo de teclado o desde otra rutina, se
colocará en un módulo (estando en el Editor, menú Insertar, Módulo).
Cómo ejecutar una macro: En el punto anterior se menciona que se necesita una 'acción'
que dispare o ejecute una macro grabada.
1- Una acción automática 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
a- Cuadro de controles: al optar por 'Ver código' nos llevará al Editor, al objeto
HOJA donde se generará automáticamente una rutina con estas 2 instrucciones:
End Sub
b- Formularios: ya debemos tener lista la rutina en un módulo 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 módulo del Editor.
Nota: Si Excel ya tiene asignada esta letra la reemplazará por Ctrl+Mayúsc +t Esto
significa que en el momento que necesitemos que la macro se ejecute presionaremos juntas
las teclas Ctrl + t (o Ctrl+Mayusc+t)
En esta sección aparecerán algunas de las instrucciones 'básicas' para ser utilizadas con
LIBROS.
Workbooks("LibroOriginal.xlsm").Activate
IMPORTANTE: Al abrir un libro, éste pasa a ser el libro activo. Por lo tanto no es
necesario activarlo nuevamente.
3-Cerrar un libro
Workbooks("Libro1.xls").Close False
'o también: ActiveWorkbook.Close False
ActiveWorkbook.Save
ActiveWorkbook.Close
Ej. 1: La carpeta y el nombre del libro pueden guardarse en variables, como en este caso:
Ej. 2:
ruta = "C:\Archivos Copia2013"
libro = "Ventas2013.xlsm"
ActiveWorkbook.SaveAs Filename:=Range("A2").Value
Nota: en este caso como no se indica la ruta o carpeta, se lo guarda en la misma carpeta
del libro activo.
5-No mostrar aviso al salir, al eliminar hoja, o cualquier aviso que queremos omitir:
Selection.Copy
'o también: Range("A5:H10").Copy
ActiveSheet.Paste Destination:=ActiveSheet.Next.Range("B2")
Range("A5:H10").Copy Destination:=Sheets("Base").Range("B2")
NOTA: las 'copias' tienen muchos detalles a considerar: con o sin formatos, con o sin
fórmulas, etc.
Sheets("Hoja1").Copy After:=Sheets(Sheets.Count)
Nota: recordar que luego de la copia la hoja activa es la que se acaba de crear.
5- Ocultar filas o columnas:
Nota: Para obtener el código con ciertos permisos que se pueden seleccionar desde la
ventana de Protección, realizar los pasos con la grabadora de macros.
ActiveSheet.Rows("7:7").Select
Selection.EntireRow.Delete
filx = 5
Sheets("BASE").Range("A" & filx).EntireRow.Delete
ruta = ActiveSheet.Range("B5")
ActiveSheet.Pictures.Insert(ruta).Select
Nota: Reemplazar PrintOut por PrintPreview para realizar solo una vista preliminar.
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.
Range("B2").CurrentRegion.Select
lugar= ActiveCell.Address
'guarda la referencia absoluta, por ej: $E$2
ActiveCell.Offset(0,1).Value = ActiveCell.Comment.Text
Range("B1:E1").Select
Selection.Merge
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
Range("A65536").End(xlup).Row + 1
Una colección es un conjunto de objetos del mismo tipo: hojas, celdas, controles o Shapes,
imágenes.
Para trabajar con una colección se programa un bucle: es decir repetir la misma instrucción
para cada elemento de la colección.
A continuación algunos ejemplos del bucle: For Each....Next
Ejemplo1: introducir un nombre para cada hoja del libro activo. Esta rutina se coloca en un
módulo:
Sub nombraHojas()
Dim MiNombre As String
Dim hoja As Worksheet
'controla posible error al ingresar un nombre de hoja no válido
On Error Resume Next
End Sub
Ejemplo2: introducir valores para cada celda de un rango (se coloca en un módulo)
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
módulo)
Sub valoresHoja()
Dim hoja as Sheets
Ejemplo1: realizar una acción por cada valor que tome una variable i (se coloca en un
módulo)
Sub muestraNombre()
Dim i as Byte
Dim hoja as Worksheet
'se controla posible error de que no existan tantas hojas
On Error Resume Next
For i=1 to 5
Msgbox WorkSheets(i).Name
Next
End Sub
Ejemplo2: realizar una acción mientras se cumpla una condición (se coloca en un módulo)
Sub recorreRango()
'Se recorre la col A a partir de la fila 2 hasta encontrar una celda vacía.
'El valor de cada celda se incrementa en 1
Range("A2").Select
'se controla posible error de que la celda contenga texto
On Error resume next
A continuación algunos ejemplos de cómo llamar a objetos insertados en hoja, como ser
Cuadros de texto, Listas o Cuadros combinados y también un Userform.
En una hoja de Excel, los botones que lanzan una acción, pueden ser colocados con
la barra de Formularios o ActiveX (Cuadro de Controles).
a. Botón de formulario: se asigna una macro, como la del ejemplo, que previamente se
escribió en un módulo en el Editor de Visual Basic.
Sub mostrando ()
'nombre del Userform que se desea mostrar
UserForm1.Show
End Sub
b. Botón del Cuadro de controles: una vez dibujado en la hoja, clic derecho, opción
Ver código y escribir la rutina (ésta se habilita en la hoja donde aparecerá el
control). Ejemplo:
Nota: Estas instrucciones como las del punto 3 y 4, se colocan dentro de alguna rutina
general, como puede ser un botón para guardar o aceptar.
TextBox1.Value = "CANCELADO"
TextBox2 = Sheets("Hoja3").Range("A5").Value
TextBox2 = Range("C1").Value + Range("C2").Value
Nota: previamente se habrá asignado un valor de fila y columa a las variables fil y col
respectivamente.
En una hoja, dibujar un Cuadro de lista y un Cuadro combinado, con la barra 'Formularios'.
En un módulo, colocar esta macro que asignará un rango de valores a los controles
dibujados.
Ejemplo 1:
Sub Lista()
'asignar rango de entrada al control Lista
ActiveSheet.Shapes("List Box 1").Select
Selection.ListFillRange = "$F$1:$F$4"
Ejemplo 2:
En este caso el control Lista se dibujó con la barra ActiveX o Cuadro de Controles:
Sub ListaX()
'asignar rango de entrada al control Lista
ActiveSheet.ListBox1.ListFillRange = "$F$1:$F$4"
End Sub