
Running .NET from VBA
बस VBA पर CLR (.NET) असेंबलियों को स्थानीय और दूरस्थ रूप से लोड करने के विभिन्न तरीकों के साथ प्रयोग कर रहा हूँ, AccessVBOM (विज़ुअल बेसिक प्रोजेक्ट के लिए प्रोग्रामेटिक एक्सेस विश्वसनीय नहीं है) को दरकिनार करने के बाद AppDomain.ExecuteAssembly या किसी अन्य सुविधाजनक विधि का उपयोग करके।
vba2clr.*.vba:
AccessVBOM रेजिस्ट्री कुंजी को 1 पर सेट करता हैWord.Application COM ऑब्जेक्ट को इंस्टैंशिएट करता है। (यह Excel.Application MS PowerPoint, Access आदि हो सकता है)।wordObj.Application.Run... का उपयोग करके ExecuteAssembly.vba मैक्रो चलाता हैExecuteAssembly.clr.2.0.vba: .NET 3.5 तक
IDomain, ICRHost)AppDomain.ExecuteAssembly तर्कों को दो अलग-अलग ऐरे (variables, types) में पैक करता है।AppDomain.ExecuteAssembly(Arg1, Arg2) (VFTable ऑफ़सेट 51) को कॉल करने के लिए DispCallFunc का उपयोग करता है, जहाँ Arg1 ".NET Assembly URL" या "Local Path" है और Arg2 रिटर्न वैल्यू है।QueryInterface, AddRef, Release विधियों के लिए सेट होती हैं।ExecuteAssembly.clr.x.vba: .NET 2, 3.5 और 4.x का समर्थन करता है
Word.Application (या Excel.Application ..आदि) के लिए COM ऑब्जेक्ट बनाने से मुख्य WinWord.exe प्रक्रिया के बजाय svchost.exe की चाइल्ड प्रक्रिया के रूप में एक अतिरिक्त WinWord.exe स्पॉन होता है।AccessVBOM रजिस्ट्री कुंजी को WScript.Shell का उपयोग करके COM के माध्यम से संशोधित/पुनर्स्थापित किया जाता है, win32 APIs का उपयोग करना एक बेहतर विकल्प हो सकता है।AccessVBOM रजिस्ट्री कुंजी को अपडेट करने की तुलना में सुरक्षित है, इसे किसी और दिन के लिए छोड़ दूँगा...System.CodeDom.Compiler का उपयोग VBA से c# कोड को कंपाइल/निष्पादित करने के लिए किया जा सकता है, नीचे संदर्भ देखें;