Cómo utilizar para cada uno de los siguientes bucles con colecciones en VBA Excel 2016

  1. Software
  2. Oficina de Microsoft
  3. Excel
  4. Cómo utilizar para cada uno de los siguientes bucles con colecciones en VBA Excel 2016

Libro Relacionado

Por John Walkenbach

VBA soporta otro tipo de looping en Excel 2016: looping a través de cada objeto en una colección de objetos. Una colección, como ya sabrá, está formada por varios objetos del mismo tipo. Por ejemplo, Excel tiene una colección de todos los libros de trabajo abiertos (la colección de libros de trabajo), y cada libro de trabajo tiene una colección de hojas de trabajo (la colección de hojas de trabajo).

Cuando necesite hacer un bucle a través de cada objeto de una colección, utilice la estructura Para cada uno: Siguiente. El siguiente ejemplo recorre cada hoja de trabajo del libro de trabajo activo y elimina la hoja de trabajo si está vacía:

Sub DeleteEmptySheets() Dim WkSht As Worksheet Application.DisplayAlerts = False For Each WkSht In ActiveWorkbook.Worksheets If WorksheetFunction.CountA(WkSht.Cells) = 0 Then WkSht.Delete End If Next WkSht Application.DisplayAlerts = TrueEnd Sub.

En este ejemplo, la variable WkSht es una variable de objeto que representa cada hoja de trabajo del libro de trabajo. No hay nada especial en el nombre de variable WkSht; puedes usar cualquier nombre de variable que te guste.

El código recorre cada hoja de trabajo y determina una hoja vacía contando las celdas que no están en blanco. Si ese conteo es cero, la hoja está vacía y se borra. Observe que la configuración de DisplayAlerts está desactivada mientras el bucle está haciendo lo suyo. Sin esa declaración, Excel muestra una advertencia cada vez que una hoja está a punto de ser borrada.

Si todas las hojas de trabajo del libro de trabajo están vacías, se obtiene un error cuando Excel intenta eliminar la única hoja. Normalmente, escribirías código para manejar esa situación.

Aquí hay otro ejemplo para cada uno. Este procedimiento utiliza un bucle para ocultar todas las hojas de trabajo en el libro de trabajo activo, excepto la hoja activa.

Sub HideSheets() Dim Sht As Worksheet For Each Sht In ActiveWorkbook.Worksheets If Sht.Name <> ActiveSheet.Name Then Sht.Visible = xlSheetHidden End If Next ShtEnd Sub.

El procedimiento HideSheets comprueba el nombre de la hoja. Si no es el mismo que el nombre de la hoja activa, la hoja se oculta. Note que la propiedad Visible no es booleana. Esta propiedad puede tomar cualquiera de los tres valores, y Excel proporciona tres constantes incorporadas. Si tienes curiosidad sobre la tercera posibilidad (xlVeryHidden), consulta el sistema de ayuda.

Lo que se oculta debe eventualmente quedar sin ocultar, así que aquí hay una macro que desoculta todas las hojas de trabajo en el libro de trabajo activo:

Subtítulos: UnhideSheets() Dim Sht As Worksheet For Each Sht In ActiveWorkbook.Worksheets Sht.Visible = xlSheetVisible Next ShtEnd Subtítulos

No es de extrañar que pueda crear bucles anidados para cada uno de los siguientes bucles. El procedimiento CountBold recorre todas las celdas del rango utilizado en cada hoja de cálculo de cada libro de trabajo abierto y muestra un recuento del número de celdas que están formateadas como negrita:

Sub CountBold() Dim WBook As Workbook Dim WSheet As Worksheet Dim Cell As Range Dim Cnt As Long For Each WBook In Workbooks For Each WSheet In WBook.Worksheets For Each Cell In WSheet.UsedRange If Cell.Font.Bold = True Then Cnt = Cnt + 1 Next Cell Next WSheet Next WBook Next WBook MsgBox Cnt & " bold cells found"End Sub

No Responses

Write a response