Excel VBAとGithub

Excel VBAのコードはxlsmファイルの形式ではバイナリ形式で認識されるため、直接Githubで管理できない。
今回はxlsmからコードを分離しbasファイルなどのモジュールにエクスポートすることで、Github管理する方法を紹介する。

まずはxlsmファイルからコードを分離する必要がある。
手動でもVBAのコード編集画面のファイルメニューやプロジェクトエクスプローラーから、モジュールのインポート・エクスポートは可能である。同じことをVBAでも実現できる。

  • インポート
    FilePathにインポートしたいファイルパスを指定する。
Private Function Import_Module()
    Const FilePath As String = "example.bas"
    ThisWorkbook.VBProject.VBComponents.Import FilePath
End Function
  • エクスポート
    ModuleNameにエクスポートしたいモジュール名を指定する。
Private Function Export_Module()
    Const ModuleName as String = "Module1"
    Dim objVBC As Object 'VBComponent
    Set objVBC = ThisWorkbook.VBProject.VBComponents(ModuleName)
    ThisWorkbook.VBProject.VBComponents.Remove objVBC
End Function

ここまでのコードで、xlsmファイルからコードを分離・取り込みすることが可能となる。

ここからはGithubに関連するコードを説明する。
以下はstrCMD()にシェルコマンドをセットし、ExecuteCMD()で実行するプログラムである。
ExecuteCMD()のCurrentDirectoryは、.gitフォルダと同じディレクトリにする必要がある。

Private Function gitPullAddCommitPush()
    Dim strCMD As String
        
    strCMD = "git pull"
    ExecuteCMD(strCMD)
    
    strCMD = "git add ."
    ExecuteCMD(strCMD)
    
    strCMD = "git commit -m revise"
    ExecuteCMD(strCMD)
    
    strCMD = "git push origin master"
    ExecuteCMD(strCMD)
End Function

Public Function ExecuteCMD(strCMD As String) 'CMDにコマンドを投げる
    Dim buf As String
    With CreateObject("Wscript.Shell")
        .CurrentDirectory = ThisWorkbook.Path
        buf = .Run(strCMD, WaitOnReturn:=True)
    End With
End Function

Export_Module()でモジュールを分離した後、gitPullAddCommitPush()を実行すれば、basファイルなどの形でコードをGithubで管理できる。