word

ActiveSheet en VBA: qué es y cómo usarla en Excel

noviembre 5, 2026 Tuto Excel 12 min read
ActiveSheet en VBA: qué es y cómo usarla en Excel

ActiveSheet es la forma que tiene VBA de referirse a la hoja que está visible en cada momento dentro del libro de Excel abierto: la pestaña que tienes delante en pantalla. Cuando escribes una macro y no nombras ninguna hoja, VBA actúa sobre esa hoja activa. En este tutorial la vas a usar sobre un libro real, "Tienda", que tiene una hoja Ventas con productos, precios y cantidades, y la irás ampliando paso a paso hasta dominar ActiveSheet.

Funciona en Excel para Microsoft 365, 2024, 2021, 2019, 2016, 2013 y 2010 de escritorio, y también en Excel para Mac. En Excel para la web no está disponible: allí se automatiza con Office Scripts.

Nota: En este tutorial las fórmulas y el código VBA se escriben con el separador de argumentos de España y Latinoamérica (punto y coma). Si tu Excel está configurado con punto decimal (México, Estados Unidos), el separador será la coma.

Qué es la ActiveSheet y por qué tu macro trabaja sobre ella

Imagina tu libro "Tienda" con tres hojas: Ventas, Resumen y Productos. Estás revisando los datos de Resumen y ejecutas una macro para copiar el total del día a la última fila de Ventas. Si la macro no nombra ninguna hoja, ¿en cuál escribe? En la que tienes abierta en ese momento: la hoja activa.

ActiveSheet es un objeto de VBA (en inglés, ActiveSheet) que apunta a esa hoja visible. Cada vez que haces clic en una pestaña, cambias la hoja activa. Cuando abres el libro, la hoja activa es la que estaba seleccionada al guardar. Cuando VBA ejecuta una instrucción sin decir a qué hoja afecta, usa ActiveSheet por ti.

En la práctica esto significa que tu macro escribe en la pestaña que el usuario ve, y eso puede ser un problema si la persona cambia de pestaña mientras la macro se ejecuta. La solución más robusta es asignar la hoja a una variable con Set sht = ActiveSheet antes de hacer nada, y trabajar siempre sobre esa variable.

Consejo: Antes de lanzar una macro que escribe datos, añade MsgBox ActiveSheet.Name para confirmar en qué hoja vas a trabajar.

El editor de VBA y la primera macro con ActiveSheet

La macro más corta posible es aquella que escribe un texto en la celda A1 de la hoja activa. Como no nombras ninguna hoja, VBA interpreta Range("A1") como la celda A1 de ActiveSheet.

  1. Abre el libro Tienda.xlsx y, si no ves la pestaña Programador, actívala.
  2. Pulsa Alt+F11 para abrir el editor de Visual Basic.
  3. En el menú, ve a Insertar > Módulo. Se abre una ventana en blanco a la derecha.
  4. Escribe este código:

Sub Saludo()
    Range("A1").Value = "Hola"
    MsgBox "Listo"
End Sub
  1. Pulsa F5 (o Ejecutar > Ejecutar Sub/UserForm) para lanzar la macro. Verás un mensaje "Listo" y, al volver a Excel, la celda A1 de la hoja que tengas activa contendrá la palabra "Hola".
Comprueba: Cambia a la hoja Productos, ejecuta la macro y verás que "Hola" aparece en la A1 de Productos. Ahora ve a Ventas, ejecútala de nuevo y comprobarás que la A1 de Ventas es la que cambia. La macro siempre escribe en la hoja que está activa.

Activar la pestaña Programador si no la ves

La pestaña Programador viene oculta por defecto. Sigue estos pasos para mostrarla:

ArchivoOpcionesPersonalizar cinta de opciones

Al aceptar, la pestaña Programador aparece en la cinta. Allí encontrarás Grabar macro y el botón para abrir el editor de VBA (Alt+F11 también funciona siempre).

Activar una hoja concreta con Worksheets.Activate

Cuando quieras cambiar la pestaña activa desde VBA, usas el método .Activate del objeto Worksheets. La sintaxis es Worksheets("Nombre").Activate. Es el equivalente programático de hacer clic en la pestaña.

Sub IrAResumen()
    Worksheets("Resumen").Activate
End Sub

La pestaña Resumen queda delante y se vuelve la hoja activa.

Después de ejecutar este código, cualquier Range("A1") que escribas a continuación sin nombrar hoja caerá en Resumen. Por eso conviene guardar la hoja activa en una variable antes de saltar a otra, como ves en el siguiente apartado.

Asignar la hoja activa a una variable antes de cambiar de hoja

Si activas otra hoja con .Activate, VBA olvida cuál era la anterior. Para no perder esa referencia, guárdala en una variable de tipo Worksheet:

Sub CopiarVentasAResumen()
    Dim shtOrigen As Worksheet
    Set shtOrigen = ActiveSheet

    Worksheets("Resumen").Activate
    Range("A1").Value = shtOrigen.Range("B2").Value
End Sub

Primero capturas la hoja activa en shtOrigen, luego cambias a Resumen y, desde Resumen, lees el valor de B2 de la hoja origen. Si solo hubieras escrito Range("B2").Value después del .Activate, leerías la B2 de Resumen, que es justo el error que quieres evitar.

Leer y escribir en la hoja activa con Range y Cells

Tu hoja Ventas contiene productos, precios y cantidades. Vas a añadir el importe total de cada fila (precio por cantidad) en la columna D.

D2fx=B2*C2
A B C D
1 Producto Precio Cantidad Total
2 Lápiz 1,50 10
3 Cuaderno 3,20 5
4 Goma 0,80 12
D2 Arrastra el controlador de relleno hasta D4
Ventas

La macro recorre las filas con un bucle For y, con Cells(i, columna), escribe el producto en la columna D. Cells admite números: Cells(2, 4) equivale a Range("D2").

Sub CalcularTotal()
    Dim i As Long
    For i = 2 To 4
        Cells(i, 4).Value = Cells(i, 2).Value * Cells(i, 3).Value
    Next i
End Sub

Tras ejecutarla, D2 vale 15,00; D3 vale 16,00; D4 vale 9,60. Como no nombras ninguna hoja, Cells apunta a la hoja activa.

Comprueba: Selecciona Productos, ejecuta la macro y verás los totales aparecen en Productos, no en Ventas. Para evitarlo, o bien te aseguras de estar en Ventas, o bien nombras la hoja al principio: Worksheets("Ventas").Cells(i, 4).Value = ....

Cambiar entre hojas y copiar datos entre ActiveSheet y Worksheets

Ahora tu libro tiene tres hojas: Datos, Resumen y Ventas. La macro debe activarse en Datos, copiar el bloque A1:A5 y pegarlo en G1 de la hoja activa.

G1fx
A B C D E F G
1 Origen Valor
2 Caja 120
3 Mostrador 85
4 Online 230
5 Tienda física 175
G1 Aquí se pega la copia
Resumen
A1fx**Cliente**
A
1 Cliente
2 Ana
3 Luis
4 Marta
5 Pedro
6 Sara
Datos

La macro es la siguiente. Fíjate en cómo se copia desde Datos (con Worksheets("Datos")) y se pega en ActiveSheet (la hoja que esté visible en ese momento):

Sub CopiarDatosAResumen()
    Worksheets("Datos").Activate
    Range("A1:A5").Copy
    ActiveSheet.Range("G1").PasteSpecial xlPasteValues
End Sub

Si en lugar de ActiveSheet pusieras Worksheets("Resumen"), la macro siempre pegaría en Resumen, aunque el usuario hubiera cambiado de pestaña. Con ActiveSheet, el destino cambia según la pestaña que esté activa al ejecutar.

Sheets.Add crea una hoja y la deja como activa

Añadir una hoja nueva desde VBA es directo con Sheets.Add. La hoja recién creada queda automáticamente como ActiveSheet.

Sub CrearTemporal()
    Dim hoja As Worksheet
    Set hoja = Worksheets.Add(After:=Worksheets(Worksheets.Count))
    hoja.Name = "Temporal"
    hoja.Range("A1").Value = "Borrame"
End Sub

Aparece una pestaña "Temporal" al final del libro, ya seleccionada, con "Borrame" en A1.

Guardar la referencia con Set hoja = ... antes de ponerle nombre evita el error en tiempo de ejecución 1004 que salta si VBA no encuentra la hoja recién creada por su nombre.

Proteger y desproteger la ActiveSheet desde VBA

Proteger la hoja activa con contraseña sirve para que nadie (incluidas tus macros) modifique las celdas por accidente. Desde VBA usas ActiveSheet.Protect y ActiveSheet.Unprotect.

Sub ProtegerActiva()
    ActiveSheet.Protect Password:="1234", UserInterfaceOnly:=True
End Sub

Sub DesprotegerActiva()
    ActiveSheet.Unprotect Password:="1234"
End Sub

El argumento UserInterfaceOnly:=True permite que tus macros sigan modificando la hoja aunque el usuario no pueda editarla a mano. Para comprobar que la protección funciona, ve a Revisar > Cambios > Desproteger hoja y escribe 1234.

Cuidado: UserInterfaceOnly se reinicia al cerrar y abrir el libro. Si tu macro depende de él, protégelo de nuevo al arrancar.

Por qué una macro actúa sobre la hoja equivocada

El error más habitual es este: el lector está mirando Resumen, ejecuta una macro que debería escribir en Ventas, y los resultados los ve en Resumen. La causa casi siempre es la misma: la macro usa Range o Cells sin haber activado la hoja destino, o usa ActiveSheet cuando debería usar Worksheets("Ventas").

Una variante típica es el orden invertido:

Sub OrdenIncorrecto()
    Range("A1").Value = "Antes"
    Worksheets("Ventas").Activate
    Range("A1").Value = "Después"
End Sub

La primera línea escribe "Antes" en la hoja activa en ese momento (por ejemplo Resumen). La segunda activa Ventas y escribe "Después" allí. Si lo que querías era escribir las dos cosas en Ventas, el arreglo es activar primero:

Sub OrdenCorrecto()
    Worksheets("Ventas").Activate
    Range("A1").Value = "Antes"
    Range("A1").Value = "Después"
End Sub

Otra causa frecuente es confiar en que el libro abre con Ventas seleccionada. Si el usuario guardó con Resumen activa, ActiveSheet al abrir será Resumen. La solución robusta es no depender de la hoja activa y nombrar siempre la hoja destino.

ActiveSheet contra ThisWorkbook y ActiveWorkbook

Estos tres objetos se confunden a menudo porque los tres contienen la palabra "active". La diferencia es importante:

Objeto Qué devuelve Con dos libros abiertos
ActiveSheet La hoja activa de la ventana con foco La hoja visible en la ventana donde estás mirando
ActiveWorkbook El libro abierto con foco El libro que ves en la barra de título
ThisWorkbook El libro que contiene la macro Siempre el mismo, da igual dónde mires

Si tu macro vive en Tienda.xlsm y el usuario tiene además Precios.xlsx abierto, ActiveWorkbook puede ser uno u otro según en cuál haga clic, pero ThisWorkbook siempre será Tienda.xlsm. Por eso, cuando quieras guardar datos en el mismo archivo que tiene la macro, usa ThisWorkbook.Worksheets(...) en lugar de ActiveWorkbook.Worksheets(...).

Lo que la ActiveSheet no puede hacer (y cómo sustituirlo)

ActiveSheet tiene tres límites importantes que conviene conocer antes de abusar de ella.

No fuerza el foco si la ventana está oculta. Si el libro está oculto (Windows(1).Visible = False), ActiveSheet sigue devolviendo la hoja que estaba activa antes de ocultar la ventana. La macro funciona, pero el usuario no ve el resultado. Alternativa: usa Worksheets("Ventas") directamente, sin .Activate.

No sirve para recorrer todas las hojas. Si quieres escribir el mismo dato en cada hoja del libro, no las actives una a una. Usa un bucle For Each:

Sub EscribirEnTodas()
    Dim ws As Worksheet
    For Each ws In Worksheets
        ws.Range("Z1").Value = "Revisado"
    Next ws
End Sub

No existe en Excel para la web. VBA necesita el escritorio. Si tu equipo trabaja con Excel para la web, la automatización se hace con Office Scripts, que tiene su propio modelo de objetos y donde el equivalente de ActiveSheet es workbook.getActiveWorksheet().

Nota: Si combinas VBA con fórmulas, recuerda que .Formula y .FormulaR1C1 esperan los nombres de función en inglés y comas, mientras que .FormulaLocal y .FormulaR1C1Local usan el idioma del usuario. Más detalles en la documentación oficial.

Lo que ya sabes hacer con ActiveSheet y el siguiente paso

  • Leer y escribir en la pestaña activa con Range y Cells sin nombrarla.
  • Asignar la hoja activa a una variable para no perderla al saltar de pestaña.
  • Cambiar entre hojas con Worksheets("X").Activate y saber que VBA olvida la hoja anterior.
  • Crear hojas nuevas con Sheets.Add y entender que quedan activas automáticamente.
  • Proteger y desproteger la hoja activa con contraseña, y distinguir ActiveSheet de ThisWorkbook y ActiveWorkbook.

El siguiente paso natural es acelerar tus macros. Cuando recorres muchas filas con Cells dentro de un bucle, Excel redibuja la pantalla en cada escritura y eso ralentiza todo. Añade al principio de cada macro Application.ScreenUpdating = False, y al final Application.ScreenUpdating = True. Enseguida notarás la diferencia en libros grandes.

Dudas al usar ActiveSheet en VBA

1. Cómo activar una hoja con VBA

En VBA, la propiedad ActiveSheet devuelve la hoja que está activa en el momento. Para activarla basta con usar Worksheets("Hoja1").Activate. Si la hoja está oculta, primero se muestra con Worksheets("Hoja1").Visible = xlSheetVisible y luego se activa.

2. Cómo cambiar la hoja activa al imprimir en Excel

En la pestaña Diseño de página elige el menú desplegable del grupo Configurar página y abre Configurar páginas. En la pestaña Hoja selecciona Hojas activas dentro de la opción Imprimir y pulsa Aceptar. Así solo se imprime la hoja que tienes seleccionada en ese momento.

3. Para qué sirve el evento Worksheet_Activate en VBA

El evento Worksheet_Activate se ejecuta automáticamente cada vez que una hoja pasa a ser la hoja activa. Se coloca en el módulo de código de esa hoja (clic derecho sobre la pestaña > Ver código) y sirve para lanzar tareas al entrar en ella, como refrescar datos o proteger celdas.

4. Cómo seleccionar la hoja activa en Excel

Haz clic directamente sobre la pestaña de la hoja en la parte inferior del libro para convertirla en la hoja activa. También puedes usar el teclado con Ctrl+Re Pág para moverte a la hoja siguiente o con Ctrl+Av Pág para ir a la anterior, y la hoja elegida quedará activa.

5. Cómo activar una hoja en VBA usando una variable con su nombre

Guarda el nombre en una variable de texto, por ejemplo miHoja = "Datos", y luego ejecuta Worksheets(miHoja).Activate. Conviene añadir On Error Resume Next o una comprobación con If Worksheets.Count > i para evitar el error 9 cuando el nombre no exista.

6. Atajo de teclado para activar una hoja en Excel

No hay un atajo directo para activar una hoja concreta, pero puedes llegar a ella con Ctrl+Av Pág (hoja siguiente) y Ctrl+Re Pág (hoja anterior). Para más rapidez, clic derecho sobre las flechas de navegación de la parte inferior abre la lista de hojas y te lleva a cualquiera con un clic.

7. Activate method of Worksheet class failed

Este error aparece cuando intentas activar una hoja oculta o que no existe en el libro. La solución es desproteger el libro si está protegido, mostrar primero la hoja con Worksheets("Hoja1").Visible = xlSheetVisible y después ejecutar el método Activate.

Fuentes

  1. MicrosoftSheets.Add method (Excel) | Microsoft Learnconsultado el 13/10/2026
  2. MicrosoftHOJA — documentación oficialconsultado el 13/10/2026
  3. MicrosoftRange.Formula, FormulaLocal, FormulaR1C1 y FormulaR1C1Local — documentación oficialconsultado el 13/10/2026
  4. MicrosoftLAMBDA — documentación oficialconsultado el 13/10/2026
  5. MicrosoftEl editor de VBA y la primera macro — documentación oficialconsultado el 13/10/2026