Video: How Machines Learn 2024
VBA understøtter endnu en slags looping i Excel 2016: looping gennem hvert objekt i en samling af objekter. En samling, som du måske ved, består af en række genstande af samme type. Eksempelvis har Excel en samling af alle åbne arbejdsbøger (samlingen Workbooks), og hver projektmappe har en samling regneark (regnearksamlingen).
Når du skal løkke gennem hvert objekt i en samling, skal du bruge strukturen For hver-næste. Følgende eksempel loops gennem hvert regneark i den aktive arbejdsbog og sletter regnearket, hvis det er tomt:
Sub DeleteEmptySheets () Dim WkSht som regnearksprogram. DisplayAlerts = False for hver WkSht i ActiveWorkbook. Regneark Hvis WorksheetFunction. CountA (WkSht. Cells) = 0 Så WkSht. Slet afslut hvis næste WkSht-applikation. DisplayAlerts = True End Sub
I dette eksempel er variablen WkSht en objektvariabel, som repræsenterer hvert regneark i projektmappen. Intet er specielt om det variable navn WkSht; Du kan bruge et variabelt navn, som du kan lide.
Koden løber gennem hvert regneark og bestemmer et tomt ark ved at tælle nonblank-cellerne. Hvis denne tælling er nul, er arket tomt, og det er slettet. Bemærk, at DisplayAlerts-indstillingen er slukket, mens loopen gør dens ting. Uden denne erklæring opdager Excel en advarsel hver gang et ark er ved at blive slettet.
Hvis alle regnearkene i projektmappen er tomme, får du en fejl, når Excel forsøger at slette det eneste ark. Normalt ville du skrive kode til at håndtere denne situation.
Her er et andet til hver-næste eksempel. Denne procedure bruger en sløjfe til at skjule alle regneark i den aktive arbejdsbog undtagen det aktive ark.
Sub HideSheets () Dim Sht som arbejdsark for hver enkelt del i ActiveWorkbook. Regneark Hvis Sht. Navngiv ActiveSheet. Navn derefter Sht. Synlig = xlSheetHidden End Hvis Næste Sht End Sub
Skjulheadsproceduren kontrollerer arknavnet. Hvis det ikke er det samme som det aktive arks navn, er arket skjult. Bemærk, at den synlige egenskab ikke er boolsk. Denne egenskab kan faktisk påtage sig nogen af tre værdier, og Excel giver tre indbyggede konstanter. Hvis du er nysgerrig efter den tredje mulighed (xlVeryHidden), skal du tjekke Hjælp-systemet.
Hvad der bliver skjult, skal i sidste ende blive unhidden, så her er en makro, der fjerner alle regneark i den aktive arbejdsbog:
Sub UnhideSheets () Dim Sht som regneark for hver side i ActiveWorkbook. Regneark Sht.Synlig = xlSheetVisible Næste Sht End Sub
Ikke overraskende, kan du oprette nestede til hver-næste sløjfer. CountBold-proceduren løber gennem hver celle i det anvendte område på hvert regneark i hver åben arbejdsbog og viser et tal af antallet af celler, der er formateret som fed:
Sub CountBold () Dim WBook Som Workbook Dim WSheet Som Worksheet Dim Cell Som Range Dim Cnt så lang tid for hver WBook i arbejdsbøger for hver WSheet i WBook. Regneark for hver celle i WSheet. UsedRange If Cell. Font. Fed = True + Cnt = Cnt + 1 Næste Celle Næste WSheet Næste WBook MsgBox Cnt & "Fedceller fundet" End Sub