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

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

A 回答 (4件)

merlionXX さん、こんにちは。



Wendy02です。

>ところでサンプルコードでUnprotectする直前にもProtectをしているのは何故ですか?

それ自体は、あくまでも、Protect をして、Unprotect をするというのは、サンプルで作ったままでコードをアップしただけです。

ただし、理由は、以下のような流れからです。

今回は、関係ないかもしれませんが、xlSheetVeryHidden を使う場合に、前回、考えたのは以下のような手順です。

開いた時に、一旦、 Window プロテクトを解除して
シートの Visible = xlSheetVeryHidden
Window プロテクトにしてから、そのブックを保存して、

それから、次に、もう一度、Window プロテクトを解除して、
 シートをVisible = xlSheetVisible
Window プロテクトをします。

ブックを閉じるときは、 Saved =True にさせてマクロ以外からは、保存させないようにします。ですから、BeforeSave イベントをCancel =True を置いておきます。

開いたままの状態では、保存をさせないのです。

Sheet のプロテクトの時に、
Application.EnableSelection = xlUnlockedCells

を使うわけですが、
画面キャプチャーやスナップショットなどで画面を取られないように、Win32 API の RegisterHotKeyで、フックさせないようにさせます。Excelでプロテクトを期待してもしょうがない、という人もいますが、ある程度のことは可能です。

もう、デジタルカメラをPC外で使われればしょうがないですが(^^;
    • good
    • 0
この回答へのお礼

ご丁寧にありがとうございました。
ActiveSheet.EnableSelection = xlUnlockedCellsはわたしもよく使いますが、「BeforeSave イベントをCancel =True 」これは勉強になりました。有難うございます!

お礼日時:2006/03/10 11:32

こんにちは。

Wendy02です。

>ただブック保護するのではなく手動での変更は×だけどVBAでの変更は○としたいんです。

それを、どのレベルまで求めるかだと思います。私が、以下の方法を使うのは、例えば、シートの非表示と表示をマクロで行うような場合になりますね。今のところ、この方法しか思いつきません。一般の人には、この方法で有効だと思います。

最初に BeforeClose の時に、Sheet をxlVeryHidden にしておくようにして、以下の方法で、Visible にします。

'-------------------------------------------
Sub MacroProtectTest1()
Application.ScreenUpdating = False
Application.Interactive = False
Const MYPASSWORD = "merlion"
With ActiveWorkbook
 .Protect Password:=MYPASSWORD, Structure:=True, Windows:=True
 .Unprotect MYPASSWORD
 .Sheets(3).Visible = xlSheetVisible
 .Protect Password:=MYPASSWORD, Structure:=True, Windows:=True
End With
Application.Interactive = True
Application.ScreenUpdating = True
End Sub

'-------------------------------------------
本来はなくてもよいのですが、万が一を考えて、Application.Interactive =False で、マクロが動いている最中に、止めることは不可能ですから、そこで、割り込みは利きませんね。
    • good
    • 0
この回答へのお礼

Wendy02さん、いつもお世話様です。
やはり一旦Unprotectしなきゃいけないんですね。
そこで強制的にマクロを止められたり何らかの事情で止ることを怖れての質問だったのですがApplication.Interactive =False という新しい「呪文」で解決しました。ありがとうございました。

ところでサンプルコードでUnprotectする直前にもProtectをしているのは何故ですか?

お礼日時:2006/03/09 16:14

No.1です



何か質問内容を勘違いしているようです。

先程の回答は忘れてください
    • good
    • 0
この回答へのお礼

はい、有難うございます。わたしもよく勘違いしちゃいます。

お礼日時:2006/03/10 11:34

あまり自信ではありませんが・・・



マクロの自動記録をしてみました

ActiveWorkbook.Protect Structure:=True, Windows:=False
    • good
    • 0
この回答へのお礼

さっそく有難うございます。
ActiveWorkbook.Protect Structure:=True, Windows:=Falseってただのブック保護ですよね。
ただブック保護するのではなく手動での変更は×だけどVBAでの変更は○としたいんです。シート保護ならUserInterfaceOnly:=Trueでそう出来るのですが・・・。

お礼日時:2006/03/09 15:11

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