ブックを保護するマクロと、解除するマクロをそれぞれパスワード付きで作り、ボタンに設定しました。
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
エクセルVBA InputBoxで入力欄を*****
Excel(エクセル)
-
Excel VBA で、マクロを実行するためのパスワード設定方法
Excel(エクセル)
-
EXCELで複数のシートを一度に「シートの保護」することはできますか?
Excel(エクセル)
-
-
4
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
5
Excelマクロ パスワードを入力して、全シート一括保護解除したい。
その他(Microsoft Office)
-
6
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
7
Excel VBAでマウスの左クリックのイベントを検知するには
Visual Basic(VBA)
-
8
Excelでのセル内容の高速消去方法
その他(プログラミング・Web制作)
-
9
エクセルマクロでシート名を条件にする方法
Excel(エクセル)
-
10
マクロ 自動でパスワード及び指定のセル内文字列をパスにする方法を教えてください
Excel(エクセル)
-
11
数式による空白を無視して最終行を取得するマクロ
Excel(エクセル)
-
12
【VBA】シート名に特定文字が入っていたらマクロを実行したいです。
Visual Basic(VBA)
-
13
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAで保存しないで閉じると空の...
-
【Excel VBA】マクロでExcel自...
-
エクセル関数>参照ファイル名...
-
マクロの保存先、開いてるすべ...
-
EXCELマクロで、開いてはいるが...
-
EXcelのマクロで相対パスでファ...
-
エクセルのvbaにて thisworkboo...
-
エクセルデータを別のエクセル...
-
ファイルごとにセルの移動方向...
-
複数のExcelブックから特定シー...
-
EXCELのボタンによるマクロの登...
-
エクセルで未保存に対するメッ...
-
[フィルターオプションの設定]...
-
【Excel】特定セルの内容をテキ...
-
excelで直前に参照していたブッ...
-
エクセル;相対パスを絶対パスへ...
-
【Excel】マクロの保存先について
-
エクセルVBA 個人用マクロブッ...
-
エクセルでマクロを組んでいな...
-
excel VBA シート保存について...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAで保存しないで閉じると空の...
-
エクセル関数>参照ファイル名...
-
【Excel VBA】マクロでExcel自...
-
マクロの保存先、開いてるすべ...
-
【Excel】マクロの保存先について
-
エクセル;相対パスを絶対パスへ...
-
EXcelのマクロで相対パスでファ...
-
[フィルターオプションの設定]...
-
excelで直前に参照していたブッ...
-
複数のExcelファイルの印刷設定...
-
エクセルのvbaにて thisworkboo...
-
EXCELのボタンによるマクロの登...
-
名前の変わるブックをアクティ...
-
エクセルVBAで作成した別ブック...
-
エクセルで使用期限付きのブッ...
-
【Excel】特定セルの内容をテキ...
-
エクセルで未保存に対するメッ...
-
EXCELマクロで、開いてはいるが...
-
複数のbookから特定のセル(行...
-
エクセルVBA 個人用マクロブッ...
おすすめ情報