ActiveSheet
Una de las situaciones más comunes en las que se utiliza VBA es la manipulación de hojas de cálculo.
Para obtener información de una hoja específica de Excel o para imprimir los resultados de cálculos en una hoja, primero es necesario obtener la hoja de destino.
VBA ofrece varios métodos para obtener una hoja, pero en esta ocasión explicaremos el método que utiliza la propiedad ActiveSheet.
La propiedad ActiveSheet es un método común para obtener una hoja y se utiliza en muchas situaciones.
Sin embargo, dado que la propiedad ActiveSheet obtiene la hoja que está activa en el momento de la ejecución del código, existe la posibilidad de que se obtenga una hoja no deseada.
Por lo tanto, se recomienda utilizar otros métodos para obtener una hoja siempre que sea posible.
Cómo usar la propiedad ActiveSheet
La propiedad ActiveSheet se utiliza para obtener la hoja que está activa en ese momento.
El uso general es el siguiente:
Dim ws As Worksheet
Set ws = ActiveSheet
MsgBox ws.Name
Al ejecutar el código anterior, se mostrará en un cuadro de mensaje el nombre de la hoja activa actual.
Dado que la propiedad ActiveSheet es una propiedad de la clase Application, se puede obtener simplemente escribiendo ActiveSheet en el código, lo que facilita mucho la obtención de la hoja.
Para asignarla a una variable, se debe preparar una variable del tipo Worksheet y usar la instrucción Set para asignarla.
ActiveSheet devuelve la hoja activa del libro activo. No es necesariamente el libro que contiene la macro, por lo que puede apuntar a una hoja no deseada, por ejemplo justo después de abrir otro libro. Además, si la hoja activa es una hoja de gráfico, asignarla a una variable Worksheet provoca un error.
Alternativa a ActiveSheet
Para trabajar con una hoja concreta, obtenerla por nombre es más fiable.
ThisWorkbook.Worksheets("Sheet1").Range("A1").Value = Now
Los métodos para obtener una hoja se comparan en la siguiente página.
Ejemplos específicos
Imprimir la hoja activa actual
Private Sub PrintActiveSheet()
ActiveSheet.PrintOut
End Sub
Ingresar un valor en una celda de la hoja activa actual
Private Sub InputValueToActiveSheet()
' Ingresar la fecha y hora actual en la celda A1 de la hoja activa
ActiveSheet.Range("A1").Value = Now
End Sub