Activar una hoja usando VBA en Excel
La aplicación del método Activate
sobre un objeto Worksheet
lo convierte en la hoja activa,
la hoja de arriba.
Seleccionar hoja
Para poder activar una hoja primero hay que seleccionarla. Activar un objeto es simple, llame al método Activate
en el objeto.
Tendrás que especificar el objeto que quieres activar y ahí es donde tienes bastantes opciones que se discuten aquí.
Select
en lugar de Activate
y obtener el mismo resultado:
la hoja activada.
Sin embargo, Select
se ha diseñado con otra finalidad, a saber, apoyar la selección de una o varias hojas
y por eso se prefiere el uso de Activate para que una hoja sea la activa.
Activar hoja por número
Se llama así:
ActiveWorkbook.Sheets(Index:=1).Activate
El código anterior activa la primera hoja del libro de trabajo especificado.
ActiveWorkbook
para proporcionar al padre Workbook
cuyo objeto Worksheet
se está utilizando. En código real se prefiere utilizar variables de objeto explícitamente declaradas y asignadas, en el caso que nos ocupa: Dim wbActiveWorkbook As Workbook
: Set wbActiveWorkbook = ActiveWorkbook
probablemente con otra expresión de asignación de objeto.
El objeto Worksheet
se obtiene aquí del procedimiento Workbook Sheets
.
With
bloque de sentencias. El uso de la sintaxis With aclara la estructura del código y mejora el rendimiento.
Llamar a este método equivale a elegir la pestaña de la hoja.
Activar hoja por nombre
Activar hoja con nombre variable
La forma más habitual de referirse a una hoja es por su nombre, tal y como aparece en la pestaña de hojas:
ActiveWorkbook.Sheets(Index:="data2-17-14").Activate
Si su macro va a ser utilizada por otros, querrá añadir un tratamiento de errores adecuado, posiblemente como:
Dim ws As Worksheet
On Error Resume Next
Set ws = ActiveWorkbook.Sheets(Index:="data2-17-14")
On Error GoTo 0
If Not ws Is Nothing Then
ws.Activate
Else
End If
Activar hoja por nombre en clave
También puede referirse directamente a una hoja utilizando su propiedad CodeName
.
Esto tiene la ventaja de que puede estar seguro de que la hoja existe.
Pero esto sólo puede hacerse si la macro está en el mismo libro que la hoja, lo que no suele ser el caso.
Sheet1.Activate
CodeName
sólo puede modificarse en la ventana de propiedades del módulo de clase del Editor VBA
ventana de propiedades del módulo de clase. No se puede cambiar usando código VBA.
Activar la hoja en función del valor de la celda
Una aplicación para querer activar una hoja basada en un valor de celda es cuando se tienen tantas pestañas que se hace difícil navegar. Una posible solución sería tener una hoja de navegación que enumere las hojas de destino y tener abierta la hoja que corresponde a la celda seleccionada.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim strWorksheet As String: strWorksheet = Target.Value
On Error Resume Next
Worksheets(Index:=strWorksheet).Activate
End Sub
- en el Explorador de proyectos, haga doble clic en el módulo de clase Hoja correspondiente para que se abra y
- En el cuadro combinado de la izquierda del módulo (General), seleccione Hoja de cálculo.
- Si no aparece automáticamente por defecto, se puede seleccionar el código del manejador de eventos apropiado en el cuadro combinado de la derecha.
Seleccionar hoja y celda
Una celda sólo puede seleccionarse si la hoja en la que se encuentra es la activa.
Por lo tanto, generalmente precederá a la selección activando su Parent
.
Por ejemplo, en lugar de Application.Range("Sheet2!B2").Select
será más seguro:
With Application.Range("Sheet2!B2")
.Parent.Activate
.Select
End With
Activar hoja en otro libro
Para activar una hoja no es necesario que el propio libro de trabajo sea el libro activo. Sólo tiene que identificar el libro de trabajo, y la hoja de trabajo que desea activar y luego hacerlo:
Dim wb As Workbook
Set wb = Workbooks(Index:="data123.xlsx")
Dim ws As Worksheet
Set ws = wb.Sheets(Index:="Countries")
ws.Activate
Workbooks(Index:="data123.xlsx").Sheets(Index:="Countries").Activate
.
En todos los demás casos es mejor introducir variables para el workbook
y o worksheet
como se hizo anteriormente.
Activar hoja sin mostrar
No es necesario que una hoja de cálculo (¡o libro de trabajo!) esté activa para poder operar con ella.
La forma de hacerlo es declarar una variable worksheet
e instanciarla utilizando una sentencia Set
,
como se hizo en la sección anterior.
Utilizar variables de esta forma en lugar de depender de que la hoja esté activa es más rápido y seguro.
Autor: Mark Uildriks Referencia: Worksheet.Activate() | Microsoft Learn