2013-09-23 9 views
6

मेरे पास एक vba कोड है जो Auto_Open है। यह कुछ चेक करता है फिर उपयोगकर्ताफॉर्म को संकेत देता है जो उपयोगकर्ता नाम और पासवर्ड मांगता है। मैंने इस उपयोगकर्ता को userform_name.show के साथ बुलाया।उपयोगकर्ताफॉर्म को कॉल करना और एक मान वापस करना

मेरा मुद्दा यह है कि मैं Boolean को Auto_Open उप उपयोगकर्ता उपयोगकर्ता कोड से कैसे वापस कर सकता हूं।

मैंने कोड को लिंक किया है जो सत्यापित करता है कि क्या प्रमाण पत्र फॉर्म पर "लॉगिन" बटन के लिए सही हैं। यह वह कोड है जो बूलियन पैदा करता है। मुझे इसे Auto_Open पर वापस करने की आवश्यकता है।

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

"यह वह कोड है जो बूलियन पैदा करता है" - यह कहां है? –

+0

क्षमा करें मैंने इसे जोड़ा। जब कोड समाप्त हो जाता है तो मैं ऑटो_ ओपन पर "बूल" को वापस कैसे पास कर सकता हूं? – user2385809

उत्तर

3

userform कोड क्षेत्र से Dim bool As Boolean निकालें और मॉड्यूल में यह घोषणा के रूप में

इस मॉड्यूल में अपने कोड की तरह

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

किसी को ओवरराइड करने के लिए आसानी से बदला जा सकता है। –

+0

यह पूरी तरह से एक अलग सवाल है :) यह मूल रूप से उत्तर देता है कि कैसे एक बूलियन वैरिएबल घोषित करें और इसे उपयोगकर्ताफॉर्म में उपयोग करें और फिर इसे 'ऑटो_ऑपेन' –

+0

पर पास करें हां, आप सही हैं। आपकी विधि सिर्फ पूछे जाने वाले प्रश्न के संबंध में मिल जाएगी। –

2

तरह दिखाई देंगे है कि नीचे दिखाया कैसे एक समारोह का उपयोग कर के बारे में उप के बजाय?

Function loginbutton() 
    ' your code 

    loginbutton = bool 
End Function 

अब आप अपने फोन करने के कोड में आप/सच के लिए परीक्षण कर सकते हैं झूठी

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

कोई उपयोगकर्ता लॉगिन पर लॉगिन बटन नहीं है। उपयोगकर्ता को फॉर्म पर "लॉग इन" दबाए जाने के बाद पहले लॉगिनबटन() को पहले चलाना चाहिए। – user2385809

+0

यदि मैं सही ढंग से समझता हूं, तो यह वैसे ही काम करेगा जब तक आप सही स्थान पर फ़ंक्शन को कॉल करते हैं। किसी भी तरह से लॉगिन कोड चलाया जा रहा है और समाप्त हो रहा है, मैं बस यह जांच रहा हूं कि जब यह चल रहा है तो यह अंदर चला गया था के आधार पर सही या गलत लौटा। @ सिद्धार्थ समाधान भी काम करता है लेकिन पत्तियां एक बड़ा सुरक्षा जोखिम खुलती हैं। –

0

आप सार्वजनिक चर के उपयोग के बिना यह करने के लिए प्रबंधन कर सकते हैं।

शो/छुपाएं और लोड/अनलोड के बीच एक अंतर दिखाई देता है।

यदि आप अभी भी लोड होने पर एक फॉर्म छुपाते हैं तो इसे साफ़ नहीं किया जाएगा, इसलिए आप फ़ॉर्म पर नियंत्रण की स्थिति का संदर्भ दे सकते हैं।

उदाहरण के लिए मैं एक फार्म पर एक दिनांक पिकर (बुलाया DTPicker1) का उपयोग किया गया था, मॉड्यूल में मेरे कोड इस तरह दिखता है:

Dim NewDay As Date 

Load FrmDayPicker 
FrmDayPicker.Show 

NewDay = FrmDayPicker.DTPicker1.Value 

Unload FrmDayPicker 

Debug.Print NewDay 

आपके प्रपत्र पर आप बस का उपयोग कर सकते Me.HideUnload Me और इस बात का insteaded काम करना चाहिए

संबंधित मुद्दे