2009-11-23 6 views
7

निम्नलिखित वीबीए कोड Me.Show पर बंद हो जाता है। मेरे परीक्षणों से, ऐसा लगता है कि Me.Show कोड कोड निष्पादन को रोकता है, भले ही कोड उपयोगकर्ताफॉर्म के अंदर है।मॉड्यूल स्टॉप कोड निष्पादन के रूप में उपयोगकर्ताफॉर्म क्यों दिखा रहा है?

इस भाग UserForm बाहर है:

Public Sub TestProgress() 
    Dim objProgress As New UserForm1 
    objProgress.ShowProgress 
    Unload objProgress 
End Sub 

इस भाग UserForm अंदर है:

Private Sub ShowProgress() 
    Me.Show vbModal 
    Dim intSecond As Integer 
    For intSecond = 1 To 5 
     Application.Wait Now + TimeValue("0:00:01") 
     Me.ProgressBar1.Value = intSecond/5 * 100 
    Next intSecond 
    Me.Hide 
End Sub 

कोड Me.Show पर रुक जाता है, के बाद UserForm प्रदर्शित होता है। कोई त्रुटि नहीं है, यह सिर्फ कोड निष्पादित करना बंद कर देता है। ऐसा लगता है VBA में एक मॉडल UserForm अंदर कोड को निष्पादित करने के लिए एक ही रास्ता इस तरह UserForm_Activate प्रक्रिया में शामिल करने के लिए है कि:

इस भाग UserForm बाहर है:

Public Sub TestProgress() 
    Dim objProgress As New UserForm1 
    Load objProgress 
    Unload objProgress 
End Sub 

यह हिस्सा है UserForm अंदर:

Private Sub UserForm_Initialize() 
    Me.Show vbModal 
End Sub 

Private Sub UserForm_Activate() 
    Dim intSecond As Integer 
    For intSecond = 1 To 5 
     Application.Wait Now + TimeValue("0:00:01") 
     Me.ProgressBar1.Value = intSecond/5 * 100 
    Next intSecond 
    Me.Hide 
End Sub 
बेशक

, मैं नहीं Me.Show UserForm_Activate अंदर रख सकते हैं क्योंकि यह प्रक्रिया केवल UserFo के बाद आग आरएम शो घटना।

UserForm.ShowModal के लिए दस्तावेज़ कहते हैं, "जब एक UserForm मोडल है, उपयोगकर्ता जानकारी की आपूर्ति या आवेदन के किसी अन्य भाग उपयोग करने से पहले UserForm बंद करना होगा। जब तक UserForm छिपा या उतार दिया है नहीं बाद में कोड निष्पादित।"

मैं प्रक्रिया के दौरान उपयोगकर्ता के साथ बातचीत करने से रोकने के लिए एक प्रगति पट्टी के रूप में एक मोडल UseForm का उपयोग करने की कोशिश कर रहा हूं। लेकिन यह पूरा करना मुश्किल होगा यदि मेरा सभी कोड UserForm_Activate प्रक्रिया में होना चाहिए।

क्या मुझे यहां कुछ याद आ रही है? सभी कोड निष्पादन Me.Show पर क्यों रोकता है?

उत्तर

2

मुझे लगता है कि मैंने इसे समझ लिया।

Me.Show के बाद UserForm_Activate ईवेंट आग। यदि UserForm_Activate प्रक्रिया में कोई कोड नहीं है तो कुछ भी नहीं होगा क्योंकि वीबीए Me.Hide के लिए प्रतीक्षा कर रहा है।

तो घटनाओं का क्रम है: Me.Show>UserForm_Activate>Me.Hide

किसी भी कोड है कि मैं चलाने के लिए UserForm_Activate प्रक्रिया में होना चाहिए चाहते हैं और Me.Hide से पहले किया जाना चाहिए।

संरचना बहुत सख्त है, लेकिन मैं उस संरचना का उपयोग अपने लाभ के लिए कर सकता हूं।

+3

सभी कि तुम सच में अगर आप अभी भी चादर के साथ बातचीत करते हुए फार्म को है सक्षम होना चाहते हैं क्या करने की जरूरत के लिए इस कोड जब userform बुला उपयोग करते हैं: 'userform.show vbModeless'। – Casey

10

जब फॉर्म vbModal के साथ प्रदर्शित होता है, तो कोड निष्पादन को निलंबित कर देगा और फ़ॉर्म के साथ उपयोगकर्ता के संपर्क की प्रतीक्षा करेगा। उदाहरण के लिए बटन पर क्लिक करना या ड्रॉपडाउन का उपयोग करना।

आप प्रपत्र संपत्ति

ShowModal = False 

को अद्यतन करने और अपने कोड से vbModal निकालते हैं। फॉर्म प्रदर्शित होने पर यह कोड निष्पादन जारी रखने की अनुमति देगा।

+0

यूप, vbModeless UserForms आसान हैं, लेकिन प्रक्रिया समाप्त होने तक मुझे एप्लिकेशन के साथ उपयोगकर्ता इंटरैक्शन को लॉक करने की आवश्यकता है। यह एक vbModal UserForm में कोड को कैसे व्यवस्थित करना है, यह जानने का मामला था। दस्तावेज बहुत खराब नहीं है, "अगर आप vbModal का उपयोग करते हैं तो सुनिश्चित करें कि आप UserForm_Activate और _before_ Me.Hide में निष्पादित कोई भी कोड डालना चाहते हैं। धन्यवाद! – Kuyenda

+0

यह मेरे लिए काम नहीं करता है। कॉलिंग' sub' चलती रहती है , लेकिन बिल्कुल कोई घटक प्रस्तुत नहीं किया जाता है, यहां तक ​​कि एक साधारण लेबल भी नहीं। – cbaldan

-3

मैं वास्तव में क्या आपके मन में जा रहा है क्योंकि आपकी क्या कह रहे हैं के लिए कोड की एक विस्तृत विविधता हैं पता नहीं है, लेकिन मैं उम्मीद है कि इस मदद कर सकते हैं

निजी उप cmdSwitch_Click() UserForm1.Hide UserForm2 .Show

End Sub

-2

मुझे लगता है कि मैं यह पता लगा इस सरल कदम करने में आप बैंक भाग पर राइट क्लिक फार्म का प्रयास करें और क्लिक करें गुण गलत पर "ShowModal" बदलें या VBA कोड में आप निम्नलिखित कोड का उपयोग कर userform करते समय दिखाई देते:

UserForm1.Show झूठी

5

मैं कारण है कि मैं निम्न त्रुटि हो रही थी के जवाब के लिए खोज रहा था:

Run time error '5': Invalid procedure call or argument

जब कोड की इस पंक्ति से चल रहा है:

UserForm1.Show True 

भले ही इस लाइन काम करता है:

+०१२३५१६४१०
UserForm1.Show False 

बेशक। सहीvbModal जैसा नहीं है! तो सरल जवाब सही enumerations उपयोग करने के लिए है:

UserForm1.Show vbModal 
UserForm1.Show vbModeless 
संबंधित मुद्दे

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