{"id":563,"date":"2022-01-24T10:15:50","date_gmt":"2022-01-24T09:15:50","guid":{"rendered":"https:\/\/wiskunst.hjgsoft.nl\/?page_id=563"},"modified":"2022-01-24T10:37:22","modified_gmt":"2022-01-24T09:37:22","slug":"vba-voor-programmeurs","status":"publish","type":"page","link":"https:\/\/wiskunst.nl\/index.php\/programmeren1\/office-programmeren\/vba-voor-programmeurs\/","title":{"rendered":"VBA voor programmeurs"},"content":{"rendered":"<h2>Inleiding<\/h2>\n<p>Deze pagina is speciaal bedoeld voor programmeurs die programmeren in een andere taal.<\/p>\n<p>Op deze pagina gaan we in het kort in op de belangrijkste zaken die met Excel VBA hebben te maken.<\/p>\n<p>Echter is het ook meteen een handreiking voor vba in de andere office pakketten.<\/p>\n<p>VBA staat voor Visual Basic for Applications en is de programmeer-taal voor MS-Ofiice.<\/p>\n<p>Alle voorbeeld-code in dit document zijn uitgewerkt in VBA voor Excel.<\/p>\n<p>Om in Excel met eigen gemaakte code te kunnen werken moeten de volgende zakel in acht worden genomen:<\/p>\n<h2>Beveiliging<\/h2>\n<p>Kies het menu Extra &#8211;&gt; Macro &#8211;&gt; Beveiliging&#8230;<\/p>\n<p>Kies in het tab-blad &#8220;Beveiligingsniveau&#8221; voor de optie &#8216;Gemiddeld&#8217; of &#8216;Laag&#8217;. Standaard staat de optie &#8216;Hoog&#8217; geselecteerd, wat tot gevolg heeft dat er in het geheel niet met macro&#8217;s en met eigen gemaakte code kan worden gewerkt.<\/p>\n<h2>Handig<\/h2>\n<p>Verder is het handig om de volgende menu-opties op een van de werkbalken te plaatsen:<\/p>\n<p>Extra &#8211;&gt; Macro &#8211;&gt;<\/p>\n<p>Macro&#8217;s&#8230;\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 Alt+F8<br \/>\nNieuwe macro opnemen&#8230;<br \/>\nVisual Basic Editor\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0Alt+F11<\/p>\n<p>Dit kun je doen door te kiezen voor de menuoptie Extra &#8211;&gt; Aanpassen&#8230;<\/p>\n<p>Activeer het tab-blad &#8220;Opdrachten&#8221;.<br \/>\nKies onder &#8220;Categorie&#8221; de optie &#8216;Extra&#8217;.<br \/>\nZoek onder &#8220;Opdrachten&#8221; naar de juiste commando&#8217;s en sleur&amp;pleur ze naar de juiste plaats op een werkbalk.<\/p>\n<p>Afsluiten door op de Sluiten-knop te klikken.<\/p>\n<h2>Modules<\/h2>\n<p>De (algemene) codes die je zelf maakt komen in een zogenaamde module te staan.<\/p>\n<p>Je kunt per categorie commando&#8217;s een aparte module maken, maar je mag ook alles in 1 module proppen.<\/p>\n<p>Alle code in een module is overal te gebruiken. De scope is dus globaal.<\/p>\n<p>Om een module te maken ga je als volgt te werk:<\/p>\n<p>Open de VBA-editor<\/p>\n<p>Kies het menuitem: Invoegen &#8211;&gt; Module<\/p>\n<p>Kijk meteen of de eerste regel &#8216;Option Explicit&#8217; is. Zo niet tik dit dan in.<\/p>\n<p>Deze opdracht zorgt ervoor dat alle te gebruiken variabelen eerst moeten worden gedeclareerd.<\/p>\n<h2>VBA-editor<\/h2>\n<p>De VBA-editor kan grofweg in drie delen worden opgesplitst:<\/p>\n<p>De menu- en werkbalken<br \/>\nHet project- en Eigenschappen-venster (aan de linker-kant)<br \/>\nHet code-venster<\/p>\n<p>Door in het project-venster te dubbelklikken op een item wordt het bijbehorende code-venster geactiveerd.<\/p>\n<p>Het code-venster heeft als eigenschap dat er na iedere regel die wordt verlaten er meteen een syntax-check plaats vindt. Wanneer er iets niet goed is komt er meteen een melding van.<\/p>\n<p>Alles kan in kleine letters worden getikt. Wanneer VBA het herkent als een VBA-commando, dan zet hij hierzelf hoofdletters in.<\/p>\n<p>Wanneer je variabelen declareerd met een of meer hoofdletters en bij het gebruik ze verder intikt in kleine letters zal VBA hier ook de hoofdletters inzetten. Erg handig!<\/p>\n<h2>Subs en Functions<\/h2>\n<p>Een procedure in VBA heet een Sub.<\/p>\n<p>Een functie heet in VBA een Function.<\/p>\n<h2>Declaratie Sub<\/h2>\n<p>Om een Sub te declareren tik je in:<\/p>\n<p>sub &lt;naam van de sub&gt; met, indien van toepassing, direct daarachter tussen haakjes de (formele) parameters. Hierna druk je op de Enter-toets.<\/p>\n<p>VBA toont hierna de volgende regels:<\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">Sub &lt;naam&gt;(&lt;params&gt;)<\/span><\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">End Sub<\/span><\/p>\n<p>De cursor staat keurig tussen de twee regels.<\/p>\n<h2>Declaratie Function<\/h2>\n<p>Om een Function te declareren tik je in:<\/p>\n<p>function &lt;naam&gt; met, indien van toepassing, direct daarachter tussen haakjes de (formele) parameters, met, indien van toepassing, daarachter het type van de functie.<\/p>\n<p>VBA toont hierna de volgende regels:<\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">Function &lt;naam&gt;(&lt;params&gt;)<\/span><\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">End Function<\/span><\/p>\n<p>De cursor staat keurig tussen de twee regels.<\/p>\n<p>Om een waarde aan een functie te geven moet er een toekenningsopdracht binnen de definitie staan als volgt:<\/p>\n<p>&lt;naam&gt; = &lt;waarde&gt;, waarbij &lt;naam&gt; de naam van de Function is.<\/p>\n<h2>Gebruik van Sub<\/h2>\n<p>Wanneer je een Sub ergens anders wilt gerbuiken dan moet de volgende aanroep worden gebruikt:<\/p>\n<p>&lt;naam&gt; &lt;param1&gt; &lt;param2&gt; &#8230;, waarbij &lt;naam&gt; de naam van de Sub is en &lt;paramx&gt; de xe parameter. De parameters staan dus niet tussen haakjes.<\/p>\n<h2>Gebruik van Function<\/h2>\n<p>Wanneer je een Function ergens anders wilt gebruiken dan moet de volgende aanroep worden gebruikt:<\/p>\n<p>&lt;var&gt; = &lt;naam&gt;(&lt;param1&gt;,&lt;param2&gt;,&#8230;), waarbij &lt;var&gt; een variabele is, &lt;naam&gt; de naam van de Function en &lt;paramx&gt; de xe parameter. De parameters staan hier wel tussen haakjes.<\/p>\n<p>Het is niet toegestaan een Function als een Sub te gebruiken.<\/p>\n<h2>Variabelen<\/h2>\n<h2>Declareren<\/h2>\n<p>Wanneer &#8216;Option Explicit&#8217; in de module is gedeclareerd, dan moeten alle te gebruiken variabelen worden gedeclareerd.<\/p>\n<p>Om een variabele te delcareren moet gebruik worden gemaakt van het gereserveerde woord Dim als volgt:<\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">Dim &lt;naam-variabele&gt;<\/span><\/p>\n<p>Het is toegestaan om achter het woord Dim meerdere variabelen te declareren, deze moeten dan worden gescheiden door een komma (,).<\/p>\n<p>Een variabele moet gedeclareerd zijn voordat deze voor het eerst wordt gebruikt.<\/p>\n<h2>Scope<\/h2>\n<p>Wordt een variabele buiten een Sub of Function gedeclareerd dan heeft deze een globaal karakter binnen de module.<\/p>\n<p>Wordt een variabele binnen een Sub of Function gedeclareerd dan heeft deze een lokaal karakter.<\/p>\n<p>Een lokale variabele heeft een hogere prioriteit dan een globale variabele.<\/p>\n<h2>Type<\/h2>\n<p>In tegenstelling tot de meeste andere talen hoef je in VBA niet aan te geven van welk type een variabele is.<\/p>\n<p>Als het type ontbreekt dan maakt VBA hier standaard (default) het type Variant van. Het voordeel hiervan is dat een variabele afhankelijk van de situatie van een ander type kan zijn. Het nadeel is dat dit tijdens de uitvoer moet worden bepaald.<\/p>\n<p>Wanneer van te voren duidelijk is van welk type een variabele is, dan kan deze het beste worden gedeclareerd met een type aanduiding.<\/p>\n<p>Dit gaat als volgt:<\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">Dim &lt;variabele-naam&gt; As &lt;type&gt;<\/span><\/p>\n<p>In onderstaande tabel staan de meest gebruikte types:<\/p>\n<table style=\"width: 100%;\" border=\"1\" width=\"100%\" cellspacing=\"2\" cellpadding=\"2\">\n<tbody>\n<tr>\n<td style=\"width: 18.4483%;\">type<\/td>\n<td style=\"width: 81.3793%;\">bereik<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 18.4483%;\">Byte<\/td>\n<td style=\"width: 81.3793%;\">0..127<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 18.4483%;\">Integer<\/td>\n<td style=\"width: 81.3793%;\">-32.768..32.767<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 18.4483%;\">Long<\/td>\n<td style=\"width: 81.3793%;\">-2.147.483.648..2.147.483.647<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 18.4483%;\">Single<\/td>\n<td style=\"width: 81.3793%;\">-3,402823E38 tot -1,401298E-45, voor negatieve waarden en 1,401298E-45 tot 3,402823E38 voor positieve waarden<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 18.4483%;\">Double<\/td>\n<td style=\"width: 81.3793%;\">-1,79769313486232E308 tot -4,94065645841247E-324 voor negatieve waarden en 4,94065645841247E-324 tot 1,79769313486232E308 voor positieve waarden<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 18.4483%;\">Date<\/td>\n<td style=\"width: 81.3793%;\">1-1-100 t\/m 31-12-9999<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 18.4483%;\">String<\/td>\n<td style=\"width: 81.3793%;\">tekenreeks<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 18.4483%;\">Boolean<\/td>\n<td style=\"width: 81.3793%;\">TRUE\/FALSE<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Voorbeeld:<\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">Dim teller As Integer<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">Dim Regel As String, Getrouwd as Boolean<\/span><\/p>\n<h2>Valkuil<\/h2>\n<p>Een veel voorkomende fout is de volgende:<\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">Dim a, b, c As Integer<\/span><\/p>\n<p>in de veronderstelling dat er nu 3 variabelen (a, b en c) als Integer zijn gedeclareerd. Dat is NIET het geval! Alleen variabele c is een Integer, de variabelen a en b zijn van het type Variant. Iedere variabele moet dus worden voorzien van een type-aanduiding.<\/p>\n<p>Bovenstaande voorbeeld moet dus zijn:<\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">Dim a As Integer, b As Integer, c As Integer<\/span><\/p>\n<h2>Parameters<\/h2>\n<p>Bij het declareren van formele parameters mag ook een type-aanduiding worden toegevoegd aan de parameter. Dit gaat op dezelfde mannier als bij de declaratie van variabelen.<\/p>\n<p>Wordt dit niet expliciet gedaan, dan wordt het type Variant gebruikt voor de parameter.<\/p>\n<p>Voorbeeld:<\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">Sub TelOp(Getal1 As Integer, Getal2 As Integer, Som As Integer)<\/span><\/p>\n<p>Om een Function van een type te voorzien moet ook gebruik worden gemaakt van het gereserveerde woord As met daarachter een type-aanduiding.<\/p>\n<p>Voorbeeld:<\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">Function TelOp(Getal1 As Integer, Getal2 As Integer) As Integer<\/span><\/p>\n<p>Als dit niet expliciet gebeurt, dan wordt de Function als Variant gedeclareerd.<\/p>\n<h2>Value- en Reference-parameters<\/h2>\n<p>De doorgewinterde programmeur zal zich bij het voorbeeld van de Sub Telop hierboven zich onmiddellijk hebben afgevraagd of dit wel goed gaat.<\/p>\n<p>Per slot is er geen taal waarin formele parameters default als reference-parameter worden gedeclareerd. Dit is echter een foute conclusie. Er is wel zo&#8217;n taal! Te weten: VBA (en ook VB).<\/p>\n<p>Wie dat heeft bedacht, geen idee, maar krankzinnig is dit wel en iets om ter dege rekening mee te houden.<\/p>\n<p>Wanneer een formele parameter niet expliciet als value-parameter wordt gedeclareerd is het dus een reference-parameter.<\/p>\n<p>Het is het handigst als je je aanleert om altijd de soort expliciet aan te geven.<\/p>\n<p>Voor een value-parameter gebruik je het gereserveerde woord\u00a0ByVal, en voor een reference-parameter het gereserveerde woord\u00a0ByRef.<\/p>\n<p>De laatste twee voorbeelden worden dan:<\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">Sub TelOp(ByVal Getal1 As Integer, ByVal Getal2 As Integer, ByRef Som As Integer)<\/span><\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">Function TelOp(ByVal Getal1 As Integer, ByVal Getal2 As Integer) As Integer<\/span><\/p>\n<h2>Array&#8217;s<\/h2>\n<p>Het is in VBA mogelijk om Array&#8217;s te gebruiken. Deze mogen ook meer-dimensionaal zijn.<\/p>\n<p>De declaratie is als volgt:<\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">Dim &lt;var&gt;(&lt;start-index&gt; To &lt;eind-index&gt;) As &lt;type&gt;<\/span><\/p>\n<p>of<\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">Dim &lt;var&gt;(&lt;start-index&gt; To &lt;eind-index&gt;, &lt;start-index&gt; To &lt;eind-index&gt;, &#8230;) As &lt;type&gt;<\/span><\/p>\n<p>Voorbeeld:<\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">Dim Rij(1 To 10) As Integer<\/span><\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">Dim Matrix(1 To 5, 1 To 10) As Single<\/span><\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">Dim EinsteinRuimte(0 To 2, 1 To 10, 5 To 6, 3 To 8) As Variant<\/span><\/p>\n<h2>LBound en UBound<\/h2>\n<p>Met de functie LBound(&lt;var&gt;, &lt;dimensie&gt;) kun je de start-index van een Array krijgen, waarbij de optionele &lt;dimensie&gt; aangeeft van welke dimensie je de start-index wilt weten.<\/p>\n<p>Met de functie UBound(&lt;var&gt;, &lt;dimensie&gt;) kun je de eind-index van een Array krijgen, waarbij de optionele &lt;dimensie&gt; aangeeft van welke dimensie je de eind-index wilt weten.<\/p>\n<p>Als &lt;dimensie&gt; wordt weggelaten dan krijg je het resultaat van de 1e dimensie.<\/p>\n<h2>Dynamische array&#8217;s<\/h2>\n<p>In VBA is het ook mogelijk om met dynamische array&#8217;s te werken.<\/p>\n<p>Wanneer je dit wilt dan moet je de variabele als volgt declareren:<\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">Dim &lt;var&gt;() As &lt;type&gt;<\/span><\/p>\n<p>De haakjes doen hier het werk. Door de twee haakjes met niets daartussen weet VBA dat het hier om een dynamische array gaat.<\/p>\n<p>Voorbeeld:<\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">Dim Naam() As String<\/span><\/p>\n<p>Voordat je een dynamische variabele gaat gebruiken moet deze eerst, minimaal 1 keer, ge-re-dimensioneerd zijn, zodat VBA weet hoeveel elementen er gebruikt kunnen worden. Dat re-dimensioneren gaat met het gereserveerde woord ReDim &lt;var&gt;(&lt;start-index&gt; To &lt;eind-index&gt;). Let op: Na een ReDim mag nooit een type-declaratie komen!<\/p>\n<p>Voorbeeld:<\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">ReDim Naam(1 To 1)<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 Naam(1) = &#8220;Henk&#8221;<\/span><\/p>\n<p>Wanneer nu een tweede naam moet worden toegevoegd zou je de volgende code kunnen gebruiken:<\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">ReDim Naam(1 To 2)<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 Naam(2) = &#8220;Jan&#8221;<\/span><\/p>\n<p>Het resultaat zal echter niet gewenst zijn, want na deze regels is Naam(1) leeg.<\/p>\n<p>Wanneer je de reeds bestaande waardes in een dynamische array wilt behouden moet je gebruik maken van het gereserveerde woord Preserve. Preserve komt na ReDim.<\/p>\n<p>Voorbeeld:<\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">ReDim Preserve Naam(1 to 2)<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 Naam(2) = &#8220;Jan&#8221;<\/span><\/p>\n<p>Na deze regels zal Naam(1) nog steeds de waarde &#8220;Henk&#8221; hebben.<\/p>\n<p>Wil je echt dynamisch te werk gaan dan maak je natuurlijk veelvuldig gebruik van de functie UBound.<\/p>\n<p>Het laatste voorbeeld wordt dan:<\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">ReDim Preserve Naam(1 To UBound(Naam) + 1)<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 Naam(UBound(Naam)) = &#8220;Jan&#8221;<\/span><\/p>\n<h6>Opmerking: Als je een dynamische array als parameter wilt gebruiken dan moet deze als reference parameter worden gedeclareerd!!!<\/h6>\n<h2>Talige zaken<\/h2>\n<p>Hieronder enkele talige zaken.<\/p>\n<h3>For-lus<\/h3>\n<p>De For-lus gaat als volgt:<\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">For &lt;var&gt; = &lt;start&gt; To &lt;eind&gt; Step &lt;stap&gt;<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 &lt;opdracht&gt;<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">Next &lt;var&gt;<\/span><\/p>\n<p>waarbij &lt;var&gt; een Integer-variabele is, &lt;start&gt; de start-waarde van de lus is, &lt;eind&gt; de eind-waarde van de lus is, en &lt;stap&gt; de stap-grootte van de lus is en &lt;opdracht&gt; een (samengestelde) opdracht is die binnen de lus moet worden uitgevoerd. Het Step-gedeelte is optioneel. Als &lt;start&gt; groter is dan &lt;eind&gt;, dan moet &lt;stap&gt; een negatieve waarde hebben.<\/p>\n<p>De For-lus mag worden genest.<\/p>\n<p>Voorbeeld:<\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">Dim t As Integer, s As Integer<\/span><\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">s = 0<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">For t = 1 to 10<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 s = s + t<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">Next t<\/span><\/p>\n<h3>Do-Loop-lus<\/h3>\n<p>De Do-Loop-lus is er in diverse smaken, waarvan we er hier twee zullen bekijken.<\/p>\n<h3>Do-While-lus<\/h3>\n<p>De Do-While-lus gaat als volgt:<\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">Do While &lt;voorwaarde&gt;<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 &lt;opdracht&gt;<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">Loop<\/span><\/p>\n<p>waarbij &lt;voorwaarde&gt; van alles kan zijn, dus ook meervoudig, en &lt;opdracht&gt; een (samengestelde) opdracht is die binnen de lus moet worden uitgevoerd.<\/p>\n<p>De Do-While-lus mag worden genest.<\/p>\n<p>Voorbeeld:<\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">Dim t As Integer, s As Integer<\/span><\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">t = 1<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">s = 0<\/span><\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">Do While t &lt;= 10<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 s = s + t<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 t = t + 1<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">Loop<\/span><\/p>\n<h3>Do-Loop-Until-lus<\/h3>\n<p>De Do-Loop-Until-lus gaat als volgt:<\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">Do<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 &lt;opdracht&gt;<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">Loop Until &lt;voorwaarde&gt;<\/span><\/p>\n<p>waarbij &lt;voorwaarde&gt; van alles kan zijn, dus ook meervoudig, en &lt;opdracht&gt; een (samengestelde) opdracht is die binnen de lus moet worden uitgevoerd.<\/p>\n<p>De Do-Loop-Until-lus mag worden genest.<\/p>\n<p>Voorbeeld:<\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">Dim t As Integer, s As Integer<\/span><\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">t = 1<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">s = 0<\/span><\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">Do<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 s = s + t<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 t = t + 1<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">Loop Until t &gt; 10<\/span><\/p>\n<h3>If-opdracht<\/h3>\n<p>De If-opdracht gaat als volgt:<\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">If &lt;voorwaarde&gt; Then<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 &lt;opdracht&gt;<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">Else<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 &lt;opdracht&gt;<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">End If<\/span><\/p>\n<p>waarbij &lt;voorwaarde&gt; van alles kan zijn, dus ook meervoudig en &lt;opdracht&gt; een (samengestelde) opdracht die wordt uitgeoverd als aan de voorwaarde wordt voldaan, of wordt uitgevoerd in het optionele Else-gedeelte als er niet aan de voorwaarde wordt voldaan.<\/p>\n<p>De If-opdracht mag genest worden, maar ook is de volgende constructie toegestaan:<\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">If &lt;voorwaarde1&gt; Then<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 &lt;opdracht&gt;<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">ElseIf &lt;voorwaarde2&gt; Then<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 &lt;opdracht&gt;<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">Else<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 &lt;opdracht&gt;<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">End If<\/span><\/p>\n<p>waarbij ElseIf meerdere malen gebruikt mag worden.<\/p>\n<p>Voorbeeld:<\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">If maand = 2 Then<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 If Schrikkel Then<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0\u00a0\u00a0 ad = 29<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 Else<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0\u00a0\u00a0 ad = 28<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 End If<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">ElseIf (maand = 4) Or (maand = 6) Or (maand = 9) Or (maand = 11) Then<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 ad = 30<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">Else<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 ad = 31<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">End If<\/span><\/p>\n<h3>Select-opdracht<\/h3>\n<p>De Select-opdracht gaat als volgt:<\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">Select Case &lt;var&gt;<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 Case &lt;waarde1&gt;<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0\u00a0\u00a0 &lt;opdracht&gt;<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 Case &lt;waarde2&gt;, &lt;waarde3&gt;, &lt;waarde4&gt;<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0\u00a0\u00a0 &lt;opdracht&gt;<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 Case &lt;waarde5&gt; To &lt;waarde6&gt;<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0\u00a0\u00a0 &lt;opdracht&gt;<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 Case Else<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0\u00a0\u00a0 &lt;opdracht&gt;<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">End Select<\/span><\/p>\n<p>waarbij &lt;var&gt; een variabele is, &lt;waarden&gt; een mogelijke waarde van de &lt;var&gt; is en &lt;opdracht&gt; een (samengestelde) opdracht is die wordt uitgevoerd als &lt;var&gt; de waarde &lt;waarden&gt; heeft. Het Else gedeelte is optioneel en wordt uitgevoerd als &lt;var&gt; geen enekele waarde heeft die voorkomt binnen de Select-opdracht.<\/p>\n<p>De Select-opdracht mag worden genest.<\/p>\n<p>Voorbeeld:<\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">Select Case maand<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 Case 2<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0\u00a0\u00a0 If Schrikkel Then<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0\u00a0\u00a0\u00a0\u00a0 ad = 29<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0\u00a0\u00a0 Else<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0\u00a0\u00a0\u00a0\u00a0 ad = 28<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 Case 4, 6, 9, 11<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0\u00a0\u00a0 ad = 30<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 Case Else<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0\u00a0\u00a0 ad = 31<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">End Select<\/span><\/p>\n<p>Tot slot moet hier nog verteld worden dat vba zogenaamd object-based is. Dat merk je wanneer je gebruik gaat maken van de applicatie-objecten. Tevens kun je zelf klasses defini\u00ebren en gebruiken. Maar denk eraan dat vba niet object-ori\u00ebnted is!<\/p>\n<p>Ondanks dat deze pagina is geschreven voor programmeurs hoop ik dat ook anderen hier iets mee zijn opgeschoten.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Inleiding Deze pagina is speciaal bedoeld voor programmeurs die programmeren in een andere taal. Op deze pagina gaan we in het kort in op de belangrijkste zaken die met Excel VBA hebben te maken. Echter is het ook meteen een handreiking voor vba in de andere office pakketten. VBA staat voor Visual Basic for Applications [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":554,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"templates\/template-full-width.php","meta":{"_lmt_disableupdate":"","_lmt_disable":"","footnotes":""},"class_list":["post-563","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>VBA voor programmeurs - Wiskunst<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/wiskunst.nl\/index.php\/programmeren1\/office-programmeren\/vba-voor-programmeurs\/\" \/>\n<meta property=\"og:locale\" content=\"nl_NL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"VBA voor programmeurs - Wiskunst\" \/>\n<meta property=\"og:description\" content=\"Inleiding Deze pagina is speciaal bedoeld voor programmeurs die programmeren in een andere taal. Op deze pagina gaan we in het kort in op de belangrijkste zaken die met Excel VBA hebben te maken. Echter is het ook meteen een handreiking voor vba in de andere office pakketten. VBA staat voor Visual Basic for Applications [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wiskunst.nl\/index.php\/programmeren1\/office-programmeren\/vba-voor-programmeurs\/\" \/>\n<meta property=\"og:site_name\" content=\"Wiskunst\" \/>\n<meta property=\"article:modified_time\" content=\"2022-01-24T09:37:22+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Geschatte leestijd\" \/>\n\t<meta name=\"twitter:data1\" content=\"11 minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/wiskunst.nl\\\/index.php\\\/programmeren1\\\/office-programmeren\\\/vba-voor-programmeurs\\\/\",\"url\":\"https:\\\/\\\/wiskunst.nl\\\/index.php\\\/programmeren1\\\/office-programmeren\\\/vba-voor-programmeurs\\\/\",\"name\":\"VBA voor programmeurs - Wiskunst\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wiskunst.nl\\\/#website\"},\"datePublished\":\"2022-01-24T09:15:50+00:00\",\"dateModified\":\"2022-01-24T09:37:22+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/wiskunst.nl\\\/index.php\\\/programmeren1\\\/office-programmeren\\\/vba-voor-programmeurs\\\/#breadcrumb\"},\"inLanguage\":\"nl-NL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/wiskunst.nl\\\/index.php\\\/programmeren1\\\/office-programmeren\\\/vba-voor-programmeurs\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/wiskunst.nl\\\/index.php\\\/programmeren1\\\/office-programmeren\\\/vba-voor-programmeurs\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/wiskunst.nl\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Programmeren\",\"item\":\"https:\\\/\\\/wiskunst.nl\\\/index.php\\\/programmeren1\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Office programmeren\",\"item\":\"https:\\\/\\\/wiskunst.nl\\\/index.php\\\/programmeren1\\\/office-programmeren\\\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"VBA voor programmeurs\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/wiskunst.nl\\\/#website\",\"url\":\"https:\\\/\\\/wiskunst.nl\\\/\",\"name\":\"Wiskunst\",\"description\":\"2\u221e\u2227&gt;\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/wiskunst.nl\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"nl-NL\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"VBA voor programmeurs - Wiskunst","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/wiskunst.nl\/index.php\/programmeren1\/office-programmeren\/vba-voor-programmeurs\/","og_locale":"nl_NL","og_type":"article","og_title":"VBA voor programmeurs - Wiskunst","og_description":"Inleiding Deze pagina is speciaal bedoeld voor programmeurs die programmeren in een andere taal. Op deze pagina gaan we in het kort in op de belangrijkste zaken die met Excel VBA hebben te maken. Echter is het ook meteen een handreiking voor vba in de andere office pakketten. VBA staat voor Visual Basic for Applications [&hellip;]","og_url":"https:\/\/wiskunst.nl\/index.php\/programmeren1\/office-programmeren\/vba-voor-programmeurs\/","og_site_name":"Wiskunst","article_modified_time":"2022-01-24T09:37:22+00:00","twitter_card":"summary_large_image","twitter_misc":{"Geschatte leestijd":"11 minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/wiskunst.nl\/index.php\/programmeren1\/office-programmeren\/vba-voor-programmeurs\/","url":"https:\/\/wiskunst.nl\/index.php\/programmeren1\/office-programmeren\/vba-voor-programmeurs\/","name":"VBA voor programmeurs - Wiskunst","isPartOf":{"@id":"https:\/\/wiskunst.nl\/#website"},"datePublished":"2022-01-24T09:15:50+00:00","dateModified":"2022-01-24T09:37:22+00:00","breadcrumb":{"@id":"https:\/\/wiskunst.nl\/index.php\/programmeren1\/office-programmeren\/vba-voor-programmeurs\/#breadcrumb"},"inLanguage":"nl-NL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wiskunst.nl\/index.php\/programmeren1\/office-programmeren\/vba-voor-programmeurs\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/wiskunst.nl\/index.php\/programmeren1\/office-programmeren\/vba-voor-programmeurs\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/wiskunst.nl\/"},{"@type":"ListItem","position":2,"name":"Programmeren","item":"https:\/\/wiskunst.nl\/index.php\/programmeren1\/"},{"@type":"ListItem","position":3,"name":"Office programmeren","item":"https:\/\/wiskunst.nl\/index.php\/programmeren1\/office-programmeren\/"},{"@type":"ListItem","position":4,"name":"VBA voor programmeurs"}]},{"@type":"WebSite","@id":"https:\/\/wiskunst.nl\/#website","url":"https:\/\/wiskunst.nl\/","name":"Wiskunst","description":"2\u221e\u2227&gt;","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/wiskunst.nl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"nl-NL"}]}},"_links":{"self":[{"href":"https:\/\/wiskunst.nl\/index.php\/wp-json\/wp\/v2\/pages\/563","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wiskunst.nl\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/wiskunst.nl\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/wiskunst.nl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wiskunst.nl\/index.php\/wp-json\/wp\/v2\/comments?post=563"}],"version-history":[{"count":5,"href":"https:\/\/wiskunst.nl\/index.php\/wp-json\/wp\/v2\/pages\/563\/revisions"}],"predecessor-version":[{"id":568,"href":"https:\/\/wiskunst.nl\/index.php\/wp-json\/wp\/v2\/pages\/563\/revisions\/568"}],"up":[{"embeddable":true,"href":"https:\/\/wiskunst.nl\/index.php\/wp-json\/wp\/v2\/pages\/554"}],"wp:attachment":[{"href":"https:\/\/wiskunst.nl\/index.php\/wp-json\/wp\/v2\/media?parent=563"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}