• ベストアンサー

worksheet_changeの一時無効化

VBAエクセル初心者です。 セルの値を手入力変更すると赤字で表示されるようWorksheet_Changeメソッドを利用しています。 これをあるマクロ(Subプロシージャ)の実行中だけ無効にすることはできますか? 外部データを参照し列や行を削除や挿入して更新するマクロなのですが列を選択するとこのChangeメソッドにひっかかってしまい、エラーがでてしまいます。 何かよい方法はあるでしょうか・・・?

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

  • ベストアンサー
回答No.3

無効にしたいsubプロシージャの最初に application.enableevent = falseを最後に application.enableevent = trueを入れたらいけませんか? ちなみにapplication.enableeventがfalseのままだと イベントが一切反応しなくなります。エラーが起きて trueにし忘れる事が無い様気をつけてください。

fullbloom
質問者

お礼

できました!! こんなにシンプルにできるんですね・・。 とっても勉強になりました。素晴らしいです! 本当にありがとうございました!

その他の回答 (2)

  • extrabold
  • ベストアンサー率30% (7/23)
回答No.2

ごめん、上の間違えました。 Macro1とWorksheet_Changeを入れ替えて?

fullbloom
質問者

お礼

extraboldさん 同問題、解決しました。アドバイス頂いてありがとうございました。 参考になりました!

fullbloom
質問者

補足

extraboldさん、 早々のご返信ありがとうございました。 早速やってみたのですがうまくいきません。。 教えていただいた Private lingFlag As Long はどこに記述すればよいでしょう?今はMacro1の直前にしています。 Worksheet_Change内の If lingFlag=1 Then Exit Sub ですが、extraboldさんのアドバイスの通り変更したMacro1を実行した際、これを素通りし、今までと同様、次のIF でエラーがでてしまいます。(型が一致しませんとでます。) なにせ初心者でどう説明してよいかわからないのですが、何か基本的なことが間違っているような気も・・・。 アドバイス頂けるとうれしいです。

  • extrabold
  • ベストアンサー率30% (7/23)
回答No.1

やり方は質問者のと違うけど。 Worksheet内に、フラグ変数を作成する。 マクロ実行中はフラグに1を立てる。 イベントの際は、フラグがたってない場合に実行するように変更する。 でいいんじゃないかな。 Private lngFlag as long Sub Macro1() IF lngFlag = 1 Then Exit Sub : End Sub Private Sub Worksheet_Change() lngFlag=1 : lngFlag=0 End Sub こんな感じかな。

関連するQ&A