सेटअप: मैं कई UserForms के साथ कई परियोजनाओं है, और जब एक दोहरी मॉनिटर सिस्टम पर इन खोलने, डिफ़ॉल्ट StartUpPosition 1 है = CenterOwner और यह प्राथमिक प्रदर्शन (विंडोज़ डेस्कटॉप का केंद्र) के दाईं ओर आता है। मैं कोड का एक छोटा सा टुकड़ा लिखने की कोशिश कर रहा हूं जो परियोजना में प्रत्येक उपयोगकर्ता प्रपत्र के लिए एक संपत्ति को बदलता है। इस मामले में, विशेष रूप से, .StartUpPosition = 2 (CenterScreen)एवी UserForm की StartUpPosition परियोजना त्रुटि में बदलें: ऑब्जेक्ट का समर्थन नहीं करता संपत्ति
माइक्रोसॉफ्ट Office Professional प्लस 2010
का उपयोग करते हुए मैं पहले से ही पता VBA में गुण संपादक, Positions.StartUpPosition के तहत का उपयोग कर StartUpPosition परिवर्तित करने का तरीका। मुद्दा यह है कि इतनी सारी परियोजनाओं पर इतने सारे उपयोगकर्ताफॉर्म हैं, मैं उन्हें प्रत्येक परियोजना पर एक बार में बदलना चाहता हूं। आखिरकार, मैं विधि (फॉर्मनाम, संपत्ति, मूल्य) के अधिभार तर्कों का उपयोग कर किसी भी संपत्ति को बदलने के लिए एक ही कोड का उपयोग करना चाहता हूं। अभी के लिए, मैं StartUpPosition को संभालने के लिए केवल एक होने के साथ ठीक हूं।
जब मैं इस कोड को चलाता हूं, तो उपयोगकर्ताफॉर्म खोलने पर, यह अपेक्षित कार्य करता है, StartUpPosition = 1 (CenterOwner) के डिफ़ॉल्ट को ओवरराइड करता है और यह स्क्रीन के केंद्र में फ़ॉर्म प्रदर्शित करता है।
Sub UserForm_Initialize()
With UserFormName
.StartUpPosition = 2 'CenterScreen'
End With
End Sub
हालांकि, जब मैं इसे इस पाश है कि एक मॉड्यूल से इस परियोजना के नियंत्रण के माध्यम से चक्र, की कोशिश में एक बार में सभी रूपों में से चूक बदलने के लिए में एम्बेडेड चलाने के लिए, मैं निम्नलिखित त्रुटि मिलती है।
त्रुटि: रन-टाइम त्रुटि '438': वस्तु इस संपत्ति या विधि का समर्थन नहीं करता।
Sub UserFormStartUp_Center()
Dim VBComp As Object
'For each control in project'
For Each VBComp In Application.VBE.ActiveVBProject.VBComponents
'Check to see if control is a UserForm'
If VBComp.Type = 3 Then '3 = vbext_ct_MSForm'
'Change Property - StartUpPosition - SAME AS ABOVE'
With VBComp
.StartUpPosition = 2 'CenterScreen'
End With
End If
'Loop through controls'
Next
End Sub
प्रश्न: मैं संपत्ति के लिए प्रपत्र प्रत्येक UserForm में जाने के अलावा रन-समय में एक उदाहरण में न सिर्फ डिफ़ॉल्ट के रूप में संग्रहीत करने के लिए, और करने के लिए नीचे स्क्रॉल करके मैन्युअल रूप से इसे बदल कैसे सेट कर सकते संपत्ति और उस पर क्लिक करके, और फिर फॉर्म को बंद करना और दोहराने के लिए आगे बढ़ना। (हाँ, मैं अब तक करूँगा, लेकिन मेरे पास बहुत सारी परियोजनाएं हैं जिन्हें उपयोगकर्ता तकनीकों में बदलाव की आवश्यकता होगी क्योंकि मैं नई तकनीकों को सीखता हूं, मुझे ग्राहकों के लिए अन्य परियोजनाओं को पैच करने की आवश्यकता है)
मुझे लगता है कि यह कुछ है रन-टाइम के बारे में जो मुझे समझ में नहीं आता है। मुझे विश्वास करना है कि आप इस संपत्ति को प्रोग्रामेटिक रूप से सेट कर सकते हैं क्योंकि यह इसे अन्य गुणों के साथ संग्रहीत करता है।
अनुसंधान:
MSDN: StartUp Object Property MSDN के अनुसार, केवल रनटाइम पर वस्तुओं स्टार्टअप वस्तुओं हो सकता है।
MSDN: StartUpPosition Property
इस पर किसी भी मदद के लिए अग्रिम धन्यवाद। यह मुझे क्लिक करने के कई घंटे बचाएगा।
संपादित करें: पढ़ने जवाब के बाद, निम्नलिखित जोड़ना:
अद्यतन: जब मैं सुझाव आपको जवाब में बताया गया से प्रत्येक के साथ कोड चलाने के लिए, मैं अभी भी एक त्रुटि हो रही है। रन-टाइम त्रुटि: '-2147467259 (80004005) ऑब्जेक्ट' _VBComponent 'की विधि' गुण 'विफल रही।
तो मैं संपत्ति मद .. मूल्य, नाम के एक MsgBox मुद्रण, आदि
For Each VBComp In ActiveWorkbook.VBProject.VBComponents
'~~> Check to see if control is a UserForm'
If VBComp.Type = 3 Then
With VBComp
MsgBox (VBComp.Properties.Item(50).Value)
End With
End If
Next
जब मैं ऐसा करते हैं, यह दिलचस्प है की तरह, बाहर कुछ बातें की कोशिश करने का फैसला किया। संदेश बॉक्स प्रकट होता है, सही जानकारी के साथ जो उस आइटम के लिए स्थानीय विंडो से मेल खाता है .. फिर, msgstr "संदेश के बाद, यह ऑब्जेक्ट त्रुटि देता है। अगर यह एक त्रुटि है, तो संदेश बॉक्स सही तरीके से प्रिंट क्यों करता है? ऐसा लगता है जैसे उपयोगकर्ताफॉर्म एक ऑब्जेक्ट है, लेकिन प्रॉपर्टी.इटम नहीं है। फिर भी, यह पैरामीटर कि इस तरह के नाम, मूल्य, आदि के रूप
स्क्रीनशॉट है कि संपत्ति मद जहां ऑब्जेक्ट प्रकार = कुछ भी नहीं
आप लगभग सही रास्ते पर हैं। मुझे एक उत्तर पोस्ट करने दें :) –