この時代にまだ Excel VBA なんて使ってるの?
というのはさておき。VBE の貧弱さに辟易して、VSCode で開発できないかと試行錯誤したが、結局、以下のような形で落ち着いた (というか諦めた)。
- 開発は VBE で諦める…。
- モジュールをエクスポートし、プレーンテキストとして管理 (git/Doxygen)
いい方法をご存じの方、ぜひ情報をいただきたいです…。
試行錯誤の成果
以下のリポジトリに公開しています。
Excel 内モジュールのエクスポート (ExcelModuleManager)
モジュールはプレーン テキスト (CP932(≒ ShiftJIS)) でエクスポートされるので Git などによる変更管理も可能になります。
この PowerShell モジュールを動作させるには、Excel トラスト センターの設定を変更する必要があります。
肝となる部分は以下。
# Excel の COM オブジェクトを得る
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $False
# ワークブックを開く
$workbook = $excel.Workbooks.Open($EXCEL_FILE_PATH)
foreach ($component in $workbook.VBProject.VBComponents) {
if ($component.Type -eq 1) { $fileext = ".bas" }
elseif ($component.Type -eq 2) { $fileext = ".cls" }
elseif ($component.Type -eq 3) { $fileext = ".frm" }
#elseif ($component.Type -eq 100) { $fileext = ".cls" }
else { continue }
$filename = $OUTPUT_DIR_FULL_PATH + $component.Name + $fileext
# エクスポートする
$component.Export($filename)
}
# 閉じる
$workbook.Close($False)
$excel.Quit()
# COM オブジェクトを開放する
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) > $null
[System.GC]::Collect()
[System.GC]::WaitForPendingFinalizers()
ドキュメント生成 (DoxyVB6)
以下の記事を参考にしながら、ドキュメント生成の環境を整えた。
が、いかんせん 2015 年の情報であり、紹介されているスクリプトが Python 2 であったり、精度があまり良くなかったりしたため、自作する流れとなった…。
自作したインプット フィルター DoxyVB6.exe は、ここから入手可能です。
インプット フィルターでは、VB6 のコードを解析して、C# に変換し、標準出力に出力する、という処理をしています。なお、関数やサブ プロシージャ、プロパティの内部処理は変換していないので、コール グラフなどは作成できません。
Doxygen 設定ファイルの準備
Doxygen の設定ファイル (Doxyfile) は、以下のコマンドで生成できます。
doxygen -g
Doxyfile の文字コードは BOM なし UTF-8。デフォルト設定からの変更点は以下の通り。
OUTPUT_DIRECTORY = (出力フォルダーのパス。パスに日本語は NG)
INPUT_FILTER = (DoxyVB6.exe のフルパス。パスに日本語は NG)
INPUT = (入力フォルダーのパス。パスに日本語は NG)
EXTENSION_MAPPING = frm=Csharp \
cls=Csharp \
bas=Csharp
FILE_PATTERNS = *.bas \
*.cls \
*.frm
INPUT_ENCODING = CP932
OUTPUT_LANGUAGE = Japanese
FULL_PATH_NAMES = NO
SORT_MEMBER_DOCS = NO
Doxygen 実行
以下コマンドで生成できます。(パスに日本語は NG)
doxygen ./Path/To/Doxyfile
うまくいけば、こんな感じのドキュメントが生成されます。