在VBA中设置全局变量

时间:2012-09-03 01:52:10

标签: vba variables powerpoint global powerpoint-vba

我目前在PowerPoint中制作“操作系统”,我需要知道如何为设置设置全局变量。

我制作了一个名为“设置”的模块,其中包含:

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

现在在“登录”屏幕上,我有一个名为“UserName”的文本框。然后我做了一个按钮来测试变量。按钮执行此操作:

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

单击按钮时,文本框没有值。我是VBA的新手,想知道如何做到这一点。此外,如果有人知道如何在启动PowerPoint时自动执行代码,那将是非常棒的。

编辑:我正在尝试制作一个只包含设置的模块。有人可以指出如何更改幻灯片中的值吗?就像我单击幻灯片1中的按钮一样,我希望它将模块“设置”中的“UserName”值更改为我想要的任何值。

解决方案:好的,我找到了一个解决方案。我必须将设置写入文本文件并检索它以供阅读。

我的设置模块:

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

现在要保存设置,我只使用文本框和按钮。 将TextBox1的值保存到文件中的UserName:

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

读取UserName的值并将其放入TextBox1:

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

代码很长,但效果很好。谢谢大家!

2 个答案:

答案 0 :(得分:3)

您的“用户名”变量实际上不是全局变量,因为它在“设置”子例程的范围内。将变量声明移到函数/子例程之外,使它们成为全局变量。

试试这个:

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

答案 1 :(得分:3)

请勿将设置值放在模块中。模块用于代码,您将尝试在其中存储数据,而不是您想要的更多工作。将设置存储在注册表或文本文件中。如果你想让设置在文件中,你可以使用CustomDocumentProperties或隐藏的幻灯片 - 我不太了解PPT给你一个很好的建议。

制作一个程序,从存储它们的任何位置读取设置。然后制作一个程序将它们写回存储。当用户单击幻灯片上的某个按钮时,您更改了Username变量,然后执行将其写入存储的过程。

在同一行声明变量时,必须包含每个变量的类型。

Public UserName, UserIcon, Background, BrowserHomePage As String

将BrowserHomePage变为String,但将其他三个变量变为Variants。请改用

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

或者更好,但他们都在自己的路线上。