Avatar billede folj Forsker
12. juni 2018 - 10:03 Der er 7 kommentarer og
1 løsning

Excel VBA: Rækkevidde af global variabel?

I mit modul hvor jeg har defineret alle de constants og globale variabler jeg arbejder med, har jeg tilføjet en variabel der hedder AutoRunForecast.
Public AutoRunForecast As Boolean
Den skal jeg bruge når jeg kører en automatisk overførsel af forecast-data til en anden excelfil.

Jeg er blot i tvivl om rækkevidden af variablen .
Rækker den også ud over egen fil?
Kan jeg også teste variablen under afvikling af VBA-proceduren i en anden fil?
Avatar billede Dan Elgaard Ekspert
12. juni 2018 - 10:26 #1
Nej, du skal bruge 'Settings' funktionerne.

Se fuld forklaring her:
http://www.EXCELGAARD.dk/Bib/SGD/Settings/
Avatar billede folj Forsker
12. juni 2018 - 11:50 #2
@Dan Elgaard:

Kan jeg mon også få adgang til at ændre disse indstillinger for de mange brugere der arbejder med filen.

Kan det tænkes at blive betragtet som farlig ændring af indstilling, på brugernes pc*er?

mvh Folmer
Avatar billede Dan Elgaard Ekspert
12. juni 2018 - 11:53 #3
Ja, du gemmer og henter jo 'variablen' præcist som normalt i din VBA kode, blot med 'Settings' funktionen, i stedet for at bruge variablen direkte...

'Settings' funktionerne er også uheldigt navngivet, da man jo netop ikke ændrer på brugerens opsætning - men, navngivningen skyldes nok, at det oprindeligt var beregnet som en let måde for en bruger at gemme egne indstillinger med.
Avatar billede folj Forsker
14. juni 2018 - 08:15 #4
@Dan Elgaard

Når du linker til en længere artikel, som jeg kan sætte mig og læse, så er det jeg rammes af mit manglende overblik.
Det er noget jeg har pådraget mig efter en hjerneblødning for nogle år siden.

Måske du kan hjælpe mig med at stille det op…
Først bliver jeg i tvivl om:
Er det før jeg erklærer min variabel jeg skal køre dit Visual Basic lignende script?

Min foreløbige  opstilling:
I min kode i min hovedfil vil jeg sætte  variablen:
AutoRunForecast = True

Og i min forecast-fil har jeg så en procedure der skal skrive ind, og teste om AutoRunForecast = True.

Sub WriteDataToDraftSheet()
' ny procedure der skriver forecast-data ind i et ark i forecastfilen
  If AutoRunForecast = True Then ' hvis det er en AutoForecas
    ' Her skal der så placeres en kode der får den til at køre glat igennem uden bruger skal tage stilling til dit og dat.


  End If

End sub
Avatar billede folj Forsker
18. juni 2018 - 09:34 #5
@Dan Elgaard

må jeg henlede din opmærksomhed på min kommentar #4
Avatar billede folj Forsker
19. juni 2018 - 09:17 #6
@Dan Elgaard

Nu tror jeg jeg fik nogenlunde overblik over det du  foreslog...

Ud fra det har jeg nu  følgende kode, placeret øverst i et modul

Option Explicit

    Public AutoRunForecast As Boolean ' declaire my variable


Sub SettingsFunctions()

' Initialize

      AutoRunForecast = GetSetting("FolmerJensenFOLJ", "FermPlanValues", "AutoRunForecast", True) ' Get previous saved value

      Dim MsgBoxText As String
      MsgBoxText = "Current value in AutoRunForecast is: " & AutoRunForecast & vbNewLine
'
' Request value from user
      If MsgBox(MsgBoxText, vbYesNo + vbQuestion) = vbYes Then
          MsgBox "Writing to forecast file will continue"
          WriteDataToDraftSheet
      End If


' Save value for usage in other files...
      SaveSetting "FolmerJensenFOLJ", "FermPlanValues", "AutoRunForecast", True                ' Save value to Registry

' when we dont need yhe AutoRunForecast-value any more...
      If AutoRunForecast = True Then
        On Error Resume Next                                                    ' To avoid error, if key doesn't exists
        DeleteSetting "FolmerJensenFOLJ", "FermPlanValues", "AutoRunForecast"    ' Delete value from Registry
        DeleteSetting "FolmerJensenFOLJ", "FermPlanValues"                      ' Delete section from Registry
        DeleteSetting "FolmerJensenFOLJ"                                        ' Delete application key from Registry
      End If

End Sub


Men næste skridt, hvor jeg disabler linierne DeleteSetting, og tester i en anden fil om der er en tilgængelig variabel der hedder
If AutoRunForecast = True Then
så er svaret nej.
Avatar billede folj Forsker
21. august 2018 - 09:04 #7
Jeg er I gang med lidt oprydning...
Jeg fik svar, men kun fra Dan Elgaard, og det var et svar der ikke gav mig overblik over hvordan jeg skal stille det op.

Jeg lukker spørgsmålet for ikke at have for mange spørgsmål I luften
Avatar billede Dan Elgaard Ekspert
21. august 2018 - 18:30 #8
Jeg havde faktisk ikke set, at dette gamle spørgsmål stadig stod åben - men heldigt, at du lige nu skrev herinde, så jeg blev opmærksom på det igen, da jeg tager på ferie i næste uge :-)

Du tester for værdien fra en anden regnearks fil med noget i denne stil:

If GetSetting("FolmerJensenFOLJ", "FermPlanValues", "AutoRunForecast", False) = True  Then ...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester