Seleccionar una hoja de cálculo utilizando VBA en Excel
Esta página presenta diferentes formas de seleccionar una hoja de trabajo sobre la que operar basándose en el nombre o el número.
Se considera importante utilizar una hoja de trabajo y las variables del libro de trabajo en lugar de confiar en el botón Activesheet.
Aunque proporciona un código corto para acceder a una hoja de trabajo, el uso de CodeName
puede conducir a errores, ya que sólo funciona en determinadas condiciones.
Se discuten dos posibles condiciones de error y cómo manejarlas.
Seleccionar hoja de cálculo por nombre
La propiedad Item
de la colección Worksheets
se utiliza para devolver un único objeto Hoja de cálculo de la colección.
Por ejemplo, se llama así:
Dim ws As Worksheet
Set ws = Application.ActiveWorkbook.Worksheets.Item(Index:="data")
La colección Worksheets
se obtiene de unaWorkbook.Worksheets
llamada a procedimiento.
El procedimiento Item
devuelve un objeto de tipo Worksheet
que se asigna opcionalmente a una variable ws
.
... o más corto:
Dim ws As Worksheet
Set ws = Worksheets(Index:="data")
- Si
Worksheets
se llama sin especificar el libro que Excel asumeApplication.ActiveWorkbook
- Una práctica habitual con los elementos de la colección es utilizar una abreviatura: En lugar del
collection.Item(...)
el más cortocollection(...)
se utiliza. - Como no aclara las cosas, también omitimos el
Item
nombre del parámetro(Index:=...)
ActiveWorkbook
para proporcionar al padre Workbook
cuyo objeto Worksheets
se está utilizando. En código real se prefiere utilizar variables de objeto explícitamente declaradas y asignadas, en el caso actual: Dim wb As Workbook
: Set wb = ActiveWorkbook
probablemente con otra expresión de asignación de objeto.
Dim strWorkbook As String: strWorkbook = "Demo.xlsx"
Dim wb As Workbook
Set wb = Workbooks(strWorkbook)
Dim wsData As Worksheet
Set wsData = wb.Worksheets("Data")
Seleccionar hoja por número de índice
Una hoja de trabajo también puede identificarse por su número en la colección, donde la hoja 1 corresponde a la primera hoja de trabajo.
Dim ws As Worksheet
Set ws = Worksheets(1)
Hojas u hojas de trabajo
En realidad, también puede obtener una hoja de la colección Sheets
del libro de trabajo. Esta última contiene todas las hojas del libro de trabajo:
además de las hojas de trabajo también los gráficos (hojas de gráficos).
Si desea que se le devuelva una hoja de trabajo, lo más seguro es utilizar Worksheets
siendo específico sobre el tipo.
Charts
,
su recuento de hojas será diferente. Por ejemplo, si comienza con un gráfico seguido de una hoja de cálculo,
Sheets(2)
será la misma hoja de cálculo que Workheets(1)
.
Seleccionar hoja de cálculo por nombre de variable
Excepto con las macros de propósito general, a menudo sabrá cuál es el nombre de las hojas de cálculo sobre las que actúa su macro.
Dim strWorkbook As String: strWorkbook = "Demo.xlsx"
Dim wb As Workbook
Set wb = Workbooks(strWorkbook)
Dim strWorksheet As String: strWorksheet = "data"
Dim ws As Worksheet
Set ws = wb.Worksheets(strWorksheet)
Aún así, el nombre de la hoja puede incluir un elemento variable, por ejemplo, la fecha (formateada) de algún informe de producción como archivo csv.
En tal caso, puede realizar un bucle a través de las hojas de cálculo como se indica a continuación, donde el comodín Like "...*"
devolverá
la hoja de cálculo deseada cuyo nombre comience por "Datos" y termine de una forma indeterminada:
Dim wsData As Worksheet
Dim ws As Worksheet
For Each ws In wb.Worksheets
If ws.Name Like "Data*" Then
Set wsData = ws
Exit For
End If
Next ws
Seleccionar hoja de cálculo por nombre en clave
Si su macro sólo necesita trabajar en hojas del libro de trabajo en el que se encuentra la macro, puede utilizar una sintaxis más corta:
Sheet1.Range("A1").Value = "Hello world"
Worksheet.CodeName
sólo puede devolver hojas en ThisWorkbook
.
Seleccionar hoja a la izquierda
Utilice la propiedad Previous
para obtener la hoja de la izquierda. Utilice la propiedad Next
para obtener la hoja de la derecha.
Dim wsPrevious As Worksheet
Set wsPrevious = Sheet2.Previous
If Not wsPrevious Is Nothing Then
End If
- Evidentemente, no siempre habrá una hoja anterior.
Así que antes de actuar sobre la hoja seleccionada, puede ser bueno verificar:
Not wsPrevious Is Nothing
. Esto evitará Error de ejecución 9: subíndice fuera de rango. - Si también tiene hojas de gráficos en su libro de trabajo, es posible que desee hacer el código más circunspecto para evitar que
añadiendo un tratamiento de errores o declarando la nueva variable como
Object
y verificar si es del tipo que necesita.
Seleccionar hoja a la derecha
Utilice la propiedad Next
para obtener la hoja de la derecha.
Dim wsNext As Worksheet
Set wsNext = Sheet2.Next
Seleccionar rango de hojas de cálculo
En última instancia, probablemente querrá hacer cosas con un rango en la hoja de cálculo para el que utilizará una variable Range
.
Dim strWorkbook As String: strWorkbook = "Demo.xlsm"
Dim wb As Workbook
Set wb = Workbooks(strWorkbook)
Dim strWorksheet As String: strWorksheet = "data"
Dim ws As Worksheet
Set ws = wb.Sheets(strSheet)
Dim rng As Range
Set rng = ws.Range("A2:B6")
Error de ejecución 9: subíndice fuera de rango
Si Index
hace referencia a un elemento que no está presente en la colección, se producirá el error de tiempo de ejecución 9: subíndice fuera de rango.
Dependiendo del uso real, se puede considerar la adición de gestión de errores.
Sub Demo()
On Error GoTo HandleError
Set ws = Worksheets("xxx")
HandleExit:
Exit Sub
HandleError:
MsgBox Err.Description
Resume HandleExit
End Sub
Evento Abrir hoja de cálculo
Puedes utilizar el procedimiento Worksheet_Activate() que se ejecuta cuando se selecciona la hoja. Para añadir el código abra el módulo de la hoja de cálculo (selecciónelo en el explorador de proyectos) y en el combo de módulos de la izquierda seleccione Worksheet y en el combo de la derecha seleccione Activate. Esto insertará un bloque de código vacío. luego complétalo a:
Private Sub Worksheet_Activate()
MsgBox "Hi! I'm " & Me.Name & ", who are you?"
End Sub
Autor: Mark Uildriks Referencia: Worksheets.Item() | Microsoft Learn