You are on page 1of 18

MACROS VBA EXCEL

Objetos, propiedades y mtodos

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.

Utilizando las propiedades y los mtodos

Para acceder a las propiedades y mtodos de un objeto lo hacemos a travs de


una nomenclatura especial. Justo despus del nombre del objeto colocamos un
punto seguido del nombre de la propiedad o del mtodo. Observa este ejemplo
donde hacemos uso de la propiedad Value para la celda A1:

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

Ver todas las propiedades y mtodos

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.

Recuerda, los objetos son cosas en Excel y sus caractersticas las


llamamos propiedades las cuales nos ayudan a definir al objeto. Los mtodos son
las acciones que cada objeto puede realizar.
VBA Objeto Worksheets

La coleccin Worksheets es el conjunto de todos los objetos Worksheet de un libro


especificado o activo. Las colecciones son objetos por s mismos.

El objeto WorkSheet representa una hoja de clculo. El objeto Worksheet tambin


es un miembro de la coleccin Sheets. La coleccin Sheets contiene todas las hojas
del libro (hojas de grficos y hojas de clculo).

En la jerarqua de objetos de Excel los objetos pueden actuar como recipientes de


otros objetos. Un objeto Workbook puede contener otros objetos como Worksheet
y Chart. Un objeto Worksheet puede contener objetos como Range, Pivot Table
entre otros. As, se puede hacer referencia a la Hoja1 del Libro1 del siguiente modo:

Aplication.Worbooks(Libro1.xlsx).Worksheets(Hoja1)

Se usa Worksheets(ndice), donde ndice es el nombre o nmero ndice de la hoja


de clculo, para obtener un solo objeto Worksheet. El nmero de ndice de la hoja
de clculo representa la posicin de la hoja en la barra de fichas del libro.
Worksheets(1) es la primera hoja (en el extremo izquierdo) del libro y
Worksheets(Worksheets.Count) es la ltima.

Propiedades del objeto Worksheets

Las principales propiedades y su descripcin se encuentran en la Ayuda Excel y


son: Application, Count, HpageBreaks, Item, Parent, Visible y VpageBreaks

Detalle de uso de:

Worksheets.Visible (propiedad)

Devuelve o establece un valor de tipo Variant que determina si el objeto es visible.

Sintaxis

expresin.Visible

expresin: Variable que representa un objeto Worksheet.

Ejemplo: Con el siguiente cdigo se oculta la hoja de clculo 1 de un libro activo:

Worksheets(1).Visible=False
Mtodos del objeto Worksheets

Las principales mtodos y su descripcin se encuentran en la Ayuda Excel y


son: Add, Copy, Delete, FillAcrossSheets, Move, PrintOut, PrintPreview y Select.

Detalle de uso de:

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

expresin.Add(Before, After, Count, Type)

expresin : Variable que representa un objeto Worksheets.

Los parmetros son opcionales (Before/After especifica las hoja antes/despus de


la cual se agregar la hoja, Count por default es 1 y Type por default es una hoja de
clculo)

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:

1. Cmo seleccionar una celda en la hoja activa


Para seleccionar la celda D5 en la hoja activa, puede utilizar cualquiera de los
ejemplos siguientes:
ActiveSheet.Cells(5, 4).Select

-o bien-

ActiveSheet.Range("D5").Select

2. Cmo seleccionar una celda en otra hoja del mismo libro


Para seleccionar la celda E6 en otra hoja del mismo libro, puede utilizar cualquiera
de los ejemplos siguientes:
Application.Goto ActiveWorkbook.Sheets("Sheet2").Cells(6, 5)

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

3. Cmo seleccionar una celda en una hoja de un libro


diferente
Para seleccionar la celda F7 en una hoja de un libro diferente, puede utilizar
cualquiera de los ejemplos siguientes:
Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Cells(7, 6)

O bien,

Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Range("F7")

O bien, puede activar la hoja de clculo y, a continuacin, usar el mtodo 1


anterior para seleccionar la celda:
Workbooks("BOOK2.XLS").Sheets("Sheet1").Activate
ActiveSheet.Cells(7, 6).Select
4. Cmo seleccionar un rango de celdas en la hoja activa
Para seleccionar el rango C2:D10 en la hoja activa, puede utilizar cualquiera de
los ejemplos siguientes:
ActiveSheet.Range(Cells(2, 3), Cells(10, 4)).Select

ActiveSheet.Range("C2:D10").Select

ActiveSheet.Range("C2", "D10").Select

5. Cmo seleccionar un rango de celdas en otra hoja del


mismo libro
Para seleccionar el rango D3:E11 en otra hoja del mismo libro, puede utilizar
cualquiera de los ejemplos siguientes:
Application.Goto ActiveWorkbook.Sheets("Sheet3").Range("D3:E11")

Application.Goto ActiveWorkbook.Sheets("Sheet3").Range("D3", "E11")

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

6. Cmo seleccionar un rango de celdas en una hoja de un


libro diferente
Para seleccionar el rango E4:F12 en una hoja de otro libro, puede utilizar
cualquiera de los ejemplos siguientes:
Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Range("E4:F12")

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

7. Cmo seleccionar un rango con nombre en la hoja activa


Para seleccionar el rango con nombre "Test" de la hoja activa, puede utilizar
cualquiera de los ejemplos siguientes:
Range("Test").Select

Application.Goto "Test"

8. Cmo seleccionar un rango con nombre en otra hoja del


mismo libro
Para seleccionar el rango con nombre "Test" en otra hoja del mismo libro, puede
utilizar el ejemplo siguiente:
Application.Goto Sheets("Sheet1").Range("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

9. Cmo seleccionar un rango con nombre en una hoja de un


libro diferente
Para seleccionar el rango con nombre "Test" en una hoja de otro libro, puede
utilizar el ejemplo siguiente:
Application.Goto _
Workbooks("BOOK2.XLS").Sheets("Sheet2").Range("Test")

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

10. Cmo seleccionar una celda relativa a la celda activa


Para seleccionar una celda que se encuentra cinco filas ms abajo y cuatro
columnas a la izquierda de la celda activa, puede utilizar el ejemplo siguiente:
ActiveCell.Offset(5, -4).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.

11. Cmo seleccionar una celda relativa a otra celda (que no


sea la celda activa)
Para seleccionar una celda que se encuentra cinco filas ms abajo y cuatro
columnas a la derecha de la celda C7, puede utilizar cualquiera de los ejemplos
siguientes:
ActiveSheet.Cells(7, 3).Offset(5, 4).Select

ActiveSheet.Range("C7").Offset(5, 4).Select

12. Cmo seleccionar un rango de celdas separadas por un


rango especfico
Para seleccionar un rango de celdas que sea del mismo tamao que el rango con
nombre "Test" pero que estn desplazadas cuatro filas ms abajo y tres columnas
a la derecha, puede utilizar el ejemplo siguiente:
ActiveSheet.Range("Test").Offset(4, 3).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

13. Cmo seleccionar un rango especificado y cambiar el


tamao de la seleccin
Para seleccionar el rango con nombre "Database" y, a continuacin, extender la
seleccin cinco filas, puede utilizar el ejemplo siguiente:
Range("Database").Select
Selection.Resize(Selection.Rows.Count + 5, _
Selection.Columns.Count).Select
14. Cmo seleccionar un rango especificado, desplazarlo y
cambiar su tamao
Para seleccionar un rango cuatro filas ms abajo y tres columnas a la derecha del
rango con nombre "Database" e incluir dos filas y una columna ms que el rango
con nombre, puede utilizar el ejemplo siguiente:
Range("Database").Select
Selection.Offset(4, 3).Resize(Selection.Rows.Count + 2, _
Selection.Columns.Count + 1).Select

15. Cmo seleccionar la unin de dos o ms rangos


especificados
Para seleccionar la unin (es decir, el rea combinada) de los dos rangos con
nombre "Test" y "Sample", puede utilizar el ejemplo siguiente:
Application.Union(Range("Test"), Range("Sample")).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"))

Pero esta lnea


Set y = Application.Union(Range("Sheet1!A1:B2"), Range("Sheet2!C3:D4"))

Devuelve el mensaje de error:


Error en la clase de aplicacin del mtodo Union

16. Cmo seleccionar la interseccin de dos o ms rangos


especificados
Para seleccionar la interseccin de los dos rangos con nombre "Test" y "Sample",
puede utilizar el ejemplo siguiente:
Application.Intersect(Range("Test"), Range("Sample")).Select

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

17. Cmo seleccionar la ltima celda de una columna de datos


contiguos
Para seleccionar la ltima celda de una columna contigua, utilice el ejemplo
siguiente:
ActiveSheet.Range("a1").End(xlDown).Select

Cuando este cdigo se utilice con la tabla de ejemplo, se seleccionar la celda


A4.

18. Cmo seleccionar la celda en blanco en la parte inferior de


una columna de datos contiguos
Para seleccionar la celda situada debajo de un rango de celdas contiguas, utilice
el ejemplo siguiente:
ActiveSheet.Range("a1").End(xlDown).Offset(1,0).Select

Cuando este cdigo se utilice con la tabla de ejemplo, se seleccionar la celda A5

19. Cmo seleccionar un rango completo de celdas contiguas


en una columna
Para seleccionar un rango de celdas contiguas en una columna, utilice uno de los
ejemplos siguientes:
ActiveSheet.Range("a1", ActiveSheet.Range("a1").End(xlDown)).Select

O bien,

ActiveSheet.Range("a1:" & ActiveSheet.Range("a1"). _


End(xlDown).Address).Select
Cuando este cdigo se utilice con la tabla de ejemplo, se seleccionarn las celdas
A1 a A4.

20. Cmo seleccionar un rango completo de celdas que no


sean contiguas en una columna
Para seleccionar un rango de celdas que no sean contiguas en una columna, utilice
uno de los ejemplos siguientes:
ActiveSheet.Range("a1",ActiveSheet.Range("a65536").End(xlUp)).Select

O bien,

ActiveSheet.Range("a1:" & ActiveSheet.Range("a65536"). _


End(xlUp).Address).Select

Cuando este cdigo se utilice con la tabla de ejemplo, se seleccionarn las celdas
A1 a A6.

21. Cmo seleccionar un rango rectangular de celdas


Para seleccionar un rango de celdas rectangular alrededor de una celda, utilice el
mtodo CurrentRegion. El rango seleccionado mediante el
mtodo CurrentRegion es un rea limitada por cualquier combinacin de filas en
blanco y columnas vacas. A continuacin se muestra un ejemplo de cmo utilizar
el mtodo CurrentRegion:
ActiveSheet.Range("a1").CurrentRegion.Select

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

22. Cmo seleccionar varias columnas no contiguas de


longitud variable
Para seleccionar varias columnas no contiguas de longitud variable, utilice la tabla
de ejemplo siguiente y el ejemplo de macro:
A1: 1 B1: 1 C1: 1 D1: 1
A2: 2 B2: 2 C2: 2 D2: 2
A3: 3 B3: 3 C3: 3 D3: 3
A4: B4: 4 C4: 4 D4: 4
A5: B5: 5 C5: 5 D5:
R6: B6: C6: 6 D6:

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.

NOTAS SOBRE LOS EJEMPLOS


Normalmente se puede omitir la propiedad ActiveSheet, ya que se considera
implcita si una hoja concreta no tiene nombre. Por ejemplo, en lugar de
escribir
ActiveSheet.Range("D5").Select

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

Donde el valor de myVar es "Sheet1".


VARIABLES

Variables Locales

Las variables Locales son aquellas que se declaran dentro de un mdulo o


procedimiento y slo pueden ser utilizadas en ste. stas dejan de existir una vez
que el procedimiento termina su ejecucin. Se pueden usar en otros mdulos o
procedimientos pero sus caractersticas nada tienen que hacer con la declaracin
dada en otro mdulo o procedimiento. Para declararlas se debe usar la
sentencia DIM.

Por ejemplo:

Sub procedimiento()

Dim nDat As Integer

Dim Cadena As String

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:

Public NTotal As Integer

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

Si se desea que una variable definida en un procedimiento conserve su valor una


vez terminado ste, e ingresado a otro procedimiento, sta se debe definir a travs
de la sentencia STATIC.

Por ejemplo:
Sub Procedimiento()

Static nDat As Integer

[ 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

A diferencia de las variables, cuyo valor cambia al ejecutarse un procedimiento, hay


valores que no cambian durante la ejecucin de un procedimiento, estos valores se
denominan Constantes. Las constantes se definen a travs de la sentencia Const.
Por ejemplo;
Const Nivel As Integer

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

Esta sentencia debe incluirse en un mdulo antes del primer procedimiento.


Para definir constantes Locales, basta definirlas a travs de la
sentencia Const dentro de un procedimiento o funcin.

Mdulos

Un mdulo es un ambiente, es un entorno de trabajo compuesto por sentencias de


declaracin de variables y por uno o ms procedimientos.
Procedimientos

Un procedimiento est formado por un conjunto de sentencias que permite resolver


un problema. Un mdulo est formado por uno o ms procedimientos. Un
procedimiento se declara a travs de la sentencia Sub y puede
ser Privado,Pblico o Esttico.
Procedimiento Privado

Un procedimiento privado slo es accesible por otros procedimientos dentro del


mismo mdulo. Su sintaxis es:

Private Sub Procedimiento (Argumento1,Argumento2,.....)

[sentencias]

End Sub

Procedimiento Pblico

Un procedimiento pblico es accesible por todos los procedimientos de todos


los mdulos VBA de un proyecto, su sintaxis es:

Public Sub Procedimiento(Argumento1,Argumento2,.....)

[Sentencias]

End Sub

Procedimiento Esttico

Para que las variables de un procedimiento se conserven una vez terminada


su ejecucin, ste debe definirse como Esttico:

Static Sub Procedimiento(Argumento1,Argumento2,.....)

[Sentencias]

End Sub

La sentencia Sub y End Sub son obligatorias al definir cualquier


procedimiento. Los argumentos y las sentencias Private, Public y Static son
opcionales. Es importante mencionar que al definir un procedimiento sin
ninguna de las sentencias anteriores, por defecto ste se define como
Pblico, es decir:
Sub Procedimiento(argumento1,argumento2,.....)

[Sentencias]

End Sub

Es equivalente a :

Public Sub Procedimiento(argumento1,argumento2,.....)

[Sentencias]

End Sub

Existe una instruccin que permite terminar la ejecucin de un


procedimiento, sta es la instruccin Exit Sub. Por ejemplo, si tenemos el
siguiente procedimiento:

Sub Procedimiento(argumento1,argumento2,.....)

[Sentencias]

Exit Sub

[Sentencias]

End Sub

Llamar a un procedimiento desde otro

Para llamar a un procedimiento desde otro procedimiento, se puede utilizar


la sentencia Call o simplemente el nombre del procedimiento. Por ejemplo:

Sub Proced1 (Argumento1,Argumento2,.....)

[Sentencias]

Proced2

[Sentencias]

End Sub

En este caso, el procedimiento Proced1 llama al procedimiento Proced2.


La sentencia Call se utiliza cuando se requiere llamar a un procedimiento al
cual hay que pasarle un argumento, por ejemplo:

Sub Procedimiento1(argumento1,argumento2,.....)

[Sentencias]

indice= ........

Call Proced2(indice)

[Sentencias]

End Sub

En este caso, el procedimiento Procedimiento1 llama al


procedimiento Procedimiento2 al cual se le debe pasar el argumento ndice.
Es recomendable utilizar siempre la sentencia Call para llamar a otro
procedimiento, aunque a ste no se le tengan que pasar argumentos, esto
permite identificar ms fcilmente las llamadas a otros procedimientos.

You might also like