パスワード付き Excel ブックのパスワード入力を省く VBA 作った

とあるパスワード付き Excel ブックがあって、それを開く時に毎度パスワードを入力するのが面倒になった。しかしやんごとなき理由でパスワードを外すことはできない。

そこで、パスワード入力を自動化する VBA マクロを作ってみた。以下の GitHub リポジトリに置いた。

新たな Excel ブックを作って、ThisWorkbook 内に以下のような VBA マクロコードを書いてやる。このマクロ付き Excel ブックを開けば、パスワード付きの Excel ブックだけが開かれる挙動になる。

Private Sub Workbook_Open()
  On Error Resume Next
  Workbooks.Open Filename:="C:\PATH\TO\FILE.xlsx", Password:="PASSWORD-HERE!"
  If Err.Number <> 0 Then
    MsgBox "Failed To Open The Book"
  End If
  ThisWorkbook.Close
End Sub

Workbooks.Open() 関数に Password という引数が渡せるので、ココで開きたいファイルのフルパスとパスワードをベタ書きしているだけ。つまりこのマクロを書いたブックが漏洩したらパスワードも漏洩する。

Workbook_Open() 関数はそのワークブックを開いた時に自動的に実行される関数。その関数内で別の Excel ファイルを開き、自身は ThisWorkbook.Close で閉じてしまっているので、見た目上はパスワード付きブックだけが開かれるような挙動になるというワケ。

このマクロ付きブックを編集したくなった時は、予め Visual Basic を開いて「実行」→「中断」を選択しておき、それからこのマクロ付きブックを開こうとすれば Workbook_Open() 関数の実行前に処理が止まるので編集が可能。

せっかくのパスワード付きブックに対して、とてもセキュアではない方法で扱っているので、くれぐれもご注意を。