2012-09-03 35 views
6

Obecnie robię "OS" w programie PowerPoint i muszę wiedzieć, jak ustawić zmienne globalne dla ustawień.Ustawianie zmiennych globalnych w VBA

Zrobiłem moduł o nazwie „Ustawienia” zawierające:

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 

Teraz na ekranie „Zaloguj”, mam pole tekstowe o nazwie „nazwa_użytkownika”. Następnie zrobiłem przycisk, żeby przetestować zmienne. Przycisk wykonuje następujące czynności:

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

Pole tekstowe nie ma wartości po kliknięciu przycisku. Jestem super nowy w VBA i chciałbym wiedzieć, jak to zrobić. Ponadto, jeśli ktoś wie, jak automatycznie wykonywać kody podczas uruchamiania programu PowerPoint, byłoby to fantastyczne.

EDYCJA: Próbuję utworzyć moduł zawierający tylko ustawienia. Czy ktoś może wskazać, jak zmienić wartości ze slajdów? Tak jak w przypadku kliknięcia przycisku na slajdzie 1, chcę zmienić wartość "UserName" w module "Ustawienia" na cokolwiek zechcę.

Rozwiązanie: OK, znalazłem jedno rozwiązanie. Muszę zapisać ustawienia do pliku tekstowego i pobrać go do odczytu.

Mój moduł ustawienia:

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 

teraz, aby zapisać ustawienia, po prostu użyć tekstowe i przycisk. Saving wartość TextBox1 do nazwa_użytkownika w pliku:

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

Czytając wartość nazwa_użytkownika i umieścić go w TextBox1:

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

Bardzo długi kod, ale działa dobrze. Dziękuję wszystkim!

+0

{Ogólne ostrzeżenie o zmiennych globalnych} –

+0

'Publiczna nazwa użytkownika, UserIcon, Tło, BrowserHomePage jako ciąg' tutaj tylko' BrowserHomePage' jest łańcuchem, musisz powtórzyć 'jak ciąg' po każdej zmiennej –

+13

" Obecnie robię "OS" w PowerPoint ". !! ??? – cja

Odpowiedz

3

Nie kładź wartości ustawień w module. Moduły są przeznaczone dla kodu, a będziesz wykonywać więcej pracy próbując przechowywać w nich dane, niż chcesz. Zapisz ustawienia w rejestrze lub w pliku tekstowym. Jeśli chcesz, aby ustawienia znajdowały się w pliku, możesz użyć CustomDocumentProperties lub ukrytego slajdu - nie wiem wystarczająco dużo o PPT, by dać ci dobrą sugestię.

Wykonaj procedurę, która odczytuje ustawienia z dowolnego miejsca, w którym zostały zapisane. Następnie wykonaj procedurę zapisywania ich z powrotem do magazynu. Kiedy użytkownik kliknie określony przycisk na slajdzie, zmieniamy zmienną Nazwa użytkownika, a następnie wykonujemy procedurę, która zapisuje ją do pamięci.

Deklarując zmienne w tym samym wierszu, należy podać typ dla każdej zmiennej.

Public UserName, UserIcon, Background, BrowserHomePage As String 

dims BrowserHomePage jako ciąg, ale pozostałe trzy zmienne jako Warianty.Użyj tego zamiast tego:

Albo jeszcze lepiej, ale wszystkie na własnej linii.
3

Twoja zmienna "nazwa użytkownika" w rzeczywistości nie jest globalna, ponieważ znajduje się w zakresie podprogramu Ustawienia. Przenieś swoje deklaracje zmiennych poza funkcję/podprogram, aby uczynić je globalnymi.

Spróbuj tego:

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