ray88’s diary

お仕事で困ったとき用の自分用の覚書

ExcelVBA エクセルファイルにパスワードを設定・解除する

※パスワードがかかっていないファイルに対してパスワードを送って開いてもエラーにはならない。
Excelファイルに読み取りパスワードを設定する
名前を付けて保存する際に、読み取りパスワードを設定します。
設定するには「SaveAs」メソッドの引数に「Password」を設定します。
パスワードには15文字以内の文字列を指定します。
読取パスワード設定コード

Sub setReaPw()
    '開くエクセルファイルを管理する変数
    Dim targetWB As Workbook
    Dim targetPath As String
    targetPath = "C:\Users\デスクトップ\テスト\pwtest.xlsx"
    Set targetWB = Workbooks.Open(targetPath)
    '上書き確認のアラートが出ないようにする
    Application.DisplayAlerts = False
    'ファイルに読み取り用パスワードを設定
    targetWB.SaveAs Filename:=targetPath, Password:="ABC123"
    targetWB.Close
    Application.DisplayAlerts = True
End Sub

読取用パスワード解除コード
一度パスワードを設定したファイルに対してパスワードを解除するには空の文字列を指定して保存します。

Sub releaseReadPw()
    '開くエクセルファイルを管理する変数
    Dim targetWB As Workbook
    Dim targetPath As String
    targetPath = "C:\Users\デスクトップ\テスト\pwtest.xlsx"
    Set targetWB = Workbooks.Open(targetPath, Password:="ABC123")
     '上書き確認のアラートが出ないようにする
    Application.DisplayAlerts = False
    'ファイルの読み取り用パスワードを解除
    targetWB.SaveAs Filename:=targetPath, Password:=""
    targetWB.Close
    Application.DisplayAlerts = True
End Sub

Excelファイルに書き込みパスワードを設定する
名前を付けて保存する際に、読み取りパスワードを設定します。
設定するには「SaveAs」メソッドの引数に「WriteResPassword」を設定します。
パスワードには15文字以内の文字列を指定します。

Sub setWritePw()
    '開くエクセルファイルを管理する変数
    Dim targetWB As Workbook
    Dim targetPath As String
    targetPath = "C:\Users\デスクトップ\テスト\pwtest.xlsx"
    Set targetWB = Workbooks.Open(targetPath, WriteResPassword:="ABC123")
    '上書き確認のアラートが出ないようにする
    Application.DisplayAlerts = False
    'ファイルに書込み用パスワードを設定
    targetWB.SaveAs Filename:=targetPath, WriteResPassword:="ABC123"
    targetWB.Close
    Application.DisplayAlerts = True
End Sub

書込み用パスワード解除コード
一度パスワードを設定したファイルに対してパスワードを解除するには空の文字列を指定して保存します。

Sub releaseWritePw()
     '開くエクセルファイルを管理する変数
    Dim targetWB As Workbook
    Dim targetPath As String
    targetPath = "C:\Users\デスクトップ\テスト\pwtest.xlsx"
    Set targetWB = Workbooks.Open(targetPath, WriteResPassword:="ABC123")
     '上書き確認のアラートが出ないようにする
    Application.DisplayAlerts = False
    'ファイルの書込み用パスワードを解除
    targetWB.SaveAs Filename:=targetPath, WriteResPassword:=""
    targetWB.Close
    Application.DisplayAlerts = True

ray88.hatenablog.com
■読み取り用と書込み用パスワードを設定する

Sub setPw()
    '開くエクセルファイルを管理する変数
    Dim targetWB As Workbook
    Dim targetPath As String
    targetPath = "C:\Users\デスクトップ\テスト\pwtest.xlsx"
    Set targetWB = Workbooks.Open(targetPath)
    '上書き確認のアラートが出ないようにする
    Application.DisplayAlerts = False
    'ファイルに読み取り用パスワードと書込み用パスワードを設定
    targetWB.SaveAs Filename:=targetPath, Password:="ABC123", WriteResPassword:="ABC123"
    targetWB.Close
    Application.DisplayAlerts = True
End Sub

読み取り用と書込み用パスワードを解除するコード

Sub releasePw()
    '開くエクセルファイルを管理する変数
    Dim targetWB As Workbook
    Dim targetPath As String
    targetPath = "C:\Users\デスクトップ\テスト\pwtest.xlsx"
    Set targetWB = Workbooks.Open(targetPath, Password:="ABC123", WriteResPassword:="ABC123")
     '上書き確認のアラートが出ないようにする
    Application.DisplayAlerts = False
    'ファイルの読み取り用パスワードと書込み用パスワードを解除
    targetWB.SaveAs Filename:=targetPath, Password:="", WriteResPassword:=""
    targetWB.Close
    Application.DisplayAlerts = True
End Sub