Excelに対するCOM操作で、
- モジュール内のコードを文字列として取得・設定
- モジュールのインポート・エクスポート
などを行うことはできます。
質問に記載されている
https://stackoverflow.com/questions/40956465/vba-to-copy-module-from-one-excel-workbook-to-another-workbook
や
Zuishinさんの回答にある
Excelマクロ抽出スクリプト - Qiita
がCOM経由での操作の例になります。
該当の処理を行うためのオブジェクト群のタイプライブラリはExcelとは別となっており
Microsoft Visual Basic for Applications Extensibility 5.3
のライブラリを参照する必要があります。
制限
COM経由で操作する場合は予め
- Excelのセキュリティ設定の変更
- VBAのプロジェクトにパスワードが設定されている場合パスワードの解除
をしておく必要があります。
上記Excelマクロ抽出スクリプト - Qiitaの記事内では
Excelのセキュリティ設定の変更の方法および、パスワード解除の自動化も記載されています。
参考
以下PowerShellのコードですがおおよそのイメージは掴めるかと思います。
posh
1# Excel取得
2# Excel.Application
3$xl = [System.Runtime.InteropServices.Marshal]::GetActiveObject('Excel.Application')
4
5# Excel.Workbook
6$wb = $xl.ActiveWorkbook
7
8# 以降セキュリティの制限の解除が必要
9# VBIDE = Microsoft Visual Basic for Applications Extensibility 5.3
10# VBIDE.VBProject
11$project = $wb.VBProject
12
13# VBIDE.VBComponent = モジュール
14$module1 = $project.VBComponents.Item('Module1')
15
16# VBIDE.CodeModule = モジュールのコード部分
17$codeModule = $module1.CodeModule
18
19# System.String 全行を文字列として取得
20$codeTxt = $codeModule.Lines(1, $codeModule.CountOfLines)
21
22Write-Output $codeTxt