アプリ版:「スタンプのみでお礼する」機能のリリースについて

VBAエクセル初心者です。

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

何かよい方法はあるでしょうか・・・?

A 回答 (3件)

無効にしたいsubプロシージャの最初に


application.enableevent = falseを最後に
application.enableevent = trueを入れたらいけませんか?
ちなみにapplication.enableeventがfalseのままだと
イベントが一切反応しなくなります。エラーが起きて
trueにし忘れる事が無い様気をつけてください。
    • good
    • 1
この回答へのお礼

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

お礼日時:2008/01/16 23:27

ごめん、上の間違えました。


Macro1とWorksheet_Changeを入れ替えて?

この回答への補足

extraboldさん、
早々のご返信ありがとうございました。
早速やってみたのですがうまくいきません。。
教えていただいた
Private lingFlag As Long
はどこに記述すればよいでしょう?今はMacro1の直前にしています。

Worksheet_Change内の
If lingFlag=1 Then Exit Sub
ですが、extraboldさんのアドバイスの通り変更したMacro1を実行した際、これを素通りし、今までと同様、次のIF でエラーがでてしまいます。(型が一致しませんとでます。)

なにせ初心者でどう説明してよいかわからないのですが、何か基本的なことが間違っているような気も・・・。

アドバイス頂けるとうれしいです。

補足日時:2008/01/16 23:22
    • good
    • 0
この回答へのお礼

extraboldさん

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

お礼日時:2008/01/16 23:29

やり方は質問者のと違うけど。


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

こんな感じかな。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています