[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『シートの保護及び解除』(超初心者)
ブック内にあるシート全体を保護と解除のマクロを2個作りたいのですが
Sub 全シート保護の設定()
Dim Sh As Worksheet
x = Application.InputBox("パスワードを入力して下さい", Type:=3)
For Each Sh In Worksheets
Sh.Protect (x)
Next Sh
End Sub
Sub 全シート保護の解除()
Dim Sh As Worksheet
On Error GoTo ErLine
Do
x = Application.InputBox("パスワードを入力して下さい", Type:=3)
Loop While x = "False"
For Each Sh In Worksheets
Sh.Unprotect Password:=x
Next
Exit Sub
ErLine:
y% = MsgBox("パスワードが違います ! 終了します", 48)
End Sub
のように教えていただいたのですが
オートフィルター、範囲の選択の機能が使えません
知恵をおかしいただけないでしょうか?
2000にもあるのか解りませんが、2000でも同じだったような気がします。 BJ
2002 ヘルプより EnableAutoFilter プロパティ 関連項目 対象 使用例 アプリケーション情報 画面上での変更のみの保護が設定されているときに、このプロパティが True の場合、 オートフィルタ矢印が使用可能です。値の取得および設定が可能です。ブール型 (Boolean) の値を使用します。
解説 このプロパティは各ワークシートを対象とします。 行った設定はブックを閉じると破棄され、シートや動作環境の設定と共には保存されません。
ActiveSheet.EnableAutoFilter = True ActiveSheet.Protect contents:=True, userInterfaceOnly:=True
どうすればよいのでしょう・・・。
ごめんなさい
>2000にもあるのか解りませんが、2000でも同じだったような気がします。 97でも同じでしたよ^^
97 ヘルプより >次の使用例は、保護されたワークシートのオートフィルタ矢印を使用可能にします。 > >ActiveSheet.EnableAutoFilter = True >ActiveSheet.Protect contents:=True, userInterfaceOnly:=True (dack)
エクセル2003を使用ということなので、 マクロの記録で「シート保護」を記録してみてください。 その際、「このシートで全てのユーザーに許可する操作」のオプションで 「オートフィルタの使用」にチェックして、記録されたコードを参考に マクロを修正すると良いでしょう。 (みやほりん)(-_∂)b
こちらでも質問されていらっしゃいますよ。(たむりん)
はぁ・・・。上記のコードをいじって使用する事は出来ないのでしょうか?
なぜだか、みやほりんさんのおっしゃってる事をやってみたのですが
パスワードの入力を求めるコードがなくて、前はなってたのですが・・・。
ActiveSheet.EnableAutoFilter = True ActiveSheet.Protect contents:=True, userInterfaceOnly:=True 上記のコードはどこに追加すれば良いのですか?
何度も申し訳ありません><
すべての答えは出ていると思いますが、
Sub 全シート保護の設定() Dim Sh As Worksheet x = Application.InputBox("シート保護の設定:パスワードを入力して下さい", Type:=3) For Each Sh In Worksheets ' ↓↓↓↓↓ 変更箇所 ↓↓↓↓↓↓ Sh.EnableAutoFilter = True Sh.Protect Password:=x, contents:=True, userInterfaceOnly:=True ' ↑↑↑↑↑ 変更箇所 ↑↑↑↑↑↑ Next End Sub
Sub 全シート保護の解除() Dim Sh As Worksheet On Error GoTo ErLine Do x = Application.InputBox("シート保護の解除:パスワードを入力して下さい", Type:=3) Loop While x = "False" For Each Sh In Worksheets Sh.Unprotect Password:=x Next Exit Sub ErLine: y% = MsgBox("パスワードが違います ! 終了します", 48) End Sub
ということだと思います。
>このプロパティは各ワークシートを対象とします。 >行った設定はブックを閉じると破棄され、シートや動作環境の設定と共には保存されません。 に対する対応としては、ThisWorkBook に下記のようなモジュールを追加することで、 対応できるかと思います。
Private Sub Workbook_Open() Call 全シート保護の解除 Call 全シート保護の設定 End Sub
パスワードを毎回開くたびに入力するのは、面倒かもしれませんが、 その点に関しては、セキュリティを考えながら改善を検討してください。 (Mook)
上記に変更してやってみたのですがオートフィルターが保護中は
使用できませんでした・・・。
リスト機能を使っていましてその範囲内のみオートフィルターが
さどうしていませんでした><
どうすれば・・・。
シートのプロテクトをかける前に、一度プロテクトをはずす必要があります。 (Mook)
2003だと機能が増えた分、引数を省略すると前回の設定を引き継ぐ可能性が ありそうなので、私の提示した方法は破棄して、プロテクトの部分は (みやほりん)(-_∂)さんの 方法でやったほうがいいかもしれません。 EXL2003触ったこと無いけど。 BJ
いわゆるオートフィルタと、リストのフィルタは似ていますが、別物です。 オートフィルタコマンドで設定解除できるので誤解されているのだと思いますが、 EnableAutoFilterプロパティをTrueにして保護してもリストのフィルタは有効になりま せん。最初にご提示されたコードの Sh.Protect (x) を次のコードに差し替えてみてください。 Sh.Protect Password:=x, Contents:=True, AllowFiltering:=True (みやほりん)(-_∂)b
未確認のまま発言してしまいましたが、 みやほりんさんのおっしゃるとおりですね。 失礼しました。
シートの保護 で出てくるメニューが基本的には、Protect の後ろのオプションで 指定できると考えればよろしいかと思います。
マクロでしかできないこともありますが、 基本的に手動の操作でできることは、 マクロの記録で確認してみることをお勧めします。 (Mook)
出来たのですが・・・一点だけ気になる所がありまして
保護の時にシートのタブを三週位してしまうのです。
特に支障はないのですが><
Sub 全シート保護の設定()
Dim Sh As Worksheet
x = Application.InputBox("パスワードを入力して下さい", Type:=3)
For Each Sh In Worksheets
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _ , AllowFiltering:=True Sheets("三菱").Select ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _ , AllowFiltering:=True Sheets("ダイハツ").Select ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _ , AllowFiltering:=True Sheets("スバル").Select ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _ , AllowFiltering:=True Sheets("マツダ").Select ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _ , AllowFiltering:=True Sheets("ホンダ").Select ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _ , AllowFiltering:=True Sheets("日産").Select ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _ , AllowFiltering:=True Sheets("トヨタ").Select ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _ , AllowFiltering:=True Sheets("オリジナル").Select ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _ , AllowFiltering:=True Sheets("データベース").Select ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _ , AllowFiltering:=True Next Sh End Sub
上記なんですが・・・。
パスワードを入力せずに保護解除できてしまうので・・・。
3周どころでは無いでしょう。
いちいち選択するなら For 文を使用する必要はありません。 パスワードがかからないのは、 Password:=x, を指定しないからです。
Sub 全シート保護の設定() Sheets("トヨタ").Protect Password:=x, DrawingObjects:=True, _ Contents:=True, Scenarios:=True, AllowFiltering:=True : Sheets("オリジナル").Protect Password:=x, DrawingObjects:=True, _ Contents:=True, Scenarios:=True, AllowFiltering:=True Sheets("データベース").Protect Password:=x, DrawingObjects:=True, _ Contents:=True, Scenarios:=True, AllowFiltering:=True End Sub
全シートが対象となるなら、最初の形でいいはずですが・・・。 (Mook)
Dim Sh As Worksheet x = Application.InputBox("シート保護の設定:パスワードを入力して下さい", Type:=3) For Each Sh In Worksheets Sh.EnableAutoFilter = True Sh.Protect Password:=1151, contents:=True, userInterfaceOnly:=True Next End Sub
上記からオートフィルターを設定するコードの追加って分かりますか?
><
Dim Sh As Worksheet For Each Sh In Worksheets Sh.EnableAutoFilter = True Sh.Protect Password:=1151, contents:=True, userInterfaceOnly:=True, Scenarios:=True _ , AllowFiltering:=True Next End Sub
以上のコードで出来ました^^
初心者ながら教えていただき本当にありがとうございます><
Mookさん、みやほりんさん、BJさん、dackさん^^
本当に感謝しております^^
また何かありましたらよろしくお願いします
ゆう
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.