मैं आपकी क्या अपेक्षाएं हैं: फ़ाइल PowerShell: निकालें एक्सेल से VBA मॉड्यूल फ़ाइल
- एक एक्सेल ओपन
$excel = New-Object -ComObject Excel.Application
$excel.Workbooks.Open($filepath) | Out-Null
$macro = $excel.ActiveWorkbook.VBProject.VBComponents.Import($MacroFilepath)
$Excel.ActiveWorkbook.Application.Run("HoursSumCounter.main") | Out-Null
$excel.ActiveWorkbook.VBProject.VBComponents.Remove($macro)
:
तो यहाँ मेरी powershell कोड है
Cannot find an overload for "Remove" and the argument count: "1".
At line:1 char:1
+ $excel.ActiveWorkbook.VBProject.VBComponents.Remove($macro)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodException
+ FullyQualifiedErrorId : MethodCountCouldNotFindBest
यह:
अब त्रुटि है कि मैं पीछा कर रहा है (स्वाभाविक रूप से मैं क्रम में एक्सेल का विश्वास केंद्र सेटिंग्स में VBA प्रोजेक्ट तक पहुँचने एक मॉड्यूल गतिशील आयात करने के लिए सक्षम होने के लिए सक्षम) पूरी चीज वास्तव में काम करती है अगर मैं एक्सेल के भीतर ऐसा करता हूं (कोई शक्ति नहीं)।
लेकिन यहाँ क्या मैं पहले से ही पता चला ...
मैं निकालें समारोह के अधिभार की जाँच की है:
[DBG]: PS C:\Users\MUT2BP\Desktop\recefice>> $excel.ActiveWorkbook.VBProject.VBComponents.Remove
OverloadDefinitions
-------------------
void Remove(Microsoft.Vbe.Interop.VBComponent VBComponent)
void _VBComponents.Remove(Microsoft.Vbe.Interop.VBComponent VBComponent)
void _VBComponents_Old.Remove(Microsoft.Vbe.Interop.VBComponent VBComponent)
यह पता चला कि मैं वास्तव में हालांकि प्रकार Microsoft.Vbe.Interop.VBComponent VBComponent
की एक वस्तु पास करना चाहिए मेरी $macro
ऑब्जेक्ट प्रकार System.__ComObject#{eee00921-e393-11d1-bb03-00c04fb6c4a6}
[DBG]: PS C:\Users\MUT2BP\Desktop\recefice>> $macro | Get-Member
TypeName: System.__ComObject#{eee00921-e393-11d1-bb03-00c04fb6c4a6}
Name MemberType Definition
---- ---------- ----------
Activate Method void Activate()
DesignerWindow Method Window DesignerWindow()
Export Method void Export (string)
...
की है ... भले ही Remove
समारोह एसी इस ओएलई स्वचालन प्रक्रिया के दौरान, एक COM ऑब्जेक्ट में परिवर्तित हो जाता है, इस प्रकार VBComponent
का एक प्रकार देता है।
मुझे संदेह है कि मुझे किसी भी तरह से इस COM ऑब्जेक्ट को वास्तविक VBComponent ऑब्जेक्ट में परिवर्तित करना है, मैं इसे स्पष्ट रूप से कैसे नहीं डाल सकता।
मैं इसे दोहराना नहीं कर सकता - आपका कोड नमूना कार्यपुस्तिका और मॉड्यूल के साथ ठीक काम करता है। – Comintern
क्या आपके पास एमएस ऑफिस डेवलपर टूल्स स्थापित हैं? – Comintern
@ कॉमिनटर हम्म, मुझे इसके बारे में पता नहीं है। जोड़ें/निकालें प्रोग्राम और फीचर्स (ctrl पैनल) में मुझे ऐसा कुछ नहीं दिखाई देता है। कोई अन्य जगह जहां मैं इसे सत्यापित कर सकता हूं? – ThomasMX