Hojas de VBA: la guía definitiva

Esta es la guía definitiva para trabajar con hojas / hojas de trabajo en Excel.

En la parte inferior de esta guía, hemos creado una hoja de referencia de comandos comunes para trabajar con hojas.

Hojas vs. Hojas de trabajo

Hay dos formas de hacer referencia a Sheets usando VBA. El primero es con el objeto Sheets:

1 Hojas de cálculo ("Hoja1"). Activar

El otro es con el objeto Worksheets:

1 Hojas de trabajo ("Hoja1"). Activar

El 99% de las veces, estos dos objetos son idénticos. De hecho, si buscó en línea ejemplos de código VBA, probablemente haya visto ambos objetos utilizados. Esta es la diferencia:

La colección de hojas contiene hojas de trabajo Y hojas de gráficos.

Por lo tanto, use Hojas de cálculo si desea incluir hojas de trabajo Y hojas de gráficos regulares. Utilice Hojas de trabajo si desea excluir las hojas de gráficos. Para el resto de esta guía, usaremos Hojas y Hojas de trabajo indistintamente.

Hojas de referencia

Hay varias formas diferentes de hacer referencia a Hojas de cálculo:

  • Hoja activa
  • Nombre de la pestaña de hoja
  • Número de índice de hoja
  • Nombre de código de hoja

Hoja activa

ActiveSheet es la hoja que está actualmente activa. En otras palabras, si detuvo su código y miró Excel, es la hoja la que está visible. El siguiente ejemplo de código mostrará un cuadro de mensaje con el nombre de ActiveSheet.

1 MsgBox ActiveSheet.Name

Nombre de la hoja

Probablemente esté más familiarizado con hacer referencia a las hojas por su nombre de pestaña:

1 Hojas de cálculo ("TabName"). Activar

Número de índice de hoja

El número de índice de hoja es la posición de la hoja en el libro de trabajo. 1 es la primera hoja. 2 es la segunda hoja, etc .:

1 Hojas (1) .Activar

Número de índice de hoja: última hoja del libro de trabajo

Para hacer referencia a la última hoja del libro de trabajo, use Sheets.Count para obtener el último número de índice:

1 Hojas (Sheets.Count) .Activar

Hoja "Nombre de código"

El nombre del código de la hoja es el nombre del objeto en VBA:

1 CodeName.Activate

Hacer referencia a hojas en otros libros de trabajo

También es fácil hacer referencia a Hojas de cálculo en otros libros de trabajo. Para hacerlo, debe utilizar el objeto Workbooks:

1 Libros de trabajo ("VBA_Examples.xlsm"). Hojas de trabajo ("Hoja1"). Activar

Importante: El Libro de trabajo debe estar abierto antes de que pueda hacer referencia a sus Hojas de cálculo.

Activar vs. Seleccionar hoja

En otro artículo discutimos todo sobre la activación y selección de hojas. La versión corta es esta:

Cuando activa una hoja, se convierte en la hoja activa. Esta es la hoja que vería si mirara su programa de Excel. Solo se puede activar una hoja a la vez.

Activar una hoja

1 Hojas de cálculo ("Hoja1"). Activar

Cuando selecciona una hoja, también se convierte en ActiveSheet. Sin embargo, puede seleccionar varias hojas a la vez. Cuando se seleccionan varias hojas a la vez, la hoja "superior" es ActiveSheet. Sin embargo, puede alternar ActiveSheet dentro de las hojas seleccionadas.

Seleccione una hoja

1 Hojas ("Hoja1"). Seleccione

Seleccionar varias hojas

Use una matriz para seleccionar varias hojas a la vez:

1 Hojas de trabajo (Matriz ("Hoja2", "Hoja3")). Seleccione

Variable de la hoja de trabajo

Asignar una hoja de trabajo a una variable le permite hacer referencia a la hoja de trabajo por su nombre de variable. Esto puede ahorrarle mucho escribir y hacer que su código sea más fácil de leer. También hay muchas otras razones por las que es posible que desee utilizar variables.

Para declarar una variable de hoja de trabajo:

1 Dim ws como hoja de trabajo

Asignar una hoja de trabajo a una variable:

1 Establecer ws = Hojas ("Hoja1")

Ahora puede hacer referencia a la variable de la hoja de trabajo en su código:

1 ws.Activate

Recorrer todas las hojas del libro de trabajo

Las variables de la hoja de trabajo son esenciales cuando desea recorrer todas las hojas de trabajo en un libro de trabajo. La forma más sencilla de hacerlo es:

12345 Dim ws como hoja de trabajoPara cada ws en hojas de trabajoMsgBox ws.nameSiguiente ws

Este código recorrerá todas las hojas de trabajo en el libro de trabajo, mostrando cada nombre de hoja de trabajo en un cuadro de mensaje. Recorrer todas las hojas de un libro de trabajo es muy útil al bloquear / desbloquear u ocultar / mostrar varias hojas de trabajo a la vez.

Protección de la hoja de trabajo

Protección del libro de trabajo

La protección del libro bloquea el libro de cambios estructurales como agregar, eliminar, mover u ocultar hojas de trabajo.

Puede activar la protección del libro de trabajo usando VBA:

1 ActiveWorkbook.Protect Contraseña: = "Contraseña"

o deshabilite la protección del libro de trabajo:

1 ActiveWorkbook.UnProtect Contraseña: = "Contraseña"

Nota: También puede proteger / desproteger sin una contraseña omitiendo el argumento Contraseña:

1 ActiveWorkbook.Protect

Protección de la hoja de trabajo

La protección a nivel de hoja de trabajo evita cambios en hojas de trabajo individuales.

Proteger la hoja de trabajo

1 Hojas de trabajo ("Hoja1"). Proteger "Contraseña"

Desproteger hoja de trabajo

1 Hojas de trabajo ("Hoja1"). Desproteger "Contraseña"

Hay una variedad de opciones para proteger las hojas de trabajo (permitir cambios de formato, permitir que el usuario inserte filas, etc.) Recomendamos usar la Grabadora de macros para registrar la configuración deseada.

Analizamos la protección de la hoja de trabajo con más detalle aquí.

Propiedad visible de la hoja de trabajo

Es posible que ya sepa que las hojas de trabajo se pueden ocultar:

En realidad, hay tres configuraciones de visibilidad de la hoja de trabajo: Visible, Oculto y VeryHidden.Cualquier usuario normal de Excel puede mostrar las hojas ocultas, haciendo clic con el botón derecho en el área de la pestaña de la hoja de trabajo (que se muestra arriba). Las hojas VeryHidden solo se pueden mostrar con código VBA o desde el Editor de VBA. Utilice los siguientes ejemplos de código para ocultar / mostrar hojas de trabajo:

Mostrar hoja de trabajo

1 Hojas de trabajo ("Hoja1"). Visible = xlSheetVisible

Ocultar hoja de trabajo

1 Hojas de trabajo ("Hoja1"). Visible = xlSheetHidden

Hoja de trabajo muy oculta

1 Hojas de trabajo ("Hoja1"). Visible = xlSheetVeryHidden

Eventos a nivel de hoja de trabajo

Los eventos son desencadenantes que pueden hacer que se ejecuten "Procedimientos de eventos". Por ejemplo, puede hacer que el código se ejecute cada vez que se cambia cualquier celda de una hoja de trabajo o cuando se activa una hoja de trabajo.

Los procedimientos de eventos de la hoja de trabajo deben colocarse en un módulo de la hoja de trabajo:

Hay numerosos eventos de hojas de trabajo. Para ver una lista completa, vaya a un módulo de hoja de trabajo, seleccione "Hoja de trabajo" en el primer menú desplegable. Luego, seleccione un procedimiento de evento del segundo menú desplegable para insertarlo en el módulo.

Evento de activación de hoja de trabajo

Los eventos de activación de la hoja de trabajo se ejecutan cada vez que se abre la hoja de trabajo.

123 Private Sub Worksheet_Activate ()Rango ("A1"). SeleccionarEnd Sub

Este código seleccionará la celda A1 (restableciendo el área de vista en la parte superior izquierda de la hoja de trabajo) cada vez que se abra la hoja de trabajo.

Evento de cambio de hoja de trabajo

Los eventos de cambio de hoja de trabajo se ejecutan siempre que se cambia un valor de celda en la hoja de trabajo. Lea nuestro tutorial sobre Eventos de cambio de hoja de trabajo para obtener más información.

Hoja de trabajo Hoja de referencia

A continuación, encontrará una hoja de trucos que contiene ejemplos de códigos comunes para trabajar con hojas en VBA

Hoja de referencia de hojas de trabajo de VBA

Hojas de trabajo de VBA Cheatsheet
DescripciónEjemplo de código
Hacer referencia y activar hojas
Nombre de la pestañaHojas de cálculo ("Entrada"). Activar
Nombre de código de VBASheet1.Activate
Posición del índiceHojas (1) .Activar
Seleccionar hoja
Seleccionar hojaHojas ("Entrada"). Seleccione
Establecer como variableDim ws como hoja de trabajo
Establecer ws = ActiveSheet
Nombre / Cambiar nombreActiveSheet.Name = "NewName"
Hoja siguienteActiveSheet.Next.Activate
Recorrer todas las hojasDim ws como hoja de trabajo
Para cada ws en hojas de trabajo
Msgbox ws.name
Siguiente ws
Recorrer las hojas seleccionadasDim ws como hoja de trabajo
Para cada ws en ActiveWindow.SelectedSheets
MsgBox ws.Name
Siguiente ws
Obtener ActiveSheetMsgBox ActiveSheet.Name
Agregar hojaSábanas.Añadir
Agregar hoja y nombreSheets.Add.Name = "Nueva hoja"
Agregar hoja con el nombre de la celdaSheets.Add.Name = rango ("a3"). Valor
Agregar hoja tras otraHojas.Añadir después: = Hojas ("Entrada")
Agregar hoja después y nombreSheets.Add (After: = Sheets ("Entrada")). Name = "NewSheet"
Agregar hoja antes y nombreSheets.Add (Before: = Sheets ("Entrada")). Name = "NewSheet"
Agregar hoja al final del libro de trabajoSheets.Add After: = Hojas (Sheets.Count)
Agregar hoja al comienzo del libro de trabajoHojas.Añadir (Antes: = Hojas (1)). Nombre = "Primera hoja"
Agregar hoja a variableDim ws como hoja de trabajo
Establecer ws = Sheets.Add
Copiar hojas de trabajo
Mover hoja al final del libro de trabajoHojas ("Hoja1"). Mover después: = Hojas (Hojas.Cuenta)
Al libro de trabajo nuevoHojas ("Hoja1"). Copiar
Hojas seleccionadas al libro de trabajo nuevoActiveWindow.SelectedSheets.Copy
Antes de otra hojaHojas ("Hoja1"). Copiar antes: = Hojas ("Hoja2")
Antes de la primera hojaHojas ("Hoja1"). Copiar antes: = Hojas (1)
Después de la última hojaHojas ("Hoja1"). Copiar después: = Hojas (Hojas.Cuenta)
Copia y nombreHojas ("Hoja1"). Copiar después: = Hojas (Hojas.Cuenta)
ActiveSheet.Name = "Última hoja"
Copiar y nombrar del valor de la celdaHojas ("Hoja1"). Copiar después: = Hojas (Hojas.Cuenta)
ActiveSheet.Name = Rango ("A1"). Valor
A otro libro de trabajoHojas ("Hoja1"). Copiar antes: = Libros de trabajo ("Ejemplo.xlsm"). Hojas (1)
Ocultar / mostrar hojas
Ocultar hojaHojas ("Hoja1"). Visible = Falso
o
Hojas ("Hoja1"). Visible = xlSheetHidden
Mostrar hojaHojas de cálculo ("Hoja1"). Visible = Verdadero
o
Hojas ("Hoja1"). Visible = xlSheetVisible
Hoja muy ocultaHojas ("Hoja1"). Visible = xlSheetVeryHidden
Eliminar o borrar hojas
Eliminar hojaHojas de cálculo ("Hoja1"). Eliminar
Eliminar hoja (manejo de errores)En caso de error, reanudar siguiente
Hojas de cálculo ("Hoja1"). Eliminar
En caso de error, vaya a 0
Eliminar hoja (sin aviso)Application.DisplayAlerts = Falso
Hojas de cálculo ("Hoja1"). Eliminar
Application.DisplayAlerts = True
Hoja claraHojas ("Hoja1"). Celdas Borrar
Borrar solo el contenido de la hojaHojas ("Hoja1"). Cells.ClearContents
Hoja transparente utilizadaHojas ("Hoja1"). Rango usado.Borrar
Proteger o desproteger hojas
Desproteger (sin contraseña)Hojas ("Hoja1"). Desproteger
Desproteger (contraseña)Hojas de cálculo ("Hoja1"). Desproteger "Contraseña"
Proteger (sin contraseña)Hojas ("Hoja1"). Proteger
Proteger (contraseña)Hojas de cálculo ("Hoja1"). Proteger "Contraseña"
Proteger pero permitir el acceso a VBAHojas ("Hoja1"). Proteger UserInterfaceOnly: = True
Desproteger todas las hojasDim ws como hoja de trabajo
Para cada ws en hojas de trabajo
ws. Desproteger "contraseña"
Siguiente ws
wave wave wave wave wave