Video: meteor.js by Roger Zurawicki 2025
VBA supporta ancora un altro tipo di loop in Excel 2016: looping di ogni oggetto in una collezione di oggetti. Una raccolta, come forse saprai, consiste in un numero di oggetti dello stesso tipo. Ad esempio, Excel ha una raccolta di tutte le cartelle di lavoro aperte (la raccolta Workbooks) e ogni cartella di lavoro ha una raccolta di fogli di lavoro (la raccolta Fogli di lavoro).
Quando è necessario eseguire il ciclo di ogni oggetto in una raccolta, utilizzare la struttura For Each-Next. Il seguente esempio scorre in ogni foglio di lavoro nella cartella di lavoro attiva ed elimina il foglio di lavoro, se è vuoto:
Sub DeleteEmptySheets () Dim WkSht Come foglio di lavoro. DisplayAlerts = False per ogni WkSht in ActiveWorkbook. Fogli di lavoro Se WorksheetFunction. CountA (WkSht. Cells) = 0 Quindi WkSht. Elimina End If Next WkSht Application. DisplayAlerts = True End Sub
In questo esempio, la variabile WkSht è una variabile oggetto che rappresenta ciascun foglio di lavoro nella cartella di lavoro. Niente è speciale per il nome variabile WkSht; puoi usare qualsiasi nome di variabile che ti piace.
Il codice scorre ciclicamente attraverso ciascun foglio di lavoro e determina un foglio vuoto contando le celle non vuote. Se il conteggio è zero, il foglio è vuoto e viene eliminato. Si noti che l'impostazione DisplayAlerts è disattivata mentre il loop sta facendo la sua cosa. Senza questa istruzione, Excel visualizza un avviso ogni volta che un foglio sta per essere eliminato.
Se tutti i fogli di lavoro nella cartella di lavoro sono vuoti, si verifica un errore quando Excel tenta di eliminare l'unico foglio. Normalmente, si dovrebbe scrivere il codice per gestire quella situazione.
Ecco un altro esempio per Ogni-Successivo. Questa procedura utilizza un ciclo per nascondere tutti i fogli di lavoro nella cartella di lavoro attiva, ad eccezione del foglio attivo.
Sub Hide Hide () Dim Sht come foglio di lavoro per ogni Sht In ActiveWorkbook. Fogli di lavoro Se Sht. Nome ActiveSheet. Nome Allora Sht. Visible = xlSheetHidden End If Next Sht End Sub
La procedura HideSheets controlla il nome del foglio. Se non è uguale al nome del foglio attivo, il foglio è nascosto. Si noti che la proprietà Visible non è booleana. Questa proprietà può effettivamente assumere uno qualsiasi dei tre valori e Excel fornisce tre costanti incorporate. Se sei curioso della terza possibilità (xlVeryHidden), controlla il sistema di aiuto.
Ciò che viene nascosto deve alla fine essere scoperto, quindi ecco una macro che mostra tutti i fogli di lavoro nella cartella di lavoro attiva:
Sub UnhideSheets () Dim Sht Come foglio di lavoro per ogni Sht In ActiveWorkbook. Fogli di lavoro Sht.Visible = xlSheetVisible Next Sht End Sub
Non sorprendentemente, è possibile creare cicli annidati per Each-Next. La procedura CountBold scorre in ogni cella dell'intervallo utilizzato su ciascun foglio di lavoro in ogni cartella di lavoro aperta e visualizza un conteggio del numero di celle formattate in grassetto:
Sub CountBold () Dim WBook As Workbook Dim WSheet As Foglio di lavoro Dim Cell Come intervallo Dim Cnt tanto tempo per ogni WBook in cartelle di lavoro per ogni WSheet in WBook. Fogli di lavoro per ogni cella in WSheet. UsedRange If Cell. Font. Grassetto = True Then Cnt = Cnt + 1 Next Cell Next WSheet Avanti WBook MsgBox Cnt & "celle in grassetto trovate" End Sub
