Conceptos de Macros - Objetos
Conceptos de Macros - Objetos
Conceptos de Macros - Objetos
Los objetos en Excel (VBA) son cosas. Una celda es un objeto, una hoja es un
objeto, un libro es un objeto y de esta manera existen muchos ms objetos en Excel.
A esto lo conocemos como el modelo de objetos de Excel.
Cada uno de los objetos de Excel tiene propiedades y mtodos. Las propiedades
son las caractersticas del objeto y los mtodos son las acciones que el objeto puede
hacer.
Propiedades de un objeto
Si una persona fuera un objeto de Excel sus propiedades seran el color de sus ojos,
el color de su cabello, su estatura, su peso. De la misma manera, un objeto de Excel
tiene propiedades por ejemplos, una celda (Range) tiene las propiedades valor
(Value) y direccin (Address) entre muchas otras. Estas propiedades describen
mejor al objeto.
Mtodos de un objeto
Siguiendo con el ejemplo de una persona, si fuera un objeto de Excel sus mtodos
seran correr, caminar, hablar, dormir. Los mtodos son las actividades o acciones
que el objeto puede realizar. Los objetos de Excel se comportan de la misma
manera que el ejemplo de una persona. Una celda (Range) tiene
los mtodos activar (Activate), calcular (Calculate), borrar (Clear) entre muchos
ms.
Range("A1").Value = "Hola"
De esta manera asignamos una cadena de texto al valor de la celda A1. Ahora bien,
si queremos borrar ese valor que acabamos de colocar en la celda podemos utilizar
el mtodo Clear de la siguiente manera:
Range("A1").Clear
Los objetos tienen muchas propiedades y mtodos y a veces es difcil pensar que
los llegaremos a memorizar todos por completo. Sin embargo, el Editor de Visual
Basic es de gran ayuda porque justamente al momento de escribir nuestro cdigo
nos proporciona la lista completa de propiedades y mtodos para un objeto.
Esto sucede al momento de introducir el punto despus del nombre del objeto.
Puedes distinguir entre las propiedades y mtodos porque tienen iconos diferentes.
En la imagen de arriba los mtodos son los que tienen el icono de color verde.
Aplication.Worbooks(Libro1.xlsx).Worksheets(Hoja1)
Worksheets.Visible (propiedad)
Sintaxis
expresin.Visible
Worksheets(1).Visible=False
Mtodos del objeto Worksheets
Worksheets.Add (mtodo)
Crea una hoja de clculo, un grfico o una hoja de macros. La nueva hoja de clculo
se convierte en la hoja activa.
Sintaxis
Ejemplo: Se crear una nueva hoja en el libro activo y que ser colocada a la
derecha de todas las dems hojas, mediante la siguiente sintaxis:
Sub Agregar()
Dim Hoja As Worksheet
Set Hoja = Worksheets.Add(After:=Sheets(Worksheets.Count))
End Sub
Esta macro crea una nueva hoja y la coloca despus de la ltima hoja, a la cual
hacemos mencin con Sheets(Worksheets.Count).
Algunos ejemplos:
-o bien-
ActiveSheet.Range("D5").Select
O bien,
Application.Goto (ActiveWorkbook.Sheets("Sheet2").Range("E6"))
O bien, puede activar la hoja y usar el mtodo 1 anterior para seleccionar la celda:
Sheets("Sheet2").Activate
ActiveSheet.Cells(6, 5).Select
O bien,
Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Range("F7")
ActiveSheet.Range("C2:D10").Select
ActiveSheet.Range("C2", "D10").Select
O bien, puede activar la hoja y usar el mtodo 4 anterior para seleccionar el rango:
Sheets("Sheet3").Activate
ActiveSheet.Range(Cells(3, 4), Cells(11, 5)).Select
Application.Goto _
Workbooks("BOOK2.XLS").Sheets("Sheet1").Range("E4", "F12")
O bien, puede activar la hoja y usar el mtodo 4 anterior para seleccionar el rango:
Workbooks("BOOK2.XLS").Sheets("Sheet1").Activate
ActiveSheet.Range(Cells(4, 5), Cells(12, 6)).Select
Application.Goto "Test"
O bien, puede activar la hoja y usar el mtodo 7 anterior para seleccionar el rango
con nombre:
Sheets("Sheet1").Activate
Range("Test").Select
O bien, puede activar la hoja y usar el mtodo 7 anterior para seleccionar el rango
con nombre:
Workbooks("BOOK2.XLS").Sheets("Sheet2").Activate
Range("Test").Select
Para seleccionar una celda que se encuentra dos filas ms arriba y tres columnas
a la derecha de la celda activa, puede utilizar el ejemplo siguiente:
ActiveCell.Offset(-2, 3).Select
Nota: se producir un error si intenta seleccionar una celda que est "fuera de la
hoja de clculo". El primer ejemplo anterior devolver un error si la celda activa se
encuentra entre en las columnas A y D, ya que si se mueve cuatro columnas a la
izquierda, la celda activa se desplazara a una direccin de celda no vlida.
ActiveSheet.Range("C7").Offset(5, 4).Select
Si el rango con nombre est en otra hoja (que no sea la activa), active primero esa
hoja y, a continuacin, seleccione el rango con el ejemplo siguiente:
Sheets("Sheet3").Activate
ActiveSheet.Range("Test").Offset(4, 3).Select
Tenga en cuenta que ambos rangos deben estar en la misma hoja para que este
ejemplo funcione. Observe tambin que el mtodo Union no funciona entre
diferentes hojas. Por ejemplo, esta lnea funciona correctamente
Set y = Application.Union(Range("Sheet1!A1:B2"), Range("Sheet1!C3:D4"))
Tenga en cuenta que ambos rangos deben estar en la misma hoja para que este
ejemplo funcione.
Los ejemplos 17 a 21 de este artculo hacen referencia al siguiente conjunto de
datos de ejemplo. En cada ejemplo se especifica el rango de celdas de los datos
del ejemplo que se seleccionaran.
A1: Nombre B1: Ventas C1: Cantidad
A2: a B2: $10 C2: 5
A3: b B3: C3: 10
A4: c B4: $10 C4: 5
A5: B5: C5:
R6: Total B6: $20 C6: 20
O bien,
O bien,
Cuando este cdigo se utilice con la tabla de ejemplo, se seleccionarn las celdas
A1 a A6.
Este cdigo seleccionar las celdas entre A1 y C4. Otros ejemplos para seleccionar
el mismo rango de celdas son los siguientes:
ActiveSheet.Range("a1", _
ActiveSheet.Range("a1").End(xlDown).End(xlToRight)).Select
O bien,
ActiveSheet.Range("a1:" & _
ActiveSheet.Range("a1").End(xlDown).End(xlToRight).Address).Select
En algunos casos, es posible que desee seleccionar las celdas entre A1 y C6. En
este ejemplo, el mtodo CurrentRegion no funcionar porque hay una lnea en
blanco en la fila 5. Los ejemplos siguientes seleccionarn todas las celdas:
lastCol = ActiveSheet.Range("a1").End(xlToRight).Column
lastRow = ActiveSheet.Cells(65536, lastCol).End(xlUp).Row
ActiveSheet.Range("a1", ActiveSheet.Cells(lastRow, lastCol)).Select
O bien,
lastCol = ActiveSheet.Range("a1").End(xlToRight).Column
lastRow = ActiveSheet.Cells(65536, lastCol).End(xlUp).Row
ActiveSheet.Range("a1:" & _
ActiveSheet.Cells(lastRow, lastCol).Address).Select
StartRange = "A1"
EndRange = "C1"
Set a = Range(StartRange, Range(StartRange).End(xlDown))
Set b = Range(EndRange, Range(EndRange).End(xlDown))
Union(a,b).Select
Cuando este cdigo se utilice con la tabla de ejemplo, se seleccionarn las celdas
A1:A3 y C1:C6.
puede utilizar:
Range("D5").Select
Generalmente tambin se puede omitir la propiedad ActiveWorkbook. A
menos que se nombre un libro concreto, el libro activo se considera implcito.
Cuando use el mtodo Application.Goto, si desea utilizar dos
mtodos Cells dentro del mtodo Range cuando el rango especificado est
en otra hoja (no en la activa), debe incluir el objeto Sheets cada vez. Por
ejemplo:
Application.Goto Sheets("Sheet1").Range( _
Sheets("Sheet1").Range(Sheets("Sheet1").Cells(2, 3), _
Sheets("Sheet1").Cells(4, 5)))
Para cualquier elemento entre comillas (por ejemplo, el rango con nombre
"Prueba"), tambin puede utilizar una variable cuyo valor sea una cadena de
texto. Por ejemplo, en lugar de escribir:
ActiveWorkbook.Sheets("Sheet1").Activate
Puede utilizar
ActiveWorkbook.Sheets(myVar).Activate
Variables Locales
Por ejemplo:
Sub procedimiento()
Sentencias ....
End Sub
Variables Pblicas
Si se quiere que una variable est disponible para todos los procedimientos de todos
los mdulos VBA de un proyecto, se la debe definir a travs de la sentencia PUBLIC
(y no DIM).
Por ejemplo:
Las variables pblicas se deben definir antes del primer procedimiento de un mdulo
de VBA; no deben definirse en los mdulos correspondientes a las hojas del Libro
de Trabajo ni en los mdulos correspondientes a UserForms.
Variables Estticas
Por ejemplo:
Sub Procedimiento()
[ Sentencias ...]
End Sub
Option Explicit
La sentencia Option Explicit permite que el programa se detenga cada vez que VBA
encuentre una variable que no ha sido definida. Esto es de gran utilidad cuando se
usan muchas variables ya que nos permite identificar rpidamente errores o uso no
deseado en el nombre de la variable. Esta sentencia se debe escribir al comienzo
del mdulo.
Constantes
Las constantes tambin pueden declararse como Pblicas para que estn
disponibles en todos los procedimientos de todos los mdulos, esto se hace a travs
de la sentencia PUBLIC
Public Const TasaActiva As Integer
Mdulos
[sentencias]
End Sub
Procedimiento Pblico
[Sentencias]
End Sub
Procedimiento Esttico
[Sentencias]
End Sub
[Sentencias]
End Sub
Es equivalente a :
[Sentencias]
End Sub
Sub Procedimiento(argumento1,argumento2,.....)
[Sentencias]
Exit Sub
[Sentencias]
End Sub
[Sentencias]
Proced2
[Sentencias]
End Sub
Sub Procedimiento1(argumento1,argumento2,.....)
[Sentencias]
indice= ........
Call Proced2(indice)
[Sentencias]
End Sub