
ブックを保護するマクロと、解除するマクロをそれぞれパスワード付きで作り、ボタンに設定しました。
Sub ブック保護()
ThisWorkbook.Protect Password:="1234"
End Sub
Sub ブック保護解除()
ThisWorkbook.Unprotect Password:="1234"
End Sub
保護する際は良いのですが、解除する際にパスワードの入力を求められません。
これだと、パスワードを知らない人でも保護が解除でき、パスワードを設定した意味がなくなってしまいます。
ブック保護解除ボタンを押すと、パスワードの入力を求められるようにするにはどうしたらよいでしょうか。
ご教授お願い致します。
No.5ベストアンサー
- 回答日時:
こんにちは。
Sheet上またはUSER Form上にText Boxを配置して、パスワードを入力させる
Text Box はプロパティにPasswordChar というのがあるのでこれを * にする。
USER Formが苦手な場合はInputBoxでもできるようですが、
”InputBox Daniel Klann Password" で検索するとたくさん引っかかってきたのでご参考まで。
隠す必要がないのであればInputBoxで十分ですね。
ThisWorkbook.Protect Password:=InputBox("Password?")
すみません、動作確認まではしてません。
nokonoko524さま
どうもありがとうございます!
検証、お礼が遅くなり申し訳ございません。
ThisWorkbook.Protect Password:=InputBox("Password?")
このコードでうまく動きました!
本当にどうもありがとうございます!!
No.6
- 回答日時:
こんにちは。
長文で失礼します。
私は頭が悪いのか、どうしても、ここの質問やスレの内容が理解できないのです。
私の疑問は、
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 …
と、私が、ここの質問を読んで思ったことです。見当はずれな回答だと思いましたら、特にフィードバックは不要です。
WindFallerさま
お礼が遅くなり申し訳ございません。
今回は、WindFallerさまにご提案いただいたコードを試す前に解決してしまいました。
ですが、お忙しいところお時間を割いていただいて、コードと詳細な説明をどうもありがとうございました。
No.4
- 回答日時:
No.2・3です。
>マクロボタンからブックを保護したときに、設定したパスワードの入力をするダイアログボックスが表示されませんでした。
当方使用のExcel2010で確認してみました。
お示しのコード
>ThisWorkbook.Protect Password:="1234"
をコマンドボタンに記載し、コマンドボタンで「ブック保護」した後に前回のコードで実行すると
パスワード入力画面がちゃんと表示されました。
(ブック保護ボタンの後でも同様に表示されました。)
なので原因はこちらでは判りかねます。
ただ、前回のコードでは「ブック保護」をしていない状態でも反応してしまいますので
ちょっとコードを変更してみます。
If ThisWorkbook.ProtectStructure Then
Application.Dialogs(xlDialogWorkbookProtect).Show
End If
これで「ブック保護」の状態のみ反応すると思います。m(_ _)m
tom04さま
お礼が遅くなり申し訳ございません。
tom04さまが新たにご提案くださったコードを解除用に、
nokonoko524さまがご提案くださったコードを保護用に設定することで、
完璧に動作するようになりました。
本当にどうもありがとうございました!!!
No.3
- 回答日時:
No.2です。
>ブック保護の解除のマクロボタンを作成したいと思っております。
というコトですので、「ブック保護解除」のコードを↓にしてみてください。
Sub ブック保護解除()
Application.Dialogs(xlDialogWorkbookProtect).Show
End Sub
こんな感じではどうでしょうか?m(_ _)m
tom04 さま
ありがとうございます。
このマクロを試したところ、校閲メニューからブックを保護した時はダイアログボックスは表示されましたが、マクロボタンからブックを保護したときに、設定したパスワードの入力をするダイアログボックスが表示されませんでした。
マクロボタンからパスワード付きで保護をして、別のマクロボタンからパスワードを入力して保護を解除したいのですが、やはり難しいでしょうか?
No.1
- 回答日時:
簡単に作ろうとしたら、こう。
Dim pwd As String
pwd = InputBox("パスワードを入力してください。", "ブック保護の解除")
If StrPtr(pwd) = 0 Then Exit Sub
ThisWorkbook.Unprotect Password:=pwd
naktakさま
早速にありがとうございます。
こちらのコードでためしてみたところ、パスワードの入力はできますが、校閲メニューのブックの保護がかかったままになっています。
ブックの保護解除マクロボタンを押した後、校閲メニューのブックの保護をもう一度押さないといけないのですが、この手間を省くことはできますか?
宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/10 14:24
- Excel(エクセル) Excelのマクロコードについて教えてください。 1 2022/03/27 10:47
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/10 11:34
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/08 15:45
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/03/01 15:44
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/10/13 08:41
- Visual Basic(VBA) エクセルのマクロについて教えてください。 5 2023/06/02 08:44
- Excel(エクセル) エクセルVBA Workbooks.Addで作成されたブックのシート保護の解除について 1 2023/02/23 08:02
- Visual Basic(VBA) VBA Userform転記のみ編集可 1 2023/06/29 11:03
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
このQ&Aを見た人はこんなQ&Aも見ています
-
Excel VBA で、マクロを実行するためのパスワード設定方法
Excel(エクセル)
-
エクセルVBA InputBoxで入力欄を*****
Excel(エクセル)
-
エクセルVBA ブックを閉じる前に確認メッセージを表示したい
Excel(エクセル)
-
-
4
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
5
EXCELで複数のシートを一度に「シートの保護」することはできますか?
Excel(エクセル)
-
6
VBAでブック保護非保護を判定するには?
Excel(エクセル)
-
7
VBAでEmpty値って何ですか?
Excel(エクセル)
-
8
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
9
マクロ 自動でパスワード及び指定のセル内文字列をパスにする方法を教えてください
Excel(エクセル)
-
10
Excelマクロ パスワードを入力して、全シート一括保護解除したい。
その他(Microsoft Office)
-
11
エクセルの複数シートの保護を一括でする方法を教えてください(編集したいセルあり)
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAで保存しないで閉じると空の...
-
エクセル関数>参照ファイル名...
-
マクロの保存先、開いてるすべ...
-
【Excel VBA】マクロでExcel自...
-
エクセルのvbaにて thisworkboo...
-
複数のExcelファイルの印刷設定...
-
[フィルターオプションの設定]...
-
エクセルで未保存に対するメッ...
-
個人用マクロブックが消えました
-
エクセルで作成した名簿の中か...
-
エクセル 半角カナを全角に、...
-
Excel VBAで他のブックを選択...
-
マクロ 自動でパスワード及び指...
-
エクセルを開いて文字を打つ際...
-
エクセル;相対パスを絶対パスへ...
-
Mac版 マクロの完全削除方法
-
複数のbookから特定のセル(行...
-
EXCELのボタンによるマクロの登...
-
Excelの列番号表示について
-
ブックを開いたとき自動的にバ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAで保存しないで閉じると空の...
-
エクセル関数>参照ファイル名...
-
【Excel VBA】マクロでExcel自...
-
エクセルのvbaにて thisworkboo...
-
マクロの保存先、開いてるすべ...
-
エクセル;相対パスを絶対パスへ...
-
【Excel】マクロの保存先について
-
EXcelのマクロで相対パスでファ...
-
複数のExcelファイルの印刷設定...
-
excelで直前に参照していたブッ...
-
EXCELマクロで、開いてはいるが...
-
[フィルターオプションの設定]...
-
EXCELのボタンによるマクロの登...
-
EXCELブックが勝手に開いて困っ...
-
エクセルで使用期限付きのブッ...
-
エクセルを開いて文字を打つ際...
-
エクセルで未保存に対するメッ...
-
エクセルVBA 個人用マクロブッ...
-
【マクロ】マクロが保存されて...
-
エクセルで複数ファイルのセル...
おすすめ情報