0% encontró este documento útil (0 votos)
144 vistas14 páginas

Objetos y Métodos en VBA Excel

El documento describe los objetos más importantes en VBA de Excel, incluyendo la aplicación, libros, hojas, celdas y rangos. Estos objetos representan los elementos que componen un libro de trabajo y permiten manipular y modificar sus propiedades y contenido. Las colecciones agrupan objetos relacionados como libros, hojas y celdas.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
144 vistas14 páginas

Objetos y Métodos en VBA Excel

El documento describe los objetos más importantes en VBA de Excel, incluyendo la aplicación, libros, hojas, celdas y rangos. Estos objetos representan los elementos que componen un libro de trabajo y permiten manipular y modificar sus propiedades y contenido. Las colecciones agrupan objetos relacionados como libros, hojas y celdas.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

Objetos VBA Excel

En VBA trabajamos con entidades llamadas objetos que representan cada uno de los
elementos de los que está compuesto un libro de trabajo, como puede ser el libro, la
hoja, la celda o el rango.
 01-Oct-2016
Contenidos
En VBA trabajamos con entidades llamadas objetos que representan cada uno de los
elementos de los que está compuesto un libro de trabajo, como puede ser el libro, la
hoja, la celda o el rango.
Sobre estos objetos se ejecutan métodos (instrucciones) para realizar operaciones con
ellos como puede ser insertar, eliminar, seleccionar, copiar, etc. y se modifican sus
propiedades para cambiar sus características como pueden ser su contenido o su
formato.
Objetos más importantes de trabajo en VBA Excel:
Elemento Colecciones Objeto Objeto Activo

Aplicación   Application  

Libro WorkBooks WorkBook ActiveWorkBook

Hoja WorkSheets o Sheets Sheet o WorkSheet ActiveWorkSheet

Celda Cells   ActiveCell

Rango   Range  

Selección   Selection  

Los objetos de niveles superiores contienen o están formados por colecciones de


elementos de los niveles inferiores, es decir, un objeto de tipo WorkBook que
representa el libro de hojas de cálculo, está formado por una colección de
objetos WorkSheets o Sheets  que son las hojas del libro y a su vez cada
objeto WorkSheet de esta colección, está formado por una colección de objetos Cells o
Range que representan las celdas o rangos de la hoja.
la hoja.
Siempre que hagamos referencia a un objeto sin especificar el objeto de su nivel
superior, se asume que se está trabajando con el grupo de objetos activos
(ActiveWorkBook, ActiveWorkSheet, ActiveCell).
Por ejemplo si escribimos una instrucción que modifica el valor de una celda sin
especificar la hoja que lo contiene, Excel tomará como elementos del nivel superior
(ActiveWorkSheet y ActiveWorkBook)  la hoja y el libro activo.

Programa Excel
Application
El objeto Application, es el objeto de mayor nivel dentro de la jerarquía de objetos VBA de
Excel y representa la instancia de Excel actual.
Este objeto contiene los valores y opciones de toda la aplicación y todos los métodos
necesarios para obtener objetos de nivel superior como Libros, Hojas y Celdas.
Por defecto no se suele especificar al hacer referencia a los objetos de trabajo, pero si lo
utilizamos para manipular las opciones y comandos de Excel.
 Ejecutar la orden Abrir de la ficha Archivo (método FindFile)
[Link]
 Recalcular todas las fórmulas de los libros abiertos (método Calculate)
[Link]
 Activar/Desactivar las actualizaciones de pantalla (propiedad ScreenUpdating)
[Link] = true | false
Activar/Desactivar los mensajes de alerta que se puedan producir durante la
ejecución de la macro (propiedad DisplayAlerts)
 [Link] = true | false
 Cerrar el programa Excel (método Quit)
[Link]
 Establecer una pausa en la ejecución de una macro (paraliza todos los procesos excepto
la impresión y actualizaciones en segundo plano) (método Wait)
‘Establece una pausa desde ahora hasta las 19:30
[Link] "[Link]"
‘Establece una pausa durante 5 segundos aproximadamente
[Link] Hour(Now()) & “:” & Minute(Now()) & “:” & Second(Now()) + 5

Colección Libros
WorkBooks
La colección más importante de objetos que nos ofrece Excel es WorkBooks que representa
todos los libros de trabajo actualmente abiertos en la sesión actual de trabajo.
Por medio de esta colección podemos crear o abrir libros de trabajo, o hacer referencia a
algún elemento de cualquier libro abierto.

 Crear un nuevo libro de trabajo: (método Add)


[Link]
Crea un nuevo libro y lo añade a la colección de libros abiertos.
 Conocer el total de libros abiertos actualmente. (propiedad Count)
[Link]
Si tenemos 3 libros abiertos actualmente esta propiedad contendrá el valor 3.
 Abrir un libro existente: (método Open)
[Link] Filename:="Z:\DocumentosTrabajo\[Link]"
Esta instrucción abrirá el archivo ubicado en “Z:\DocumentosTrabajo\[Link]” y
lo agregará a la colección de objetos Workbooks. De esta manera podemos abrir tantos
archivos como sean necesarios y para cada uno de ellos se creará un objeto Workbook el
cual será almacenado dentro de Workbooks.
Filename -> indica donde y qué nombre tiene el libro que deseamos abrir.
Una vez abierto un libro, podremos hacer referencia a él por medio de su nombre si lo
conocemos o del índice que ocupa dentro de la colección de libros abiertos.
 Activar un libro para trabajar con su contenido: (método Activate)
Para el ejemplo anterior si deseamos activar el libro para trabajar sobre él escribiríamos la
siguiente orden:
   WorkBooks("[Link]").Activate
   O
   WorkBooks(2).Activate “en el caso de qué el índice de la colección fuera 2”
 Cerrar un libro abierto: (método Close)
   WorkBooks("[Link]").Close
   O
   WorkBooks(2).Close “en el caso de qué el índice de la colección fuera 2”

ActiveWorkBook (Libro Actual)


Una vez que se ha activado un libro de la colección de libros abiertos, este se convierte en
el libro activo y para hacer referencia se  utiliza el objeto ActiveWorkbook.

Por medio de este objeto podremos realizar cambios que afecten al libro de trabajo actual,
como guardar, guardar como o cerrar.
 Guardar el libro actual: (método Save)
[Link]
 Guardar el libro actual como: (método SaveAs)
[Link] Filename:="W:\Documentos\[Link]",
FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
Filename -> indica donde y con qué nombre tenemos que guardar el libro. La extensión del
archivo no es necesario indicarla, ya que Excel se la asigna en función del Formato de
Fichero indicado en FileFormat.
FileFormat -> Indica el formato con el que se guardará. Algunos de los valores admitidos
son:
 xlOpenXMLWorkbook (Libro de Open XML xlsx versiones 2007/2013)
 xlOpenXMLWorkbookMacroEnabled (Libro habilitado para macros xlsm)
 xlWorkbookDefault (equivale a xlOpenXMLWorkbook)
 xlExcel8 (Libro de Excel 97/2003)
 xlText (Archivo de texto txt)
CreateBackup -> Indica si se ha de realizar una copia del libro original en el caso de que
ya exista.
 Cerrar el libro actual: (método Close)
[Link]

Colección Hojas
WorkSheets
Para hacer referencia a una hoja de cálculo del libro abierto, se utiliza la
colección WorkSheets que representa las hojas de cálculo actuales del libro. Opcionalmente
también podemos trabajar con las hojas del libro con la colección Sheets.

WorkSheets(IndiceHoja) -> Hacer referencia a una hoja por su índice, siendo la 1ª hoja del
libro el índice 1, la segunda hoja el índice 2 y así sucesivamente.
WorkSheets(“NombreHoja”) -> Hacer referencia a una hoja por su nombre.
 Teniendo un libro de 3 hojas, donde tenemos una hoja de nombre ‘Listado’. Crear un
duplicado de la hoja ‘Listado’ moviendo la copia a continuación de la hoja 2: (método
Copy)
WorkSheets("listado").Copy After:=Sheets(2)
 Teniendo un libro de X hojas, donde tenemos una hoja de nombre ‘Listado’. Crear un
duplicado de la hoja ‘Listado’ moviendo la copia a continuación de la última hoja:
WorkSheets("listado").Copy After:=
[Link]([Link])
 Eliminar la hoja de nombre ‘Listado’ del libro actual:  (método Delete)
[Link] = False
WorkSheets("listado").Delete
[Link] = True
Para evitar que se muestren mensajes de aviso pidiendo confirmación a la hora de realizar la eliminación de la
hoja, desactivamos la propiedad DisplayAlerts del objeto Application, para volverla a activar después de la
eliminación.
 Activar una hoja de cálculo de nombre ‘Listado’ del libro actual: (método Activate)
WorkSheets("listado").Activate

Colección Celdas
Cells
Para hacer referencia a una celda de la hoja, se utiliza la colección Cells que contiene todas
las celdas de la hoja de cálculo, indicando el número de fila y columna en la que se localiza.
Si omitimos estos valores, entonces estaremos haciendo referencia a todas las celdas de la
hoja.

 Hacer referencia a todas las celdas de la hoja.


[Link]  (Seleccionar todas las celdas de la hoja activa)
 Hacer referencia  a una celda concreta de la hoja.
Cells(NFila, NColumna)
 Establecer el valor de la celda C2 de la hoja activa.
Cells(2,3).Value=”Curso Macros Excel”

ActiveCell (Celda Activa)


Para hacer referencia a la celda activa se utiliza el objeto ActiveCell.
El término ActiveCell sirve para referirse a la celda actualmente seleccionada en una hoja
de cálculo. Siempre que se haga click en cualquier celda, esta automáticamente se
convertirá en la ActiveCell. Una vez que la celda es seleccionada se pueden introducir
funciones o valores a la celda o modificar el formato de los datos contenidos en ella.
 Seleccionar la hoja ‘Listados’ del libro, marcar la celda B5 para convertirla en celda
activa, introducir la fórmula A3*10% y a continuación establecer su formato a negrita y
cursiva. Adicionalmente desactivamos la actualización de pantalla mientras realizamos
operaciones sobre la hoja.
[Link] = False [Link] = False
Sheets("Listados").Activate Sheets("Listados").Activate
Cells(5,2).Select Range("B5").Select
[Link] = "=A3*10%" With ActiveCell
[Link] = True .Formula = "=A3*10%"
[Link] = True .[Link] = True
[Link] = True .[Link] = True
End With
[Link] = True

Cuando ejecutamos métodos o realizamos cambios en las propiedades de un objeto de forma continua, podremos
omitir el nombre del objeto en cada línea encerrando las instrucciones entre el
bloque With NombreObjeto y End With de tal manera que nos ahorramos ir escribiendo en cada nueva línea el
nombre del objeto.
Si deseamos desactivar las molestas actualizaciones de pantalla que se producen a medida que la macro va
ejecutando las instrucciones, estableceremos al valor false la propiedad ScreenUpdating del objeto Application.

Trabajar con las colecciones


Ejemplos
Cuando tenemos que realizar algún proceso con todos y cada uno de los elementos de una
colección (WorkBooks, WorkSheets, Cells), necesitamos ir recorriendo la colección
elemento tras elemento. Para realizar estas iteraciones VBA dispone del bucle For
Each pensado para ir procesando cada uno de los elementos de una colección.
Veamos algunos ejemplos.
 Deseamos cerrar todos los libros abiertos, excepto el que tiene de nombre ‘Resumen’,
guardando los cambios realizados en cada libro.

For Each Libro In Workbooks


If ([Link] <> “Resumen”) Then
[Link]
[Link]
End If
Next

 Establecer el ancho y alto de celda a 20 de todas las celdas de todas las


hojas del libro actual.
[Link] = False
For Each Hoja In WorkSheets
[Link]
[Link]
[Link] = 20
[Link] = 20
Range(“A1”).Select
Next
[Link] = True
 Comprobar si existe una hoja de cálculo en el libro actual.
' Declaramos algunas variables de trabajo
Dim Nombre as String
Dim Encontrada as Boolean

Nombre = ”Cálculos”

For Each Hoja In WorkSheets


If([Link] = Nombre) then
Encontrada=true
Exit for
End if
Next

If(Encontrada) then
MsgBox “La hoja: “ & Nombre & “ se encuentra en el libro actual.”
Else
MsgBox “La hoja: “ & Nombre & “ NO se encuentra en el libro actual.”
End If
Mensajes personalizados con MsgBox
A la hora de estar ejecutando instrucciones o realizando operaciones con nuestra
macro, puede que nos interese informar al usuario con algún mensaje o solicitar
confirmación para realizar una instrucción.
 06-Oct-2016
Contenidos

Mensajes Personalizados
MsgBox
A la hora de estar ejecutando instrucciones o realizando operaciones con nuestra
macro, puede que nos interese informar al usuario con algún mensaje o solicitar
confirmación para realizar una instrucción. VBA nos ofrece la instrucción
(método) MsgBox para crear ventanas de diálogo personalizadas que se mostrarán en
el momento que nosotros lo decidamos.
MsgBox(“Mensaje personalizado”,TipoVentana,”Título ventana”)
 Mensaje personalizado: es el mensaje propiamente dicho. Consiste en una
cadena de texto que se mostrará dentro del cuadro de diálogo.
Estos mensajes pueden ser textos fijos, si simplemente escribimos el mensaje entre
comillas o textos dinámicos si combinamos textos fijos con otras instrucciones de VBA
como por ejemplo las propiedades de los objetos. En este segundo caso deberemos
de crear el mensaje intercalando el carácter ‘&’ entre las distintas partes que
componen el mensaje.
“El libro de Excel ha sido abierto” → Mensaje de texto fijo
“El libro de Excel: “ & [Link] & “ ha sido abierto” → Mensaje de texto
dinámico
 TipoVentana: constantes de VBA (valores predefinidos) que definen el tipo de
ventana que vamos a mostrar y los botones que debe de contener.
Para el tipo de mensaje:
 VbCritital → Muestra el icono de mensaje crítico. 
 VbExclamation → Muestra el icono de mensaje de aviso. 
 VbInformation → Muestra el icono de información. 
 VbQuestion → Muestra el icono de pregunta. 
Botones del mensaje:
 vbOkCancel → Muestra los botones de Aceptar y Cancelar
 vbOkOnly → Muestra sólo el botón de Aceptar (por defecto)
 vbYesNo → Muestra los botones de Sí y No
 vbYesNoCancel → Muestra los botones de Sí, No y Cancelar
 vbRetryCancel → Muestra los botones de Reintentar o Cancelar
Si deseamos combinar los iconos con los botones tendremos que ir escribiendo
intercalando el sigo ‘+’ entre cada uno de los valores. Por ejemplo si deseamos
mostrar un mensaje crítico con los botones de Sí y No lo indicaríamos de la siguiente
manera: vbCritical+vbYesNo.
Para comprobar que botón ha pulsado el usuario, necesitamos almacenar la respuesta
en una variable de trabajo para luego consultarla.
 Título ventana: es el texto que se mostrará en el título del cuadro de diálogo.

Ejemplos MsgBox
 Mostrar un mensaje simple de aviso
MsgBox(“La operación se realizó con éxito”)
 Mostrar un mensaje crítico
MsgBox(“La operación generó errores de cálculo.”,vbCritical)
 Mostrar mensaje de información con título de ventana
MsgBox(“La operación se realizó con éxito”,vbInformation,”Mi Nube Informática”)
 Mostrar mensaje para solicitar confirmación del usuario y título de
ventana
MsgBox(“¿Desea realizar cambios en el libro?”,vbQuestion+vbYesNo,”Mi Nube
Informática”)
 Mostrar mensaje para solicitar confirmación del usuario y realizar la
operación según la respuesta
Dim Respuesta As VbMsgBoxResult
Respuesta=MsgBox(“¿Desea cerrar el libro?”,vbQuestion+vbYesNo,”Mi Nube
Informática”)
If(Respuesta=vbYes) Then
[Link]
End If
Seleccionar Celdas y Rangos
Las Selecciones en VBA se manipulan por medio del objeto  Selection  que hace
referencia a la selección actual.
Pero este objeto no crea la selección, sino que representa una selección creada
previamente por medio de otras instrucciones.
 20-Feb-2017
Contenidos

Seleccionar Celdas y Rangos


Uno de los objetos más utilizados para crear selecciones de celdas o rangos a través de
las macros es el objeto Range  junto con el método (instrucción) Select, que
representa el rango que deseamos seleccionar.
Range(RangoASeleccionar).Select

 RangoASeleccionar: Representa el rango que deseamos seleccionar. Se


especifica encerrado entre dobles comillas y puede ser una referencia a una
celda, a un grupo de celdas o a un nombre de rango. En todos estos casos las
referencias se toman como absolutas.
Al ejecutar esta instrucción Excel seleccionará todas las celdas que se indiquen en el
argumento RangoASeleccionar y ya podremos acceder o trabajar con ellas por medio
del objeto Selection que se comentaba al principio.
Range("A1").Select -> Selecciona la primera celda de la hoja.
Range("A1:B20").Select -> Selecciona el rango A1:A20.
Range("DATOS_PRODUCCION").Select -> Selecciona las celdas que forman el rango
DATOS_PRODUCCION.
Si deseamos crear selecciones de rangos relativos a partir de una selección,  rango o
celda actual, tendremos que utilizar el método Offset que nos permite indicar un
desplazamiento de filas y columnas.
Expresió[Link](NFilas, NColumnas)

Expresión Variable que representa un objeto Range.

 NFilas: número que representa la cantidad de filas a desplazarse. Si el


desplazamiento es hacia arriba el número se indicará en negativo.
 NColumnas: número que representa la cantidad de columnas a desplazarse. Si
el desplazamiento es hacia la izquierda el número se indicará en negativo.
Los desplazamientos hacia abajo o a la derecha se indican con números en positivo y los
desplazamientos hacia arriba o a la izquierda con números negativos.
 Crear una nueva selección con un desplazamiento
de NFilas  y NColumnas  a partir de la selección actual.
[Link](NFilas, NColumnas).Select
 Seleccionar la celda situada 2 filas hacia abajo y 5 columnas a la derecha de
la selección actual y cambiarle el tipo de letra a ‘Times New Roman’,
tamaño 14 y negrita.
[Link](2,5).Select
With [Link]
.name="Times New Roman"
.Size=14
.Bold=True
End With
Crear una nueva selección con un desplazamiento de NFilas  y NColumnas  a partir de
un rango.
Range(RangoASeleccionar).Offset(NFilas, NColumnas).Select

 Seleccionar la celda situada 3 filas hacia arriba y 2 columnas a la derecha a


partir de la celda F10 de la hoja actual.
Range("F10").Offset(-3,2).Select
 Seleccionar la celda situada 3 filas hacia arriba y 2 columnas a la derecha a
partir de la celda F10 de la hoja de nombre ‘Listados’ y escribir una
fórmula que sume los números escritos en el rango B3:B30 de la hoja
‘Datos’.
WorkSheets("Listados").Activate
Range("F10").Offset(-3,2).Select
[Link]="=SUM(Datos!B3:B30)"
Crear una nueva selección con un desplazamiento de NFilas  y NColumnas  a partir de
la celda Activa.
[Link](NFilas, NColumnas).Select

 Seleccionar la celda situada 1 fila hacia abajo y 2 columnas a la izquierda a


partir de la celda activa.
[Link](1,-2).Select
Una vez seleccionadas, tendremos que hacer uso del objeto Selection para hacer
referencia a las celdas que se han seleccionado y sobre ellas ejecutar cualquier orden
que se nos ocurra: cambiar formatos, copiar datos, eliminar, introducir datos, escribir
fórmulas, utilizarlo como origen para nuevas instrucciones, etc…

Celdas y Selecciones
Obtener la referencia de una celda
Cuando deseemos obtener la referencia de la celda sobre la que se está trabajando en
formato absoluto, podremos consultar la propiedad Address de los objetos ActiveCell,
Selection o Cells.
Expresió[Link]
Expresión Variable que representa un objeto Range.

[Link] -> Obtener la referencia absoluta de la celda activa


[Link] -> Obtener la referencia absoluta de la selección creada
previamente
Cells(5,5).Address -> Obtener la referencia absoluta de la celda 5,5 ($E$5)

Obtener el valor de una celda


Cuando necesitemos obtener o establecer el valor de alguna celda de la hoja,
utilizaremos la propiedad Value del objeto ActiveCell o Selection. También podemos
obtener el valor de una celda utilizando la colección Cells de la hoja de cálculo.
Expresió[Link]

Expresión Variable que representa un objeto Range (Range,


ActiveCell, Selection, Cells).

En el caso de utilizar los objetos ActiveCell o Selection, primero tendremos que crear


una selección con el objeto Range.
Si deseamos utilizar posteriormente ese dato para algún cálculo será necesario
almacenarlo en una variable de trabajo.
 Obtener el contenido de la celda activa y mostrárselo al usuario
MsgBox([Link])
 Obtener el contenido de una celda de la hoja y almacenarlo en una
variable.
Dim Datos as Variant
Datos=Cells(10,5).Value

Range("E10").Select
Datos=[Link]
Podemos obtener directamente el contenido de la celda utilizando la
colección Cells o creando primero una selección para obtener después el contenido de
la selección creada.
 Establecer el valor de una celda de la hoja
' Establecemos como valor de la celda E5 de la hoja activa el número 10
' y mostramos su valor (contenido de la celda)
'-----------------------------------------

Cells(5, 5).Value = 10
MsgBox(Cells(5,5).Value)
 Establecer el valor de una celda con el contenido de otra celda
' Seleccionamos la celda E10 de la hoja activa,
' establecemos como valor el contenido de la celda E5 de la hoja activa
' y mostramos su contenido
'-----------------------------------------

Range("E10").Select
[Link] = Cells(5, 5).Value
MsgBox ([Link])
 Obtener el contenido de una celda de alguna de las hojas del libro actual
' Mostramos el contenido de la celda B4 de la hoja "Listados" del libro activo
'-----------------------------------------------------------------------------
MsgBox(Worksheets("Listados";).Cells(4, 2).Value)

' Seleccionamos la hoja "Listados" del libro activo


' Seleccionamos la celda B4
' Mostramos su contenido utilizando el objeto Selection creado
'----------------------------------------------------------------------
Worksheets("Listados").Activate
Range("B4").Select
MsgBox([Link])
 Obtener el contenido de una celda de una hoja de alguno de los libros
abiertos.
' Seleccionamos el libro "[Link]" de la colección de libros abiertos
' Seleccionamos la hoja "Datos" del libro que hemos activado
' Seleccionamos la primera celda de la hoja
' Establecemos como contenido de la celda la frase "Primera Celda"
'-----------------------------------------

Workbooks("[Link]").Activate
Worksheets("Datos").Select
Range("A1").Select
[Link] = "Primera Celda"

Escribir fórmulas en las celdas


Para escribir fórmulas ya sean cálculos o funciones en las celdas de la hoja utilizaremos
la propiedad Formula del objeto ActiveCell o Selection. También podemos escribir
directamente fórmulas en una celda utilizando la colección Cells de la hoja de cálculo.
Expresió[Link]

Expresión Variable que representa un objeto Range.

En el caso de utilizar los objetos  ActiveCell  o  Selection, primero tendremos que crear
una selección con el objeto  Range.
 Escribir una fórmula en la celda activa
[Link]="=A1*B1"
 Escribir una fórmula que contiene una función en la celda A2 de la hoja
activa
Range("A2").Select
[Link]="=SUM(B1:B20)"
Si se define la fórmula para un rango de varias celdas, se rellenan todas las celdas del
rango con la fórmula.
 Escribir el valor 10 en todas las celdas del rango B10:F30 de la hoja activa
Range("B10:F30").Select
[Link]="10"

También podría gustarte