jueves, 22 de febrero de 2018

Las colecciones "Worksheets" y "Sheets"

En innumerables ocasiones, cuando de manejar las hojas de Excel como objetos en VBA se trata, he visto que se hace de manera indiferente tanto usando “Sheets” como usando “Worksheets” pero ¿son ambas lo mismo?

Según las definiciones que hay en el “Microsoft Developer Network” (MSDN), “Sheets” hace referencia a “la colección de hojas que puede contener objetos gráfico y hojas de trabajo” y “Worksheets” es “la colección que contiene todas las hojas de trabajo en un libro”.

Entonces:

- Worsheets: Solo hojas de trabajo (u hojas de cálculo como normalmente las llamamos u hojas a secas)

- Sheets: Hojas de trabajo y hojas tipo gráfico (no confundir con los gráficos insertados en hojas)

 

Para que se entienda mejor, vamos a suponer que tenemos un archivo con tres hojas así:

 

Entonces usamos esta macro muy simple:

Sub ContarHojas()
MsgBox Worksheets.Count
End Sub   
Cuando ejecutamos la macro el “Msgbox” nos dará un resultado de “3”. Ahora hagamos un pequeño cambio y el resultado será el mismo:
Sub ContarHojas()
MsgBox Sheets.Count
End Sub 

La colección “Worksheets” nos da como resultado “3” y el resultado es el mismo cuando usamos “Sheets” porque dicha colección contiene, también, a las hojas en cuestión. Veamos ahora que ocurre en este otro caso:

 

Si aplicamos las macros del ejemplo anterior, con “Worksheets.Count” tenemos como resultado “2” pero en esta ocasión con “Sheets.Count” tendremos como resultado “4”. “Sheets” considera todas las hojas del libro (4 en total) y “Worksheets” solo las “hojas de trabajo” (hojas de cálculo).

Pero ¿son estos los únicos tipos de hojas que trae Excel? Vamos a recordar una imagen que vimos líneas arriba:

 

Hay tres objetos ahí que nos interesan: Macro de Microsoft Excel 4.0, Hoja internacional de macros y el Dialogo de Excel 5.0. Las dos primeras son herencia de las macros de Excel 4.0 y el tercero es herencia de Excel 5.0. En los tres casos las versiones posteriores de Excel las mantienen por una cuestión de compatibilidad (evidentemente no con todas las características de sus versiones iniciales).

En el MSDN nos dicen que hay cinco tipos de hojas:

Nombre

Constante

Descripción

xlChart

-4109

Hoja de Gráfico

xlDialogSheet

-4116

Hoja de Dialogo

xlExcel4IntlMacroSheet

4

Hoja Internacional de Macros

xlExcel4MacroSheet

3

Hoja Macro de Microsoft Excel 4.0

xlWorksheet

-4167

Hoja de trabajo

(Enumeración XlSheetType)

Entonces, si en nuestro archivo tenemos algo como esto:

Al usar “Worksheets.Count” el resultado será “2” pero con “Sheets.Count” será “6”, ya que la colección “Sheets” considera a todas las hojas sin excepción. Si bien en la definición del MSDN sobre la colección “Sheets” habla solo de dos tipos de hojas, al parecer podría deberse a lo ya mencionado: Que los otros tipos se mantienen solo por compatibilidad y por eso han obviado mencionarlo (O por lo menos eso es lo que yo, y otras personas, creemos).

Algo muy importante sobre todo a tomar en cuenta si trabajamos con los índices de las hojas, es que cada colección tiene su propio índice. Con el ejemplo anterior si colocamos “Worksheets(2).Name” nos devolverá “Hoja2” pero si colocamos “Sheets(2).Name” nos dará como resultado “Macro1”.

Hasta la próxima.

Abraham Valencia

No hay comentarios.:

Publicar un comentario