プロが教えるわが家の防犯対策術!

ブックを保護するマクロと、解除するマクロをそれぞれパスワード付きで作り、ボタンに設定しました。
Sub ブック保護()
  ThisWorkbook.Protect Password:="1234"
End Sub

Sub ブック保護解除()
  ThisWorkbook.Unprotect Password:="1234"
End Sub

保護する際は良いのですが、解除する際にパスワードの入力を求められません。
これだと、パスワードを知らない人でも保護が解除でき、パスワードを設定した意味がなくなってしまいます。
ブック保護解除ボタンを押すと、パスワードの入力を求められるようにするにはどうしたらよいでしょうか。
ご教授お願い致します。

A 回答 (6件)

こんにちは。


Sheet上またはUSER Form上にText Boxを配置して、パスワードを入力させる
Text Box はプロパティにPasswordChar というのがあるのでこれを * にする。

USER Formが苦手な場合はInputBoxでもできるようですが、
”InputBox Daniel Klann Password" で検索するとたくさん引っかかってきたのでご参考まで。

隠す必要がないのであればInputBoxで十分ですね。
ThisWorkbook.Protect Password:=InputBox("Password?")
すみません、動作確認まではしてません。
    • good
    • 1
この回答へのお礼

nokonoko524さま
どうもありがとうございます!
検証、お礼が遅くなり申し訳ございません。
ThisWorkbook.Protect Password:=InputBox("Password?")
このコードでうまく動きました!
本当にどうもありがとうございます!!

お礼日時:2016/06/20 10:21

こんにちは。


長文で失礼します。

私は頭が悪いのか、どうしても、ここの質問やスレの内容が理解できないのです。

私の疑問は、

  ThisWorkbook.Protect Password:="1234"
確かに、自分のブックに自分で鍵を掛けることは可能です。それは、玄関を締めるのと同じですから。

しかし、
  ThisWorkbook.Unprotect Password:="1234"
これでは、中から鍵を開けてくださいということだから、セキュリティも何もありませんよね。鍵を開けて玄関から入らなければ、マクロ自体も実行されないと思うのです。そのために、マクロの前に、ブック本来のパスワードダイアログが、開く前に働くはずです。(マクロのプロテクトの話は別です。)  

全体を言うなら、今の流れは、
ThisWorkbook モジュールで、このように用いることと、解釈しています。
'-----------------------
Const pwd As String = "1234"
Private Sub Workbook_BeforeClose(Cancel As Boolean)
     ThisWorkbook.Protect Password:=pwd
End Sub

Private Sub Workbook_Open()
Dim pwd As String
pwd = InputBox("パスワードを入力してください。", "ブック保護の解除")
If StrPtr(pwd) = 0 Then
  MsgBox "キャンセルされました。"
Exit Sub
ThisWorkbook.Unprotect Password:=pwd
End Sub
'-----------------------

>ブック保護解除ボタンを押すと、パスワードの入力を求められるようにするにはどうしたらよいでしょうか。

それは、ブックの構成(場合によりシートも含まれる)などの解除のためであって、ブックそのものを開くためののではないのではないかと思います。

つまり開いてから、本体のマクロ(Thisworkbook)を動かしてパスワードを入れさせるというのは、どちらかというと、ナンセンスな設定ではないかと思うのです。

なぜなら、この時点で、ThisWorkbook のマクロが動いているのですから、表玄関の鍵は半分は開けられていることを意味するからです。(表があるなら裏もあるというのは、別の話で、これは、ナシにしてください。そちらを話すとオフトピになってしまいます。)

以下のマクロの意味は解説しませんが、簡単なマクロですから、見て分かる人がいれば、私の言っている意味が分かると思います。これをステルスで動かされたら、何をしているかさえわかりません。
'-------------------
Sub Macro1()
  Dim acBk As Workbook
  Dim sh As Object
  Dim shcnt As Integer
  Dim fn As String
  Set acBk = ActiveWorkbook
  shcnt = Application.SheetsInNewWorkbook
  Application.SheetsInNewWorkbook = 1
  Workbooks.Add
  ActiveWorkbook.Sheets(1).Name = "dumm"
  With acBk
    For Each sh In .Sheets
      sh.Copy after:=ActiveWorkbook.Sheets(ActiveWorkbook.Sheets.Count)
    Next sh
  End With
  Application.DisplayAlerts = False
  ActiveWorkbook.Sheets("dumm").Delete
  Application.DisplayAlerts = True
  fn = Mid(acBk.Name, 1, InStrRev(acBk.Name, ".") - 1)
  ActiveWorkbook.SaveAs "C:\Temp\" & fn, 50
  ActiveWorkbook.Close False
  Application.SheetsInNewWorkbook = shcnt
End Sub
'--------------------
昔、私がこの話をした時に、画面コピーの話がありましたが、それは防ぐことか可能です。

つまり、本格的にパスワードで行うなら、

① ダミーのブックを備えて、マクロブックとは別に置く。
(隠しフォルダーに格納する方法もそのひとつ)

② そのブック以外の外部のVBAや他のプログラムを駆使して、本体のファイルのアンプロテクトをダイアログにする。(例えば、WScript を暗号化して、コンパイルする。パスワードはレジストリに入れる。)

③ IRMを使う。(これが一般的でした)
しかし、現在 IRM-Information Rights Managementは、私の間違いでなければ、2015年の11月28日で終わっているというそうです)エラーが発生します。

https://blogs.technet.microsoft.com/enterprisemo …

その代わりに、Microsoft のMRS(Rights Management Services)ということで、ARM(Azure Rights Management)に替わっていることですが、サイトをみたら、有償になってしまっています。

Azure Rights Management を使用するように IRM を構成する
https://technet.microsoft.com/ja-jp/library/dn15 …

https://products.office.com/ja-jp/business/micro …

と、私が、ここの質問を読んで思ったことです。見当はずれな回答だと思いましたら、特にフィードバックは不要です。
    • good
    • 0
この回答へのお礼

WindFallerさま
お礼が遅くなり申し訳ございません。
今回は、WindFallerさまにご提案いただいたコードを試す前に解決してしまいました。
ですが、お忙しいところお時間を割いていただいて、コードと詳細な説明をどうもありがとうございました。

お礼日時:2016/06/20 10:27

No.2・3です。



>マクロボタンからブックを保護したときに、設定したパスワードの入力をするダイアログボックスが表示されませんでした。

当方使用のExcel2010で確認してみました。
お示しのコード
>ThisWorkbook.Protect Password:="1234"
をコマンドボタンに記載し、コマンドボタンで「ブック保護」した後に前回のコードで実行すると
パスワード入力画面がちゃんと表示されました。
(ブック保護ボタンの後でも同様に表示されました。)
なので原因はこちらでは判りかねます。

ただ、前回のコードでは「ブック保護」をしていない状態でも反応してしまいますので
ちょっとコードを変更してみます。

If ThisWorkbook.ProtectStructure Then
Application.Dialogs(xlDialogWorkbookProtect).Show
End If

これで「ブック保護」の状態のみ反応すると思います。m(_ _)m
    • good
    • 0
この回答へのお礼

tom04さま
お礼が遅くなり申し訳ございません。
tom04さまが新たにご提案くださったコードを解除用に、
nokonoko524さまがご提案くださったコードを保護用に設定することで、
完璧に動作するようになりました。
本当にどうもありがとうございました!!!

お礼日時:2016/06/20 10:23

No.2です。



>ブック保護の解除のマクロボタンを作成したいと思っております。

というコトですので、「ブック保護解除」のコードを↓にしてみてください。

Sub ブック保護解除()
Application.Dialogs(xlDialogWorkbookProtect).Show
End Sub

こんな感じではどうでしょうか?m(_ _)m
    • good
    • 0
この回答へのお礼

tom04 さま
ありがとうございます。
このマクロを試したところ、校閲メニューからブックを保護した時はダイアログボックスは表示されましたが、マクロボタンからブックを保護したときに、設定したパスワードの入力をするダイアログボックスが表示されませんでした。

マクロボタンからパスワード付きで保護をして、別のマクロボタンからパスワードを入力して保護を解除したいのですが、やはり難しいでしょうか?

お礼日時:2016/06/08 17:29

こんにちは!



難しく考えず、「ブック保護」のマクロだけ設定してはダメですか?

解除する場合はメニュー → 校閲 → 「ブックの保護」をクリックすれば
「ブックの保護解除」のパスワードを入力するダイアログボックスが表示されるはずです。m(_ _)m
    • good
    • 0
この回答へのお礼

tom04 さま
ありがとうございます。
ブック保護の解除のマクロボタンを作成したいと思っております。

お礼日時:2016/06/07 17:45

簡単に作ろうとしたら、こう。



Dim pwd As String
pwd = InputBox("パスワードを入力してください。", "ブック保護の解除")
If StrPtr(pwd) = 0 Then Exit Sub
ThisWorkbook.Unprotect Password:=pwd
    • good
    • 0
この回答へのお礼

naktakさま
早速にありがとうございます。
こちらのコードでためしてみたところ、パスワードの入力はできますが、校閲メニューのブックの保護がかかったままになっています。
ブックの保護解除マクロボタンを押した後、校閲メニューのブックの保護をもう一度押さないといけないのですが、この手間を省くことはできますか?
宜しくお願い致します。

お礼日時:2016/06/07 17:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A