Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Omfånget för ett deklarerat element är uppsättningen med all kod som kan referera till den utan att kvalificera dess namn eller göra den tillgänglig via en importinstruktor (.NET-namnområde och typ). Ett element kan ha omfång på någon av följande nivåer:
| Nivå | Beskrivning | 
|---|---|
| Blockomfång | Endast tillgängligt i kodblocket där det deklareras | 
| Proceduromfång | Tillgänglig för all kod inom den procedur där den deklareras | 
| Modulomfång | Tillgänglig för all kod i modulen, klassen eller strukturen där den deklareras | 
| Namnområdesomfång | Tillgänglig för all kod i namnområdet där den deklareras | 
Dessa omfångsnivåer sträcker sig från det smalaste (blocket) till det bredaste (namnområdet), vilket innebär att det smalaste omfånget är den minsta uppsättningen kod som kan referera till elementet utan kvalificeringar. Mer information finns i "Omfångsnivåer" på den här sidan.
Ange omfång och definiera variabler
Du anger omfånget för ett element när du deklarerar det. Omfånget kan bero på följande faktorer:
Regionen (block, procedur, modul, klass eller struktur) där du deklarerar elementet
Namnområdet som innehåller elementets deklaration
Den åtkomstnivå som du deklarerar för elementet
Var försiktig när du definierar variabler med samma namn men ett annat omfång, eftersom det kan leda till oväntade resultat. Mer information finns i Referenser till deklarerade element.
Omfångsnivåer
Ett programmeringselement är tillgängligt i hela regionen där du deklarerar det. All kod i samma region kan referera till elementet utan att kvalificera dess namn.
Blockomfattning
Ett block är en uppsättning instruktioner som omges av inledande och avslutande deklarationsuttryck, till exempel följande:
DoochLoopFor[Each] ochNextIfochEnd IfSelectochEnd SelectSyncLockochEnd SyncLockTryochEnd TryWhileochEnd WhileWithochEnd With
Om du deklarerar en variabel i ett block kan du bara använda den i det blocket. I följande exempel är omfånget för heltalsvariabeln cube blocket mellan If och End If, och du kan inte längre referera till cube när körningen passerar ut ur blocket.
If n < 1291 Then
    Dim cube As Integer
    cube = n ^ 3
End If
Anmärkning
Även om en variabels omfång är begränsat till ett block är dess livslängd fortfarande den för hela proceduren. Om du anger blocket mer än en gång under proceduren behåller varje blockvariabel sitt tidigare värde. För att undvika oväntade resultat i ett sådant fall är det klokt att initiera blockvariabler i början av blocket.
Proceduromfång
Ett element som deklarerats inom en procedur är inte tillgängligt utanför den proceduren. Endast den procedur som innehåller deklarationen kan använda den. Variabler på den här nivån kallas även lokala variabler. Du deklarerar dem med Dim-instruktionen, med eller utan Static-nyckelordet.
Proceduren och blockomfånget är nära relaterade. Om du deklarerar en variabel i en procedur men utanför något block i den proceduren kan du tänka dig att variabeln har blockomfång, där blocket är hela proceduren.
Anmärkning
Alla lokala element, även om de är Static variabler, är privata för proceduren där de visas. Du kan inte deklarera något element med hjälp av det offentliga nyckelordet i en procedur.
Modulomfång
För enkelhetens skull används termen modulnivå lika för moduler, klasser och strukturer. Du kan deklarera element på den här nivån genom att placera deklarationssatsen utanför någon procedur eller ett block, men inom modulen, klassen eller strukturen.
När du gör en deklaration på modulnivå avgör den åtkomstnivå du väljer omfånget. Namnområdet som innehåller modulen, klassen eller strukturen påverkar också omfånget.
Element som du deklarerar privat åtkomstnivå för är tillgängliga för varje procedur i modulen, men inte för någon kod i en annan modul. 
              Dim-instruktionen på modulnivå blir som standard Private om du inte använder några nyckelord för åtkomstnivå. Du kan dock göra omfångs- och åtkomstnivån tydligare med hjälp av nyckelordet Private i -instruktionen Dim .
I följande exempel kan alla procedurer som definierats i modulen referera till strängvariabeln strMsg. När den andra proceduren anropas visas innehållet i strängvariabeln strMsg i en dialogruta.
' Put the following declaration at module level (not in any procedure).
Private strMsg As String
' Put the following Sub procedure in the same module.
Sub initializePrivateVariable()
    strMsg = "This variable cannot be used outside this module."
End Sub
' Put the following Sub procedure in the same module.
Sub usePrivateVariable()
    MsgBox(strMsg)
End Sub
Namnområdesomfång
Om du deklarerar ett element på modulnivå med hjälp av nyckelordet Vän eller Offentlig blir det tillgängligt för alla procedurer i hela namnområdet där elementet deklareras. Med följande ändring i föregående exempel kan strängvariabeln strMsg refereras till med kod var som helst i namnområdet för deklarationen.
' Include this declaration at module level (not inside any procedure).
Public strMsg As String
Namnområdets omfång inkluderar kapslade namnområden. Ett element som är tillgängligt från ett namnområde är också tillgängligt från alla namnområden som är kapslade i namnområdet.
Om projektet inte innehåller några Namnområdesinstruktorär allt i projektet i samma namnområde. I det här fallet kan namnområdesomfång betraktas som projektomfång. 
              Public element i en modul, klass eller struktur är också tillgängliga för alla projekt som refererar till deras projekt.
Val av omfång
När du deklarerar en variabel bör du tänka på följande punkter när du väljer dess omfång.
Fördelar med lokala variabler
Lokala variabler är ett bra val för alla typer av tillfälliga beräkningar av följande skäl:
Undvikande av namnkonflikt. Lokala variabelnamn är inte konfliktkänsliga. Du kan till exempel skapa flera olika procedurer som innehåller en variabel med namnet
intTemp. Så länge varjeintTempär deklarerad som en lokal variabel, känner varje procedur bara igen sin egen version avintTemp. En procedur kan ändra värdet lokaltintTemputan att påverkaintTempvariabler i andra procedurer.Minnesförbrukning. Lokala variabler förbrukar bara minne medan proceduren körs. Deras minne frigörs när proceduren återgår till anropskoden. Däremot förbrukar delade och statiska variabler minnesresurser tills programmet slutar köras, så använd dem bara när det behövs. Instansvariabler förbrukar minne medan deras instans fortsätter att finnas, vilket gör dem mindre effektiva än lokala variabler, men potentiellt effektivare än
SharedellerStaticvariabler.
Minimera omfång
När du deklarerar en variabel eller konstant är det i allmänhet bra programmeringspraxis att göra omfånget så smalt som möjligt (blockomfånget är det smalaste). Detta bidrar till att spara minne och minimerar risken för att koden felaktigt refererar till fel variabel. På samma sätt bör du deklarera en variabel som statisk endast när det är nödvändigt att bevara dess värde mellan proceduranrop.