Aanmelden met Microsoft
Meld u aan of maak een account.
Hallo,
Selecteer een ander account.
U hebt meerdere accounts
Kies het account waarmee u zich wilt aanmelden.

Inleiding

In dit artikel wordt beschreven hoe u variabelen gebruikt in Microsoft Excel subprocedures in Microsoft Visual Basic for Applications.

Meer informatie

Variabelen in een subprocedure

Een krachtige functie van programmeertalen is de mogelijkheid om iets op te slaan in een variabele, zodat de inhoud van de variabele kan worden gebruikt of later in de procedure kan worden gewijzigd. In dit document wordt het volgende gebruik van variabelen in Visual Basic:

  • Hoe variabelen worden gedeclareerd.

  • De procedures en de projecten die de variabele kunnen gebruiken.

  • De levensduur van een variabele.

Een variabele declareer in een macro

De eenvoudigste manier om een variabele in een macro te declaren, is door de instructie Dim te gebruiken. Met de volgende regel worden twee variabelen gedeclareert, als gehele getallen:

    Dim x As Integer, y As Integer

Als x en y zijn opgegeven als gehele getallen, geeft u aan dat Visual Basic voldoende geheugen moet opzij zetten voor een gehele variabele (elk 2 bytes voor x en y) en dat de gegevens die zijn opgeslagen in x of y, een geheel getal zijn tussen -32768 en 32767.

OPMERKING: Als u meerdere variabelen declareert met één dim-instructie, moet u het gegevenstype voor elke variabele opgeven.

Als u niet het gegevenstype voor elke variabele opgeeft, zoals in de volgende Visual Basic code, wordt alleen de variabele y ingesteld als een variabele met gehele getallen. De variabele x is een variant van het type:

    Dim x, y As Integer

Zie Het gegevenstype Variant hieronder voor meer informatie.
 

Als u een variabele test wilt uitvoeren, voert u de volgende stappen uit:

  1. Sla geopende werkmappen op en sluit ze en open een nieuwe werkmap.

  2. Start de Visual Basic Editor (druk op Alt+F11).

  3. Klik in het menu Invoegen op Module.

  4. Typ de volgende code:

    Sub Variable_Test()
        Dim x As Integer, y As Integer
        x = 10
        y = 100
        MsgBox "de waarde van x is " & x & _
        Chr(13) & "de waarde van y is " & y
    Sub beëindigen

  5. Voer de Variable_Test macro uit. U ontvangt het volgende bericht:

    the value of x is 10
    the value of y is 100

  6. Klik op OK.

  7. Wijzig in Variable_Test macro de volgende regel:

    x = 10

  8. naar:

    x = "error"

  9. Voer de Variable_Test macro uit.

Er wordt een run-timefout weergegeven omdat 'fout' geen geheel getal is en u probeert deze tekenreekswaarde toe te wijzen aan de variabele x van het gehele getal.
 

Overzicht van gegevenstype

Dit zijn de meest voorkomende variabele gegevenstypen:

veelvoorkomende variabele gegevenstypen

gegevenstype Variant

Als u geen gegevenstype opgeeft wanneer u een variabele declareert of als u helemaal geen variabele declareert, geeft Visual Basic automatisch het variante gegevenstype voor deze variabele op. Hieronder volgen de voordelen van variabelen die als dit gegevenstype worden gedeclareerd:

  • De variabelen kunnen tekenreeks, datum, tijd, Booleaanse of numerieke waarden bevatten.

  • De variabelen kunnen de waarden die ze bevatten automatisch converteren.

Het nadeel is dat variantvariabelen minimaal 16 bytes geheugen vereisen. 16 bytes geheugen kunnen significant zijn in grote procedures of in complexe modules.

Als u wilt zien hoe dit werkt in Variable_Test macro, gaat u als volgt te werk:

Wijzig de code in de Variable_Test macro in:

Sub Variable_Test()
    Dim x, y
    x = "string"
    y = 1.23
    MsgBox "the value of x is " & x & _
    Chr(13) & "the value of y is " & y
End Sub

Voer de Variable_Test macro uit.

U ontvangt geen fout omdat u iets kunt toewijzen aan de variantvariabelen x en y.

OPMERKING: U kunt ook de volgende regel weg laten en de macro werkt nog steeds als de variabelen x en y worden behandeld als gegevenstypen variant:

    Dim x, y

Bereik van een variabele

Wanneer u een variabele declareert, kan deze al dan niet worden gezien door andere macro's in dezelfde module, in andere modules of in andere projecten. Deze beschikbaarheid van een variabele in modules wordt bereik genoemd. De drie typen bereik zijn procedureniveau, privémoduleniveau en openbaar moduleniveau. Het bereik is afhankelijk van hoe en waar u de variabele of variabelen declareert.

Bereik op procedureniveau

Een variabele met het bereik op procedureniveau wordt niet gezien buiten de procedure waarin deze wordt gedeclareerd. Als u de waarde in stelt van een variabele met een bereik op procedureniveau, wordt de inhoud van die variabele niet door andere macro's gezien.

Als u wilt controleren of een variabele met een bereik op procedureniveau niet wordt gezien buiten de procedure waarin deze wordt gedeclareerd, gaat u als volgt te werk:

  1. Voeg een nieuwe module in uw project in.

  2. Typ beide van de volgende macro's in deze module:
      Submacro1() Dim x As Integer x = 10 MsgBox "x, zoals wordt gezien door Macro1 is " & x 'de volgende regel wordt Macro2 Macro2 Sub submacro2 beëindigen uitgevoerd2() MsgBox "x, zoals wordt gezien door Macro2 is " & x Sub beëindigen

  3. Voer Macro1 uit en u krijgt het volgende bericht:

    x, as seen by Macro1 is 10

  4. Klik op OKen u krijgt het volgende bericht:

    x, as seen by Macro2 is

  5. Klik op OK.

Macro2 geeft geen waarde weer voor de variabele x omdat de variabele x lokaal is voor Macro1.

Bereik op privé- en openbaar moduleniveau

U kunt variabelen definiëren in de declaratiesectie van een module (boven aan een module, vooral subprocedures) en het bereik van de variabele instellen met behulp van de openbare instructie, de instructie Dim of de instructie Privé. Als u de openbare instructie voor uw variabele zet, is de variabele beschikbaar voor alle macro's in alle modules in het project. Als u de instructie Dim of de instructie Privé voor de variabele zet, is de variabele alleen beschikbaar voor macro's in de module waar deze wordt gedeclareerd.

Als u het verschil wilt zien tussen de openbare instructie en de instructie Dim, gaat u als volgt te werk:

  1. Sla geopende werkmappen op en sluit ze en open een nieuwe werkmap.

  2. Start de Visual Basic Editor.

  3. Voeg een module in uw project in.

  4. Type the following code into this module:
    
    Public x As Integer
    Sub Macro_1a()
        x = 10
        MsgBox x
        Macro_1b
    End Sub
    Sub Macro_1b()
        x = x * 2
        MsgBox x
        Macro2
    End Sub
  5. Voeg een andere module in uw project in.

  6. Typ de volgende code in deze module:


    Sub Macro2()     x = x * 3
        MsgBox x
    Sub beëindigen

  7. Voer Macro_1a macro uit in de eerste module.

  8. Met de variabele x die is gedeclareerd als 'Openbaar x als geheel getal', hebben alle drie macro's in het project toegang tot de waarde van x. In het eerste berichtvak wordt een waarde van 10 weergegeven. In het tweede berichtvak wordt een waarde van 20 weergegeven (omdat x wordt vermenigvuldigd met 2 in Macro_1b). In het derde berichtvak wordt een waarde van 60 weergegeven (omdat de waarde van x is gewijzigd in 20 in Macro_1b en vervolgens in Macro2 met 3 is vermenigvuldigd).

  9. De declaratieregel in de eerste module wijzigen van:

       Public x As Integer

    naar:

       Dim x As Integer

  10. Voer de Macro_1a macro uit.

  11. Met de variabele x die is gedeclareerd als 'Dim x As Integer', hebben alleen de macro's in de eerste module toegang tot de waarde van x. In het eerste berichtvak wordt een waarde van 10 weergegeven, in het tweede berichtvak wordt een waarde van 20 weergegeven (omdat x wordt vermenigvuldigd met 2 in Macro_1b) en in het derde berichtvak wordt een waarde van 0 weergegeven (omdat in Macro2 de waarde van x niet wordt weergegeven en de niet-gecentraliseerde waarde nul wordt gebruikt door Macro 2).

  12. De declaratieregel in de eerste module wijzigen van:

      Dim x As Integer

    Aan:

        Private x As Integer

  13. Voer de Macro_1a macro uit.

  14. Dezelfde berichtvakken worden weergegeven met het bereik van de instructie Privé als met de instructie Dim. De variabele x heeft hetzelfde bereik, persoonlijk voor de module waarin deze wordt gedeclareerd.


OPMERKING: Als u wilt dat het bereik van de variabele wordt beperkt tot de module waarin deze wordt gedeclareerd, gebruikt u de instructie Privatestatement in plaats van de instructie Dim. Beide bereiken hetzelfde effect, maar het bereik is duidelijker wanneer u de code leest als u de instructie Privé gebruikt.
 

Levensduur van een variabele

De tijd waarin een variabele de waarde behoudt, wordt de levensduur ervan genoemd. De waarde van een variabele kan gedurende de levensduur veranderen, maar de waarde blijft behouden. Wanneer een variabele het bereik verliest, heeft deze ook geen waarde meer.
 

De waarde van een variabele initialiseren

Wanneer u een macro uit te voeren, worden alle variabelen ge initialaliseerd tot een waarde. Een numerieke variabele wordt geparafeerd tot nul, een tekenreeks met variabele lengte wordt geparafeerd tot een tekenreeks met lengte nul (""), en een tekenreeks met vaste lengte wordt gevuld met de ASCII-code 0. Variantvariabelen worden ge initialaliseerd in Leeg. Een variabele Leeg wordt weergegeven door een nul in een numerieke context en een tekenreeks met lengte nul ("") in een tekenreekscontext.

Variabelen op procedureniveau

Als u een variabele hebt die in een macro wordt gedeclareerd met de instructie Dim, behoudt de variabele de waarde zolang de macro wordt uitgevoerd. Als met deze macro andere macro's worden aanroepen, blijft de waarde van de variabele behouden (niet beschikbaar voor de andere macro's), zolang deze andere macro's ook worden uitgevoerd.

Als u wilt laten zien hoe variabelen op procedureniveau werken, volgt u de volgende stappen:

  1. Voeg een nieuwe module in uw project in.

  2. Typ beide van de volgende macro's in deze module:

    Sub Macro1()
        'stel x in als variabele op procedureniveau
       Dim x als geheel getal
       MsgBox "de ge initialiseerde waarde van x is " & x
       x = 10
        MsgBox "x is " & x
        'de volgende regel wordt macro2 uitgevoerd
        Macro2
        MsgBox "x is nog steeds " & x
    Sub beëindigen
    Submacro2()
        MsgBox "x, zoals wordt gezien door Macro2 is " & x
    Sub beëindigen

  3. Macro1 uitvoeren.

  4. U ontvangt het volgende bericht:

        the initialized value of x is 0

  5. Klik op OKen u krijgt het bericht:

     x is 10

  6. Klik op OKen u krijgt het volgende bericht:

    x, as seen by Macro2 is

  7. Klik op OK.

  8. Macro2 geeft geen waarde weer voor de variabele x omdat de variabele x lokaal is voor Macro1. U krijgt het volgende bericht:

    x is still 10

  9. Klik op OK.

  10. Macro1 uitvoeren.

U ontvangt dezelfde berichten die worden beschreven in stap 3 tot en met 6, omdat zodra Macro1 niet meer wordt uitgevoerd in stap 6, de waarde van de variabele x verloren is gegaan. Wanneer u Macro1 in stap 7 opnieuw gebruikt, wordt in het eerste bericht daarom de waarde van x weergegeven als nul (de ge initialiseerde waarde).

Statisch trefwoord

Als een variabele op procedureniveau wordt gedeclareerd met het trefwoord Statisch, behoudt de variabele de waarde totdat het project opnieuw wordt ingesteld. Als u dus een statische variabele hebt, wordt de volgende keer dat u de procedure aanroept, de statische variabele ge initialaliseerd tot de laatste waarde.

Als u wilt zien hoe het trefwoord Statisch werkt, gaat u als volgt te werk:

  1. Change the code in Macro1 to:
    
    Sub Macro1()
        'set x as a procedure level variable
        Static x As Integer
           MsgBox "the initialized value of x is " & x
        x = x + 10
        MsgBox "x is " & x
    End Sub
  2. Macro1 uitvoeren.

  3. U krijgt het bericht:

    the initialized value of x is 0

  4. Klik op OKen u krijgt het bericht:

    x is 10

  5. Klik op OK.

  6. Voer Macro1 uit en u krijgt het volgende bericht:

    the initialized value of x is 10

  7. Klik op OKen u krijgt het volgende bericht:

    x is 20

  8. Klik op OK.

De waarden die in de berichten worden weergegeven, verschillen de tweede keer omdat de variabele x wordt gedeclareerd als een statische variabele en de variabele de waarde behoudt nadat u Macro1 de eerste keer hebt uitgevoerd.

OPMERKING:  Als u een variabele op moduleniveau hebt, is de levensduur hetzelfde als een statische variabele op procedureniveau.

Als u de levensduur van een variabele op moduleniveau wilt verifiëren, volgt u de volgende stappen:

  1. Change the code in the module that contains Macro1 to the following:
    
    Dim x As Integer  'create a module-level variable
    Sub Macro1()
       MsgBox "the initialized value of x is " & x
       x = x + 10
       MsgBox "x is " & x
    End Sub
  2. Voer Macro1 uit en u krijgt het volgende bericht:

    the initialized value of x is 0

  3. Klik op OK en u krijgt het volgende bericht:

    x is 10

  4. Klik op OK,

  5. Voer Macro1 uit en u krijgt dit bericht:

    the initialized value of x is 10

  6. Klik op OK.

  7. U ontvangt het volgende bericht:

    x is 20

  8. Klik op OK.

De waarden die in de berichten worden weergegeven, verschillen de tweede keer omdat de variabele x wordt gedeclareerd als een statische variabele en de waarde behouden blijft nadat u Macro1 de eerste keer hebt uitgevoerd.
 

Een project opnieuw instellen om variabelen opnieuw in te stellen

Als u de waarde voor een statische variabele of voor een variabele op moduleniveau opnieuw wilt instellen, klikt u op de knop Opnieuw instellen op de
Standaardwerkbalk of klik op Opnieuw instellen in het menu Uitvoeren.

Als u dit doet voor het macro1-project en macro1opnieuw wilt uitvoeren, wordt de waarde van de variabele x ge initialaliseerd naar nul en ontvangt u het eerste bericht:

    the initialized value of x is 0

Meer hulp nodig?

Meer opties?

Verken abonnementsvoordelen, blader door trainingscursussen, leer hoe u uw apparaat kunt beveiligen en meer.

Community's helpen u vragen te stellen en te beantwoorden, feedback te geven en te leren van experts met uitgebreide kennis.

Was deze informatie nuttig?

Hoe tevreden bent u met de taalkwaliteit?
Wat heeft uw ervaring beïnvloed?
Als u op Verzenden klikt, wordt uw feedback gebruikt om producten en services van Microsoft te verbeteren. Uw IT-beheerder kan deze gegevens verzamelen. Privacyverklaring.

Hartelijk dank voor uw feedback.

×