- 締切済み
VBAで、シート保護のパスワードは利用可能ですか?
VBAソース上で、シート保護で設定したパスワードを取得、使用することは可能でしょうか? ソースにパスワード文字列をベタ書きせずにすむなら、その方法をとりたいので教えてください。 例) 1.[Excelメニュー-シート保護]で、パスワードを設定 2.VBAで、以下のように「1.で設定したパスワード」を取得し、変数に代入 3.Protectメソッドでその変数を使用 VBAソース) Dim pass As String pass = 「1.で設定したパスワード」 ActiveSheet.Protect Password:=pass, UserInterfaceOnly:=True
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- merlionXX
- ベストアンサー率48% (1930/4007)
> シート保護のパスワード値を取得するのは難しいのでしょうか。 ためしに「マクロの記録」でパスワード保護をしてみてください。 パスワードは記録されませんよね。 世の中にはパスワード解析ソフトなるものも存在するので、取得も不可能ではありませんが、時間がかかりすぎて、ご希望の用途にはとても転用できないです。 で、パスワードを決めるのは管理者で、開発者のあなたにも把握が出来ないということですね。 ならば、仮に XX という名前のシートを作り、管理者がパスワード保護する際に、XXシートのA1セルにパスワードを入れてもらいます。 そしてXXシートは非表示にして、パスワード付きのBOOK保護もしてもらいます。 これで使用者はパスワードを見ることができませんね。 で、あなたは Dim pass As String pass = Sheets("XX").Range("A1").Value ActiveSheet.Protect Password:=pass, UserInterfaceOnly:=True と書いたらどうでしょう? もちろん、このコードを見られたら、ばれますから、先ほど書いたようにVBEの画面でプロジェクトを非表示用にロックします。 でも、「管理者が、入力用ファイルを社員に配布する際、その都度、シート保護のパスワードを変えたい」というあまり意味のなさそうな要望の本当の意図は何なんでしょうね。 それがわかればもっと別の対応があるかもしれません。
- merlionXX
- ベストアンサー率48% (1930/4007)
> シート保護で設定したパスワードを取得、使用することは可能でしょうか? コードに直接書きたくないのであれば、非表示シートのどこかのセルにでもいれておくしかないです。 どこにも書き記さずにVBAでパスワードを取得できるのならパスワードの意味はないです。 コードに書いて、VBEをパスワード保護して見られないようにしたらいかがですか? VBEの画面で [ツール]、 [xxxのプロパティ]、 [保護]タブ 、[プロジェクトを非表示用にロック] でパスワードが設定できます。
お礼
回答ありがとうございます。 今回、以下のような関係で利用する入力用ファイルを作成しています。 入力用ファイル:Excel+VBA 入力用ファイル開発者:私 入力用ファイル管理者:管理者(パスワード設定者) 入力用ファイル入力者:社員 管理者が、入力用ファイルを社員に配布する際、その都度、シート保護のパスワードを 変えたいという要望があり、Excelのメニューで変更できればと思っています。 ただ、ActiveSheet.Protect Password:=passで、VBA側からもその値を参照する必要があるため、 この質問に至りました。 やはり、シート保護のパスワード値を取得するのは難しいのでしょうか。 検索をかけてもヒットしなかったもので... むずかしいようであれば、その都度、変更するのではなく固定にしようと考えています。