Video: Computational Thinking - Computer Science for Business Leaders 2016 2024
VBA ondersteunt nog een ander type lus in Excel 2016: elk object in een lus doorlopen een verzameling objecten. Een verzameling bestaat, zoals u wellicht weet, uit een aantal objecten van hetzelfde type. Excel heeft bijvoorbeeld een verzameling van alle open werkmappen (de verzameling Werkmappen) en elke werkmap heeft een verzameling werkbladen (de verzameling Werkbladen).
Gebruik de structuur Voor elk volgende als u elk object in een verzameling doorloopt. In het volgende voorbeeld wordt elk werkblad in de actieve werkmap doorlopen en wordt het werkblad verwijderd als het leeg is:
Sub DeleteEmptySheets () Dim WkSht As Worksheet-toepassing. DisplayAlerts = False voor elke WkSht in ActiveWorkbook. Werkbladen Als werkbladfunctie. CountA (WkSht. Cells) = 0 Then WkSht. Eind verwijderen als volgende WkSht-toepassing. DisplayAlerts = True End Sub
In dit voorbeeld is de variabele WkSht een objectvariabele die elk werkblad in de werkmap vertegenwoordigt. Er is niets speciaals aan de variabele naam WkSht; u kunt elke gewenste variabelenaam gebruiken.
De code loopt door elk werkblad en bepaalt een leeg vel door de niet-lege cellen te tellen. Als dat aantal nul is, is het blad leeg en is het verwijderd. Merk op dat de Display Alert-instelling is uitgeschakeld terwijl de lus zijn werk doet. Zonder die instructie verschijnt er een waarschuwing bij Excel telkens wanneer een blad wordt verwijderd.
Als alle werkbladen in de werkmap leeg zijn, krijgt u een foutmelding wanneer Excel probeert om het enige blad te verwijderen. Normaal gesproken zou je code schrijven om die situatie aan te pakken.
Hier is nog een voorbeeld voor elk volgende voorbeeld. Deze procedure gebruikt een lus om alle werkbladen in de actieve werkmap te verbergen, behalve het actieve werkblad.
Sub HideSheets () Dim Sht As werkblad voor elke sht in ActiveWorkbook. Werkbladen Als Sht. Geef ActiveSheet een naam. Naam dan Sht. Visible = xlSheet Hidden End If Next Sht End Sub
De methode HideSheets controleert de bladnaam. Als het niet hetzelfde is als de naam van het actieve blad, is het blad verborgen. Merk op dat de eigenschap Zichtbaar niet Boolean is. Deze eigenschap kan elk van de drie waarden aannemen en Excel biedt drie ingebouwde constanten. Als je nieuwsgierig bent naar de derde mogelijkheid (xlVeryHidden), controleer dan het Help-systeem.
Wat verborgen wordt, moet uiteindelijk worden verborgen, dus hier is een macro die alle werkbladen in de actieve werkmap weergeeft:
Sub UnhideSheets () Dim Sht As werkblad voor elke sht in ActiveWorkbook. Werkbladen Sht.Zichtbaar = xlSheetVisible Next Sht End Sub
Het is niet verrassend dat u geneste For Each-Next-lussen kunt maken. De CountBold-procedure doorloopt elke cel in het gebruikte bereik van elk werkblad in elke geopende werkmap en geeft een telling weer van het aantal cellen dat vetgedrukt is:
Subtelling oud () Dim WBook als werkmap Dimdatvel als werkblad Dim Cell Als bereik dim Cnt zo lang voor elke WBook in werkmappen voor elke WSheet in WBook. Werkbladen voor elke cel in het WSheet. UsedRange If Cell. Lettertype. Vet = Waar Dan Cnt = Cnt + 1 Volgende Cel Volgende WSheet Volgende WBook MsgBox Cnt & "vetgedrukte cellen gevonden" Einde Sub