• ベストアンサー

セレクションマクロでマクロ

A列の4行目を選択した時に Sub マクロオフ() Application.EnableEvents = False End Sub B列の4行目を選択した時に Sub マクロオン() Application.EnableEvents = True End Sub が動作するようにお願いします 以降交互にC列がOFF・D列がON、E列がOFF・F列がON………と最終列までお願いします ※このマクロが実行するのは、すべて4行目だけに限定です

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

  • ベストアンサー
noname#252888
noname#252888
回答No.2

あ。。失礼しました。これで出来ないですね。 私がテストした時は Application.EnableEvents = False / True を 分かりやすくするために、Msgbox "False" 、Msgbox "True"に置き換えていたんです。 Msgboxだと出来るけれどApplication.EnableEventsだとダメですね。 Application.EnableEvents = False は、イベントが発生できなくするコマンドだから 一度Falseになると、クリックしてもこのイベント自体が動かなくなってしまうのです。 解ります? イベント抑止解除はクリックイベントではなくて、自分で作ったボタンを押すことで解除するとかにしなくちゃダメですね。

noname#252486
質問者

補足

そうですか。 ちょっとややこしいですがイベントを抑止することを抑止してしまう感じですか このファイルは横方向にとてもスクロールのスパンが長い(数千列)のでボタンとするとなると絶えず追従して来なければならず、すでにダブルクリックも右クリックもシートモジュールにすでに使用しているので、だとしたらセレクションマクロで4行目のどこの列でも選択したらメッセージBOXが現れてONかOFFの操作を出来るように変更は可能でしょうか 最初の質問の内容の趣旨が変わってしまいすいません でもそこまでするとメニューバー開発→マクロの種類BOXからON・OFFのどちらか選択するのと何ら手間が変わらなくなってしまいますけどちょっと便利になるかもしれません。

すると、全ての回答が全文表示されます。

その他の回答 (4)

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.5

期待されている動作を想像できません。 私のコードの場合、 動作がどのように期待と異なりますか? また、 >奇数列をクリックしたら右クリックマクロが発動され この『右クリックマクロ』が何者なのかを説明してみてください。

すると、全ての回答が全文表示されます。
  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.4

既にコメントされていますように シートのセルをクリックしたとき、 どのような動作をさせたいのかを明らかにしてほしいのです。 直観的には、EnableEvents の設定を行う課題ではないのではと思っています。 単に、 4行目の奇数列のセルが選択された場合は Worksheet_SelectionChangeのイベントのよる処理 (クリックされたときの処理)が空振りし、 それ以外のセルが選択された場合は何らかの処理が行われるようにしたい ということであれば、 EnableEventsをセットするのではなく Worksheet_SelectionChangeの開始直後に抜けてしまえば済みます。 以下、Sampleなコードです。 Private Sub Worksheet_SelectionChange(ByVal Target As Range)  If _   (Target.CountLarge = 1) And _   (Target.Row = 4) And _   (Target.Column Mod 2 = 1) Then   Exit Sub  End If  '~~~  MsgBox "後続の処理をするよ"  '~~~ End Sub それとも、 4行目の偶数列のセルが選択された場合にのみ マクロを実行し それ以外の時は空振りしたいですか? ならば、以下です。 Private Sub Worksheet_SelectionChange(ByVal Target As Range)  If _   (Target.CountLarge <> 1) Or _   (Target.Row <> 4) Or _   (Target.Column Mod 2 = 0) Then   Exit Sub  End If  '~~~  MsgBox "後続の処理をするよ"  '~~~ End Sub もし、話がかみ合っていないようであれば、 シートのセルをクリックしたとき、 どのような動作をさせたいのかを説明してみてください。

noname#252486
質問者

お礼

あっまた間違えました 偶数と奇数列の希望実行処理は反対でお願いします A(奇数)列がマクロ無効(空振り・解放) B(偶数)列がマクロ有効 以下交互に最終列まで繰り返しです

noname#252486
質問者

補足

すいません。 後のマクロが近いです 4行目の偶数列をクリックしたら右クリックマクロを無効にしてください そして4行目の奇数列をクリックしたら右クリックマクロを有効にしてください この右クリックマクロはコピペに関するものです テキストを記憶している情報を瞬間に自動で貼り付けます 奇数列をクリックしたら右クリックマクロが発動され 偶数列をクリックすると通常のエクセルスタイルに戻りメニューの検索一覧BOXが現れます 何だか質問している本人がこんがらがっちゃってどうも申し訳ないです

すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.3

ExcelVbaでeventsを使うのは、経験を積んでからでしょう。 ーー 何がしたいのか、全体がよく判らない。もう少し、処理・目的全般を文章で!説明すること。 初心者のコードが適切かどうかの保証はなく、コードだけでは判らない。 とくにイベントはFalseにする機会を間違えないようにしないと、むちゃくちゃになるが、これが難しい。 普通4行目だけ選択したときにエベントを抑止するなんて、そうそう、やらないことだ。シートのセルではなく、独立したコントロールボタンなど使うのではないかな? シートに異色な機能を盛り込むな。質問者以外が使う場合、解説が必要で、戸惑う。 全体に(初心者だろうが)凝りすぎのように思う。 抑止する処理、Selectionで行う処理は、どういうものか。 シートの SelectionChangeでも使うのかと思うが、 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Row = 4 Then Application.EnableEvents = False '(処理) Application.EnableEvents = True End If End Sub 第4行目のA-B、C-D、E-F・・のペア―でON、Of fを設定するなら Target.Row 列番号が偶数か奇数かの判定をして、TRUE、FALSEを切り替えれば仕舞いでしょう。

すると、全ての回答が全文表示されます。
noname#252888
noname#252888
回答No.1

こんな感じですかね。 'セルクリック時 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.CountLarge = 1 Then '単一セルクリック時 If Target.Row = 4 Then '4行目 If Target.Column Mod 2 Then '列が奇数列 Application.EnableEvents = False Else '列が偶数列 Application.EnableEvents = True End If End If End If End Sub

noname#252486
質問者

補足

すいません やってみたのですがB列(偶数列)の時、マクロONにならないようですがどうでしょうか?

すると、全ての回答が全文表示されます。

関連するQ&A