B-Teck!

お仕事からゲームまで幅広く

【VBA】パスワードのかかっていないExcelだけ開く

VBAからパスワードのかかったExcelファイルを開く際、普通にWorkbooks.Openするとパスワード入力ダイアログで止まってしまう。
この場合、パスワードを入力するかダイアログを閉じるまで実行中の処理が停止してしまう。
また、ダイアログを閉じた場合にはエラーが発生してしまう。

とりあえず下記方法で回避することができる

  • On Error Resume Nextでエラー発生時に後続の処理が実行されるようにする
  • Open時のパスワード引数に空文字「""」を指定する
  • Open後、Err.NumberがOpen失敗「1004」であるかを確認する
    ※ ループ等の場合、Err.Clearをしないとエラー情報が残ってしまうので注意

ただ少し問題があって、この方法では、パスワードのかかったExcel以外にも開けないExcelが存在したとき(編集中等)に同様に開けないファイルとして扱ってしまう。
どうするのがベストなんだろう。

Sub openExcel(ByVal filePath As String)
    Dim wkBook      As Workbook: Set wkBook = Nothing
    Dim xlApp       As Object: Set xlApp = CreateObject("Excel.Application")
    
'Errorを無視
On Error Resume Next

    'パスワードに空文字を入れることで、パスワード無しで開けるブックのみ開く
    Set wkBook = xlApp.Workbooks.Open(filePath, Password:="")
    'オープン失敗時はエラーメッセージ
    Select Case Err.Number
        Case 1004
            MsgBox "ワークブックにパスワードがかかっているためOpenできません。"
            Err.Clear
        Case 0
            MsgBox filePath & "をOpenしました。"
    End Select
    
    '後処理
    xlApp.Close
    Set xlApp = Nothing
End Sub