VBA

2010-11-17 10 views
7
के साथ मानक नेट पुस्तकालयों का उपयोग करना

मैं सफलतापूर्वक निम्न चरणों को यहां पोस्ट Execute .NET 3.0 code from Office 2003VBA

द्वारा अपने ही नेट कोड को चलाने के लिए सक्षम किया गया है वहाँ एक आवरण लिखने के बिना मानक नेट पुस्तकालयों का उपयोग करने के लिए एक रास्ता है ? इस तरह हम ग्राहक की मशीन पर जीएसी में एक कस्टम डीएलएल रजिस्टर और स्थापित करने से बच सकते हैं।

मुझे पहले से ही C: \ Windows \ Microsof.NET \ Framework फ़ोल्डर्स में tlb फ़ाइलें मिली हैं, और mscorlib.dll के संदर्भ को जोड़ने में सक्षम हैं। RijndaelManaged के लिए प्रलेखन को देखते हुए, यह कक्षा COM दिखाई दे रही है।

मैं एक उदाहरण बनाने के लिए कर रहा हूँ, लेकिन जैसे ही मैं कोशिश करते हैं और इसके साथ काम करते हैं, मैं त्रुटियों (जैसे, "प्रकार बेमेल") मिलता है।

Sub Macro1() 
    Dim aesImplementation As New RijndaelManaged 

    Set key = aesImplementation.GenerateKey() 
    Set iv = aesImplementation.GenerateIV() 
End Sub 

मैं आपके द्वारा ऑफ़र किए जाने वाले किसी भी हैक को स्वीकार करने के लिए तैयार हूं!

+2

मैं एक जवाब फिर से नहीं है:

Sub Macro1() Dim aesImplementation As New RijndaelManaged aesImplementation.GenerateKey Key = aesImplementation.Key aesImplementation.GenerateIV IV = aesImplementation.IV End Sub 

या बेहतर, कम से कम नहीं जब डिबगिंग आप देख सकते हैं निर्माण के दौरान एक त्रुटि उत्पन्न होती है या जब आप विधि कॉल है कि क्या है। एक रैपर के बिना नेट, लेकिन यदि आप वीबीए के लिए नए हैं, तो आपको यह जानना होगा कि 'जैसा कि नया' घोषित करना वास्तव में उस बिंदु पर कुछ भी तत्काल नहीं करता है जैसे यह .NET में करता है। यह मुझे स्पष्ट नहीं है कि आपकी त्रुटि तत्काल या 'सेट' पर उठाई जा रही है या नहीं। (मैं, यह मानते हुए कर रहा हूँ आप अपने 'कुंजी' सही प्रकार के रूप में चर घोषित किया है आदि) http://stackoverflow.com/questions/2478097/vba-difference-in-two-ways-of-declaring-a देखें -न्यू-ऑब्जेक्ट-कोशिश-समझने-क्यों/2480559 # 2480559 – jtolle

+0

यह पागल है क्यों वैध वाक्यविन्यास के रूप में नया है यदि यह एक नई वस्तु को तुरंत चालू नहीं करता है ?! ऐसा लगता है कि इस मामले में एक उदाहरण बना हुआ प्रतीत होता है, मुझे कम से कम याद होगा कि "जैसा नया" सबसे अच्छा अभ्यास नहीं है। कारण मैंने मुख्य वस्तु को स्पष्ट रूप से घोषित नहीं किया है क्योंकि अगर मैं करता हूं तो मुझे "सरणी को असाइन नहीं किया जा सकता" त्रुटि मिलती है। स्पष्ट रूप से यह त्रुटि तब होती है जब आप किसी भिन्न प्रकार की सरणी को आज़माकर असाइन करते हैं। –

+1

क्या यह कुछ काम बचाने के लिए बहुत काम नहीं है? मेरा मतलब है, यदि आपका उपयोगकर्ता आपको मैक्रो चलाने की अनुमति देगा, तो वास्तविक .NET एप्लिकेशन क्यों न चलाएं? .NET में Office इंटरऑप काफी अच्छा लगता है, इसलिए आप दस्तावेज़ों को समान रूप से या बेहतर तरीके से कुशल बना सकते हैं! –

उत्तर

1

अभी तक संभव नहीं है। वीबीए (एप्लीकेशन के लिए वीबी) वीबी नहीं है, बल्कि वीबी के पुराने संस्करणों के रूप में सभी मूल वाक्यविन्यास की नकल करने का एक अलग सौदा है। यह लगभग नियमित, पुराने वीबी के एक बहुत ही अलग संस्करण का उपयोग करने की तरह है। वास्तव में, वीबीस्क्रिप्ट वीबीए का सबसे निकटतम मैच है। शायद किसी दिन, माइक्रोसॉफ्ट के तरीकों में निर्माण GAC के साथ सीधे काम होगा, लेकिन तब तक, आप एक COM के लिए एक संदर्भ जोड़ने, COM CreateObject() पद्धति का उपयोग करके फंस रहे हैं (और उस दिन की संभावना कॉम की मौत मुझे यकीन है कि इसका मतलब यह होगा) आपके कार्यालय प्रोजेक्ट में पंजीकृत लाइब्रेरी, या सीधे अपने ऑफिस प्रोजेक्ट में वीबीए/कॉम संगत डीएलएल या टीएलबी फ़ाइल का संदर्भ देना।

डिफ़ॉल्ट जीएसी में बहुत कम COM-सक्षम पुस्तकालय हैं, लेकिन बहुमत के लिए, आप VB.Net या C# में पहले कॉम कॉल करने योग्य रैपर बनाने में फंस गए हैं।

इसके विपरीत, काफी सभी एमएस ऑफ़िस क्षुधा COM प्रतिदेय है, तो आप स्थापित Office के साथ काम कर सकते हैं VB.Net परियोजनाओं के माध्यम से एप्लिकेशन सभी आप चाहते हैं कर रहे हैं।

+3

'mscorlib.dll' के संदर्भ को जोड़कर आप किसी भी वर्ग का ऑब्जेक्ट बना सकते हैं जिसमें मानक .net पुस्तकालयों में पैरामीटर रहित सार्वजनिक कन्स्ट्रक्टर है। आपको यह बहुत सीमित लगेगा। – AndASM

+1

"वीबीस्क्रिप्ट वीबीए का सबसे निकटतम मैच है" - वीबीए * VBScript के मुकाबले क्लासिक वीबी 6 के करीब * बहुत करीब है: https://msdn.microsoft.com/en-us/library/ms970436.aspx – Joe

1

आप इस तरह से ComVisible नेट वर्गों का उपयोग करने में सक्षम होना चाहिए। हालांकि GenerateKey और GenerateIV विधियों के पास वापसी मूल्य नहीं है। प्रयास करें: का उपयोग कर:

Sub Macro1() 
    Dim aesImplementation As RijndaelManaged 
    Set aesImplementation = New RijndaelManaged 

    aesImplementation.GenerateKey 
    Key = aesImplementation.Key 
    aesImplementation.GenerateIV 
    IV = aesImplementation.IV 
End Sub