VBAでTortoiseSVNを操作する
Windowsに限りませんが、各種データをバージョン管理ソフトで管理することがあります。アプリケーション開発の現場であればソースコードや設計書や設定データなどが管理対象になると思います。
ここではバージョン管理ソフトのSubversionのクライアントソフトのTortoiseSVNをVBAで利用する方法を紹介します。
具体的にはTortoiseSVNでExcelブックのコミットやログの表示などをVBAで行う方法です。
TortoiseSVNのコマンドラインの概要
TortoiseSVNはコマンドラインでSubversionの操作を行うことが出来ます。利用できるコマンドは以下のサイトに記載されています。
https://tortoisesvn.net/docs/release/TortoiseSVN_ja/tsvn-automation.html
なお、ここでは紹介しませんが、svn.exeのコマンドは以下のサイトに記載されています。
https://tortoisesvn.net/docs/release/TortoiseSVN_ja/tsvn-cli-main.html
TortoiseSVNのコマンドでは用意されていない場合でもSubversionでは用意されているものもありますので、一応です。詳細は上記の1つ目のURLサイトに書いてあるので、ここでは概要を説明します。
TortoiseSVNの操作はTortoiseProc.exeに引数を渡して実行することで行います。ほとんどの場合は、/commandと/pathの2つの引数を指定します。引数を含めたコマンドラインの形式は以下のようになります。
1 |
"C:\Program Files\TortoiseSVN\bin\TortoiseProc.exe" /command:commit /path:"C:\test\aaa.xlsx" |
TortoiseProc.exeのパス(半角スペースがある場合)と、/pathで指定する対象ファイルはダブルクォーテーションで囲む必要があります。
Shellでexeを実行する
TortoiseProc.exeを実行するためにWScript.Shellを利用します。WScript.Shellを参照設定をする場合としない場合で書き方が2通りあります。
参照設定をする場合は、ツールメニュー→参照設定で「Windows Script Host Object Model」にチェックを付けて、WshShellクラスの変数を利用します。参照設定をしない場合は、「CreateObject(“WScript.Shell”)」でWshShellクラスのオブジェクト変数を作成して利用します。
どちらで実装しても問題ありませんが、処理速度は参照設定をした方が若干速いです。
その理由については興味があれば別ページ「VBAの高速化(クラスは参照設定+Newする)」をご参照ください。
事前準備
以下のソースコードではTortoiseSVNの各種exeファイルが環境変数PATHに登録されている前提で書いています。そのため、ソースでは「TortoiseProc.exe」という名前だけでコマンドを実行してます。
環境変数PATHに登録する場合は、「C:\Program Files\TortoiseSVN\bin;」のような感じでTortoiseProc.exeが格納されてあるフォルダを追加してください。
もし環境変数PATHに登録できない場合は、ソースの「TortoiseProc.exe」の部分をフルパスの「C:\Program Files\TortoiseSVN\bin\TortoiseProc.exe」等の実際にインストールされているパスに書き換えてください。
TortoiseSVNのログを表示する
現在表示しているブックのSubversionログを表示します。
参照設定をしない場合の書き方で、CreateObject関数を利用しています。
1 2 3 4 5 6 |
Sub SvnLog() Dim obj Set obj = CreateObject("WScript.Shell") Call obj.Run("TortoiseProc.exe /command:log /path:""" & ActiveWorkbook.FullName & """") End Sub |
TortoiseSVNのコミットダイアログを表示する
現在表示しているブックのコミットダイアログを表示します。
参照設定で「Windows Script Host Object Model」を使う場合の書き方で、WshShellクラスを利用しています。
1 2 3 4 5 6 |
Sub SvnCommit() Dim obj As WshShell '// Windowsシェルアクセスクラス。参照設定で「Windows Script Host Object Model」にチェックするとクラス変数が定義できる。 Set obj = New WshShell Call obj.Run("TortoiseProc.exe /command:commit /path:""" & ActiveWorkbook.FullName & """") End Sub |
その他コマンド
その他のコマンドはTortoiseSVNのサイトで詳細を確認して実装してみてください。
/command:の後ろが変わるぐらいで、ほとんど書き方は変わらないと思います。