• ベストアンサー

VBA マクロを動かさない

(1)ある行のセルを変更したら動くマクロがあります。  Private Sub Worksheet_Change(ByVal Target As Range) (2)ある行のセルに数値を入れるマクロがあります。  Private Sub CommandButton_Click() (2)のマクロが動くと(1)がその後に発動して上書きをしてしまうようです。 これを発動させないようにスキップするにはどうしたらいいのでしょうか?

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

  • ベストアンサー
  • strum_f
  • ベストアンサー率41% (23/55)
回答No.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 と言う感じです。どうでしょうか

mougmoug
質問者

お礼

こんなやり方があるのですね。参考にします!!

その他の回答 (3)

回答No.3

ApplicationオブジェクトのEnableEventsプロパティをFalseに設定すれば、コード中の操作ではイベントが発生しなくなるはずです。 Private Sub CommandButton_Click()の最初でFalseに設定して、最後にTrueに戻せば、うまくいきませんか?

mougmoug
質問者

お礼

遅くなりました。試してみます!

  • kikitaiOK
  • ベストアンサー率55% (10/18)
回答No.2

超適当ですが、似たような処理をしたい時に私は共通変数でスイッチを作ってやってました。 (1)のマクロは(2)の後に必ず実行されるというのを逆に利用して (2)のマクロ内でスイッチをオンにさせ (1)のマクロの一番初めにスイッチがオンの場合にはスイッチをオフにして終了。  スイッチがオフの場合には処理を続行。 こんな感じのコードを書けばいいんじゃないんでしょうか? 具体的には(1)のマクロと(2)のマクロが同じモジュール内にあるとして 共通変数としてPrivate スイッチ as Stringを宣言 (1)のマクロの最初に if スイッチ = "処理しない" then SWT = "処理する" exit sub end if (2)のマクロの最後に SWT = "処理しない" これでたぶんとりあえずは大丈夫かと・・・ 私ちょっとだけVBに足を突っ込んだ程度のヒヨッコなんで、もっとちゃんとした処理があるかもしれません!

mougmoug
質問者

お礼

スイッチがちょっとわかりませんが 他の方が似たような方法を知っていたのでそちらと合わせて考えます!

  • strum_f
  • ベストアンサー率41% (23/55)
回答No.1

すこし姑息な対処療法ですが、 (2)のマクロの先頭でどこか使わないセルに例えば”1”(何でもいい)を代入 →(1)のマクロの先頭でそのセルを見に行く →そのセルが1なら何もせず抜ける →(2)の最後で1を入れたセルをクリアする これで対処は出来るのではないでしょうか

mougmoug
質問者

お礼

了解しました。

関連するQ&A