Como Recorrer hojas seleccionadas con VBA

Índice
  1. Recorrer las hojas de trabajo seleccionadas
  2. Aplicar acciones de una sola hoja de trabajo con un bucle
    1. ¿Cómo hacer que la pantalla deje de parpadear?
    2. Trabajar con hojas de gráficos
  3. Conclusión

Recorrer las hojas de trabajo es una de las acciones más comunes realizadas por quienes usan VBA para automatizar Excel . Sin embargo, no siempre queremos aplicar una macro a cada hoja de trabajo; a veces, solo lo queremos para cada hoja seleccionada. Dependiendo de la acción que se esté realizando, esto puede provocar un error.

Mensaje de error al aplicar protección

Esto ocurre cuando la acción sólo se puede realizar una hoja a la vez. No es un problema de VBA; Es un problema de Excel. Por ejemplo, si selecciona dos hojas de trabajo e intenta aplicar protección a la hoja de trabajo, notará que la opción está atenuada.

Opción atenuada cuando se aplica a varias hojas

No se puede hacer en Excel; por lo tanto, no sorprende que tampoco se pueda hacer en VBA.

En los ejemplos de código siguientes, resolveremos este problema. Primero, veremos cómo podemos recorrer las hojas seleccionadas. En segundo lugar, veremos el uso de esta técnica para automatizar acciones que normalmente se aplican hoja por hoja.

Descargue el archivo de ejemplo: únase al programa Insiders gratuito y obtenga acceso al archivo de ejemplo utilizado para esta publicación.

Nombre de archivo: 0030 Recorrer las hojas seleccionadas con VBA.zip

Tener acceso

Recorrer las hojas de trabajo seleccionadas

Normalmente con VBA, recorreríamos las hojas de trabajo de ActiveWorkbook, pero en este escenario, queremos usar el objeto ActiveWindow en su lugar.

ActiveWindow tiene un objeto llamado SelectedSheets, que contiene una matriz de... (¡sí, lo has adivinado!) las hojas seleccionadas. Perfecto para nuestras necesidades.

El siguiente código recorre todas las hojas de trabajo seleccionadas:

Sub LoopThroughSelectedSheets()'Crear variable para contener hojas de trabajoDim ws As Worksheet'Recorre cada hoja de trabajo seleccionada para cada ws en ActiveWindow.SelectedSheets 'Realiza acción. Por ejemplo, ocultar las hojas de trabajo seleccionadas ws.Visible = xlSheetVeryHiddenNext wsEnd Sub

Este es el código básico, por lo que es posible que deba agregar comprobaciones de errores adicionales. Al ocultar hojas de trabajo, por ejemplo, debe haber al menos una hoja visible. Por lo tanto, necesitaremos contar las hojas de trabajo visibles antes de comenzar o ignorar los errores. Las comprobaciones de errores que se aplicarán dependerán de sus requisitos específicos.

La macro anterior funciona donde se puede realizar la acción mientras se seleccionan otras hojas.

Aplicar acciones de una sola hoja de trabajo con un bucle

Ya que algunas acciones sólo se pueden aplicar una hoja a la vez. Para estos, necesitamos cambiar nuestro enfoque. Si tuviéramos que hacer esto manualmente, haríamos:

  1. Recuerda qué hojas de trabajo habíamos seleccionado
  2. Aplicar la acción a cada hoja individualmente.
  3. Vuelva a seleccionar las mismas hojas de trabajo

Bueno, eso es exactamente lo que vamos a hacer, pero con VBA.

Los comentarios en el código le ayudarán a comprender qué hace cada línea de macro.

Sub SingleActionWhenLoopingThroughSelectedSheets()Dim ws As WorksheetDim SheetArray As VariantDim myPassword As Variant'Capture las hojas seleccionadasSet SheetArray = ActiveWindow.SelectedSheets'Recorra cada hoja de trabajo seleccionadaPara cada ws en SheetArray 'Seleccione la hoja de trabajo ws.Seleccione' Realizar acción. por ejemplo, proteger cada hoja ws.Protect Next ws'Volver a seleccionar las hojassheetArray.SelectEnd Sub

Recuerde, dependiendo de la acción que se esté realizando, es posible que necesite agregar comprobaciones de errores adicionales.

¿Cómo hacer que la pantalla deje de parpadear?

Con VBA deberíamos realizar la mayoría de acciones sin seleccionar ni activar nada; hace que la macro sea más eficiente. Sin embargo, con esta solución, esa no es una opción. Como resultado, la pantalla puede parpadear mientras se ejecuta la macro. Para evitar esto, podemos cambiar la propiedad Application.ScreenUpdating al inicio y al final de la macro.

Inserte lo siguiente directamente después de que se haya declarado Sub y antes de declarar cualquier variable:

Aplicación.ScreenUpdating = Falso

Inserte lo siguiente directamente antes de la declaración End Sub:

Aplicación.ScreenUpdating = Verdadero

Trabajar con hojas de gráficos

En la mente de Excel, las hojas de gráficos no son lo mismo que las hojas de cálculo. Por lo tanto, si tiene hojas de gráficos incluidas en su selección, es posible que deba realizar una pequeña modificación para incluir todos los tipos de hojas.

Cambia esto:

Atenuar ws como hoja de trabajo

A esto:

Atenuar ws como objeto

Conclusión

Entonces ahí lo tienes. Así es como recorremos las hojas seleccionadas. Tiene algunos problemas potenciales más que recorrer todas las hojas. Pero, al pensar como un humano (después de todo, lo eres), podemos crear una solución adecuada.

¡Feliz bucle!

Artículos Relacionados:

  • Guardar Excel como PDF

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir

Este sitio web utiliza cookies para mejorar la experiencia del usuario y garantizar un funcionamiento eficiente. Al utilizar nuestro sitio web, aceptas todas las cookies de acuerdo con nuestra política de cookies. Leer mas...