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.Worksheetsllamada 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")

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.

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"

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

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
icono

Pruebe el complemento del editor Code VBA