Objeto WorkBook

El objeto WorkBook es el objeto libro en Excel. Un conjunto de libros constituye una familia de libros, en este caso, la familia WorkBooks, que a su vez es un objeto. Estos y muchos otros objetos del Excel, son objetos del objeto o clase Application puesto que todos ellos son objetos de aplicación. De manera que, cuando hacemos referencia a un objeto WorkBook, debemos usar la notación:

Application.WorkBooks

Otros ejemplos de uso del Objeto Application es el siguiente:


Application.Workbooks.Count
Application.ActiveCell.Font.Bold = True

El primero devuelve el número de libros abiertos. El Segundo pone en negrita el contenido de la celda activa.

En ambos casos se puede evitar el uso del objeto Application, como en muchos otros casos.

Concentrémonos en libros.

Los objetos deben ser declarados usando la sentencia DIM como las variables y arreglos:

DIM Libro01 As WorkBook ….. Declara a Lib01 como una instancia del objeto WorBook.
DIM Lib01, Lib02, Lib03 As WorkBook … Declara a Lib01, Lib02 y Lib03 como instancias del objeto WorkBook.

Cuando el libro está en uso (está active) se le denomina ActiveWorkBook. Y sobre él actúan muchos métodos que permiten modifcar o examiner sus propiedades.

Propiedades del objeto WorkBook:

Sintaxis:


WorkBook.Propiedad ………… Devuelve o activa el valor de la propiedad del libro activo

Algunas de las muchas propiedades de este objeto son:
- Name …........ Devuelve el nombre del libro
- FullName ….. Devuelve el nombre complete, incluyendo la ruta del libro
- Path ….......... Devuelve la ruta de acceso a la aplicación
- Saved …....... Devuelve o activa un valor que indica si el libro sufrió algún cambio

Cargue a memoria el Excel.

Vaya al editor usando [ALT]+F11

Inserte un módulo. Vaya a propiedades, haga clic en [Name] y digite ModLibros.

Vuelva al Excel y guarde el libro con el nombre "MisMacros02", habilitado para macros. Esto lo pudo haber hecho en el Editor usando el comando Archivo.

Vuelva al editor y en el módulo que hemos insertado ingrese el siguiente código:

Ejemplo 1

Sub Libro01()

Dim NombreLibro As String

‘ En estos momentos solo tenemos un libro abierto
‘ Vamos a activar el libro MisMacros02.xlsm, donde está esta macro.

WorkBooks(“MisMacros.xlsm”).Activate
‘ Extrae su nombre y ruta, y los guarda en dos variables

NombreLibro = ActiveWorkBook.Name
Ruta = ActiveWorkBook.Path

MsgBox “Nombre del libro: “ + NombreLibro + “ su ruta: “ + Ruta

‘ Crea un Nuevo libro
WorkBooks.Add
MsgBox “Su nombre es: “ + ActiveWorkBook.Name

‘ En estos momentos hay dos libros abiertos y está en uso el libro llamado: ………..????
‘ Vuelve a activar el libro que estaba activo y en el cual está esta macro.

WorkBooks(NombreLibro).Activate
‘ Comprobemos
MsgBox “Su nombre: “ + ActiveWorkBook.Name

End Sub

Un procedimiento más compacto y similar al anterior, es el siguiente:

Sub Libros01()
Dim Lib01 As Workbook
Dim LName As String

LName = ActiveWorkbook.Name

Path = "D:/Mis datos/PagFaceBook/"

Workbooks.Open Filename:=Path + "MisMacros.xlsm"
Set Lib01 = ActiveWorkbook
Lib01.Activate
MsgBox Lib01.Name

Application.ActiveWorkbook.Close
' Application.Workbooks.Close

End Sub

Vuelva a grabar su libro para no perder su macro.

Completaremos esta Sección con otros dos ejemplos

Ejemplo 2

Debajo del procedimiento anterior creamos otro procedimiento
- Este procedimiento se llamará AddNew().
Sub AddNew() y presionamos
- Declaramos a Libro1, Libro2 como de tipo String y Libro3 de tipo WorkBook:
Dim Libro1, Libro2 As String
Dim Libro3 As WorkBook

- Activamos nuestro nuevo libro MisMacros02.xlsm:
WorkBooks("MisMacros02.xlsm).Activate

- Guardamos su nombre por si volvemos a él. Recuerde que ya está abierto, aunque puede activarse o no:

Libro1 = ActiveWorkBook.Name

- Vamos a crear un nuevo libro usando la clase WorkBooks:
WorkBooks.Add

- Guardamos su nombre en Libro2:
Libro2 = ActiveWorkBook.Name

- Vamos a ver cuál es el nombre del libro activo:
MsgBox "Nombre del libro activo: " + ActiveWorkBook.Name

- Volvamos a nuestro libro de macros:
WorkBooks(Libro1).Activate
MsgBox "Nombre del libro activo: " + ActiveWorkBook.Name

- Añadimos otro libro:
WorkBooks.Add

- Declaramos a Libro3 como una instancia (copia) del libro activo:
Set Libro3 = ActiveWorkBook

- Activamos este libro para usarlo:
Libro3.Activate

- Visualizamos su nombre:
MsgBox "Nombre del libro activo: " + ActiveWorkBook.Name

- Añadimos un nuevo libro:
WorkBooks.Add

- Averiguamos cuántos libros abiertos hay:
MsgBox "Nro de libros: " & Application.WorkBooks.Count

- Vamos a cerrar todos los libros abiertos, excepto el que contiene nuestras macros (MisMacros02.xlsm, cuyo nombre está en Libro1).
Para ello, nos ubicamos en dicho libro y desde allí cerramos los otros con un For ... Next.

WorkBooks(Libro1).Activate
For Each x In Workbooks
If x.Name <> ThisWorkbook.Name Then
x.Close savechanges:=False
End If

Next x

Nuestro procedimiento debe terminar con End Sub

Como en el ejemplo anterior, presentamos el procedimiento más compacto y limpio:

Sub AddNew()


'Set lib01 = Workbooks.Item("MisMacros02.xlsm")
Dim Libro1, Libro2 As String
Dim Libro3 As Workbook

Workbooks("MisMacros02.xlsm").Activate
Libro1 = ActiveWorkbook.Name
Workbooks.Add
Libro2 = ActiveWorkbook.Name

MsgBox "Nombre del libro activo: " + ActiveWorkbook.Name
Workbooks(Libro1).Activate
MsgBox "Nombre del libro activo: " + ActiveWorkbook.Name
Workbooks.Add
Set Libro3 = ActiveWorkbook
Libro3.Activate
MsgBox "Nombre del libro activo: " + ActiveWorkbook.Name
Workbooks.Add
MsgBox Application.Workbooks.Count
'
'      Vamos a cerrar todos los libros abiertos excepto MisMacros02
'      Activamos este libro y desde allí cerramos
'
Workbooks(Libro1).Activate

For Each x In Workbooks
    If x.Name <> ThisWorkbook.Name Then
        x.Close savechanges:=False
    End If
Next x

End Sub


Ahora ejecútelo usando F5 y tomando atención de lo que va sucediendo.

Guarde su libro MisMacros02.xlsm. Verifique que no haya otro libro abierto y vuelva a ejecutarlo para entender bien el procedimiento.

En la siguiente sesión continuaremos con el uso del objeto WorkBook

haga clic aquí