[[20061115111828]] 『シートの保護及び解除』(超初心者) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『シートの保護及び解除』(超初心者)
OS・XP エクセル2003

ブック内にあるシート全体を保護と解除のマクロを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

[[20061115115337]]
 こちらでも質問されていらっしゃいますよ。(たむりん)

やってみたのですが・・・。

はぁ・・・。上記のコードをいじって使用する事は出来ないのでしょうか?

なぜだか、みやほりんさんのおっしゃってる事をやってみたのですが

パスワードの入力を求めるコードがなくて、前はなってたのですが・・・。


 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さん、大変分かり易い回答ありがとうございます。

上記に変更してやってみたのですがオートフィルターが保護中は

使用できませんでした・・・。


すみません><

リスト機能を使っていましてその範囲内のみオートフィルターが

さどうしていませんでした><

どうすれば・・・。


 シートのプロテクトをかける前に、一度プロテクトをはずす必要があります。
(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)


Sub 全シート保護の設定()
    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

上記からオートフィルターを設定するコードの追加って分かりますか?

><


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.