Hvordan bruke For Each

VBA støtter enda en type looping i Excel 2016: looping gjennom hvert objekt i en samling av objekter. En samling, som du kanskje vet, består av en rekke gjenstander av samme type. For eksempel har Excel en samling av alle åpne arbeidsbøker (den arbeidsbøker samling), og hver arbeidsbok har en samling av regneark (regnearkene samling).
Når du trenger å sløyfe gjennom hvert objekt i en samling, bruker du for hver -Neste struktur. Følgende eksempel looper gjennom hvert regneark i den aktive arbeidsboken og sletter regnearket hvis det er tomt:
Sub DeleteEmptySheets () Dim WkSht Som regneark Application.DisplayAlerts = False for hver WkSht I ActiveWorkbook.Worksheets Hvis WorksheetFunction.CountA (WkSht.Cells ) = 0 Then WkSht.Delete End If Neste WkSht Application.DisplayAlerts = TrueEnd Sub

i dette eksemplet er variabelen WkSht et objekt variabel som representerer hvert regneark i arbeidsboken. Ingenting er spesielt med variabelnavnet WkSht; du kan bruke alle variabelnavnet som du liker.

Koden looper gjennom hvert regneark og bestemmer et tomt ark ved å telle blank celler. Hvis det teller er null, er arket tom, og det er slettes. Legg merke til at DisplayAlerts innstillingen er slått av mens sløyfen gjør sine ting. Uten den uttalelsen, dukker Excel opp en advarsel hver gang et ark er i ferd med å bli slettet.

Hvis alle regnearkene i arbeidsboken er tom, får du en feilmelding når Excel forsøker å slette den eneste ark. Normalt vil du skrive kode for å håndtere den situasjonen.

Her er en annen For Hver-Neste eksempel. Denne fremgangsmåten bruker en løkke for å skjule alle regnearkene i den aktive arbeidsboken unntatt det aktive arket
Sub HideSheets () Dim Sht Som skjemaet for hver Sht I ActiveWorkbook.Worksheets Hvis Sht.Name. ≪ > ActiveSheet.Name Deretter Sht.Visible = xlSheetHidden End If Neste ShtEnd Sub

HideSheets prosedyre sjekker navnet arket. Hvis det ikke er det samme som det aktive arket navn, er arket skjult. Legg merke til at Synlig eiendommen er ikke boolsk. Denne egenskapen kan faktisk ta på noen av tre
verdier, og Excel gir tre innebygde konstanter. Hvis du er nysgjerrig på den tredje mulighet (xlVeryHidden), se hjelpesystemet

Hva blir gjemt må til slutt få unhidden, her er slik at en makro som Viser alle skjulte regnearkene i den aktive arbeidsboken.
Sub UnhideSheets () Dim Sht Som skjemaet for hver Sht I ActiveWorkbook.Worksheets Sht.Visible = xlSheetVisible Neste ShtEnd Sub

Ikke overraskende, du kan lage nestet For Hver-Neste sløyfer. Den CountBold prosedyre looper gjennom hver celle i brukte hold hvert regneark i alle åpne arbeidsboken og viser en telling av antall celler som er formatert som fet skrift:
Sub CountBold () Dim WBook Som arbeidsbok Dim WSheet Som regneark Dim Cell som Range Dim teller lenger pr WBook I arbeidsbøker for hvert WSheet I WBook.Worksheets for hver celle i WSheet.UsedRange Hvis Cell.Font.Bold = True Deretter teller = teller + 1 Neste Cell Neste WSheet Neste WBook MsgBox teller & "Fet celler funnet" End Sub