- ベストアンサー
VBA マクロを動かさない
(1)ある行のセルを変更したら動くマクロがあります。 Private Sub Worksheet_Change(ByVal Target As Range) (2)ある行のセルに数値を入れるマクロがあります。 Private Sub CommandButton_Click() (2)のマクロが動くと(1)がその後に発動して上書きをしてしまうようです。 これを発動させないようにスキップするにはどうしたらいいのでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
No.1のものです。 間違いがあったので修正を。 フラグ(代わりに1を入れたセル)のクリアは(1)のマクロの最後でやら無いとダメですね。 すみません。 つまり、(1)を Private Sub Worksheet_Change(ByVal Target As Range) if (邪魔にならないセル)<>1 今までの(1)の処理 else (邪魔にならないセル)="" end if End Sub (2)を Private Sub CommandButton_Click() (邪魔にならないセル)=1 今までの(2)の処理 End Sub と言う感じです。どうでしょうか
その他の回答 (3)
- m-take0220
- ベストアンサー率60% (477/782)
ApplicationオブジェクトのEnableEventsプロパティをFalseに設定すれば、コード中の操作ではイベントが発生しなくなるはずです。 Private Sub CommandButton_Click()の最初でFalseに設定して、最後にTrueに戻せば、うまくいきませんか?
お礼
遅くなりました。試してみます!
- kikitaiOK
- ベストアンサー率55% (10/18)
超適当ですが、似たような処理をしたい時に私は共通変数でスイッチを作ってやってました。 (1)のマクロは(2)の後に必ず実行されるというのを逆に利用して (2)のマクロ内でスイッチをオンにさせ (1)のマクロの一番初めにスイッチがオンの場合にはスイッチをオフにして終了。 スイッチがオフの場合には処理を続行。 こんな感じのコードを書けばいいんじゃないんでしょうか? 具体的には(1)のマクロと(2)のマクロが同じモジュール内にあるとして 共通変数としてPrivate スイッチ as Stringを宣言 (1)のマクロの最初に if スイッチ = "処理しない" then SWT = "処理する" exit sub end if (2)のマクロの最後に SWT = "処理しない" これでたぶんとりあえずは大丈夫かと・・・ 私ちょっとだけVBに足を突っ込んだ程度のヒヨッコなんで、もっとちゃんとした処理があるかもしれません!
お礼
スイッチがちょっとわかりませんが 他の方が似たような方法を知っていたのでそちらと合わせて考えます!
- strum_f
- ベストアンサー率41% (23/55)
すこし姑息な対処療法ですが、 (2)のマクロの先頭でどこか使わないセルに例えば”1”(何でもいい)を代入 →(1)のマクロの先頭でそのセルを見に行く →そのセルが1なら何もせず抜ける →(2)の最後で1を入れたセルをクリアする これで対処は出来るのではないでしょうか
お礼
了解しました。
お礼
こんなやり方があるのですね。参考にします!!