[go: up one dir, main page]

0% encontró este documento útil (0 votos)
83 vistas10 páginas

VBA Macros

El documento explica cómo crear y ejecutar macros en VBA en Excel. Describe los elementos necesarios para crear una macro como un editor de macros, eventos para iniciar la macro, y el lenguaje VBA. También explica dónde colocar las instrucciones de la macro dependiendo de su propósito y cómo ejecutarlas a través de botones, atajos de teclado o desde el menú Herramientas. Además, proporciona ejemplos de cómo referirse y trabajar con libros, hojas y celdas en VBA.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
83 vistas10 páginas

VBA Macros

El documento explica cómo crear y ejecutar macros en VBA en Excel. Describe los elementos necesarios para crear una macro como un editor de macros, eventos para iniciar la macro, y el lenguaje VBA. También explica dónde colocar las instrucciones de la macro dependiendo de su propósito y cómo ejecutarlas a través de botones, atajos de teclado o desde el menú Herramientas. Además, proporciona ejemplos de cómo referirse y trabajar con libros, hojas y celdas en VBA.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 10

VBA Macros http://macroseditordevisualbasic.blogspot.mx/p/preguntas-frecuentes.

html

VBA Macros

Cómo se crea una macro: para automatizar una tarea mediante una macrobá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.
En versión 2007, activar la opción 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 módulos
c- o insertando formularios personales o Userforms.

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.
3- un lenguaje de programación. En Excel utilizamos VBA (Visual Basic para Aplicaciones)
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 (o
EsteLibro según la versión).
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 botón, atajo de teclado o desde otra rutina, se colocará en un módulo (estando en el
Editor, menú Insertar, Módulo).
Las instrucciones para los controles de un formulario o Userforms se colocan en la sección Código del mismo formulario.

Cómo ejecutar una macro: En el punto anterior se menciona que se necesita una 'acción' que dispare o ejecute una macro
grabada.
Veamos los distintos casos:
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
2- Al presionar un botón dibujado en la hoja. Podemos utilizar botones de la barra'Cuadro de controles o ActiveX' o de la
barra 'Formularios'. En versión 2003 se encuentra en Menú Ver, Barras de Herramientas. En versión 2007 desde la
fichaProgramador
Dibujamos el control en la hoja, ajustamos algunas propiedades como texto, tamaño, ubicación. Al hacer clic derecho sobre el
control optamos por 'Ver código' o 'Asignar macro' según qué barra de herramientas hemos utilizado.
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:
Private Sub CommandButton1_click()
'aquí escribiremos nuestras 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.
Desde la hoja Excel, menú Herramientas, Macros, Macros seleccionarla de la lista. Presionar el botón 'Avanzadas' e ingresar

1 de 10 06/06/2014 02:46 p.m.


VBA Macros http://macroseditordevisualbasic.blogspot.mx/p/preguntas-frecuentes.html

una letra, por ejemplo 't' (sin las comillas)


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)
4- Desde el menú Herramientas: si no hemos asignado la rutina que se encuentra en un módulo a ningún botón ni a atajo de
teclado, la ejecutaremos desde este menú de Excel.
En versión 2007, activar la opción Programador de la Cinta de Opciones.

Referencias: Veamos los diferentes modos de referirnos a libros, hojas y celdas:

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 : Hoja de trabajo

ActiveSheet : Hoja activa


Sheets("Enero") : Hoja de nombre 'Enero'
Sheets(3) : Número de hoja según el orden de las pestañas.
[Hoja2] : La 2da hoja según orden de las pestañas

Range o Cells : rango o celda

Activecell : la celda activa


Range("A2") : la celda A2
Cells(2,1) : la celda A2 .

*-Nótese 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 según valor de variable

Trabajando con Libros

1-Abrir un segundo libro:

Workbooks.Open "C:\Mis docu\Libro1.xlsb"

' o también: 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 extensión)

Workbooks.Open ThisWorkBook.Path & "\" & libro2

2-Activar un segundo libro:


Workbooks("Libro2.xls").Activate

2 de 10 06/06/2014 02:46 p.m.


VBA Macros http://macroseditordevisualbasic.blogspot.mx/p/preguntas-frecuentes.html

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

3-Cerrar un libro (sin guardar):


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

4-Cerrar un libro (guardando los cambios):


ActiveWorkbook.Save
ActiveWorkbook.Close

'o en 1 sola línea: ActiveWorkBook.Close True

5-Guardar un libro con otro nombre:


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

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 quizás: 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 opción de actualizar vínculos 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 ejecución 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 módulo y allí escribir una rutina:
Ejemplo: Sub Nuevamacro ()
'instrucciones, por ej:
MsgBox "Bienvenid@"
End Sub

3 de 10 06/06/2014 02:46 p.m.


VBA Macros http://macroseditordevisualbasic.blogspot.mx/p/preguntas-frecuentes.html

Y agregar esta otra en el objeto ThisWorkbook:


Private Sub Workbook_Open ()
Nuevamacro
'o también puede llamarse utilizando la expresión Call
'Call Nuevamacro
End Sub

Trabajando con Hojas

1-Seleccionar la hoja anterior o siguiente:


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

2-Datos de la hoja:
ActiveSheet.Name 'nombre de la hoja
ActiveSheet.Index 'número 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 ' filas
ActiveCell.EntireColumn.Hidden= True 'col

5-Proteger o desproteger una hoja:


ActiveSheet.Protect "contraseña" 'proteger con contraseña
ActiveSheet.Unprotect "contraseña" 'quitar la protección

6-Insertar filas o columnas a partir de cierta ubicación:


'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 expresión: Cells(fila,col) y queremos hacer referencia a la celda AB5 por ej, necesitamos conocer cuál es el
nro de columna. Para eso podemos solicitarla en un mensaje con:

Sub nrocol()
Msgbox Range("AB1").Column
End Sub

4 de 10 06/06/2014 02:46 p.m.


VBA Macros http://macroseditordevisualbasic.blogspot.mx/p/preguntas-frecuentes.html

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 'o
ActiveSheet.PrintOut

Reemplazar PrintOut por PrintPreview para realizar solo una vista preliminar.

Trabajando con Rangos o Celdas

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

Range("B7").Select 'selecciona la celda B7


Range("B:B").Select '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 instrucción 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

*- Nótese que las variables NO llevan comillas

Range("A:A, D:F").Select 'selecciona las columnas A, D, E y F


Range("2:2, 4:7").Select 'selecciona las filas 2 y desde 4 hasta la 7

Nota: al inicio de la sección Macros se encuentran otras instrucciones de selección

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

5 de 10 06/06/2014 02:46 p.m.


VBA Macros http://macroseditordevisualbasic.blogspot.mx/p/preguntas-frecuentes.html

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
'alineación central (Right=derecha, Left=izquierda)
End With

4- Guardar la dirección 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 expresión Cells.Clearcontents borrará el contenido del total de celdas de la hoja activa


Utilizando solamente Clear se borrarán formatos también.

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

6 de 10 06/06/2014 02:46 p.m.


VBA Macros http://macroseditordevisualbasic.blogspot.mx/p/preguntas-frecuentes.html

Selection.Merge

Para quitar la combinación: Unmerge

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

Range("B2").CurrentRegion.Select

10- Seleccionar hasta la última celda no vacía:


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 instrucción dará error si la celda A3 se encuentra vacía. Es preferible en ese caso realizar la búsqueda de 'abajo hacia
arriba', con:
Range("A65536").End(xlup).Select

11- Obtener la primer celda vacía, en col A:


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

Range("A65536").End(xlup).Row + 1

Trabajando con Colecciones

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
For Each hoja In Worksheets
MiNombre = InputBox("Ingrese nombre de hoja: ")

7 de 10 06/06/2014 02:46 p.m.


VBA Macros http://macroseditordevisualbasic.blogspot.mx/p/preguntas-frecuentes.html

hoja.Name = MiNombre
Next hoja
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
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 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
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 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
While Activecell.Value <> ""
ActiveCell.Value = ActiveCell.Value + 1
Wend
End Sub

8 de 10 06/06/2014 02:46 p.m.


VBA Macros http://macroseditordevisualbasic.blogspot.mx/p/preguntas-frecuentes.html

[]

Trabajando con Objetos

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.
1- Llamando a un Userform, desde un botón:En una hoja de Excel, los botones que lanzan una acción, pueden ser
colocados con la barra de Formularios o Cuadro de Controles.

1. 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.Ejemplo:

Sub mostrando ()
UserForm1.Show 'nombre del Userform que se desea mostrar
End Sub

2. 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:

Private Sub CommandButton1_Click()


UserForm1.Show
End Sub

2- Asignando valores a los Cuadros de texto:


Ejemplos de cómo 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
botón 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 expresión '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

9 de 10 06/06/2014 02:46 p.m.


VBA Macros http://macroseditordevisualbasic.blogspot.mx/p/preguntas-frecuentes.html

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

10 de 10 06/06/2014 02:46 p.m.

También podría gustarte