Como Recorrer hojas seleccionadas con VBA
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.
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.
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:
- Recuerda qué hojas de trabajo habíamos seleccionado
- Aplicar la acción a cada hoja individualmente.
- 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