Detectando tipos de hojas en VBA (Microsoft Excel)
Si está escribiendo macros que procesan diferentes hojas de trabajo en un libro de trabajo, es posible que tenga la necesidad de averiguar qué tipo de hojas de trabajo hay en el libro de trabajo antes de realizar cualquier procesamiento. Esto puede ser especialmente crítico porque algunos comandos de VBA solo funcionan en ciertos tipos de hojas de trabajo.
Antes de que pueda averiguar qué tipos de hojas de trabajo hay en un libro, es útil saber cómo Excel almacena internamente algunos de los objetos que componen el libro. Excel mantiene una colección de hojas de trabajo y una colección de gráficos. La colección Worksheets está formada por objetos de hoja de trabajo y la colección Charts está formada por objetos de hoja de gráfico.
Los objetos de hoja de gráfico son aquellos gráficos que ocupan una hoja de trabajo completa; no incluye aquellos que son objetos incrustados dentro de una hoja de trabajo.
Curiosamente, los objetos de hoja de trabajo y hoja de gráfico también son miembros de la colección Sheets. Por lo tanto, si desea procesar un libro de trabajo en el orden en que aparecen las hojas, es más fácil hacerlo recorriendo la colección Hojas. Cuando lo hace, puede examinar la propiedad Tipo de objetos individuales dentro de la colección para determinar qué tipo de objeto es. Excel define cuatro tipos de objetos que pueden pertenecer a la colección Sheets:
xlWorksheet. * Esta es una hoja de trabajo normal.
xlChart. * Este es un gráfico.
xlExcel4MacroSheet. * Esta es una hoja de macros, como se usa en Excel 4.0.
xlExcel4IntlMacroSheet. * Esta es una hoja de macros internacional, como se usa en Excel 4.0.
Es posible que tenga la tentación de pensar que basta con mirar la lista de tipos de hojas. Sin embargo, es interesante que Excel no siempre devuelve lo que esperaría de la propiedad Tipo. En cambio, si examina la propiedad Tipo de un gráfico, devuelve un valor igual a xlExcel4MacroSheet.
Esto puede causar problemas a cualquier macro.
La forma de evitar esto, entonces, es comparar el nombre de cada elemento en la colección Sheets con los de la colección Charts. Si el nombre está en ambas colecciones, es seguro asumir que la hoja es un gráfico. Si no está en ambos, puede analizar más para ver si la hoja de trabajo es uno de los otros tipos. La siguiente macro, SheetType, sigue exactamente este proceso:
Sub SheetType() Dim iCount As Integer Dim iType As Integer Dim sTemp As String Dim oChart As Chart Dim bFound As Boolean sTemp = "" For iCount = 1 To Sheets.Count iType = Sheets(iCount).Type sTemp = sTemp & Sheets(iCount).Name & " is a" bFound = False For Each oChart In Charts If oChart.Name = Sheets(iCount).Name Then bFound = True End If Next oChart If bFound Then sTemp = sTemp & " chart sheet." Else Select Case iType Case xlWorksheet sTemp = sTemp & " worksheet." Case xlChart sTemp = sTemp & " chart sheet." Case xlExcel4MacroSheet sTemp = sTemp & "n Excel 4 macro sheet." Case xlExcel4IntlMacroSheet sTemp = sTemp & "n Excel 4 international macro sheet" Case Else sTemp = sTemp & "n unknown type of sheet." End Select End If sTemp = sTemp & vbCrLf Next iCount MsgBox sTemp End Sub
Cuando ejecuta la macro, ve un cuadro de mensaje único que muestra el nombre de cada hoja en su libro de trabajo, junto con el tipo de hoja que es.
_Nota: _
Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios ExcelTips), he preparado una página especial que incluye información útil.
link: / excelribbon-ExcelTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador]
.
ExcelTips es su fuente de formación rentable en Microsoft Excel.
Este consejo (2538) se aplica a Microsoft Excel 97, 2000, 2002 y 2003. Puede encontrar una versión de este consejo para la interfaz de cinta de Excel (Excel 2007 y posterior) aquí:
link: / excelribbon-Detecting_Types_of_Sheets_in_VBA [Detectando tipos de hojas en VBA]
.