Setting Global Variables in VBA

84,087

Solution 1

Don't put your setting values in a module. Modules are for code and you will do more work trying to store data in them than you want. Store settings in the registry or in a text file. If you want the settings to be inside the file, you may be able to use CustomDocumentProperties or a hidden slide - I don't know enough about PPT to give you a good suggestion.

Make a procedure that reads the settings from wherever you store them. Then make a procedure to write them back out to storage. When the user clicks a certain button on the slide, you change the Username variable, then execute the procedure that writes it to storage.

When declaring variables on the same line, you have to include the type for each variable.

Public UserName, UserIcon, Background, BrowserHomePage As String

dims BrowserHomePage as a String, but the other three variables as Variants. Use this instead

Public UserName As String, UserIcon As String, Background As String, BrowserHomePage As String

Or better yet, but them all on their own line.

Solution 2

Your "username" variable is not actually global because it's within the scope of your Settings subroutine. Move your variable declarations outside of a function/subroutine to make them global.

Try this:

Option Explicit
Public UserName, UserIcon, Background, BrowserHomePage As String
Public SetupComplete As Boolean

Public Sub Settings()

SetupComplete = False
UserName = "Administrator"
UserIcon = Nothing
Background = Nothing
BrowserHomePage = Nothing

'Set the variables
UserName.Text = UserName

End Sub
Share:
84,087
dennis96411
Author by

dennis96411

I'm a newb at about everything, so my questions can be quite dumb. Please don't be too mean. :)

Updated on July 12, 2022

Comments

  • dennis96411
    dennis96411 almost 2 years

    I'm currently making an "OS" in PowerPoint and I need to know how to set global variables for the settings.

    I made a module called "Settings" containing:

    Public Sub Settings()
    
    Option Explicit
    Public UserName, UserIcon, Background, BrowserHomePage As String
    Public SetupComplete As Boolean
    
    SetupComplete = False
    UserName = "Administrator"
    UserIcon = Nothing
    Background = Nothing
    BrowserHomePage = Nothing
    
    'Set the variables
    UserName.Text = UserName
    
    End Sub
    

    Now on the "log in" screen, I have a text box named "UserName". I then made a button just to test out the variables. The button does this:

    Private Sub CommandButton1_Click()
    UserName.Value = UserName
    End Sub
    

    The text box has no value when I click the button. I'm super new at VBA, and would like to know how to do this. Also, if anyone knows how to automatically execute codes when starting the PowerPoint, that would be fantastic.

    EDIT: I'm trying to make a module containing only the settings. Can someone point out how to change the values from slides? Like if I click a button in slide 1, I want it to change the "UserName" value in module "Settings" to whatever I want.

    Solution: Okay, I found the one solution. I have to write the settings to a text file and retrieve it for reading.

    My settings module:

    Public UserName As String, Password As String, UserIcon As String, DesktopBackground As String, LogInBackground As String, BrowserHomePage As String
    Public InitialSetupCompleted As Boolean
    
    Public Sub ReadSettings()
    
    'Delcaring variables
    TempDir = Environ("Temp")
    SettingsFileName = "\OpenOSSettings.txt"
    SettingsFile = TempDir & SettingsFileName
    ReadFile = FreeFile()
    
    'Read all settings from file
    Open SettingsFile For Input As #ReadFile
    Do While Not EOF(ReadFile)
        Line Input #ReadFile, Read
            If Read Like "UserName = *" Then
            UserName = Replace(Read, "UserName = ", "")
            End If
            If Read Like "Password = *" Then
            Password = Replace(Read, "Password = ", "")
            End If
            If Read Like "UserIcon = *" Then
            UserIcon = Replace(Read, "UserIcon = ", "")
            End If
            If Read Like "DesktopBackground = *" Then
            DesktopBackground = Replace(Read, "DesktopBackground = ", "")
            End If
            If Read Like "LogInBackground = *" Then
            LogInBackground = Replace(Read, "LogInBackground = ", "")
            End If
            If Read Like "BrowserHomePage = *" Then
            BrowserHomePage = Replace(Read, "BrowserHomePage = ", "")
            End If
            If Read Like "InitialSetupCompleted = *" Then
            InitialSetupCompleted = Replace(Read, "InitialSetupCompleted = ", "")
            End If
    Loop
    Close #ReadFile
    
    'Applying settings to all elements
    Slide5.UserName.Caption = UserName
    
    End Sub
    
    
    Public Sub SaveSettings()
    
    'Declaring variables
    TempDir = Environ("Temp")
    SettingsFileName = "\OpenOSSettings.txt"
    SettingsFile = TempDir & SettingsFileName
    WriteFile = FreeFile()
    
    'Write all settings to file
    Open SettingsFile For Output As #WriteFile
    Print #WriteFile, "UserName = " & UserName
    Print #WriteFile, "Password = " & Password
    Print #WriteFile, "UserIcon = " & UserIcon
    Print #WriteFile, "DesktopBackground = " & DesktopBackground
    Print #WriteFile, "LogInBackground = " & LogInBackground
    Print #WriteFile, "BrowserHomePage = " & BrowserHomePage
    Print #WriteFile, "InitialSetupCompleted = " & InitialSetupCompleted
    Close #WriteFile
    
    End Sub
    

    Now to save the settings, I just use a textbox and a button. Saving the value of TextBox1 to UserName in the file:

    Private Sub CommandButton1_Click()
    UserName = TextBox1.Value
    Settings.SaveSettings
    End Sub
    

    Reading the value of UserName and put it into TextBox1:

    Private Sub CommandButton2_Click()
    Settings.ReadSettings
    TextBox2.Value = UserName
    End Sub
    

    Very long code, but it works well. Thanks everyone!