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")
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