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