Rækkevidde af public variabler og procedurer i VBA
Jeg trænger vist til at lære lidt om rækkevidde for variabler og procedurer i min VBA-programmering...Jeg har lidt problemer med en variabel der skal arbejde globalt (i projektmappen) når jeg afvikler nogle VBA-procedurer.
Jeg arbejder med en kode der laver en AutoCloce hvis filen henligger ubrugt i eksempelvis 15 minutter.
Jeg afvikler noget kode i ved hændelsen, Workbook_BeforeClose, som jeg gerne vil variere afhængigt af om det er et normalt luk som brugeren foretager, eller om der er tale om et automatiseret luk (som jeg kalder AutoClose).
For at gøre det optimalt vil jeg gerne have en global variabel (CloseWithAutoClose as boolean) kørende, der kan fortælle automatiseringen at der er tale om AutoClose, så jeg kan variere koden, afhængig af om det er brugeren selv der lukker eller det er min AutoClose, der afvikles.
Jeg har selv forsøgt, men det driller mig lidt, måske er der nogle begrænsninger i det som jeg ikke har lært fra bunden.
I min ThisWorkbook-kode ligger der bl.a:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
' er der ikke noget galt - det vil jo afvikles ved hver Workbook_BeforeClose
'If CloseWithAutoClose = True Then
DisplayAlerts = False '<--- vis ikke advarsler ****************
ThisWorkbook.Saved = True '<--- bild Excel ind at der er gemt ****************
DisplayAlerts = True '<--- vis advarsler igen****************
'End If
End Sub
Sub SetVar3False() 'procedure bliver kaldt fra Workbook_Open - sætter variabel til False
CloseWithAutoClose = False ' vi sætter CloseWithAutoClose-variablen til False som default-værdi når filen åbner
End Sub
' når jeg afvikler min AutoClose-kode, så er en af de første linier et kald til denne procedure der sætter variabel til True
Public Sub SetVar3True()
CloseWithAutoClose = True ' sætter CloseWithAutoClose-variablen til True
End Sub
hvad er så mit problem?
Min AutoClose-kode liggere i et separat modul, altså ikke i ThisWorkbook-koden.
Når jeg forsøger at kalde min procedure (SetVar3True) fra dette AutoCloce-modul, så fejler kodeafvikleren og siger "Sub or Function not defined"
Det er uanset om min procedure hedder
Public Sub SetVar3True()
eller bare
Sub SetVar3True()
det er også uanset om kaldet AutoCloce-modulet hedder SetVar3True, eller det hedder Call SetVar3True.
Når jeg forsøger at kalde min procedure (SetVar3True) fra dette AutoCloce-modul, så fejler kodeafvikleren og siger "Sub or Function not defined"
1. Hvordan sætter jeg den globale variabel når jeg vil afvikle min AutoClose-kode fra et andet modul end ThisWorkbook.
Jeg troede at jeg bare kunne kalde mun sub-procedure der ligger i ThisWorkbook, men
2. er der en begrænsning i excel, der gør at jeg ikke kan kalde en sub-procedure nede fra et modul og opad til ThisWorkbook?
