• 締切済み

ExcelVBA読み取りパスワード削除して保存

以下、ご教授ください。 aaa.xlsとbbb.xlsがあります。 bbb.xlsには読み取りパスワードが設定されています。 aaa.xlsからVBAを使用し、bbb.xlsをパスワードを解除し、かつ読み取り専用で開きます。 ユーザーはパスワードを知らない状態です。 bbb.xlsをユーザーが編集し保存する際に、別名で保存のウィンドウが出るのですが、 パスワードはそのままで保存されてしまい、ユーザーは別名保存したExcelを開く事が できなくなってしまいます。 "Workbook_BeforeSave”で、保存する際にパスワードを変更するよう、 促すことはできたのですが、どうせならパスワードを削除した状態にしたいのです。 そういったことは可能でしょうか?

みんなの回答

回答No.2

追記。 書き忘れましたが、ユーザーが別名で保存したら、同様の処理をして、bbb.xlsにパスワードを付けて保存し直して下さい。 先ほどとまったく同じ処理で book1.SaveAs Filename:="bbb.xls", Password:="" を book1.SaveAs Filename:="bbb.xls", Password:="設定したいパスワード" に変えるだけです。 以下、蛇足ですが、Excel2010以降のみでしか出来ませんが、別の方法として Workbook_AfterSave で、ユーザーがセーブしたファイル名を取得して、先ほどの方法で「ユーザーが保存したファイルからパスワードを削除」できます。

回答No.1

bbb.xlsを読み取り専用で開く前に Dim FObj As Object Dim book1 As Workbook 'bbb.xlsの「読み取り専用属性」を外す Set FObj = CreateObject("Scripting.FileSystemObject") FObj.GetFile("bbb.xls").Attributes = 0 'bbb.xlsのパスワードを解除して保存し直す Set book1 = Workbooks("bbb.xls") book1.SaveAs Filename:="bbb.xls", Password:="" book1.Close 'bbb.xlsに「読み取り専用属性」を付ける FObj.GetFile("bbb.xls").Attributes = 1 'オブジェクト開放 set FObj = Nothing の処理を入れれば、bbb.xlsのパスワードが消えます。

関連するQ&A

専門家に質問してみよう