Antes de empezar a escribir una macro, debemos aclarar algunos conceptos que nos van a estar persiguiendo durante toda nuestra travesía.
Workbook. Este objeto representa un libro de excel en su conjunto, por lo tanto, será nuestra unidad de grabación, será el objeto de partida para cargar un libro, y del que colgaran todos los demás objetos.
ActiveWorkbook.Close False 'Cierra el libro sin salvar
ActiveWorkbook.Close True 'Cierra el libro, salvando
ActiveWorkbook.Close 'Cierra el libro, preguntando al usuario si quiere salvarlo
ActiveWorkbook.Path 'Devuelve el valor de la ruta del libro
ActiveWorkbook.Name 'Devuelve el valor del nombre del libro
ActiveWorkbook,SaveAs "C :/pruebas.xls" 'Guarda en otro fichero
Sheet. Este objeto es la hoja del libro, por lo que un Workbook puede tener cualquier número de Sheets
ActiveSheet.Name 'Devuelve el nombre de la hoja activa
Lista los nombres de todas las hojas del libro
For Each ws In Worksheets ws.Select Debug.Print ws.Name Next ws
Borrar una hoja
Application.DisplayAlerts = False Worksheets(shtname).Delete Application.DisplayAlerts = True
Worksheets.Add ' Inserta nueva hoja Worksheets(1).Name = "Prueba" 'Cambia el nombre a la hoja 1 Worksheets(1).Activate 'Activa (selecciona) la hoja 1 Debug.Print ActiveSheet.Name 'Muestra el nombre de la hoja activa
Worksheets("Hoja2").Activate Àctiva la hoja llamada Hoja2 Debug.Print ActiveSheet.Name 'Muestra el nombre externo de la hoja Debug.Print Hoja3.Codename ' Mostrara 'Hoja3', el nombre interno de la hoja Debug.Print Hoja3.Name 'muestra el nombreexterno de la hoja, por el codename
Chart. Este objeto representa un grafico de excel, y tiene una entidad propia, por lo que lo podremos referenciar dentro de una hoja.
Range(coordenadas) Representa una o mas celdas; como coordenadas podemos especificar «A1″,»A5″,»A7» – Rango formado por varias celdas separadas «A1:A7» Rango formado por las celdas contenidas entre A1 y A7 Y lo utilizaremos para movernos dentro de la hoja;
Range("B3").AddComment "Esta es una celda de datos"
La sentencia anterior, le añade un comentario a la celda B3. A continuacion presentamos algunos ejemplos de lo que podemos hacer con un rango
Range("B3").Clear ' Borra contenido y formato de la celda B3 Range("B3").ClearContents ' Borra sólo el contenido de la celda B3 Range("B3").ClearComments ' Elimina el comentario insertado en B3 Range("B3").ClearFormats ' Borra solo el formato de B3 MsgBox Range("E3").Column ' Presenta el numero de columna del rango. MsgBox Range("J3:M21").Column ' Presenta el numero de columna del inicio rango. Rango = "D2:F8" MsgBox Range(Rango).Column ' Devuelve 4 Rango = "D2:H15" Range(Rango).Columns(3).Value = "A" 'Carga A en todas las filas, columna 3 del rango Range(Rango).Rows(3).Value = "B" 'Carga B en todas las columnas de la fila 3 del rango MsgBox "Ancho de B3" & vbcrlf & Range("B3").ColumnWidth 'Indica el ancho de la columna Sheets("Hoja2").Range("B1:B6").Copy Destination:=Sheets("Hoja3").Range("E5") 'copia de una hoja a otra
Si se necesita la direccion de una celda, se puede obtener con conversión o sin al idioma local: a continuación hay una colección de sentencias que muestra los resultados para los dos metodos
Set mc = Worksheets(1).Cells(1, 1) MsgBox "Local" & vbCrLf & mc.AddressLocal() ' $A$1 MsgBox "Address" & vbCrLf & mc.Address() ' $A$1 MsgBox "Local RowAbsolute" & vbCrLf & mc.AddressLocal(RowAbsolute:=False) ' $A1 MsgBox "Addres RowAbsolute" & vbCrLf & mc.Address(RowAbsolute:=False) ' $A1 MsgBox "Local ReferenceStyle xlR1C1" & vbCrLf & mc.AddressLocal(ReferenceStyle:=xlR1C1) ' Z1S1 MsgBox "Address ReferenceStyle xlR1C1" & vbCrLf & mc.Address(ReferenceStyle:=xlR1C1) ' Z1S1 MsgBox "Local Relativo" & vbCrLf & mc.AddressLocal(ReferenceStyle:=xlR1C1, _ RowAbsolute:=False, _ ColumnAbsolute:=False, _ RelativeTo:=Worksheets(1).Cells(3, 3)) ' Z(-2)S(-2) MsgBox "Adress Relativo" & vbCrLf & mc.Address(ReferenceStyle:=xlR1C1, _ RowAbsolute:=False, _ ColumnAbsolute:=False, _ RelativeTo:=Worksheets(1).Cells(3, 3)) ' Z(-2)S(-2)
Todo lo que hemos hecho hasta ahora ha sido posible porque en excel los objetos tienen métodos y propiedades para interactuar con ellos; por ejemplo el objeto Workbook tiene propiedades como ActiveSheet (Hoja activa), Name (Nombre), ReadOnly (Solo Lectura), Saved (Guardado) y algunos de sus métodos son Save (Guardar), Close (Cerrar), PrintOut(Imprimir), Protect (Proteger), Unprotect (Desproteger).
Respecto a Range, os dejo la página de microsoft que nos presenta este objeto.http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.range_members(v=office.11).aspx
Despues de presentaros algunas posibilidades, vamos a hacer nuestro primer ejercicio de macros.
Aqui tenemos nuestro primer ejemplo
Sub cargarDatos() ActiveCell.FormulaR1C1 = "Meses" Range("A2").Select ActiveCell.FormulaR1C1 = "Importes" Range("A3").Select ActiveCell.FormulaR1C1 = "Personas" Range("B1").Select ActiveCell.FormulaR1C1 = "3" Range("B2").Select ActiveCell.FormulaR1C1 = "4832" Range("B3").Select ActiveCell.FormulaR1C1 = "5" Range("B1:B3").Select Selection.Style = "Comma" End Sub
Si os fijais, voy selecionando cada celda, y despues utilizo ActiveCell para llenarla.
Aunque la solucion funcione, creo que sería mejor optimizarla
Sub cargarDatos() Range("A1").FormulaR1C1 = "Meses" Range("A2").FormulaR1C1 = "Importes" Range("A3").FormulaR1C1 = "Personas" Range("B1").FormulaR1C1 = "3" Range("B2").FormulaR1C1 = "4832" Range("B3").FormulaR1C1 = "5" Range("B1:B3").Style = "Comma" End Sub
Dado que cada selecciòn solo me sirve para una acción, me ahorro el ir seleccionando y actuando, y actúo directamente sobre el rango.
Por ultimo, se podria hacer una optimización más, teniendo en cuenta que voy a cargar valores, puedo utilizar la propiedad value, con lo que las instrucciones serian:
Range("A1").Value = "Meses" Range("A2").Value = "Importes" Range("A3").Value = "Personas" Range("B1").Value = "3" Range("B2").Value = "4832" Range("B3").Value = "5" Range("B1:B3").Style = "Comma"
y hasta aquí nuestra primera macro, si vais ejecutando la macro, vereis que todas las versiones funcionan, solo se trataba de ver las posibilidades del sistema, en próximas entregas nos enfrentaremos a métodos mas difíciles.
Relacionado
Descubre más desde Recursos para formacion
Suscríbete y recibe las últimas entradas en tu correo electrónico.