Excel: Bereik van variabelen in Visual Basic for Applications

Vertaalde artikelen Vertaalde artikelen
Artikel ID: 141693 - Bekijk de producten waarop dit artikel van toepassing is.
Alles uitklappen | Alles samenvouwen

Op deze pagina

Samenvatting

Het bereik van een variabele wordt bepaald wanneer de variabele wordt gedeclareerd. Er zijn in Microsoft Visual Basic for Applications drie bereiken beschikbaar voor variabelen: procedure, module en openbaar. In de sectie 'Meer informatie' in dit artikel wordt elk bereik in detail beschreven.

Meer informatie

Procedurebereik (lokaal)

Een lokale variabele met procedurebereik wordt alleen herkend binnen de procedure waarin deze is gedeclareerd. Een lokale variabele kan worden gedeclareerd bij een Dim- of Static-instructie.
Dim:
				
Wanneer een lokale variabele wordt gedeclareerd bij de Dim-instructie, blijft de variabele alleen bestaan zolang de procedure waarin deze wordt gedeclareerd, wordt uitgevoerd. Wanneer de procedure is voltooid, blijven de waarden van de lokale variabelen van de procedure meestal niet behouden. Het geheugen dat aan deze variabelen is toegewezen, wordt vrijgegeven. De volgende keer dat de procedure wordt uitgevoerd, worden alle bijbehorende lokale variabelen opnieuw geïnitialiseerd.

In de voorbeeldmacro's 'Example1' en 'Example2' wordt bijvoorbeeld variabele X in elke module gedeclareerd. Elke variabele X is onafhankelijk van de andere. De variabele wordt alleen herkend binnen de bijbehorende procedure.
   Sub Example1()
      Dim X As Integer
      ' Lokale variabele, niet hetzelfde als X in Example2.
      X = 100
      MsgBox "The value of X is " & X
   End Sub
				
   Sub Example2()
      Dim X As String
      ' Lokale variabele, niet hetzelfde als X in Example1.
      X = "Yes"
      MsgBox "The answer is " &X
   End Sub
				
Static:

Een lokale variabele die bij de Static-instructie wordt gedeclareerd, blijft bestaan zolang Visual Basic wordt uitgevoerd. De beginwaarde van de variabele wordt in de volgende gevallen ingesteld:
  • De macro genereert een niet-onderschepte runtimefout.
  • Visual Basic wordt gestopt.
  • Microsoft Excel wordt afgesloten.
  • De module wordt gewijzigd.
In het voorbeeld RunningTotal (LopendTotaal) blijft bijvoorbeeld de waarde van de variabele Accumulate bij elke uitvoering behouden. Als u het getal 2 invoert wanneer de module voor de eerste keer wordt uitgevoerd, wordt in het berichtvenster de waarde '2' weergegeven. Wanneer de module de volgende keer wordt gestart en de waarde 3 wordt ingevoerd, is de waarde van het lopend totaal 5.
   Sub RunningTotal()
      Static Accumulate
      ' Lokale variabele waarvan de waarde behouden blijft nadat de
      ' uitvoering van de module is voltooid.
      num = Application.InputBox(prompt:="Enter a number: ", Type:=1)
      Accumulate = Accumulate + num
      MsgBox "The running total is " & Accumulate
   End Sub
				

Modulebereik

Een variabele die door alle procedures op een modulewerkblad wordt herkend, wordt een variabele op 'moduleniveau' genoemd. Een variabele op moduleniveau is beschikbaar voor alle procedures in de betreffende module, maar is niet beschikbaar voor procedures in andere modules. Een variabele op moduleniveau blijft bestaan zolang Visual Basic wordt uitgevoerd, totdat de module waarin de variabele is gedeclareerd wordt bewerkt. Variabelen op moduleniveau kunnen worden gedeclareerd bij een Dim- of Private-instructie bovenaan in de module boven de eerste proceduredefinitie.

Op het moduleniveau is er geen verschil tussen Dim en Private. Houd er rekening mee dat variabelen op moduleniveau niet kunnen worden gedeclareerd binnen een procedure.

Opmerking Als u Private in plaats van Dim gebruikt voor variabelen op moduleniveau, wordt uw code gemakkelijker leesbaar (dat wil zeggen: als u Dim alleen voor lokale variabelen en Private alleen voor variabelen op moduleniveau gebruikt, wordt het bereik van een bepaalde variabele duidelijker).

In het volgende voorbeeld worden twee variabelen, A en B, op moduleniveau gedeclareerd. Deze twee variabelen zijn beschikbaar voor alle procedures op het modulewerkblad. De derde variabele (C) die in de macro Example3 wordt gedeclareerd, is een lokale variabele en is alleen beschikbaar voor die procedure.

Let wel dat in Example4 het berichtvak leeg is wanneer de macro de variabele C probeert te gebruiken. Het berichtvak is leeg omdat C een lokale variabele is en niet beschikbaar is voor Example4, terwijl de variabelen A en B wel beschikbaar zijn.
   Dim A As Integer        ' Variabele op moduleniveau.
   Private B As Integer    ' Variabele op moduleniveau.

   Sub Example1()
       A = 100
       B = A + 1
   End Sub

   Sub Example2()
       MsgBox "The value of A is " & A
       MsgBox "The value of B is " & B
   End Sub

   Sub Example3()
        Dim C As Integer    ' Local variable.
        C = A + B
        MsgBox "The value of C is " & C
   End Sub

   Sub Example4()
        MsgBox A
        ' In het berichtvak wordt de waarde van A weergegeven.
        MsgBox B
        ' In het berichtvak wordt de waarde van B weergegeven.
        MsgBox C
        ' In het berichtvak wordt niets weergegeven omdat C een lokale variabele was.
   End Sub
				

Openbaar bereik

Openbare variabelen hebben het breedste bereik van alle variabelen. Een openbare variabele wordt door elke module in de actieve werkmap herkend. Als u een openbare variabele voor andere werkmappen beschikbaar wilt maken, selecteert u in een nieuwe werkmap de werkmap die de openbare variabele bevat in het vak Beschikbare verwijzingen van het dialoogvenster Verwijzingen (klik in een moduleblad op Verwijzingen in het menu Extra). Een openbare variabele wordt net als een variabele op moduleniveau bovenaan in de module gedeclareerd, boven de eerste proceduredefinitie. Een openbare variabele kan niet binnen een procedure worden gedeclareerd. Een openbare variabele wordt altijd bij een Public-instructie gedeclareerd. Een openbare variabele kan in elk moduleblad worden gedeclareerd.

Meerdere modulebladen kunnen openbare variabelen met dezelfde naam hebben. U kunt verwarring en mogelijke fouten voorkomen door unieke namen te gebruiken of door vóór elke naam van een variabele een kwalificatie te zetten (bijvoorbeeld in een module met de naam Feb_Verkoop kunt u vóór alle openbare variabelen de letters 'FS' zetten).

Ga als volgt te werk om de macro's te maken:
  1. Maak een nieuwe map en noem deze CDSales.xls.
  2. Voeg in de werkmap CDSales.xls een modulewerkblad in. Noem het modulewerkblad CDSales.

    In Microsoft Excel 97 of hoger voert u de volgende stappen uit om een nieuw modulewerkblad in te voegen en dit werkblad een naam te geven:
    1. Wijs in de werkmap CDSales.xls de opdracht Macro aan in het menu Extra en klik op Visual Basic-editor.
    2. Klik in het menu Invoegen op Module.
    3. In Microsoft Excel voor Windows (versie 97 en hoger) geeft u een module als volgt een nieuwe naam: activeer de module, klik rechts van '(Name)' in het venster Eigenschappen van de Visual Basic-editor, typ een nieuwe modulenaam en druk op ENTER.
  3. Typ in het modulewerkblad CDSales de volgende code:
          Public SalesPrice As Integer
          Public UnitsSold As Integer
          Public CostPerUnit As Integer
          Private Markup As Long
    
          Sub CDSales()
             Dim X as String
             SalesPrice = 12
             UnitsSold = 1000
             CostPerUnit = 5
             Markup = 1.05
             X = "yes"
             MsgBox "The Gross Profit for CD Sales is $" & (SalesPrice _
                * UnitsSold) -(UnitsSold * CostPerUnit * Markup)
             ' Geeft de waarde 7000 weer als brutowinst.
          End Sub
    						
  4. Maak een nieuwe werkmap en noem deze VideoSales.xls.
  5. Voeg in de werkmap VideoSales.xls een modulewerkblad in. Noem het modulewerkblad VideoSales.

    In Microsoft Excel 97 of hoger volgt u de volgende stappen om een nieuw modulewerkblad in te voegen en dit werkblad een naam te geven:
    1. Wijs in de werkmap CDSales.xls de opdracht Macro aan in het menu Extra en klik op Visual Basic-editor.
    2. Klik in het menu Invoegen op Module.
    3. In Microsoft Excel voor Windows (versie 97 en hoger) geeft u een module als volgt een nieuwe naam: activeer de module, klik rechts van '(Name)' in het venster Eigenschappen van de Visual Basic-editor, typ een nieuwe modulenaam en druk op ENTER.
  6. Typ in het modulewerkblad VideoSales de volgende code:
          Public SalesPrice As Integer
          Public UnitsSold As Integer
          Public CostPerUnit As Integer
    
          Sub VideoSales()
             SalesPrice = CDSales.SalesPrice * 1.05
             UnitsSold = CDSales.UnitsSold * 1.456
             CostPerUnit = CDSales.CostPerUnit * 1.75
             MsgBox "The Projected Gross Profit for video sales is $" & _
                (SalesPrice * UnitsSold) - (UnitsSold * CostPerUnit)
             ' Geeft de waarde 5824 weer als de verwachte brutowinst.
          End Sub
    						

Ga als volgt te werk om de voorbeeldmacro's in Microsoft Excel 5.0 en 7.0 uit te voeren

  1. Als u een verwijzing van de werkmap VideoSales.xls naar CDSales.xls wilt maken, selecteert u het werkblad VideoSales in VideoSales.xls en klikt u op Verwijzingen in het menu Extra.
  2. Schakel in het dialoogvenster Verwijzingen het selectievakje CDSales.xls in en klik op OK.
  3. Voer de macro CDSales uit en voer vervolgens de macro VideoSales uit.

Ga als volgt te werk om de voorbeeldmacro's in Microsoft Excel 97 en hoger uit te voeren

  1. Geef de projectnaam van de twee werkmappen een nieuwe naam, zodat deze uniek zijn. Volg de volgende stappen:

    1. Kijk in het deelvenster Projectverkenner in de Visual Basic-editor naar de projecten in de lijst. Deze projecten zien er als volgt uit:
      <VBAProject> (VideoSales.xls)
      <VBAProject> (CDSales.xls)
      <VBAProject> (Personal.xls)
      waarbij <VBAProject> staat voor de naam van het project.
    2. Klik op de vermelding voor VideoSales.xls.
    3. Typ in het deelvenster Eigenschappen in het vak rechts naast '(Name)' een nieuwe, unieke projectnaam en druk op Enter.

      Opmerking Gebruik geen projectnaam die al voor een andere werkmap wordt gebruikt.
    4. Klik in het menu Bestand op mapnaam <opslaan>, waarbij <mapnaam> de naam is van de werkmap die u hebt gewijzigd.
  2. Als u een verwijzing van de werkmap VideoSales.xls naar CDSales.xls wilt maken, selecteert u het werkblad VideoSales in VideoSales.xls en klikt u op Verwijzingen in het menu Extra.
  3. Schakel in het dialoogvenster Verwijzingen het selectievakje in van de projectnaam die is opgegeven in stap 1c en klik op OK.
  4. Voer de macro CDSales uit en voer vervolgens de macro VideoSales uit.
Houd er rekening mee dat in de macro VideoSales de openbare variabelen worden gebruikt die zijn gedeclareerd in de module CDSales van CDSales.xls.

Voorbeeld van een macrofout wanneer u toegang wilt verkrijgen tot een lokale variabele

In het volgende voorbeeld wordt getracht de variabele op moduleniveau (CDSales.Markup) of de lokale variabele CDSales.X te gebruiken in het modulewerkblad VideoSales:
   Sub VideoSales2()
       MsgBox CDSales.Markup
   End Sub
   Sub VideoSales3()
       MsgBox CDSales.X
   End Sub
				
In Microsoft Excel 5.0 of 7.0 wordt het volgende foutbericht weergegeven wanneer u een van deze procedures uitvoert:
Lid niet gedefinieerd
In Microsoft Excel 97 of hoger wordt het volgende foutbericht weergegeven wanneer u een van deze procedures uitvoert:
Compileerfout:
Kan de methode of het gegevenslid niet vinden.

Referenties

Als u meer informatie wilt over het bereik van variabelen, klikt u op het tabblad Index in de Microsoft Excel 7.0 Help en typt u het volgende:
bereik
Dubbelklik op de geselecteerde tekst om het onderwerp weer te geven.

Als u meer informatie wilt over hoe lang de waarde van een variabele wordt behouden, klikt u op het tabblad Index in de Microsoft Excel 7.0 Help en typt u het volgende:
variabelen, levensduur
Dubbelklik op de geselecteerde tekst om het onderwerp weer te geven.

Gebruikershandleiding van Visual Basic, versie 5.0, hoofdstuk 6, 'Making Your Variables Available Within Procedures, Modules, or Publicly'

Eigenschappen

Artikel ID: 141693 - Laatste beoordeling: maandag 19 september 2011 - Wijziging: 4.0
De informatie in dit artikel is van toepassing op:
  • Microsoft Office Excel 2007
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Excel 95 Standard Edition
  • Microsoft Excel 5.0 Standard Edition
  • Microsoft Excel 5.0 voor Macintosh
  • Microsoft Excel 97 Standard Edition
  • Microsoft Excel 98 voor Macintosh
Trefwoorden: 
kbcode kbinfo kbprogramming KB141693

Geef ons feedback

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com