ファイル削除: のPowerShell:ExcelからVBAモジュールは、私が何をしたいのか
- オープンExcelを だからここ
は私のPowerShellのコードです:
$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)
(当然のことながら、私は動的モジュールをインポートできるようにするために、エクセルのトラストセンターの設定でVBAプロジェクトへのアクセス有効)
今、私が手にエラーは次のとおりです:
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
この私がExcel内でこれを行うと全部が実際に機能します(パワーシェルなし)。ここ
しかし、私はすでに出て見つけたものです...
私は、Remove関数のオーバーロードを確認:
[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
機能交流かかわらずこのOLEオートメーション処理中にCOMオブジェクトに変換されて、VBComponent
という型を戻します。
私は何とかこのCOMオブジェクトを実際のVBComponentオブジェクトに変換しなければならないと思っています。どのようにそれを明示的にキャストすることはできません。
私はこれを複製できません - あなたのコードはサンプルワークブックとモジュールでうまく機能しました。 – Comintern
MS Office Developer Toolsをインストールしていますか? – Comintern
@Cominternうーん、私はそれを知らない。プログラムや機能の追加/削除(Ctrlキー)では、そのようなものは表示されません。私がそれを確認できる他の場所? – ThomasMX