Este tutorial le mostrará ejemplos del uso de For Each Loop en VBA. Haga clic aquí para obtener más información sobre los bucles en general.
Para cada bucle
For Each Loop le permite recorrer cada objeto en una colección:
- Todas las celdas de un rango
- Todas las hojas de trabajo en un libro
- Todos los libros abiertos
- Todas las formas en una hoja de trabajo
- Todos los elementos de una matriz
- ¡y más!
Para cada uno: ejemplos básicos
Estos ejemplos demostrarán cómo configurar los bucles For Each para recorrer diferentes tipos de objetos.
Bucle a través de celdas
Este procedimiento recorrerá cada celda en el rango A1: A10, estableciendo la celda a su derecha igual a sí misma.
12345678 | Sub ForEachCell ()Atenuar celda como rangoPara cada celda en hojas ("Hoja1"). Rango ("A1: A10")Cell.Offset (0, 1) .value = Cell.valueSiguiente celdaEnd Sub |
Bucle a través de hojas
Este procedimiento recorrerá cada hoja en un libro de trabajo, mostrando cada hoja.
12345678 | Sub ForEachSheets ()Dim ws como hoja de trabajoPara cada ws en hojasws.Visible = VerdaderoHoja siguienteEnd Sub |
Recorrer libros de trabajo
Este procedimiento recorrerá cada libro de trabajo y cerrará cada uno.
12345678 | Sub ForEachWorkbooks ()Dim wb como libro de trabajoPara cada wb en libros de trabajowb.CerrarSiguiente wbEnd Sub |
Bucle a través de formas
Este procedimiento recorrerá cada forma en Sheet1, eliminando cada una.
12345678 | Sub ForEachShape ()Dim Shp como formaPara cada Shp In Sheets ("Sheet1"). FormasShp.DeleteSiguiente ShpEnd Sub |
Bucle a través de gráficos
Este procedimiento recorrerá cada gráfico en Sheet1, eliminando cada uno.
12345678 | Sub ForEachCharts ()Dim cht como ChartObjectPara cada cht In Sheets ("Sheet1"). ChartObjectscht.DeleteSiguiente chtEnd Sub |
Bucle a través de tablas dinámicas
Este procedimiento recorrerá cada tabla dinámica en Sheet1, borrando cada una
12345678 | Sub ForEachPivotTables ()Dim pvt como tabla dinámicaPara cada pvt en hojas ("Hoja1"). Tablas dinámicaspvt.ClearTableSiguiente pvtEnd Sub |
Bucle a través de tablas
Este procedimiento recorrerá cada tabla en Sheet1, eliminando cada una.
12345678 | Sub ForEachTables ()Dim tbl como ListObjectPara cada tbl en hojas ("Hoja1"). ListObjectstbl.DeleteSiguiente tblEnd Sub |
Bucle a través de elementos en la matriz
Este procedimiento recorrerá cada elemento de una matriz, mostrará cada valor en un cuadro de mensaje,
12345678910 | Sub ForEachItemInArray ()Dim arrValue como varianteAtenuar elemento como variantearrValue = Array ("Elemento 1", "Elemento 2", "Elemento 3")Para cada artículo en arrValueElemento de MsgBoxProximo articuloEnd Sub |
Bucle a través de números
Este procedimiento recorrerá cada número en una matriz, mostrará cada valor en un cuadro de mensaje,
12345678910111213 | Sub ForEachNumberInNumbers ()Dim arrNumber (1 a 3) como enteroDim num como variantearrNumber (1) = 10arrNumber (2) = 20arrNumber (3) = 30Para cada num en arrNumberMsgbox NumSiguiente numEnd Sub |
Para cada generador de bucles
Los ejemplos de este artículo se crearon con la Constructor de bucles en nuestro Complemento de VBA: AutoMacro.
los Constructor de bucles hace que sea muy fácil generar código para recorrer objetos. AutoMacro también contiene muchas otras Generadores de código, una extensa Biblioteca de códigoy poderoso Herramientas de codificación.
Para cada uno - Si
También puede utilizar las sentencias If dentro de los bucles para probar si los objetos cumplen con ciertos criterios, solo realizando acciones en aquellos objetos que cumplen con los criterios. A continuación, se muestra un ejemplo de cómo recorrer cada celda de un rango:
Para cada celda en el rango: si
1234567891011121314 | Sub If_Loop ()Atenuar celda como rangoPara cada celda del rango ("A2: A6")Si Cell.Value> 0 entoncesCell.Offset (0, 1) .Value = "Positivo"Else Si Cell.Value <0 EntoncesCell.Offset (0, 1) .Value = "Negative"DemásCell.Offset (0, 1) .Value = "Cero"Terminara siSiguiente celdaEnd Sub |
Para cada uno de los ejemplos comunes
Cerrar todos los libros de trabajo
Este procedimiento cerrará todos los libros abiertos y guardará los cambios.
123456789 | Sub CloseAllWorkbooks ()Dim wb como libro de trabajoPara cada wb en libros de trabajowb.Close SaveChanges: = TrueSiguiente wbEnd Sub |
Ocultar todas las hojas
Este procedimiento ocultará todas las hojas de trabajo.
12345678 | Sub HideAllSheets ()Dim ws como hoja de trabajoPara cada ws en hojasws.Visible = xlSheetHiddenSiguiente wsEnd Sub |
Mostrar todas las hojas
Este procedimiento mostrará todas las hojas de trabajo.
12345678 | Sub UnhideAllSheets ()Dim ws como hoja de trabajoPara cada ws en hojasws.Visible = xlSheetVisibleSiguiente wsEnd Sub |
Proteger todas las hojas
Este procedimiento protegerá todas las hojas de trabajo.
12345678 | Sub ProtectAllSheets ()Dim ws como hoja de trabajoPara cada ws en hojasws.Protect Contraseña: = "…"Siguiente wsEnd Sub |
Desproteger todas las hojas
Este procedimiento desprotegerá todas las hojas de trabajo.
12345678 | Sub UnprotectAllSheets ()Dim ws como hoja de trabajoPara cada ws en hojasws.Unprotect Password: = "…"Siguiente wsEnd Sub |
Eliminar todas las formas en todas las hojas de trabajo
Este procedimiento eliminará todas las formas de un libro.
123456789101112 | Sub DeleteAllShapesOnAllWorksheets ()Atenuar hoja como hoja de trabajoDim Shp como formaPara cada ws en hojasPara cada envío en ws.Shp.DeleteSiguiente ShpSiguiente wsEnd Sub |
Actualizar todas las tablas dinámicas
Este procedimiento actualizará todas las tablas dinámicas en una hoja.
12345678 | Sub RefreshAllPivotTables ()Atenuar pvt como tabla dinámicaPara cada pvt en hojas ("Hoja1"). Tablas dinámicaspvt.RefreshTableSiguiente pvtEnd Sub |
Usando For Each en Access VBA
El bucle For Each funciona de la misma manera en Access VBA que en Excel VBA. El siguiente ejemplo eliminará todas las tablas de la base de datos actual.
123456789 | Sub RemoveAllTables ()Dim tdf como TableDefDim dbs como base de datosEstablecer dbs = CurrentDbPara cada tdf en dbs.TableDefsDoCmd.DeleteObject tdf.NameCírculoEstablecer dbs = NadaEnd Sub |