Setting Global Variables in VBA
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
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, 2022Comments
-
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!