2016-06-14 18 views
1

ich habe folgende Userform in Excel VBA programmiert:Schaltfläche Kennwort und Benutzerformular

Private Sub CommandButton1_Click() 
Password = TextBox1.Text 
If Password = a Then 
MsgBox "Password Correct.", vbInformation 
Unload Me 
Else 
MsgBox "Password Incorrect. Please try again.", vbCritical 
End If 
End Sub 

Das Passwort Variable a = "test"

Dieses Passwort Userform selbst perfekt funktioniert. Jetzt möchte ich es mit einer Schaltfläche verbinden, die bereits im Blatt ist. Der Code hinter dieser Schaltfläche ist im Abschnitt „Diesearbeitsmappe“ in dem VBA-Editor:

Sub Button_Test() 
UserForm1.Show 
Tabelle2.Range("C3").Value = 1 
End Sub 

Die Idee ist, dass die Schaltfläche „Button_Test“ ist durch ein Passwort geschützt, die von dem Benutzerformular eingegeben werden können. Sobald das Passwort korrekt eingegeben wurde, wird das Makro "Tabelle2.Range (" C3 "). Value = 1" durchgeführt.

Allerdings habe ich zur Zeit das Problem, dass das Userformular mich mit "Password Correct" beantwortet, aber das Makro "Tabelle2.Range (" C3 ") nicht startet. Wert = 1".

Wie kann ich dem Benutzerformular sagen, sobald das Passwort korrekt eingegeben wurde, sollte es zurück zum Makro "Button_Test" springen und den Vorgang fortsetzen?

Danke für jede Hilfe.

+0

das ist genau das, was sollte passieren mit dem Code, den Sie gepostet haben. Wird das Benutzerformular entladen? – Rory

+0

Ich nehme an, dass Sie im Click-Handler Ihrer Schaltfläche 'Unload Me' aufrufen müssen, um das Formular zu schließen. – TmTron

+0

Ich habe die Datei neu gestartet und jetzt funktioniert es. Nicht sicher warum. Wenn jedoch das Benutzerformular erscheint und ich auf das Zeichen "X" rechts oben auf dem Benutzerbild klicke, wird das Makro gestartet, obwohl ich kein Passwort eingegeben habe. Gibt es eine Möglichkeit, dies zu vermeiden? – Michi

Antwort

0

Ich würde mit einem booleschen Wert arbeiten, den Sie auf wahr setzen, wenn das Passwort korrekt war. Man könnte so etwas wie diese machen:

-Code in Modul oder Blatt

Sub Schaltfläche1_Klicken() 
'Load funktion Check Password 
If UserForm1.checkPassword() = True Then 
    'Run this Code when PWD was Correct 
    Tabelle1.Range("C3").Value = 1 
End If 
End Sub 

Und in der Userform Sie einen Code wie das Setzen kann:

Private passwordStatus As Boolean 

Private Sub CommandButton1_Click() 
    Dim a As String 
    Dim Password As String 

    a = "123" 
    Password = TextBox1.Text 
    'Set Pawwordstatus at False before Testing 
    passwordStatus = False 
    If Password = a Then 
     MsgBox "Password Correct.", vbInformation 
     passwordStatus = True 
     Unload Me 
    Else 
     MsgBox "Password Incorrect. Please try again.", vbCritical 
    End If 
End Sub 

Function checkPassword() As Boolean 
    UserForm1.Show 
    'Shows the User Form. And after Closing the Form 
    'The PasswordStatus Value will be returned and you can check if 
    'it is true 
    checkPassword = passwordStatus 
End Function 
+0

Funktioniert perfekt. Danke für diese großartige Idee. – Michi

Verwandte Themen