0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Excel VBAからDoxygenを用いてドキュメントを出力する (2025 年版)

Last updated at Posted at 2025-01-22

この時代にまだ Excel VBA なんて使ってるの?

というのはさておき。VBE の貧弱さに辟易して、VSCode で開発できないかと試行錯誤したが、結局、以下のような形で落ち着いた (というか諦めた)。

  • 開発は VBE で諦める…。
  • モジュールをエクスポートし、プレーンテキストとして管理 (git/Doxygen)

いい方法をご存じの方、ぜひ情報をいただきたいです…。

試行錯誤の成果

以下のリポジトリに公開しています。

Excel 内モジュールのエクスポート (ExcelModuleManager)

モジュールはプレーン テキスト (CP932(≒ ShiftJIS)) でエクスポートされるので Git などによる変更管理も可能になります。

この PowerShell モジュールを動作させるには、Excel トラスト センターの設定を変更する必要があります。
image.png

肝となる部分は以下。

# 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。デフォルト設定からの変更点は以下の通り。

Doxyfile (変更が必須)
OUTPUT_DIRECTORY       = (出力フォルダーのパス。パスに日本語は NGINPUT_FILTER           = (DoxyVB6.exe のフルパス。パスに日本語は NGINPUT                  = (入力フォルダーのパス。パスに日本語は NGEXTENSION_MAPPING      = frm=Csharp \
                         cls=Csharp \
                         bas=Csharp

FILE_PATTERNS          = *.bas \
                         *.cls \
                         *.frm

INPUT_ENCODING         = CP932
Doxyfile (変更は任意)
OUTPUT_LANGUAGE        = Japanese

FULL_PATH_NAMES        = NO

SORT_MEMBER_DOCS       = NO

Doxygen 実行

以下コマンドで生成できます。(パスに日本語は NG)

ドキュメント生成
doxygen ./Path/To/Doxyfile

うまくいけば、こんな感じのドキュメントが生成されます。

image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?