Video: Колибри Т32 - маленький турбореактивный двигатель 2024
VBA stöder ännu en typ av looping i Excel 2016: looping genom varje objekt i en samling objekt. En samling, som du kanske vet, består av ett antal föremål av samma typ. Excel har till exempel en samling av alla öppna arbetsböcker (samlingen Arbetsböcker), och varje arbetsbok har en samling arbetsböcker (samlingen Arbetsblad).
När du behöver slinga igenom varje objekt i en samling, använd strukturen För varje nästa. Följande exempel loopar genom varje kalkylblad i den aktiva arbetsboken och raderar kalkylbladet om det är tomt:
Sub DeleteEmptySheets () Dim WkSht som arbetsbladsprogram. DisplayAlerts = False för varje WkSht i ActiveWorkbook. Arbetsblad Om ArbetsbladFunktion. CountA (WkSht. Cells) = 0 Då WkSht. Ta bort slut om nästa WkSht-applikation. DisplayAlerts = True End Sub
I det här exemplet är variabeln WkSht en objektvariabel som representerar varje kalkylblad i arbetsboken. Ingenting är speciellt om det variabla namnet WkSht; du kan använda det variabla namnet du vill ha.
Koden slingrar sig genom varje kalkylblad och bestämmer ett tomt ark genom att räkna nonblank-cellerna. Om räkningen är noll är arket tomt och det raderas. Observera att DisplayAlerts-inställningen är avstängd medan slingan gör sin sak. Utan det uttalandet dyker Excel upp en varning varje gång ett ark håller på att raderas.
Om alla kalkylblad i arbetsboken är tomma får du ett fel när Excel försöker radera det enda arket. Normalt skulle du skriva kod för att hantera den situationen.
Här är ett annat för varje nästa exempel. Denna procedur använder en slinga för att dölja alla kalkylblad i den aktiva arbetsboken, utom det aktiva arket.
Sub HideSheets () Dim Sht som arbetsblad för varje del i ActiveWorkbook. Arbetsblad om Sht. Namn ActiveSheet. Namn sedan Sht. Synlig = xlSheetHidden Slut om nästa avslutas under
Verktyget HideSheets kontrollerar arknamnet. Om det inte är detsamma som det aktiva arkets namn är arket gömt. Observera att den synliga egenskapen inte är booleska. Den här egenskapen kan faktiskt ta på något av tre -värdena, och Excel har tre inbyggda konstanter. Om du är nyfiken på den tredje möjligheten (xlVeryHidden), kolla hjälpsystemet.
Det som blir dolt måste så småningom bli otäckt, så här är ett makro som innehåller alla arbetsblad i den aktiva arbetsboken:
Sub UnhideSheets () Dim Sht som arbetsblad för varje del i ActiveWorkbook. Arbetsblad Sht.Synlig = xlSheetVisible Nästa Sht End Sub
Inte förvånansvärt kan du skapa inbyggda för varje-nästa-slingor. CountBold-proceduren slingrar sig genom varje cell i det använda området på varje arbetsblad i varje öppen arbetsbok och visar ett antal antal celler som är formaterade som fet:
Sub CountBold () Dim WBook som arbetsbok Dim WSheet som arbetsblad Dim Cell Som Range Dim Cnt så länge för varje WBook i arbetsböcker för varje WSheet i WBook. Arbetsblad för varje cell i WSheet. UsedRange If Cell. Font. Fet = sant sedan Cnt = Cnt + 1 nästa cell nästa WSheet Nästa WBook MsgBox Cnt & "fetiska celler hittade" Slut Sub