Академический Документы
Профессиональный Документы
Культура Документы
Esta pgina intenta ser una gua no solo para el que se inicia en el tema VBA sino tambin para aquellos que, conociendo el
tema, no recuerdan tal o cual instruccin o buscan ampliar sus conocimientos con otros ejemplos.
Los temas se encuentran separados en categoras, desde un repaso por las instrucciones bsicas, hasta macros ms
desarrolladas. Desde la seccin Ejemplostambin se pueden descargar libros con ms rutinas.
Como casi siempre hay ms de una forma de programar un evento, podrn observar que a veces se escribe una lnea O la
otra. Quiere decir que puedo utilizar cualquiera de las 2. (Nunca las 2 juntas!)
Los temas estn divididos en 2 grupos principales: Conceptos e Instruccionesbsicas (ver ndice de contenidos en
margen izquierdo)
MACRO:
Una macro es un conjunto de instrucciones escritas en lenguaje Visual Basic, siendo VBA (Visual Basic for
Applications) una variante para el paquete Office.
Este conjunto de instrucciones nos permite automatizar tareas que debemos efectuar peridicamente como as tambin
aquellas que nos pueden insumir tiempo de trabajo (casos como los de comparar datos o filtrar por distintos criterios, etc.)
Ejemplos de tareas que podemos 'programar': ocultar ciertas hojas al abrir el libro, insertar hojas al llenar una celda con
cierto dato, control de contenidos antes de imprimir, crear copia del libro antes de guardar, enviar mails a criterio, y tantas
otras. Son todas tareas que pueden ser automatizadas mediante rutinas o macros.
NOTA: las imgenes se obtuvieron con Excel 2010 por lo que puede variar en otras versiones.
Excel 2003 o anterior: Las opciones de Macros se encuentran desde men Herramientas, Macros.
Excel 2007 o posterior: se encuentran en ficha Programador (o Desarrollador). Si esta ficha no se encuentra visible se la
activa desde men Archivo, Opciones, Personalizar Cinta de Opciones y tildar la ficha Programador (o Desarrollador).
ELEMENTOS DE UNA MACRO: para automatizar una tarea mediante una macrobsicamente 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 con el atajo de teclado Alt+F11 o desde el men Macros.
Una vez en ese 'espacio' del Editor escribiremos o copiaremos las rutinas y sea en mdulos, o en el objeto HOJA o en
ThisWorkbook, segn el tipo de macro como veremos en el tema siguiente.
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 llamado Userform donde trabajar para luego volcar los resultados en las hojas.
Si las instrucciones deben ejecutarse, por ejemplo, al abrir o cerrar un libro, se colocan en el objeto ThisWorkbook (o
EsteLibro segn la versin).
Si las instrucciones deben ejecutarse 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.
REFERENCIAS:
Veamos algunos ejemplos para observar los diferentes modos de referirnos a libros, hojas y celdas.
Nota: Una vez copiada una instruccin o cdigo 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.
'Libro activo.
'El segundo libro abierto.
Workbooks("Mio.xlsm")
Workbooks(milibro)
'Llamada a un libro cuyo nombre se encuentra en una variable llamada 'milibro' (*)
Set h3 = Sheets("Hoja3")
luego se hace referencia a ella como: h3.Select
RANGE o CELLS
rango o celda
Activecell
Range("A2")
Cells(2,1)
Cells(3,"D")
Nota: 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 desde A5 hasta B10 inclusive.
Range("E:E")
'columna E
Columns("B:D")
Range("2:2")
Rows("4:7")
[A3]
'la celda A3
En esta seccin veremos algunas instrucciones 'bsicas' para ser utilizadas conLIBROS.
Nota: A partir de aqu usar solo el objeto activo considerando que puede usarse algunas de las otras expresiones ya vistas
con anterioridad.
IMPORTANTE: Al abrir un libro, ste pasa a ser el libro activo. Por lo tanto no es necesario activarlo nuevamente.
3-Cerrar un libro
Ej. 1: La carpeta y el nombre del libro pueden guardarse en variables, como en este caso:
ruta = ThisWorkbook.Path & "\"
'o quizs: ruta = "D:\Usuarios\"
librox = "LibroCopia.xlsm"
ActiveWorkbook.SaveAs ruta & librox
IMPORTANTE: tener presente que si en las variables no se incluye barra separadora o extensin del libro, deber
agregarse en la instruccin.
ActiveWorkbook.SaveAs ruta & "\" & librox & ".xlsm"
Ej. 2: El nombre del libro (con o sin ruta) se guarda en una celda.
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:
Application.DisplayAlerts= False
'volverla a True al finalizar la macro.
usuario = Application.UserName
nombre = ActiveWorkbook.Name
ruta = ActiveWorkbook.Path
Application.Calculation = xlCalculationManual
'modo manual
Application.Calculation = xlCalculationAutomatic 'modo automtico
1-Seleccionar hojas:
ActiveSheet.Previous.Select
ActiveSheet.Next.Select
guardado
Sheets(Sheets.Count).Select
nbre = ActiveSheet.Name
nroH = ActiveSheet.Index
ActiveSheet.Next.Range("B2").Select
ActiveSheet.Paste
NOTA: las 'copias' tienen muchos detalles a considerar: con o sin formatos, con o sin frmulas, solo valores, etc. Todo el
tema Mover-Copiar Datos se desarrolla en la Gua Temtica N 3.
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- Renombrar Hojas:
ActiveSheet.Name = "HojaNueva"
ActiveCell.EntireRow.Hidden=True
ActiveCell.EntireColumn.Hidden= True
' filas
'col
ActiveSheet.Protect "contrasea"
ActiveSheet.Unprotect "contrasea"
'quitar la proteccin
Nota: Para obtener el cdigo con ciertos permisos que se pueden seleccionar desde la ventana de Proteccin, realizar los
pasos con la grabadora de macros.
Ej. 2: se indica la ruta de la imagen en una celda. Adems la imagen queda seleccionada.
ruta = ActiveSheet.Range("B5")
ActiveSheet.Pictures.Insert(ruta).Select
Nota: Reemplazar PrintOut por PrintPreview para realizar solo una vista preliminar.
En esta seccin veremos instrucciones 'bsicas' para utilizar con CELDAS o RANGOS.
lugar= ActiveCell.Address
'guarda la referencia absoluta, por ej: $E$2
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.
Range(rango). Select
Selection.ClearContents
Selection.Clear
Nota: La expresin Cells indica el total de celdas de una hoja. Entonces la instruccin:
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
ActiveCell.Font.Bold = True
Range("A9").Font.Underline = True
Selection.Font.Size = 12
'tamao de fuente al rango seleccionado
Selection.Font.Name = "Arial"
'tipo de fuente al rango seleccionado
Selection.Interior.ColorIndex = 3 'color de relleno al rango seleccionado
Selection.Font.ColorIndex = 6
'color de letra a las celdas seleccionadas
Nota: Para obtener formatos de color, bordes o formatos de otros rangos, se pueden realizar los pasos manualmente
con la grabadora de macros encendida. Al finalizar con todos los pasos detener la grabacin y en un mdulo del
Editor se encontrarn todas las instrucciones.
En esta seccin veremos algunas instrucciones 'bsicas' para utilizarlas con COLECCIONES.
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 de los bucles: For Each....Next, For i = n ... Next , While.....Wend
* Todos los tipos de bucles se encuentran desarrollados en la Gua Temtica N 6(+ de 40 ejemplos).
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
'controla posible error al ingresar un nombre de hoja no vlido
On Error Resume Next
For Each hoja In Worksheets
MiNombre = InputBox("Ingrese nombre para esta hoja: ")
If MiNombre <> "" Then 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
Ejemplo4: 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
'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
Ejemplo5: 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
'se controla posible error de que la celda contenga texto
On Error resume next
While Activecell.Value <> ""
ActiveCell.Value = ActiveCell.Value + 1
'pasa a la fila siguiente
ActiveCell.Offset(1,0).Select
Wend
End Sub
En una hoja de Excel, los botones que lanzan una accin, pueden ser colocados con labarra de Formularios o ActiveX (Cuadro
de Controles).
a. Botn de formulario: con clic derecho sobre el control, opcin 'Asignar Macro' , seleccionar de la lista y Aceptar.
Previamente ya tendremos nuestra macro en un mdulo del Editor de Visual Basic.
Ej.1
Sub mostrando ()
'nombre del Userform que se desea mostrar
UserForm1.Show
End Sub
Ej.2
Sub ejecutando ()
Msgbox "Ests por ejecutar el pase a libro Diario."
'llamar a otra macro
Call ejecutaDiario
End Sub
b.
Ej.1
Botn ActiveX: una vez dibujado en la hoja, clic derecho, opcin 'Ver cdigo' nos llevar al Editor, a la seccin Cdigo
del objeto Hoja donde se encuentre el control.
Private Sub CommandButton1_Click()
UserForm1.Show
End Sub
Ej.2
Private Sub CommandButton1_Click()
Msgbox "Ests por ejecutar el pase a libro Diario."
'llamar a otra macro
Call ejecutaDiario
End Sub
Ejemplos de cmo colocar datos en Textbox dibujados en hoja con la barra ActiveX o '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
Nota: En Textbox2 se omiti la expresin 'value' ya que esa es su propiedad predeterminada. Puede colocarse o no.
Ej 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
http://aplicaexcel.galeon.com/index.htm