2013-09-23 15 views
6

Ich habe einen VBA-Code, der Auto_Open ist. Es führt einige Überprüfungen durch und fordert dann ein Benutzerformular auf, das nach Benutzername und Passwort fragt. Ich habe dieses Benutzerformular mit userform_name.show aufgerufen.Aufruf eines Benutzerformulars und Rückgabe eines Wertes

Mein Problem ist, wie kann ich eine zu meinem Auto_Open Sub aus dem Benutzerformular-Code zurückgeben.

Ich habe den Code, der überprüft, ob die Anmeldeinformationen korrekt sind, mit der Schaltfläche "Login" im Formular verknüpft. Dies ist der Code, der den Booleschen Wert erzeugt. Ich muss es an die Auto_Open zurückgeben.

Private Sub loginbutton() 
    Dim bool As Boolean 
    Dim lrup 
    Dim r As Long 
    Dim pass As String 

    loginbox.Hide 

    'are fields empty 
    Do While True 
     If unBox.Text = "" Or pwBox.Text = "" Then 
      MsgBox ("You must enter a Username and Password") 
     Else 
      Exit Do 
     End If 
     loginbox.Show 
     Exit Sub 
    Loop 

    'find pw reated to username (if existant) 
    lrup = UserPass.Range("A1").Offset(UserPass.Rows.Count - 1, 0).End(xlUp).Row 

    If unBox = "b0541476" And pwBox = "theone" Then 
     bool = True 
    Else 
     MsgBox ("Invalid username or password. Please try again.") 
     loginbox.Show 
     Exit Sub 
    End If 

    For r = 2 To lrup 
     If unBox = Cells(r, 1) Then 
      pass = Cells(r, 2).Value 
      Exit For 
     End If 
    Next 

    If pass = "" Then 
     MsgBox ("Invalid username or password. Please try again.") 
     loginbox.Show 
     Exit Sub 
    Else 
     bool = True 
    End If 
End Sub 
+1

"das ist der Code, der die Boolian produziert" - Wo ist es? –

+0

Entschuldigung ich habe es hinzugefügt. Wie kann ich "bool" an Auto_Open übergeben, wenn der Code abgelaufen ist? – user2385809

Antwort

3

entfernen Dim bool As Boolean von der Userform-Gebiet und erklären es in dem Modul wie unten

gezeigt

Dies ist, wie Sie Ihren Code in das Modul wie

Public bool As Boolean 

Sub Auto_Open() 
    ' 
    '~~> Rest of the code 
    ' 
    UserForm1.Show 

    If bool = True Then 
     '~~> Do Something 
    Else 
     '~~> Do Something   
    End If 

    ' 
    '~~> Rest of the code 
    ' 
End Sub 
+0

Konnte leicht von jemand geändert werden, um außer Kraft zu setzen. –

+0

Das ist insgesamt eine andere Frage :) Dies beantwortet im Grunde, wie man eine boolesche Variable deklariert und im Benutzerformular verwendet und dann an 'Auto_Open' weiterleitet. –

+0

Ja, Sie haben Recht. Ihre Methode wird nur in Bezug auf die gestellte Frage funktionieren. –

2

aussehen würde Wie wäre es mit Hilfe einer Funktion anstelle von einem Sub?

Function loginbutton() 
    ' your code 

    loginbutton = bool 
End Function 

Jetzt in Ihrem Telefonvorwahl können Sie für wahre Test/false

if loginbutton() then 
    'true responce 
else 
    'false responce 
end if 
+0

Nein, die Anmeldeschaltfläche befindet sich in einem Benutzerformular. Das Benutzerformular muss zuerst ausgeführt werden, dann loginbutton(), sobald sie "LogIn" auf dem Formular drücken. – user2385809

+0

Wenn ich richtig verstehe, würde es genauso funktionieren, solange Sie die Funktion an der richtigen Stelle aufrufen. In beiden Fällen wird der Login-Code ausgeführt und beendet. Ich überprüfe nur, ob er ausgeführt wurde, wenn er ausgeführt wurde, oder ob er wahr oder falsch ist, basierend darauf, was in ihm ausgeführt wurde. @ Siddharth Lösung funktioniert auch, aber lässt ein größeres Sicherheitsrisiko offen. –

0

Sie verwalten können diese von öffentlichen Variablen ohne den Einsatz zu tun.

Es scheint einen Unterschied zwischen show/hide und load/unload zu geben.

Wenn Sie ein Formular ausblenden, während es noch geladen ist, wird es nicht gelöscht, sodass Sie auf den Status der Steuerelemente im Formular verweisen können.

Zum Beispiel wurde ich mit einem Datumsauswahl (DTPicker1 genannt) auf einem Formular, mein Code in das Modul sieht wie folgt aus:

Dim NewDay As Date 

Load FrmDayPicker 
FrmDayPicker.Show 

NewDay = FrmDayPicker.DTPicker1.Value 

Unload FrmDayPicker 

Debug.Print NewDay 

Auf dem Formular können Sie nur Me.Hide insteaded von Unload Me und diese verwenden sollte funktionieren

Verwandte Themen