MW211 EXIT

devlog
ExcelVBA/ソースコード出力
2014年09月23日
ExcelVBAのソースコードを一括してエクスポートしたい場合には
以下のようなマクロを使えばよい
#個人用マクロブック(PERSONAL.XLS)に登録しておけばいつでも使える
┌──────────────────────────────────────┐
│Sub ExcelVBAソースコード出力()                                              │
│    Dim VBC As Variant                                                      │
│    For Each VBC In ActiveWorkbook.VBProject.VBComponents                   │
│        If VBC.CodeModule.CountOfLines > 0 Then                             │
│            Select Case VBC.Type                                            │
│                Case 1      ' 標準モジュール                                │
│                    VBC.Export ActiveWorkbook.Path & "\" & VBC.Name & ".bas"│
│                Case 2      ' クラスモジュール                              │
│                    VBC.Export ActiveWorkbook.Path & "\" & VBC.Name & ".cls"│
│                Case 3      ' フォーム                                      │
│                    VBC.Export ActiveWorkbook.Path & "\" & VBC.Name & ".frm"│
│                Case 100    ' ドキュメント(ブック・シート)                  │
│                    VBC.Export ActiveWorkbook.Path & "\" & VBC.Name & ".cls"│
│            End Select                                                      │
│        End If                                                              │
│    Next VBC                                                                │
│End Sub                                                                     │
└──────────────────────────────────────┘

ちなみに「.CodeModule.CountOfLines > 0」で、
ソースコードのあるファイルに限定して出力している。
これがないとマクロのない通常のシートもファイルとして出力されてしまう。

ちなみに、以下のようにすると処理があるファイルのみ(宣言のみのファイルを除く)に
限定することもできる。
「.CodeModule.CountOfDeclarationLines <> .CodeModule.CountOfLines」
「.CountOfLines」がソース全行数、「.CountOfDeclarationLines」が宣言行数を
それぞれ取得できるからだ。(両者が一致するということは宣言のみということになる)
分類:ExcelVBA