Sie sind auf Seite 1von 10

TALLER DE OFIMÁTICA – EXCEL – COMPILADO DE FUNCIONES PRINCIPALES - IMPLEMENTACIÓN DE MACROS EN EXCEL

REFERENCIAS: Veamos algunos ejemplos para observar los diferentes modos de referirnos a libros, hojas y
celdas.

Nota: Una vez copiada una instrucción o código en el Editor, colocar el cursor sobre la palabra en negrita y
presionar F1 para acceder a la Ayuda Excel. Allí se encontrarán más explicaciones y ejemplos para cada
instrucción.

WORKBOOK : Libro de trabajo.


ActiveWorkbook 'Libro activo.
Workbooks(2) 'El segundo libro abierto.
Workbooks("Mio.xlsm") 'Se menciona al libro llamado Mio.
Workbooks(milibro) 'Llamada a un libro cuyo nombre se encuentra en una variable llamada 'milibro'
(*)
*Si el nombre del libro se encuenta en una variable, NO lleva comillas.
El nombre debe incluir la extensión.

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.
Sheets(hojita) 'Llamada a una hoja cuyo nombre se guardó en la variable 'hojita'

Con una variable para el objeto hoja:


Set h3 = Sheets("Hoja3")
luego se hace referencia a ella como: h3.Select

RANGE o CELLS : rango o celda


Activecell 'la celda activa
Range("A2") 'la celda A2
Cells(2,1) 'la celda de fila 2 y columna 1 = A2 .
Cells(3,"D") 'la celda de fila 3 y col D = D3

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") 'columnas desde B hasta D incluídas.
Range("2:2") 'fila 2
Rows("4:7") 'filas 4 hasta 7 incluída.
[A3] 'la celda A3
Range("A" & fila) 'celda de la col A y fila según variable.

Range("B2").CurrentRegion.Select 'Selecciona la región que contiene a B2.


Nota: Una región se extiende hasta encontrar una celda vacía.
ActiveCell.Offset(2,0) '2 filas debajo de la celda activa.
Range("B2").Offset(0,3) 'se refiere a la celda E2 (3 columnas a derecha)
Nota: Offset con valores negativos hará referencia a filas por encima y columnas a laizquierda de la celda
activa o mencionada.

Ampliando un rango seleccionado. El resultado será la selección del rango A1:D10


_______________________________
Ing. ORLANDO CÓRDOVA ATAUCUSI
TALLER DE OFIMÁTICA – EXCEL – COMPILADO DE FUNCIONES PRINCIPALES - IMPLEMENTACIÓN DE MACROS EN EXCEL

Range("A1:B5").Select
Selection.Resize(10, 4).Select

TRABAJANDO CON LIBROS:

En esta sección veremos algunas instrucciones 'básicas' 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.

1-Abrir un segundo libro:


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

Nota: Si el nombre se encuentra en una varible NO lleva comillas

Ej. 1: la variable 'librox' contiene el nombre + la extensión.

a- el librox se encuentra en la misma carpeta que el libro activo.


Workbooks.Open ThisWorkBook.Path & "\" & librox
b- la variable 'ruta' indica la carpeta que contiene el librox
Workbooks.Open ruta & "\" & librox
Nota: Si la variable 'ruta' contiene la barra final no es necesario agregarla aquí.

Ej. 2: la variable 'librox' contiene solo el nombre, sin la extensión.

Workbooks.Open ThisWorkBook.Path & "\" & librox & ".xlsm"

2-Activar un segundo libro:


Workbooks("LibroOriginal.xlsm").Activate

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

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: sin guardar cambios:


Workbooks("Libro1.xlsb").Close False
'o también: ActiveWorkbook.Close False
Ej. 2: guardando los cambios:
ActiveWorkbook.Save
ActiveWorkbook.Close

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

4-Guardar un libro con otro nombre o ruta:

_______________________________
Ing. ORLANDO CÓRDOVA ATAUCUSI
TALLER DE OFIMÁTICA – EXCEL – COMPILADO DE FUNCIONES PRINCIPALES - IMPLEMENTACIÓN DE MACROS EN EXCEL

Ej. 1: La carpeta y el nombre del libro pueden guardarse en variables, como en este caso:
ruta = ThisWorkbook.Path & "\"
'o quizás: ruta = "D:\Usuarios\"
librox = "LibroCopia.xlsm"
ActiveWorkbook.SaveAs ruta & librox

IMPORTANTE: tener presente que si en las variables no se incluye barra separadora o extensión del libro,
deberá agregarse en la instrucción.
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.

6-No mostrar la ejecución de la macro (movimiento de pantalla):


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

7- Obtener información del libro.

usuario = Application.UserName 'nombre de usuario del libro


nombre = ActiveWorkbook.Name 'nombre del libro activo
ruta = ActiveWorkbook.Path
'ruta completa donde se encuentra alojado el libro
ruta -nbre = ActiveWorkbook.FullName
'ruta y nombre con extensión del libro activo
guarda = ActiveWorkbook.Saved
'devuelve False si el libro sufrió cambios desde la última vez que fue guardado

8- Cambiar el modo de cálculo del libro.

Application.Calculation = xlCalculationManual 'modo manual


Application.Calculation = xlCalculationAutomatic 'modo automático

TRABAJANDO CON HOJAS

En esta sección veremos algunas instrucciones para utilizar con HOJAS.

1-Seleccionar hojas:

ActiveSheet.Previous.Select ' selecciona la hoja anterior a la activa.


ActiveSheet.Next.Select 'selecciona la hoja posterior a la activa.
Sheets(Sheets.Count).Select 'selecciona la última hoja.

_______________________________
Ing. ORLANDO CÓRDOVA ATAUCUSI
TALLER DE OFIMÁTICA – EXCEL – COMPILADO DE FUNCIONES PRINCIPALES - IMPLEMENTACIÓN DE MACROS EN EXCEL

2-Obtener información de la hoja :

nbre = ActiveSheet.Name 'guarda en variable el nombre de la hoja.


nroH = ActiveSheet.Index 'guarda en variable el número de hoja.

If ActiveSheet.AutoFilterMode = True Then MsgBox "SI"


'indica si la hoja tiene activado el Autofiltro.

If ActiveSheet.FilterMode = True Then MsgBox "SI"


'indica si la hoja está en modo de filtro por alguna columna.

3-Copiar datos de una hoja a la siguiente:

Ej. 1: Se copia un rango previamente seleccionado a la hoja sgte.


Selection.Copy 'o también: Range("A5:H10").Copy
ActiveSheet.Next.Range("B2").Select
ActiveSheet.Paste

Ej. 2 : Método abreviado, donde se copia en otra hoja a partir de 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, solo
valores, etc. Todo el tema Mover-Copiar Datos se desarrolla en la Guía Temática Nº 3.

4- Mover o Copiar la hoja entera:

Se realiza una copia de la hoja activa, colocándola al final de todas.

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:

Luego de crear la copia en el punto anterior, le asignamos nombre:

ActiveSheet.Name = "HojaNueva"

6- Ocultar filas o columnas:

ActiveCell.EntireRow.Hidden=True ' filas


ActiveCell.EntireColumn.Hidden= True 'col

Nota: para volverlas a mostrar utilizar la instrucción en False. Por ej:


Range("C1").EntireRow.Hidden = False

7-Proteger o desproteger una hoja:

_______________________________
Ing. ORLANDO CÓRDOVA ATAUCUSI
TALLER DE OFIMÁTICA – EXCEL – COMPILADO DE FUNCIONES PRINCIPALES - IMPLEMENTACIÓN DE MACROS EN EXCEL

ActiveSheet.Protect "contraseña" 'proteger con contraseña


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

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.

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

'reemplazar la variable 'i' por el nro de columna


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

9-Eliminar filas o columnas:

Ej. 1: eliminar la fila 7 de hoja activa.


ActiveSheet.Rows("7:7").Select
Selection.EntireRow.Delete
Ej. 2: eliminar cierta fila de hoja 'Base'.
filx = 5
Sheets("BASE").Range("A" & filx).EntireRow.Delete
Nota: observar que no es necesario seleccionar previamente la fila.

10-Insertar una imagen en una hoja:

Ej. 1: se indica la ruta de la imagen en el mismo código.


ActiveSheet.Pictures.Insert ("D:\Mis imágenes\img01.JPG")

Ej. 2: se indica la ruta de la imagen en una celda. Además la imagen queda seleccionada.
ruta = ActiveSheet.Range("B5")
ActiveSheet.Pictures.Insert(ruta).Select

Nota: la ruta va entre comillas, por ej: "C:\Mis docu\Foto1.jpg"

11-Imprimir (o vista Previa) de la hoja seleccionada:

ActiveWindow.SelectedSheet.PrintOut Copies:=1, Collate:=True


'o también: ActiveSheet.PrintOut

Nota: Reemplazar PrintOut por PrintPreview para realizar solo una vista preliminar.

TRABAJANDO CON RANGOS O CELDAS

En esta sección veremos instrucciones 'básicas' para utilizar con CELDAS o RANGOS.

1- Guardar la dirección de una celda en una variable:

_______________________________
Ing. ORLANDO CÓRDOVA ATAUCUSI
TALLER DE OFIMÁTICA – EXCEL – COMPILADO DE FUNCIONES PRINCIPALES - IMPLEMENTACIÓN DE MACROS EN EXCEL

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

lugar= ActiveCell.Address(False, False)


'guarda la referencia relativa, por ej: E2

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

3-Eliminar o borrar celdas:

Range(rango). Select 'la variable 'rango' guarda una ref


Selection.ClearContents 'borra contenidos
Selection.Clear 'borra todo (contenidos, formatos, etc)

Nota: La expresión Cells indica el total de celdas de una hoja. Entonces la instrucción:

Cells.Clearcontents 'borra el contenido de toda la hoja activa.

4- Combinar - descombinar celdas :

Range("B1:E1").Select
Selection.Merge

Nota: Para quitar la combinación se utilizará: Unmerge

5- Encontrar fin de rango (o primer fila/col libre) :

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("A" & Rows.Count).End(xlup).Row + 1


'selecciona la primer fila libre en col A, en todas las versiones Excel

_______________________________
Ing. ORLANDO CÓRDOVA ATAUCUSI
TALLER DE OFIMÁTICA – EXCEL – COMPILADO DE FUNCIONES PRINCIPALES - IMPLEMENTACIÓN DE MACROS EN EXCEL

Nota: si no se suma 1 se obtendrá la última fila con datos.

6- Algunas opciones de formato:

ActiveCell.Font.Bold = True 'negrita a la celda activa


Range("A9").Font.Underline = True 'subrayado a la celda A9

Selection.Font.Size = 12 'tamaño 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
grabación y en un módulo del Editor se encontrarán todas las instrucciones.

TRABAJANDO CON COLECCIONES (uso de Bucles)

En esta sección veremos algunas instrucciones 'básicas' para utilizarlas con COLECCIONES.

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 de los bucles: For Each....Next, For i = n ... Next , While.....Wend

* Todos los tipos de bucles se encuentran desarrollados en la Guía Temática N° 6(+ de 40 ejemplos).

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
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 módulo)

Sub colocaValores()
Dim celdita as Range
For Each celdita in ActiveSheet.Range("A1:B10")

_______________________________
Ing. ORLANDO CÓRDOVA ATAUCUSI
TALLER DE OFIMÁTICA – EXCEL – COMPILADO DE FUNCIONES PRINCIPALES - IMPLEMENTACIÓN DE MACROS EN EXCEL

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

Ejemplo4: 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

En este ejemplo se muestra el nombre de cada hoja, desde la nro 1 a la 5

Ejemplo5: 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
While Activecell.Value <> ""
ActiveCell.Value = ActiveCell.Value + 1
'pasa a la fila siguiente
ActiveCell.Offset(1,0).Select
Wend
End Sub

TRABAJANDO CON OBJETOS

A continuación veremos algunos ejemplos de cómo llamar a objetos insertados en la hoja. Botones de
comando, cuadros de texto, Listas o Cuadros combinados, gráficos y otros.

1- Uso de botón de comando:

_______________________________
Ing. ORLANDO CÓRDOVA ATAUCUSI
TALLER DE OFIMÁTICA – EXCEL – COMPILADO DE FUNCIONES PRINCIPALES - IMPLEMENTACIÓN DE MACROS EN EXCEL

En una hoja de Excel, los botones que lanzan una acción, pueden ser colocados con labarra de
Formularios o ActiveX (Cuadro de Controles).

a. Botón de formulario: con clic derecho sobre el control, opción 'Asignar Macro' , seleccionar de la
lista y Aceptar. Previamente ya tendremos nuestra macro en un módulo 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 "Estás por ejecutar el pase a libro Diario."
'llamar a otra macro
Call ejecutaDiario
End Sub

b. Botón ActiveX: una vez dibujado en la hoja, clic derecho, opción 'Ver código' nos llevará al Editor, a
la sección Código del objeto Hoja donde se encuentre el control.

Ej.1
Private Sub CommandButton1_Click()
UserForm1.Show
End Sub

Ej.2
Private Sub CommandButton1_Click()
Msgbox "Estás por ejecutar el pase a libro Diario."
'llamar a otra macro
Call ejecutaDiario
End Sub

2- Asignando valores a Cuadros de texto:


Ejemplos de cómo 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 botón 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 expresión 'value' ya que esa es su propiedad predeterminada. Puede
colocarse o no.

3- Volcar datos de controles Textbox y Combobox a la hoja:


Estos controles han sido dibujados con la barra ActiveX o 'Cuadro de controles'

'pasar datos de un control Textbox a la celda indicada :


Range("B5") = TextBox1.Value
_______________________________
Ing. ORLANDO CÓRDOVA ATAUCUSI
TALLER DE OFIMÁTICA – EXCEL – COMPILADO DE FUNCIONES PRINCIPALES - IMPLEMENTACIÓN DE MACROS EN EXCEL

'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

Nota: previamente se habrá asignado un valor de fila y columa a las variables fil y col respectivamente.

4- Asignar rango a un control Listbox y Combobox:

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

Sub Lista()
'asignar rango de entrada al control Lista
ActiveSheet.Shapes("List Box 1").Select
Selection.ListFillRange = "$F$1:$F$4"

'asignar rango de entrada al control Combobox


ActiveSheet.Shapes("Drop Down 1").Select
Selection.ListFillRange = "$K$1:$K$7"
End Sub
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

5- Cambiar color a serie de un gráfico.

Sub colorSeries()
ActiveSheet.ChartObjects("3 Gráfico").Activate
ActiveChart.SeriesCollection(1).Select
With Selection.Format.Fill
.ForeColor.RGB = RGB(0, 255, 0)
End With
Range("A1").Select
End Sub

_______________________________
Ing. ORLANDO CÓRDOVA ATAUCUSI