Questo tutorial ti mostrerà esempi di utilizzo di For Each Loop in VBA. Clicca qui per saperne di più sui loop in generale.
Per ogni ciclo
Il For Each Loop ti consente di eseguire il loop through ogni oggetto in una collezione:
- Tutte le celle in un intervallo
- Tutti i fogli di lavoro in una cartella di lavoro
- Tutte le cartelle di lavoro aperte
- Tutte le forme in un foglio di lavoro
- Tutti gli elementi in un array
- e altro!
Per ciascuno: esempi di base
Questi esempi dimostreranno come impostare i cicli For Each per scorrere diversi tipi di oggetti.
Passa attraverso le celle
Questa procedura eseguirà il ciclo di ogni cella nell'intervallo A1: A10, impostando la cella a destra uguale a se stessa.
12345678 | Sub ForEachCell()Cella fioca come intervalloPer ogni cella in fogli ("Foglio1"). Intervallo ("A1:A10")Cell.Offset(0, 1).value = Cell.valueCella successivaFine sottotitolo |
Passa attraverso i fogli
Questa procedura scorrerà ogni foglio in una cartella di lavoro, scoprendo ogni foglio.
12345678 | Sub ForEachSheets()Dim ws come foglio di lavoroPer ogni ws in fogliws.Visible = TrueFoglio successivoFine sottotitolo |
Passa attraverso le cartelle di lavoro
Questa procedura scorrerà ogni cartella di lavoro, chiudendola.
12345678 | Sub ForEachWorkbooks()Dim wb come cartella di lavoroPer ogni wb nelle cartelle di lavorowb.Chiudiwb successivoFine sottotitolo |
Loop attraverso le forme
Questa procedura scorrerà ogni forma in Foglio1, eliminando ciascuna di esse.
12345678 | Sub ForEachShape()Dim Shp come formaPer ogni Shp in fogli ("Foglio1"). FormeShp.EliminaSuccessivo ShpFine sottotitolo |
Loop attraverso grafici
Questa procedura scorrerà ogni Grafico in Foglio1, eliminandone uno.
12345678 | Sub ForEachCharts()Dim cht As ChartObjectPer ogni cht In Sheets("Sheet1").ChartObjectscht.EliminaAvantiFine sottotitolo |
Passa attraverso le tabelle pivot
Questa procedura scorrerà ogni tabella pivot in Sheet1, cancellandole
12345678 | Sub ForEachPivotTables()Dim pvt come tabella pivotPer ogni pvt in fogli ("Foglio1"). Tabelle pivotpvt.ClearTablepvt Next successivoFine sottotitolo |
Scorri tabelle
Questa procedura eseguirà il ciclo di ogni tabella in Sheet1, eliminando ciascuno di essi.
12345678 | Sub ForEachTables()Dim tbl As ListObjectPer ogni tbl In Sheets("Sheet1").ListObjectstbl.Eliminaprossimo tblFine sottotitolo |
Passa attraverso gli elementi nell'array
Questa procedura scorrerà ogni elemento in un array, visualizzerà ogni valore in un msgbox,
12345678910 | Sub ForEachItemInArray()Dim arrValue As VariantDim Item come variantearrValue = Array("Articolo 1", "Articolo 2", "Articolo 3")Per ogni elemento in arrValueOggetto MsgBoxArticolo successivoFine sottotitolo |
Passa attraverso i numeri
Questa procedura scorrerà ogni numero in un array, visualizzerà ogni valore in un msgbox,
12345678910111213 | Sub ForEachNumberInNumbers()Dim arrNumber (da 1 a 3) come numero interoDim num come varianteNumeroArr(1) = 10arrNumero(2) = 20arrNumero(3) = 30Per ogni numero in arrNumberNumero casella messaggiNumero successivoFine sottotitolo |
Per ogni generatore di loop
Gli esempi in questo articolo sono stati costruiti con il Generatore di loop nel nostro Componente aggiuntivo VBA: AutoMacro.
Il Generatore di loop rende molto facile generare codice per scorrere gli oggetti. AutoMacro contiene anche molti altri Generatori di codice, un vasto Libreria di codici, e potente Strumenti di codifica.
Per ciascuno - Se
Puoi anche utilizzare le istruzioni If all'interno dei cicli per verificare se gli oggetti soddisfano determinati criteri, eseguendo azioni solo su quegli oggetti che soddisfano i criteri. Ecco un esempio di ciclo attraverso ogni cella in un intervallo:
Per ogni cella nell'intervallo - Se
1234567891011121314 | Sub If_Loop()Dim Cell come intervalloPer ogni cella nell'intervallo ("A2: A6")Se Cell.Value > 0 AlloraCell.Offset(0, 1).Value = "Positivo"ElseIf Cell.Value < 0 AlloraCell.Offset(0, 1).Value = "Negativo"AltroCell.Offset(0, 1).Value = "Zero"Finisci seCella successivaFine sottotitolo |
Per ogni esempio comune
Chiudi tutte le cartelle di lavoro
Questa procedura chiuderà tutte le cartelle di lavoro aperte, salvando le modifiche.
123456789 | Sub CloseAllWorkbooks()Dim wb come cartella di lavoroPer ogni wb nelle cartelle di lavorowb.Chiudi SaveChanges:=Truewb successivoFine sottotitolo |
Nascondi tutti i fogli
Questa procedura nasconderà tutti i fogli di lavoro.
12345678 | Sub NascondiTuttiFogli()Dim ws come foglio di lavoroPer ogni ws in fogliws.Visible = xlSheetHiddenAvanti wFine sottotitolo |
Scopri tutti i fogli
Questa procedura mostrerà tutti i fogli di lavoro.
12345678 | Sub Mostra tutti i fogli()Dim ws come foglio di lavoroPer ogni ws in fogliws.Visible = xlSheetVisibleAvanti wFine sottotitolo |
Proteggi tutti i fogli
Questa procedura proteggerà tutti i fogli di lavoro.
12345678 | Sub ProtectAllSheets()Dim ws come foglio di lavoroPer ogni ws in fogliws.Proteggi password:="… "Avanti wFine sottotitolo |
Annulla protezione di tutti i fogli
Questa procedura rimuoverà la protezione di tutti i fogli di lavoro.
12345678 | Sub UnprotectAllSheets()Dim ws come foglio di lavoroPer ogni ws in fogliws.Unprotect Password:="… "Avanti wFine sottotitolo |
Elimina tutte le forme su tutti i fogli di lavoro
Questa procedura eliminerà tutte le forme in una cartella di lavoro.
123456789101112 | Sub DeleteAllShapesOnAllWorksheets()Dim Sheet come foglio di lavoroDim Shp come formaPer ogni ws in fogliPer ogni nave in ws.ShapesShp.EliminaSuccessivo ShpAvanti wFine sottotitolo |
Aggiorna tutte le tabelle pivot
Questa procedura aggiornerà tutte le tabelle pivot su un foglio.
12345678 | Sub RefreshAllPivotTables()Dim pvt come tabella pivotPer ogni pvt in fogli ("Foglio1"). Tabelle pivotpvt.RefreshTableprossimo pvtFine sottotitolo |
Utilizzo di For Each in Access VBA
Il ciclo For Each funziona allo stesso modo in Access VBA come in Excel VBA. L'esempio seguente rimuoverà tutte le tabelle nel database corrente.
123456789 | Sotto RimuoviTutte le Tabelle()Dim tdf come TableDefDim dbs come databaseImposta dbs = CurrentDbPer ogni tdf in dbs.TableDefsDoCmd.DeleteObject tdf.NameCiclo continuoImposta dbs = NienteFine sottotitolo |