Variablers omfattning och livslängd i VBA
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 |