[easy_youtube_gallery id=uMK0prafzw0,8Uee_mcxvrw,HcXNPI-IPPM,JvMXVHVr72A,AIXUgtNC4Kc,K8nrF5aXPlQ,cegdR0GiJl4,L-wpS49KN00,KbW9JqM7vho ar=16_9 cols=3 thumbnail=hqdefault controls=0 playsinline=1 privacy=1 title=top wall=1 class=mySuperClass]
Först publicerad: 2010-02-15

Variablers omfattning och livslängd i VBA

Exempel på variabel i VBA som deklareras på objektnivå, dvs den mest omfattande nivån.

Variablers omfattning och livslängd beror på var i koden de har deklarerats. Detta betyder att variablernas åtkomlighet (från annan VBA-kod) alltså kan skilja sig åt.

Konceptet kallas för scope på engelska.

Nivåer för variablers omfattning

Följande tre nivåer kan urskiljas vad gäller variabeldeklarering:

  • Procedurnivå
  • Modulnivå
  • Objektnivå

Variabeldeklarering på procedurnivå

En variabel som deklareras någonstans inne i makrot lever igenom hela körningen av just det makrot.
Exempel: Variabeln strSvar deklareras i början på makrot, och den lever med genom hela koden.

Sub VariabelExempel()
 
Dim strSvar As String
Dim intSvar As Integer
 
intSvar = Int((2 * Rnd) + 1)
 
If intSvar = 1 Then
  strSvar = ("En etta")
ElseIf intSvar = 2 Then
  strSvar = ("En tvåa")
End If
 
MsgBox strSvar
 
End Sub

Variabeldeklarering på modulnivå

En variabel som deklareras på modulnivå (dvs ovanför samtliga makron) är tillgänglig från alla procedurer i aktuell modul ända fram tills körningen av makrot är klart.

I exemplet nedan så deklareras variabeln strSvar ovanför de två makrona. Det första makrot initierar variabeln (ger den ett värde). Det andra makrot presenterar värdet på variabeln, dvs att variabelns omfattning spänner över samtliga makron i aktuell VBA-modul.

Dim strSvar As String 'deklareras högst upp i modulen
'______________________________________________________________
 
Sub VariabelExempel()
 
Dim intSvar As Integer
 
intSvar = Int((2 * Rnd) + 1)
 
If intSvar = 1 Then
  strSvar = ("En etta")
ElseIf intSvar = 2 Then
  strSvar = ("En tvåa")
End If
 
Run ("VariabelExempel_2")
 
End Sub
 
'______________________________________________________________
 
Sub VariabelExempel_2()
 
MsgBox "Erhållet värde är: " & strSvar
 
End Sub

Observera att variabelns livslängd begräsas till makrots körning. Det går därför inte att köra de två makrona separat och skicka över variabelvärden som i exemplet ovan.

Variabeldeklarering på objektnivå

En variabel som deklareras på objektnivå är tillgänglig från samtliga moduler och procedurer i aktuell arbetsbok. Livslängden är som alltid begränsad till makrokörningen.

Deklarationen sker överst i en modul:

Public strSvar as String