2015-01-17 6 views
7

मैं कार्यपुस्तिका ओपन पर वीबीए में कोड संकलित करने का एक तरीका खोजने का प्रयास कर रहा हूं। मैं इसे वीबीए पर्यावरण खोलकर मैन्युअल रूप से कर सकता हूं, डीबग में जा रहा हूं और "वीबीएप्रोजेक्ट संकलित करें" लेकिन यह सोच रहा था कि प्रत्येक बार कार्यपुस्तिका खुलने पर कोड के माध्यम से ऐसा करने का कोई तरीका है या नहीं।क्या मैं वर्कबुक पर वीबीए को संकलित कर सकता हूं?

इसका उद्देश्य कुछ सक्रिय एक्स ऑब्जेक्ट्स के उपयोग के कारण संकलन त्रुटि को रोकने के लिए कंप्यूटर मेमोरी में कोड लोड करना है। जैसा कि बताया गया है, मैं इसे मैन्युअल रूप से कर सकता हूं और यह समस्या हल करता है, क्योंकि ऐसे कई उपयोगकर्ता हैं जो इसका उपयोग करते हैं और कार्यपुस्तिका पासवर्ड सुरक्षित है, सभी को डीबग विकल्प तक पहुंच नहीं होगी।

+0

यदि यह नहीं है, तो क्या किसी को पता है कि संकलित फाइलें कहाँ संग्रहित की जाती हैं? मैं सोच रहा हूं कि नई कार्यपुस्तिका को संकलित करने के बजाय, क्या यह सभी उपयोगकर्ताओं को इन संकलित फ़ाइलों को भेजना संभव नहीं होगा और इन फ़ाइलों को अस्थायी निर्देशिका में संग्रहीत करने के लिए निर्देश प्रदान करना संभव होगा? – Examorph

+0

धन्यवाद मैटे, यह वास्तव में जरूरी नहीं है, बस कुछ ऐसी चीजें जो मुझे पहले की परियोजना में शामिल कई कार्यपुस्तिकाओं में बहुत परेशानी थीं। मैं आपका समाधान देखने के लिए तत्पर हूं। – Examorph

+0

वहां आप जाते हैं, यह जवाब में है। मैंने अभी अपनी परियोजनाओं में से एक पर परीक्षण किया है और ऐसा लगता है कि यह ठीक काम करता है। संभावित डाउनसाइड्स को इंगित करने में संकोच न करें, यह पहली बार है जब मैं इस तरह कुछ भी कोशिश करता हूं। –

उत्तर

11

मुझे लगता है कि आप वीबीई (विजुअल बेसिक एडिटर) को स्वचालित करके ऐसा करने का प्रयास कर सकते हैं।

आवश्यकता:

आप Excel/File/Options/Trust Center/Trust Center settings के पास जाकर विकल्प Trust access to the VBA project object model जांच करने की आवश्यकता (सुरक्षा कारणों से यह डिफ़ॉल्ट रूप से निष्क्रिय है, और यदि आप इसे जांच नहीं करते नीचे कोड चलाने के समय को बढ़ा देंगे त्रुटि 1004 programmatic access to visual basic project is not trusted)। जाहिर है, आपको केवल एक बार ऐसा करने की आवश्यकता है (प्रत्येक कंप्यूटर में आप स्वचालित संकलन को निश्चित रूप से निष्पादित करना चाहते हैं)।

कोडन:

आपका कमांड बार अनुदेश (यानी "संकलित VBA प्रोजेक्ट") एक्सेल आवेदन की VBE ऑब्जेक्ट के अंदर है, विशेष रूप से आदेश सलाखों में:

Dim objVBECommandBar As Object 
Set objVBECommandBar = Application.VBE.CommandBars 

वस्तु होगा अब विजुअल बेसिक एडिटर की संपूर्ण कमांड बार शामिल है। विशेष रूप से, आप आईडी बटन "578" की तलाश करते हैं, जो वास्तव में "संकलन वीबीए प्रोजेक्ट" है (आप चर पर एक वॉचर डाल सकते हैं और सभी ब्राउज़ कर सकते हैं स्थानीय विंडो में, आप अन्य खोजना चाहेंगे आदेशों)। इसलिए, संक्षेप में:

Set compileMe = objVBECommandBar.FindControl(Type:=msoControlButton, ID:=578) 
compileMe.Execute 

यह परियोजना के संकलन की अनुमति देगा। जैसा कि आप पूछ रहे थे, आप इसे इस वर्कबुक ओपन इवेंट में डाल दें:

Private Sub ThisWorkbook_Open() 
    Set compileMe = objVBECommandBar.FindControl(Type:=msoControlButton, ID:=578) 
    compileMe.Execute 'the project should hence be compiled 
End Sub 
+0

इसके लिए आपको बहुत बहुत धन्यवाद, आपने मेरी समस्या का सबसे बड़ा हिस्सा हल किया। अब मैं यह पता लगाने की कोशिश कर रहा हूं कि लॉक की गई कार्यपुस्तिका के साथ ऐसा कैसे करें, जैसे कि कार्यपुस्तिकाओं में डीबग-> संकलन विकल्प अक्षम है। क्या आप कोड लॉक करते समय संकलन विकल्प को सक्षम रखने के किसी भी तरीके से जानते हैं? – Examorph

+0

यह एक अलग सवाल है, मैं आपको एक और धागा खोलने का सुझाव देता हूं (दोनों क्योंकि अन्य उपयोगकर्ताओं के लिए समस्याओं को अलग करना अच्छा है और क्योंकि मैं आपका अनुसरण नहीं कर सकता, अगले 24 घंटों के लिए घर नहीं होगा;) –

+0

, इसके साथ आपकी मदद का शुक्रिया। – Examorph

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

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