2010-06-11 13 views
11

लोड हो रहा है हमारे सॉफ्टवेयर में एम्बेडेड कुछ कस्टम VBA स्क्रिप्ट Office 2010 के लिए माइक्रोसॉफ्ट ऑफिस 2007 अद्यतन करने के बाद पुनर्निर्माण .exd-फ़ाइलें निम्न त्रुटि संदेश के साथ संकलन करने में विफल रहा:प्रोग्राम जब VBA

वस्तु पुस्तकालय अवैध या संदर्भ शामिल हैं परिभाषाओं को परिभाषित करने के लिए परिभाषित नहीं किया जा सका।

जहां तक ​​मुझे पता है, यह त्रुटि माइक्रोसॉफ्ट (माइक्रोसॉफ्ट सिक्योरिटी एडवाइजरी 960715) से सुरक्षा अद्यतन का परिणाम है। वीबीए स्क्रिप्ट्स पर ActiveX- नियंत्रण जोड़ते समय, नियंत्रण के बारे में जानकारी स्थानीय हार्ड ड्राइव (.exd-files) पर कैश फ़ाइलों में संग्रहीत होती है। सुरक्षा अद्यतन ने इनमें से कुछ नियंत्रणों को संशोधित किया, लेकिन .exd-files स्वचालित रूप से अपडेट नहीं किए गए थे। जब वीबीए स्क्रिप्ट कैश्ड फ़ाइलों में संग्रहीत नियंत्रण के पुराने संस्करणों को लोड करने का प्रयास करते हैं, तो त्रुटि होती है। नियंत्रणों को सफलतापूर्वक लोड करने के लिए इन कैश-फ़ाइलों को हार्ड ड्राइव से हटा दिया जाना चाहिए (जो स्वचालित रूप से नई, अद्यतन .exd-फ़ाइलें बनाएगा)।

मैं क्या करना चाहता हूं प्रोग्रामेटिक रूप से (विज़ुअल सी ++ का उपयोग करके) हमारे सॉफ़्टवेयर लोड होने पर पुरानी .exd-फ़ाइलों को हटा दें। CApcProject::ApcProject.Open का उपयोग कर एक वीबीए प्रोजेक्ट खोलते समय मैंने निम्नलिखित ध्वज सेट किया: axProjectThrowAwayCompiledState

TestHR(ApcProject.Open(pHost, (MSAPC::AxProjectFlag) (MSAPC::axProjectNormal | MSAPC::axProjectThrowAwayCompiledState))); 

प्रलेखन के अनुसार, इस ध्वज का कारण होना चाहिए VBA प्रोजेक्ट फिर कंपाइल किया करने के लिए और हटाए जाने के लिए अस्थायी फ़ाइलें और पुनर्निर्माण किया। मैंने मेजबान एप्लिकेशन प्रकार लाइब्रेरी के चेकसम को अपडेट करने का भी प्रयास किया है, जिसका एक ही प्रभाव होना चाहिए। हालांकि इनमें से कोई भी फिक्स नौकरी नहीं कर रहा है और मैं विचारों से बाहर हूं।

+3

मुझे लगता है कि आप पहली बार .exd फ़ाइलों को मैन्युअल रूप से हटाने की कोशिश करते हैं ताकि यह सत्यापित किया जा सके कि यह आपकी समस्या हल करता है (इसे प्रोग्रामेटिक रूप से करने का प्रयास करने से पहले)। मेरे मामले में यह समस्या हल नहीं किया। http://stackoverflow.com/questions/4495002/object-library-invalid-or-contains-references-in-excel-vba-with-datepicker – CaBieberach

+0

यह आपके द्वारा संदर्भित किलबिट समस्या हो सकती है, या यह अन्य चीजें हो सकती है । क्या आपने x86 Office 2007 से x64 Office 2010 में अपग्रेड किया था? क्या आपने गुम वस्तुओं के लिए अपने वीबीए संदर्भों की जांच की है? क्या आपको "छुपा मॉड्यूल में संकलन त्रुटि" त्रुटि मिलती है? क्या आपने http://blogs.msdn.com/b/vsod/archive/2009/06/05/visual-basic-6-controls-stop-working-after-security-advisory-960715.aspx की समीक्षा की है? क्या आपने अनचेक किया है "एक्सेल विकल्पों में डायनामिक डेटा एक्सचेंज (डीडीई) का उपयोग करने वाले अन्य अनुप्रयोगों को अनदेखा करें? @CaBieberach से सहमत, आपको यह पुष्टि करने की आवश्यकता हो सकती है कि यह वास्तव में मैन्युअल रूप से हटाए जा रहे हैं .exd। –

+0

हमने सत्यापित किया है कि exd-files को हटाने से समस्या हल होती है (इसे कई परीक्षण मशीनों पर मैन्युअल रूप से करकर)। Office के x86 संस्करण में अपग्रेड करते समय समस्या उत्पन्न होती है (हम अपने सॉफ़्टवेयर के साथ संयोजन में Office 2010 x64 का समर्थन नहीं करते हैं)। अभी के लिए, जब कोई ग्राहक इस समस्या का अनुभव करता है तो हम उन्हें एक स्क्रिप्ट चलाने देते हैं जो सभी exd-files को हटा देता है। – aspartame

उत्तर

2

मुझे कुछ बार पहले इस समस्या का सामना करना पड़ा, और अनुशंसित (और कामकाजी) समाधान वास्तव में सिस्टम ड्राइव पर सभी .exd फ़ाइलों को हटाना था। स्पष्ट रूप से जब भी जरूरत पड़ती है तो उन्हें पुनर्निर्मित किया जाता है, इसलिए पुनर्निर्माण प्रक्रिया को प्रोग्रामेटिक रूप से ट्रिगर करने की आवश्यकता नहीं होती है।

+0

समस्या मुझे वास्तव में प्रोग्रामेटिक रूप से करने की आवश्यकता है। लेकिन ऐसा करने के लिए कोई रास्ता खोजने के बिना लगभग एक वर्ष रहा है इसलिए मैं इस उत्तर को स्वीकार करूंगा और अपने जीवन के साथ आगे बढ़ूंगा;) – aspartame