Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Setting Global Variables in VBA

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!

like image 226
dennis96411 Avatar asked Sep 03 '12 01:09

dennis96411


2 Answers

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.

like image 65
Dick Kusleika Avatar answered Oct 10 '22 10:10

Dick Kusleika


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
like image 35
Parker Avatar answered Oct 10 '22 10:10

Parker