[Excel] VBAコードの Export と Import

2013年10月17日

 Excel VBA のコードをテキストに吐き出したりしたい場合があります。(バージョン管理に突っ込みたいときとか)
 しかし毎度手で Export するのは面倒なので VBA にやらせたい場合、たとえば以下のように書くと Export できます。

Sub CodeExport()

    ' 任意の WorkBook を指定 (ActiveWorkBook なり Workbooks.Open なり…)
    Dim w As Workbook
    Set w = ThisWorkbook

    ' Export
    Call w.VBProject.VBComponents("Module1").Export("C:Module1.bas")

End Sub

 上記はファイル名を個別指定の例ですが、Book内のモジュールを一気に Export したい場合は、VBComponents を for each で回して Name で名前が取れるのであとは良しなに…

Sub CodeList()

    ' 任意の WorkBook を指定 (ActiveWorkBook なり Workbooks.Open なり…)
    Dim w As Workbook
    Set w = ThisWorkbook

    ' 列挙
    For Each x In w.VBProject.VBComponents
        Debug.Print x.Name
    Next

End Sub

 

 

 逆に import したい場合は以下のようにします。
 import の場合、同名のモジュールがあると自動的にリネームされるので、先に削除してから import を行います。

Sub CodeReplace()

    ' 任意の WorkBook を指定 (ActiveWorkBook なり Workbooks.Open なり…)
    Dim w As Workbook
    Set w = ThisWorkbook

    ' 一旦削除
    Call w.VBProject.VBComponents.Remove( _
         w.VBProject.VBComponents("Module1"))

    ' その後 Import
    Call w.VBProject.VBComponents.Import("C:Module1.bas")

End Sub

 ただ、この方法は欠点があります。
 Sheet や Workbook のマクロはクラスモジュールとして import されます。そのため、本来(Sheet や Workbook のマクロ)の位置 に直接 import できません。
 これは Excel の仕様のようです。(手動での import でもそういう動作になります)

 

 

 また、上記のコードを動かすためには、セキュリティの設定を変更する必要があります。
 「ファイル」→「オプション」→「セキュリティ」→「セキュリティセンターの設定」とたどって、「VBA プロジェクト オブジェクト モデル へのアクセスを信頼する」にチェックを入れておきます。






カテゴリー: Excel, Office

Follow comments via the RSS Feed | Leave a comment | Trackback URL

コメントを投稿する

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


«   »
 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org