Seleccionar Hojas de Trabajo

Seleccionar una sola hoja

Pasa el nombre o el número de índice de la hoja a la colección Worksheets y llama al método Select.

Seleccionar
Public Sub SelectSingleSheet()
    Worksheets("Sheet1").Select
End Sub
Seleccionar
Public Sub SelectSingleSheetByIndex()
    Worksheets(1).Select
End Sub

El índice es la posición en el libro (las hojas ocultas también cuentan). Ten en cuenta que la cadena "1" significa «la hoja llamada 1», mientras que el número 1 significa «la primera hoja».

Diferencia entre Worksheets y Sheets
Worksheets se refiere solo a hojas de cálculo.
Sheets es una colección que incluye tanto hojas de cálculo como hojas de gráfico.

Select requiere que la hoja esté visible. Si intentas seleccionar una hoja oculta se produce el error en tiempo de ejecución 1004.

Seleccionar varias hojas

Pasa los nombres de las hojas como matriz con la función Array para seleccionar varias a la vez.

Public Sub SelectMultipleSheets()
    Worksheets(Array("Sheet1", "Sheet2")).Select
End Sub
Indicar la hoja activa de forma explícita

Aunque haya varias hojas seleccionadas, solo una está activa. Si quieres que una hoja concreta sea la activa, ejecuta Worksheets("Sheet1").Activate después de seleccionar.

Ejemplos

Seleccionar una hoja mediante una variable

Public Sub SelectSheetDynamically()
    Dim sheetName As String
    sheetName = "Sheet3"
    Worksheets(sheetName).Select
End Sub

Seleccionar todas las hojas cuyo nombre cumple una condición

Si el argumento Replace de Select es False, se añade una hoja sin borrar la selección actual. La clave es seleccionar la primera hoja con True (el valor predeterminado) y añadir las demás con False.

Seleccionar
Public Sub SelectSheetsByPattern()
    Dim ws As Worksheet
    Dim isFirst As Boolean
    isFirst = True

    ThisWorkbook.Activate
    For Each ws In ThisWorkbook.Worksheets
        If InStr(ws.Name, "Report") > 0 And ws.Visible = xlSheetVisible Then
            ws.Select isFirst ' la primera hoja reemplaza la selección; las demás se añaden
            isFirst = False
        End If
    Next ws
End Sub

Si pasas False desde el principio, la hoja que ya está activa permanece en la selección y se incluyen hojas no deseadas.

Trabajar sin seleccionar

En la mayoría de los casos no necesitas seleccionar una hoja. Seleccionar cambia la pantalla, lo que ralentiza el proceso y puede provocar errores si otra hoja está activa mientras se ejecuta el código.

Escribir
Public Sub WriteWithoutSelect()
    Worksheets("Sheet1").Range("A1").Value = "Hello"
End Sub
Precauciones
  • Indicar el nombre de una hoja que no existe provoca el error en tiempo de ejecución 9 (Subíndice fuera del intervalo).
  • Para seleccionar una hoja de otro libro, activa antes ese libro.
  • Si editas una celda con varias hojas seleccionadas, el cambio se aplica a la misma celda de todas las hojas seleccionadas. Al terminar, vuelve a seleccionar una sola hoja para que no ocurra sin querer.

Resumen

  • Selecciona una hoja con Worksheets("Nombre").Select o Worksheets(Número).Select
  • Selecciona varias con Worksheets(Array(...)).Select
  • Al añadir por condición, reemplaza la selección con la primera hoja y añade las demás con Select False
  • Siempre que sea posible, evita seleccionar y haz referencia directa a la hoja
#VBA #Excel #Hoja #Selección