VBAで他のブックを操作する際、対象のブックが「読み取りパスワード」で保護されているケースがあります。このようなブックも、VBAを使えばパスワードを自動で入力して開くことが可能です。
この記事では、Workbooks.Open
メソッドのPassword
引数を使った基本的な方法と、より安全にパスワードを取り扱うための推奨される方法を合わせて解説します。
パスワードを指定してブックを開く基本コード
まずは、VBAコード内にパスワードを記述してブックを開く基本的な方法です。
Sub OpenProtectedWorkbook_Basic()
' 変数を宣言します
Dim filePath As String
Dim filePassword As String
Dim protectedBook As Workbook
' 開きたいブックのパスを指定
filePath = ThisWorkbook.Path & "\Protected_Data.xlsx"
'【注意】VBA内にパスワードを直接記述する方法
filePassword = "secret123"
' Password引数を指定してブックを開く
Set protectedBook = Workbooks.Open(Filename:=filePath, Password:=filePassword)
'--- 開いた後の処理 ---
If Not protectedBook Is Nothing Then
MsgBox "「" & protectedBook.Name & "」を開きました。"
protectedBook.Close SaveChanges:=False ' 確認のため、保存せずに閉じる
Set protectedBook = Nothing
End If
End Sub
コードのポイント解説
Workbooks.Open
メソッドを実行する際に、Password
という名前付き引数に対して、文字列でパスワードを指定します。 Workbooks.Open(Filename:="ファイルパス", Password:="パスワード")
これにより、パスワード入力のダイアログボックスを表示させることなく、ファイルを直接開くことができます。
【重要】パスワードの取り扱いに関するセキュリティ上の注意
上記の基本コードのように、VBAコード内にパスワードを直接書き込む(ハードコーディングする)ことは、セキュリティ上、非常に危険です。
VBE(VBAの編集画面)を開くことができる人なら誰でも、コードからパスワードを平文で読み取れてしまいます。ファイルにVBAプロジェクトのパスワードを掛けても、簡易的な保護にしかなりません。
そのため、パスワードのハードコーディングは避け、次に紹介するような、マクロ実行時に入力を促す方法を強く推奨します。
【推奨】InputBoxを使い、安全にパスワードを入力させる方法
より安全な方法は、マクロを実行したタイミングでInputBox
を表示し、ユーザーにその都度パスワードを入力してもらうことです。これなら、ファイル内にパスワードが残ることはありません。
コード例
Sub OpenProtectedWorkbook_Secure()
' 変数を宣言します
Dim filePath As String
Dim userInputPassword As String
Dim protectedBook As Workbook
' 開きたいブックのパスを指定
filePath = ThisWorkbook.Path & "\Protected_Data.xlsx"
' InputBoxを表示して、ユーザーにパスワードを入力させる
userInputPassword = InputBox("保護されたブックのパスワードを入力してください:", "パスワード入力")
' キャンセルボタンが押された、または入力が空の場合は処理を終了
If userInputPassword = "" Then Exit Sub
' パスワードが間違っていた場合のエラーを処理する準備
On Error Resume Next
' 入力されたパスワードでブックを開く
Set protectedBook = Workbooks.Open(Filename:=filePath, Password:=userInputPassword)
' エラーが発生した場合(パスワードが違うなど)の処理
If Err.Number <> 0 Then
MsgBox "パスワードが違うか、ファイルを開けませんでした。", vbCritical
Exit Sub
End If
' エラー処理を元に戻す
On Error GoTo 0
'--- 開いた後の処理 ---
MsgBox "「" & protectedBook.Name & "」を正常に開きました。"
protectedBook.Close SaveChanges:=False
'----------------------
Set protectedBook = Nothing
End Sub
コードのポイント解説
InputBox(...)
: ユーザーに文字入力を促すダイアログボックスを表示し、入力された値を返します。On Error Resume Next
: VBAでエラーが発生しても処理を中断せず、次の行に進むようにする命令です。パスワードが間違っているとWorkbooks.Open
でエラーが発生するため、これを使ってエラーを検知・処理しています。
まとめ
パスワード付きのブックを開くには、Workbooks.Open
メソッドのPassword
引数を利用します。
- 基本の方法: コード内にパスワードを直接記述するが、セキュリティリスクが高く非推奨。
- 推奨される方法: **
InputBox
**を使い、マクロ実行時にユーザーからパスワードを入力してもらう。これにより、ファイル内にパスワードを残さず、安全に処理を実行できる。
機密情報を含むファイルを扱う際は、必ず後者の安全な方法を採用するようにしてください。