はじめに
スクリプトを構成管理したいのならExcel VBAを選ぶべきではないかもしれませんが、
そんな、ちょっとお世話しづらいExcel VBAを、
バッチとSVNで履歴をみられるようにした記事です。
この記事について
- 想定読者
- Excel VBAでどこを直してきたか忘れてしまう方
- 記事のゴール
- Excel VBAのスクリプトの修正履歴がわかるようになる
本文
全体像
作成する流れはこんな感じ
- Excel VBAのスクリプトを出力するバッチを用意します
- SVNのリポジトリを用意し、バッチとともに配置します
- Excel VBAを所定のフォルダに集めます
- バッチを実行
- SVNで確認
作業環境
- 環境
- OS: Windows 10 Pro
- Office 2019
実施内容
1. Excel VBAのスクリプトを出力するバッチを用意します
第一引数のマクロ付きExcelファイル内のスクリプトを、第二引数のフォルダに書き出すバッチ
ExportVBA.vbs
'Excelを起動
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = False
'Excelファイルを開く
Set objWorkbook = objExcel.Workbooks.Open(WScript.Arguments(0))
'VBProject内の各ファイルを取得
For Each objVBComponent in objWorkbook.VBProject.VBComponents
'ファイル名を取得
strFileName = objVBComponent.Name
'拡張子決定
strExtension = ".cls"
If Left(objVBComponent.Name, 3) = "mod" Then
strExtension = ".bas"
End If
'ファイルの内容を取得
If objVBComponent.CodeModule.CountOfLines > 0 Then
strFileContent = objVBComponent.CodeModule.Lines(1, objVBComponent.CodeModule.CountOfLines)
'テキストファイルに出力
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.CreateTextFile(WScript.Arguments(1) & strFileName & strExtension, True)
objFile.Write(strFileContent)
objFile.Close
End If
Next
'Excelファイルを閉じる
objWorkbook.Close False
Set objWorkbook = Nothing
'Excelを終了する
objExcel.Quit
Set objExcel = Nothing
Excel
フォルダに格納したマクロ付きExcelファイルを読み取り、
VBA
フォルダに書き出すバッチファイル
ExportVBA.bat
@ECHO OFF
REM バッチ実行フォルダへ移動
CD /D %~dp0
REM 文字コードをUTF-8に設定
CHCP 65001
REM Excelフォルダ内の全ファイルと同じ名前のフォルダをVBAフォルダ配下に作成
FOR %%f IN (.\Excel\*.xlsm) DO IF NOT EXIST ".\VBA\%%~nf\" MKDIR ".\VBA\%%~nf\"
REM Excelフォルダ内の全ファイルに対してVBAスクリプトをエクスポート
FOR %%f IN (.\Excel\*.xlsm) DO CScript ExportVBA.vbs %~dp0"%%f" ".\VBA\%%~nf\"
2. SVNのリポジトリを用意し、バッチとともに配置します
SVN管理フォルダを作成し、その中に以下のように資産を配置
3. Excel VBAを所定のフォルダに集めます
Excel
フォルダ内に対象となるマクロ付きExcelファイルを以下のように配置
4. バッチを実行
ExportVBA.bat をダブルクリック
実行後のVBA
フォルダの状態
5. SVNで確認
テキストなので、コミット前にプログラムの修正状況がわかります
以上。