Subject: sheetを保護してオートフィルター機能を使用 Reply-To: mitsuko@mvh.biglobe.ne.jp ======================================== From: mi E-Mail: mitsuko@mvh.biglobe.ne.jp Date: 2001/04/20(金) 11:18:19 ファイルをグループで使用の為、不要にセルの関数等触られたくないのでsheetに保護をかけ、オートフィルター機能を有効にする方法は無いでしょうか? ======================================== From: ミコ E-Mail: mikomail@mx11.freecom.ne.jp HomePage: http://www.hm2.aitai.ne.jp/~naka95/miko.htm Date: 2001/04/20(金) 15:21:05 miさん、こんにちは。ミコと申します(^^) マクロを使った方法でもよろしいでしょうか? あらかじめオートフィルタを設定しておき、下記のマクロを標準モジュールに貼り付けて ファイルを閉じて、再起動してください。 コードの貼り付け方ですが、  1.シートのタブを右クリック、[コードの表示]、[挿入]、[標準モジュール]  2.出てきた白い所に、コードを貼付けます。  3.右上の × でExcelの画面に戻ります。                 (^-^)/~~ Sub Auto_Open()  Worksheets("Sheet1").EnableAutoFilter = True  Worksheets("Sheet1").Protect UserInterfaceOnly:=True End Sub ======================================== From: Meighth Date: 2001/04/20(金) 17:43:41 mi さん、ミコさん、こんにちは〜 本題とは全然関係無いお話で申し訳ありませんが、、、 > 1.シートのタブを右クリック、[コードの表示]、[挿入]、[標準モジュール] これをやってしまうと、ワークシートのモジュールにもゴミコードが自動的に書きこまれて しまいますよね。もしも「変数の宣言を強制する」設定になっている場合は Option Explicit も書きこまれてしまいます。 これは「マクロを削除したはずなのに、まだマクロがあるって言われる!」というトラブルの 元になりかねません。ので、↓こういうふうにやったほうがよろしいかと思います。 1.Alt+F11 キーを押して Visual Basic Editor (VBE) を表示し、VBE のメニューで  [挿入]−[標準モジュール]を実行。 横から失礼しました〜 m(_ _)m ======================================== From: ミコ E-Mail: mikomail@mx11.freecom.ne.jp HomePage: http://www.hm2.aitai.ne.jp/~naka95/miko.htm Date: 2001/04/20(金) 17:54:47 Meighthさん、こんにちは。 >これは「マクロを削除したはずなのに、まだマクロがあるって言われる!」というトラブルの元になりかねません。 そうだったんですか! 知りませんでした〜 教えてくださって、ありがとうございます。m(_ _)m エーン。。。これ、あちこちに書いちゃってる。。。(T_T) 皆さん、ごめんなさい。。。m(_ _)m ======================================== From: ミコ E-Mail: mikomail@mx11.freecom.ne.jp HomePage: http://www.hm2.aitai.ne.jp/~naka95/miko.htm Date: 2001/04/20(金) 18:02:14 こんにちは。たびたびすみません〜。。。m(_ _)m >Alt+F11 キーを押して Visual Basic Editor (VBE) を表示 これでもやっぱり、「変数の宣言を強制する」設定になっている場合は アクティブなシートのモジュールに Option Explicitが書き込まれてしまうんですが。。。 シートのタブを右クリック、[コードの表示]と同じ状態です。 Meighthさんの環境では、そうではないのでしょうか? ======================================== From: Meighth Date: 2001/04/20(金) 23:31:50 ミコさん、こんばんは〜 お返事遅くなってすみません。 まずは、お詫びです m(_ _)m Option Explicit と マクロ警告の関係について私は勘違いをしてました。どうもすみません。 「変数宣言を強制」設定によってオブジェクトモジュールを開いたときに自動挿入される Option Explicit は保存されないので、自分で手で書かない限りは残ることはないです。 また、Option Explicit, Option Base, Option Compare 等をオブジェクトモジュールに 手で書いたとしても「マクロが含まれている」という警告は出ないんですね。それどころか、 Const や Dim でモジュールレベルの定数・変数が宣言してあっても警告は出ません。 Declare とか Sub とか Function を書いて初めて警告が出るようになります。 ちなみに、標準モジュールは存在しているだけで警告が出ます。逆にユーザーフォームの 場合は何かコードが書き込んであったとしても警告は出ません。(これはマズイんじゃ ないかなーと常々思ってます。。。) 次は、Alt+F11 と [コードを表示]についてです。 Excel97 と Excel2000 で調べてみました。 両者とも Alt+F11 でVBEを表示しただけではモジュールウィンドウは一切開きませんので、 現在アクティブなワークシートのモジュールが表示されるということはありません。よって、 Option Explicit が書き込まれることもありません。 シートタブの[コードを表示]の場合は 97 と 2000 で結果が違いました。 97 の場合:ワークシートのモジュールウィンドウが開き、下のマクロが自動生成されます。 (「変数宣言を強制」設定になっている場合は Option Explicit も書いてあります。) Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) End Sub 2000 の場合:ワークシートのモジュールウィンドウが開きますが、何も書かれてません。 (「変数宣言を強制」設定になっている場合は Option Explicit だけが書いてあります。) 従って、97 の場合に限り、[コードを表示]することによってマクロ警告が出る状態に なりますね。 以上です。 本題とは関係ないことを長々と書いてすみませんでした m(_ _)m ======================================== From: ミコ E-Mail: mikomail@mx11.freecom.ne.jp HomePage: http://www.hm2.aitai.ne.jp/~naka95/miko.htm Date: 2001/04/21(土) 03:39:05 Meighthさん、おはようございます(^^) お返事、ありがとうございますm(_ _)m >従って、97 の場合に限り、[コードを表示]することによってマクロ警告が出る状態になりますね。 そうだったんですね! 私も97で確認した所、Meighthさんのおっしゃるとおりでした。 それでしたら、やはり Alt+F11 で表示するべきですね。 マクロの警告に付いても、大変詳しく調べてくださって、ありがとうございますm(_ _)m そういう事、全く考慮していませんでしたので、気をつけていきたいと思います。     (^-^)/~~ ======================================== From: mi E-Mail: mitsuko@mvh.biglobe.ne.jp Date: 2001/04/21(土) 09:24:11 ミコさんありがとうございます。 で、お願いがあります。 これはsheet1のみ摘要ですよね 実は予定ではsheetは100枚以上いく予定です sheet名も漢字使用です。 その場合はどうなるのでしょうか? またよろしくお願い致しますm(__)m ======================================== From: ミコ E-Mail: mikomail@mx11.freecom.ne.jp HomePage: http://www.hm2.aitai.ne.jp/~naka95/miko.htm Date: 2001/04/21(土) 09:57:44 miさん、こんにちは。ミコです(^^) >予定ではsheetは100枚以上いく予定です  sheet名も漢字使用です。 ファイル内の全てのシートに設定するなら、こうなります。 Sub Auto_Open() Dim Sh As Worksheet For Each Sh In Worksheets Sh.EnableAutoFilter = True Sh.Protect UserInterfaceOnly:=True Next Sh End Sub もし、保護しないシートがあるなら、ファイルを開いてからそのシートだけ保護を解除するか、 シートの名前にNOを振って、NOの付いているシートだけ保護します。以下はその場合コードです。 シート名は、「保護シート1」「保護シート2」……「保護シート100」までの例です(^^) Sub Auto_Open() Dim i As Integer For i = 1 To 100 Worksheets("保護シート" & i).EnableAutoFilter = True Worksheets("保護シート" & i).Protect UserInterfaceOnly:=True Next End Sub 規則性のないシート名のまま、それだけを保護するとなると。。。 最初のコードで、一つづつやるしかないと思います。        (^-^)/~~ ======================================== From: なるほろ Date: 2001/04/21(土) 14:16:20 横から失礼いたします。エクセル97を使ってます。 ミコさんの「シートのタブを右クリック」→「コードの表示」は シートのモジュールを呼び出すときに使えばいいのですね! 標準モジュールに書くときはそれはやめた方が無難なのですね! alt+f11なんて知りませんでした。すごいです! Meighthさんのごせつめいでよ〜くわかりました。 Privateなんたらというのが勝手に出てきて、なんかへんだな〜 と思ってました。 これで納得いたしました! シート保護してもオートフィルタが使えるなんてすごーいですねえ! ほんと勉強になります。 ======================================== From: ケイン Date: 2001/04/21(土) 22:51:42 こんばんは またおせっかいします。 >規則性のないシート名のまま、それだけを保護するとなると。。。 シートを配列に入れてやれば、いいのでは・・? Sub Auto_Open() Dim Sh As Worksheet For Each Sh In <blue>Sheets(Array("Sheet1", "Sheetあ", "SheetZ"))