• 締切済み

VBAで、シート保護のパスワードは利用可能ですか?

VBAソース上で、シート保護で設定したパスワードを取得、使用することは可能でしょうか? ソースにパスワード文字列をベタ書きせずにすむなら、その方法をとりたいので教えてください。 例) 1.[Excelメニュー-シート保護]で、パスワードを設定 2.VBAで、以下のように「1.で設定したパスワード」を取得し、変数に代入 3.Protectメソッドでその変数を使用  VBAソース)  Dim pass As String  pass = 「1.で設定したパスワード」  ActiveSheet.Protect Password:=pass, UserInterfaceOnly:=True

みんなの回答

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

> シート保護のパスワード値を取得するのは難しいのでしょうか。 ためしに「マクロの記録」でパスワード保護をしてみてください。 パスワードは記録されませんよね。 世の中にはパスワード解析ソフトなるものも存在するので、取得も不可能ではありませんが、時間がかかりすぎて、ご希望の用途にはとても転用できないです。 で、パスワードを決めるのは管理者で、開発者のあなたにも把握が出来ないということですね。 ならば、仮に 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)
回答No.1

> シート保護で設定したパスワードを取得、使用することは可能でしょうか? コードに直接書きたくないのであれば、非表示シートのどこかのセルにでもいれておくしかないです。 どこにも書き記さずにVBAでパスワードを取得できるのならパスワードの意味はないです。 コードに書いて、VBEをパスワード保護して見られないようにしたらいかがですか? VBEの画面で [ツール]、 [xxxのプロパティ]、 [保護]タブ 、[プロジェクトを非表示用にロック] でパスワードが設定できます。

rin186
質問者

お礼

回答ありがとうございます。 今回、以下のような関係で利用する入力用ファイルを作成しています。 入力用ファイル:Excel+VBA 入力用ファイル開発者:私 入力用ファイル管理者:管理者(パスワード設定者) 入力用ファイル入力者:社員 管理者が、入力用ファイルを社員に配布する際、その都度、シート保護のパスワードを 変えたいという要望があり、Excelのメニューで変更できればと思っています。 ただ、ActiveSheet.Protect Password:=passで、VBA側からもその値を参照する必要があるため、 この質問に至りました。 やはり、シート保護のパスワード値を取得するのは難しいのでしょうか。 検索をかけてもヒットしなかったもので... むずかしいようであれば、その都度、変更するのではなく固定にしようと考えています。

関連するQ&A

  • EXCEL VBAで条件付き保護について

    VBA初心者です、よろしくお願いします。 列Eでオートフィルタを使用可能と設定したいので、下記のようにしましたが、「シートの保護を設定」のステップを終えた後オートフィルタも使用できません。 「AllowFiltering:=True」でEXCELのオートフィルタの使用にチェックを入れた状態になると考えていましたが、思うようになりませんでした。 「シートの保護を設定」のステップがおかしいと思うのですが、わかりません。 教えてください。 ------------------------------------------------------ Private Sub Auto_Open() '一旦、シート保護を解除 ActiveSheet.Unprotect Password:="AAA" 列Hのデータを重複データを無視で列Oに抽出 セルH2は「入力規則-リスト」~列Oのデータを使用   ・   ・   ・ ' シート保護を設定 ActiveSheet.Protect Password:="AAA", UserInterfaceOnly:=True, AllowFiltering:=True End Sub

  • Excel 2003 で、次のようなVBAを入力しています。

    Excel 2003 で、次のようなVBAを入力しています。 手動でも同じパスワードでシートの保護設定、解除をしたいのですが、 方法はありますか? ご教示よろしくお願いいたします。 ActiveSheet.Unprotect Password ="pass" 'シート保護解除 Selection.AutoFilter Field:=7, Criteria1:="<>" '項目「得意先名」が、「空白以外」を抽出 ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True '印刷 Selection.AutoFilter Field:=7 '印刷範囲の解除 ActiveSheet.Protect Password="pass"

  • Excel シートの保護 VBA

    「データ」、「A」という名称の2つのシートを ブック起動時にパスワードつきで保護したいと考えています。 また、マクロ(VBAのフォーム?)のみで更新できるようにしたいとも考えています。 Dim sheet1 As Worksheet Set sheet1 = Worksheets("データ") sheet1.Protect Password:="pass", _ AllowFormattingCells:=True 上記のやり方があると見たので、 ThisWorkBookに貼り付けて保存し、再起動してみたのですが 普通に、「データ」のシートに書き込めてしまいます。 何もエラーも出ないため、どう考えればよいのかも分かりません。 回答よろしくお願い致します。

  • エクセルVBAでブック保護のUserInterfaceOnly:=Trueはダメ?

    エクセル2000です。シート保護ならUserInterfaceOnly:=TrueでVBAでの変更は可能ですが、Book保護にもそういう機能はないのでしょうか?試しに、 Sub TEST1() ActiveWorkbook.Protect Password:="merlion" , UserInterfaceOnly:=True End Sub とやってみましたが、エラーになってしまいました。(泣)

  • エクセルシート保護のパスワード【文字コード】

    マクロを使って、シート保護を外そうとしています。 文字コードで詰まってしまいました。 たとえば、シートをパスワード『11』で保護したとします。 pass = "11" ActiveSheet.Unprotect Password:=pass もちろん上記で解除できます。 pass = Chr(49) & Chr(49) 上記に変更しても解除できます。(「1」の文字コードが49なのでこれはわかります。) pass = Chr(33) & Chr(57) ところが、上記でも解除が出来てしまいます。(つまり、「!9」で解除できます。) なぜなのでしょうか。。。。

  • シート保護のパスワードは・・・

    下の「シート保護」マクロは、パスワード「111」でシートを保護しなさい。    「シート保護解除」マクロは、パスワード「111」でシートの保護解除をしなさい。 という命令だと思うのですが・・・ Sub シート保護()   ActiveSheet.Protect possword = "111" End Sub Sub シート保護解除()   ActiveSheet.Unprotect possword = "111" End Sub パスワードを入力してシートの保護を解除しようとすると、 入力したパスワードは間違っています。 CapsLockキーがオフになっていることを確認し、 大文字と小文字が正しく使われていることを確認してください。 というメッセージが出るのですが・・・、 マクロで作成した保護は、マクロで解除しないとダメという意味なのですか? シートで保護解除できるようにしたいのですが、できますか?

  • シートの保護のあとセルの列、幅を動かせるようにしたい

    EXCELマクロでシートの保護はするがセルの行、列の幅を動かせるにしたいです。 シート1,2,3があり、シート2,3のデータをシート1に集約する処理を 行っています。 シート1,2,3は事前にシートの保護を設定し、シートの保護の設定で、ロックされたセル範囲の選択、セル書式設定、列の書式設定、行の書式設定は許可しています。 シート1にシート2,3のデータを設定する時にActiveSheet.Unprotect Password:="password"でシートの保護を解除し、設定後にActiveSheet.Protect Password:="password"を再度保護しています。 空の状態のシート1はセルの行、幅を動かすことはできるのですが、上記のシートの保護を解除し、データ設定後、ActiveSheet.Protect Passwordコマンドで保護するとシート1のセルの行、幅を動かすことができなくなります。 シートの保護設定のやり方があるのでしょうか。 ご指導のほど、よろしくお願いいたします。

  • エクセル97 フォームシートの保護をする時に出る"パスワード"をコード化させたい

    「表示-ツール-フォーム」でボタンを作りました。 そして、マクロの自動登録で「シートの保護」を選び「パスワード:password」を設定し、更に「password」で保護解除をし、マクロ記録終了。 そして、各コードを「シートの保護」:ボタン3、「シートの解除」:ボタン2、に設定しました。 それらを実行させてみたのですが、特に「パスワード:password」を聞かれることなく一連の作業が終了してしまいました。 コードは以下のとおりです。 Sub ボタン2_Click() ' ' ボタン2_Click Macro ' マクロ記録日 : 2004/2/9 ユーザー名 : **** ' ActiveSheet.Unprotect End Sub -------------------------- Sub ボタン3_Click() ' ' ボタン3_Click Macro ' マクロ記録日 : 2004/2/9 ユーザー名 : **** ' ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True End Sub そこで、各ボタンのクリック時に、パスワードを聞いてきてくれるコードを書き加えたいのです。 わかる方がいらっしゃいましたら、是非教えてください!! コードに関して素人ですので、できたら、全体を通してコードを教えて頂ければ助かります。 いろいろ探してみたのですが、ギブアップです。 宜しくお願い致します。

  • シートの保護につきまして

    行・列の追加削除だけ、無効にする方法は ありますか? 単にシートを保護するだけなら下記で行っております。 ActiveSheet.Protect Password:="", DrawingObjects:=True, Contents:=True, Scenarios:=True ご回答のほど、よろしくお願いいたします。

  • パスワードでシート保護したExcelへの画像貼り付けについて

    Excel2000でロックしていないセルに画像を貼り付けようと思います。 パスワードでシート保護しています。 VBAで次のように処理したら画像は貼り付けられました。 しかしパスワード入力を求められ、入力すると画像の挿入後シートは保護されたのですが、パスワードは解除になっています。 パスワード解除にならずに画像挿入できる方法をご教示ください。 さらに挿入後のサイズ変更のVBAも併せて教えて頂ければ助かります。 当方VBAについては全くの初心者です。 Sub 画像挿入()   With ActiveSheet     'シート保護解除     .Unprotect     '画像挿入ダイアログ表示-->画像を挿入     Application.Dialogs(xlDialogInsertPicture).Show     '画像が挿入されたら、保護のロック対象外に設定     If TypeName(Selection) = "Picture" Then       Selection.Locked = False     End If     'シート保護     .Protect DrawingObjects:=False, Contents:=True   End With End Sub

専門家に質問してみよう