Академический Документы
Профессиональный Документы
Культура Документы
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.
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("A1:B5").Select
Selection.Resize(10, 4).Select
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.
IMPORTANTE: Al abrir un libro, éste pasa a ser el libro activo. Por lo tanto no es necesario activarlo
nuevamente.
3-Cerrar un libro
_______________________________
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.
1-Seleccionar hojas:
_______________________________
Ing. ORLANDO CÓRDOVA ATAUCUSI
TALLER DE OFIMÁTICA – EXCEL – COMPILADO DE FUNCIONES PRINCIPALES - IMPLEMENTACIÓN DE MACROS EN EXCEL
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.
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"
_______________________________
Ing. ORLANDO CÓRDOVA ATAUCUSI
TALLER DE OFIMÁTICA – EXCEL – COMPILADO DE FUNCIONES PRINCIPALES - IMPLEMENTACIÓN DE MACROS EN EXCEL
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.
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: Reemplazar PrintOut por PrintPreview para realizar solo una vista preliminar.
En esta sección veremos instrucciones 'básicas' para utilizar con CELDAS o RANGOS.
_______________________________
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
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.
Nota: La expresión Cells indica el total de celdas de una hoja. Entonces la instrucción:
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
_______________________________
Ing. ORLANDO CÓRDOVA ATAUCUSI
TALLER DE OFIMÁTICA – EXCEL – COMPILADO DE FUNCIONES PRINCIPALES - IMPLEMENTACIÓN DE MACROS EN EXCEL
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.
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
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
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
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.
_______________________________
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
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.
Nota: previamente se habrá asignado un valor de fila y columa a las variables fil y col respectivamente.
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"
Sub ListaX()
'asignar rango de entrada al control Lista
ActiveSheet.ListBox1.ListFillRange = "$F$1:$F$4"
End Sub
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