Het With - End With-blok in VBA wordt gebruikt om VBA te vertellen dat we het gegeven object gaan gebruiken en het moet alleen rekening houden met de eigenschappen van het gegeven object als we de puntoperator gebruiken. We zullen later in dit artikel voorbeelden zien.
Syntaxis met - Eindig met blok
Met [Object] 'Code om [Object] te wijzigen of te gebruiken'-- '-- End With
Dus nu we de syntaxis van With - End With-blok kennen, laten we het gebruik ervan bekijken.
Voorbeeld van met - Eindig met blok
Laten we zeggen dat ik verschillende wijzigingen wil aanbrengen in het bereik A2:A10. Ik wil dit bereik selecteren, de vulkleuren, lettertypestijl enz. wijzigen. Hoe zou ik dit in het algemeen doen? Waarschijnlijk als volgt:
Sub test() Range("A1:A10").Select Range("A1:A10").Interior.ColorIndex = 8 Range("A1:A10").Font.Name = "Algerian" Range("A1:A10 ").Font.ColorIndex = 12 Range("A1:A10").Font.Underline = xlUnderlineStyleDouble Range("A1:A10").Copy Range("B1:B10") Range("A1:A10").Clear Einde sub
Het bovenstaande selecteert bereik A1:A10. Verandert de binnenkleur van bereik in kleurindex 8. Verandert het lettertype in Algerijns. Verandert de kleur van het lettertype in kleurindex 12. Onderstreept de tekst binnen bereik met dubbele onderstrepingen. Vervolgens kopieert het het bereik A1:A10 naar bereik B1:B10 van hetzelfde blad. Eindelijk wordt het bereik A1:A10 gewist.
U kunt opmerken dat om elke bewerking met bereik A1:A10 uit te voeren, we deze elke keer moeten schrijven. Vervolgens krijgt de puntoperator toegang tot zijn eigenschappen. Dit verlaagt de verwerkingssnelheid en verhoogt de werkoverhead voor VBA-programmeurs. Het alternatief om dit te doen is om een With-blok te gebruiken: De onderstaande code doet hetzelfde als de bovenstaande code, maar sneller.
Sub test() With Range("A1:A10") .Select .Interior.ColorIndex = 8 .Font.Name = "Algerian" .Font.ColorIndex = 12 .Font.Underline = xlUnderlineStyleDouble .Copy Range("B1:B10" ) .Clear End With End Sub
Laten we een ander voorbeeld bekijken.
Als u een object van Outlook Mail hebt gemaakt, kunt u dat object gebruiken om alle eigenschappen te initialiseren en methoden te gebruiken.
Set outMail = Outlook.Application.CreateItem(0) Met outMail .To = "abcd.mail.com" 'Verplicht. Hier definieert u de bestemmings-e-mail-id… cc = "cc.mail.com" 'optioneel. Cc mail id als je wilt… BCC = "bcc.mail.com" 'optioneel. Bcc-e-mail-ID als je wilt … Onderwerp = subj 'zou moeten hebben. De massage op postlichaam… Lichaam = msg 'optioneel. De massage op de e-mail… Bijlagen.Add "C:/exceltip.com\test.xlsx" .Send End With
Hoe werkt het?
Welnu, wanneer we With Range ("A1:A10") schrijven, vergrendelt vba de verwijzing naar het objectbereik ("A1:A10"). Dus wanneer we de punt (.) -operator schrijven, geeft VBA alle leden van deze bereikklasse weer, die alleen van invloed zijn op object Range ("A1: A10") of een willekeurig object dat u noemde. Het referentieslot wordt vrijgegeven wanneer VBA de End With-instructie leest.
Genest met blokken
We kunnen een blok binnen een ander blok hebben. In het bovenstaande voorbeeld hebben we een bereikobject gebruikt om het te selecteren. Daarna hebben we Range.Font verschillende keren gebruikt om met lettertypen te werken. Dit is weer repetitief. De bovenstaande code kan ook als volgt worden geschreven:
Sub test() With Range("A1:A10") .Select .Interior.ColorIndex = 8 'Gebruik een andere With binnen een With Block With .Font .Name = "Algerian" .ColorIndex = 12 .Underline = xlUnderlineStyleDouble End With .Copy Bereik ("B1:B10") .Clear End With End Sub
Het binnenste met blok moet verwijzen naar een object dat een sublid is van het buitenste object. We kunnen het uiterlijke met als object met en innerlijke Met als Kind Met verwijzen. Wanneer je inner begint met, moet het object worden geschreven met de voorgaande puntoperator.
Als je eenmaal een kind bent, heb je geen toegang tot specifieke eigenschappen voor ouders. De onderstaande code is bijvoorbeeld fout.
Sub test() With Range("A1:A10") .Select .Interior.ColorIndex = 8 'Gebruik een andere With binnen een With Block With .Font .Name = "Algerian" .ColorIndex = 12 .Underline = xlUnderlineStyleDouble 'De onderstaande code zal een fout genereren omdat kopieer- en wismethoden niet tot de lettertypeklasse behoren … Copy Range ("B1: B10") .Clear End With End With End Sub
Volledig gekwalificeerd met blok
Als ik een aantal wijzigingen wil aanbrengen met het lettertype van bereik A1:A10 van blad2 in de code die de werkmap bevat, moeten we een volledig gekwalificeerd blok gebruiken.
De onderstaande twee codes werken hetzelfde.
Sub test2() With ThisWorkbook With .Sheets("Sheet2") With .Range("A1:A10") With .Font .Name = "Algerian" .ColorIndex = 12 .Underline = xlUnderlineStyleDouble End With End With End With End With End Sub
'Volledig gekwalificeerd met blok Sub test3() With ThisWorkbook.Sheets("Shee2").Range("A1:A10").Font .Name = "Algerian" .ColorIndex = 12 .Underline = xlUnderlineStyleDouble End With End Sub
U kunt het verschil zien. Dus als je weet dat je meerdere methoden en eigenschappen van een object gaat gebruiken, geef dan aan het begin een volledig gekwalificeerde naam. Als u onderliggende objecten gaat gebruiken, gebruikt u de vorige benadering. Ervaren programmeurs gebruiken beide methoden in geschikte situaties.
Dus ja jongens, dit is hoe we With - End With block in VBA gebruiken. Ik hoop dat ik voldoende uitleg heb gegeven en dat dit artikel je heeft geholpen het concept van With - End With te begrijpen. Als je twijfels hebt over dit artikel of een ander onderwerp, vraag het me dan in de comments hieronder. Ik help je graag verder.
VBA-variabelen in Excel| VBA staat voor Visual Basic for Applications. Het is een programmeertaal van Microsoft. Het wordt gebruikt met Microsoft Office-toepassingen zoals MSExcel, MS-Word en MS-Access, terwijl VBA-variabelen specifieke trefwoorden zijn.
Excel VBA-variabel bereik| In alle programmeertalen hebben we variabele toegangsspecificaties die definiëren van waaruit toegang tot een gedefinieerde variabele kan worden verkregen. Excel VBA is geen uitzondering. VBA heeft ook scope-specificaties.
ByRef en ByVal-argumenten | Wanneer een argument als ByRef-argument wordt doorgegeven aan een andere sub of functie, wordt de referentie van de werkelijke variabele verzonden. Alle wijzigingen die in de kopie van de variabele zijn aangebracht, worden weerspiegeld in het oorspronkelijke argument.
Bladen verwijderen zonder bevestigingsvragen met VBA in Microsoft Excel | Aangezien u bladen verwijdert met VBA, weet u wat u doet. U wilt Excel vertellen deze waarschuwing niet te tonen en dat verdomde blad te verwijderen.
Nieuwe werkmap toevoegen en opslaan met VBA in Microsoft Excel 2016| In deze code hebben we eerst een verwijzing naar een werkmapobject gemaakt. En toen hebben we het geïnitialiseerd met een nieuw werkmapobject. Het voordeel van deze aanpak is dat u eenvoudig bewerkingen op deze nieuwe werkmap kunt uitvoeren. Zoals opslaan, sluiten, verwijderen, etc
Geef een bericht weer op de Excel VBA-statusbalk| De statusbalk in Excel kan worden gebruikt als codemonitor. Wanneer uw VBA-code lang is en u verschillende taken uitvoert met VBA, schakelt u vaak de schermupdate uit zodat u dat scherm niet ziet flikkeren.
Schakel waarschuwingsberichten uit met VBA in Microsoft Excel 2016| Deze code schakelt niet alleen VBA-waarschuwingen uit, maar verhoogt ook de tijdefficiëntie van de code. Laten we eens kijken hoe.
Populaire artikels:
50 Excel-snelkoppelingen om uw productiviteit te verhogen | Word sneller in uw taak. Met deze 50 sneltoetsen werk je nog sneller in Excel.
De VERT.ZOEKEN-functie in Excel | Dit is een van de meest gebruikte en populaire functies van Excel die wordt gebruikt om waarde op te zoeken uit verschillende bereiken en bladen.
AANTAL.ALS in Excel 2016 | Tel waarden met voorwaarden met behulp van deze geweldige functie. U hoeft uw gegevens niet te filteren om specifieke waarden te tellen. Countif-functie is essentieel om uw dashboard voor te bereiden.
Hoe de SUMIF-functie in Excel te gebruiken? | Dit is een andere essentiële functie van het dashboard. Dit helpt u bij het optellen van waarden voor specifieke voorwaarden.