2009-09-24 26 views
13

से एक वीएसटीओ एप्लिकेशन-एडिन प्रकारों तक पहुंचने के लिए हमारे पास एक्सेल के लिए एक VSTO एप्लिकेशन-एडिन (दस्तावेज़-एडिन नहीं है) है, और हम एक ईवेंट को वीबीए कोड में बेनकाब करना चाहते हैं ताकि वीबीए मैक्रो कुछ कर सके कार्रवाई जब यह घटना एडिन में आग लगती है। VSTO एप्लिकेशन-एडिन में परिभाषित किसी ईवेंट की सदस्यता लेने में सक्षम होने के लिए मैं वीबीए कोड कैसे प्राप्त कर सकता हूं?वीबीए (एक्सेल)

मुझे लगता है कि चूंकि एक्सेल प्रक्रिया में एडिन लोड हो गया है, इसलिए यह बहुत मुश्किल नहीं होना चाहिए, लेकिन अभी तक कोई रास्ता नहीं मिला है।

Btw, वी.एस. 2008 और Excel 2007 का उपयोग कर

धन्यवाद!

उत्तर

10

वीएसटीओ एक डीएलएल नहीं है जिसे आम तौर पर अन्य डीएलएल से बुलाया जा सकता है। वीएसटीओ मूल रूप से एक अलग ऐपडोमेन के भीतर से चल रहे एक रैपर के भीतर से संचालित .NET कोड है। यद्यपि आपका वीएसटीओ ऐड-इन तकनीकी रूप से एक डीएलएल है जिसे एक्सेल में लोड किया जा रहा है, यह अन्य कॉलर्स के सामने आने वाली डीएलएल लाइब्रेरी के बजाए शीर्ष-स्तर EXE की तरह काम करता है।

व्यक्तिगत रूप से, मैं एक मानक .NET असेंबली बनाउंगा - यानी, इसके लिए VSTO का उपयोग करने से बचें - और सही गुणों का उपयोग करके इसे COM पर बेनकाब करें। प्रक्रिया को अच्छी तरह से समझाया गया है: COM Interop Exposed - Part 2, "COM को .NET ईवेंट एक्सपोज़र" शीर्षक वाले अनुभाग के तहत।

यदि आप वास्तव में वीबीए को कॉल करने में सक्षम होने के लिए वीबीए सक्षम करने पर जोर देते हैं, तो आपको Office.COMAddIn.Object संपत्ति के माध्यम से संचालित करना होगा जो RequestComAddInAutomationService विधि को ओवरराइड करके सक्षम है। एंड्रयू व्हाइटचैपल द्वारा लेख VSTO Add-ins, COMAddIns and RequestComAddInAutomationService में इस प्रक्रिया पर विस्तार से चर्चा की गई है।

मुझे आशा है कि इससे मदद मिलती है!

माइक

+0

मैं RequestComAddInAutomationService का उपयोग कर समाप्त हुआ। धन्यवाद। –

+0

कूल, अच्छी नौकरी। खुशी है कि यह आपके लिए कारगर रहा। :-) –

+2

+1 अच्छा सवाल, महान जवाब! – Ahmad