• ベストアンサー

エクセル2000 での保護をVBAで・・・

こんばんわ。エクセル Office2000の保護について教えてください。 シートを非アクティブにしました。 ですが、オートフィルタだけは使えるようにしたいと思っています。 いろいろ試してみたのですが、うまく出来ませんでした・・・ いつもは、ボタンでマクロの実行をしているのですが アクション(たとえば、オートフィルタボタン)でマクロの実行をさせたり、ということが出来れば、スマートなコードが書けると思うのです。 どうか、「アクションで実行」というマクロをご教授いただけないでしょうか?? どうか、よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。 >シートを非アクティブにしました。 非アクティブというのは、シートの保護のことですか? >アクション(たとえば、オートフィルタボタン)でマクロの実行をさせたり、ということが出来れば、スマートなコードが書けると思うのです。 それは、私の頭の中では、こうしてああして、とは浮かぶのですが、意外に難しいかなって思います。ユーザーがワークシート上から、変更が可能な限りにおいて、たぶん、出来るとは思います。裏技のようなものです。ただし、オートフィルタのボタン自身には、"OnAction" は付けられません。 なお、Excel 2000での、シート・ロックのままでオートフィルタを動かす方法は、 こんなコードにします。 ※パスワードは任意 Private Sub Workbook_Open()   With ThisWorkbook.Worksheets("Sheet1")    .EnableAutoFilter = True    .Protect Password:="aaa", UserInterFaceOnly:=True   End With End Sub

hyorono
質問者

お礼

回答ありがとうございます!! お礼が遅くなってごめんなさい・・・ うまく質問を伝えることが出来なくてすみませんでした・・・ 非アクティブは、EnableSelection = xlUnlockedCells の記述で セルの選択も出来ないように、という意味でした。 なぜかというと、そのデータをコピー出来ないようにしたいからです。 私が思っていたよりも、ずっと難しい内容なんですね・・・ ですが、Wendy02さんの回答で試してみたところ、まさに思っていたとおりでした! あとは、コピーをさせないコードを付け足してがんばってみます。 本当にいつも適切な回答をありがとうございます!!

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

私の答えられる範囲外とは思いますが、 質問には3つの事項が出ています。しかし焦点がぼやけている。 (1)>Office2000の保護について (2)>シートを非アクティブにしました (3)>アクション(たとえば、オートフィルタボタン)でマクロの実行をさせたり (1)と(2)はツールー保護ーシートの保護をやったということですか。 シートの保護の「許可する操作」というのがあります。これで対処できないか調べてください。 (3)は、VBAには、文字通り「OnAction」プロパティというのがあります。その他「OnXXX」というプロパティが数個あります。しかしこれらはツールバーやメニューバーの「コントロール」に限り、それもクリックしたときに限り、実行してほしいモジュール(ルーチン)をモジュール名で指定するものです。イベントでも、クリックを認めれば、それだけで用が済むものが多い。 http://www.excel7.com/personal/personal3.htm に有るように、自分独自のメニューを作り、オートフィルタルーチンををVBAで書けば、質問者の要望に近くなるかもしれない。 ただそれ以外の操作を一切させない方法は、現在の私にはわからない。別項で質問してください。 -- コントロール・オブジェクトのイベント こういうAction(といってもマウスでの操作に限られると思うが) 時に、あることをさせるのが、各Object(Sheetやボタンなど)に認められた(エクセルVBAが認めた・用意した)(作りこまれた)「イベント」であり、各Objectに、Clickを初め10個程度が認められている場合が多い。 ー いま、あるObjectにイベントを追加するのは、ウインドウズの「メッセージ」のやり取りの仕組みまで理解できる人が、できるかどうか考えることで、たぶん質問者のレベルでは無理でしょう。 ーー ウインドウズの画面上には色々な「形」が見えているが、全てがObjectではなく、フィルタの▼のようなのは、オブジェクトではないと思う。 だから(オートフィルタボタン).OnActionやオートフィルタボタン).Clickはユーザーが定義できない(制御権を横取りできない) と思う。 オートフィルタのメニューを選ぶと、エクセルの設けた、既定路線に従った処理をしてくれる(もちろん認めた選択は取れる)だけで、突然路線外の処理(表示も)をさせるよう割り込めない。 ーー 本件と離れて、イベントを私製する方法もありそうで(クラス化関連)すが普通レベルの人は、そこまでしない。 経験者は、ここの回答者の常連では数人しかおられないように思う。 ーー 上記で私は背伸びして言っていますから誤り・不正確はあるかもしれませんが、VBAを越えて、APIやC++などのプログラム作成などの世界に踏み込むかどうかですが、質問者には学習に時間がかかり、そもそも良い指導者(教える人)が身近にいないのではと思うので断念しては。 ーー もしこの質問を進めるなら、最後に質問を整理して表現を工夫し、再度上げては。

hyorono
質問者

お礼

うまく質問を伝えることが出来なくてすみませんでした・・・ 非アクティブは、EnableSelection = xlUnlockedCells の記述で セルの選択も出来ないように、という意味でした。 なぜかというと、そのデータをコピー出来ないようにしたいからです。 また次に質問することがあったら、もっとわかりやすく質問を整理します。 ありがとうございました。