• ベストアンサー

エクセルVBA/シートのチェンジイベントを発生させない方法?

Private Sub Worksheet_Change(ByVal Target As Range) MsgBox "イベント発生" End Sub このワークシートがアクティヴになってるときに手入力された場合以外、チェンジイベントを発生させなくするにはどのような方法があるでしょうか? 標準モジュール記載の他のマクロでセルが変更された場合を無視したいのです。 よろしくお願いします。

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

  • ベストアンサー
  • masa_019
  • ベストアンサー率61% (121/197)
回答No.2

>このシートがActiveじゃなかったらExit Subする If ActiveSheet.Name <> Me.Name Then Exit Sub こういう事でよいのでしょうか?

merlionXX
質問者

お礼

はい、これが知りたかったのです。 ありがとうございました。

その他の回答 (2)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.3

こんな書き方もあります。 If Not ActiveSheet Is Me Then Exit Sub

merlionXX
質問者

お礼

ありがとうございます。 勉強になりました。

  • masa_019
  • ベストアンサー率61% (121/197)
回答No.1

標準モジュール記載の他のマクロの先頭に、 Application.EnableEvents = False とするとイベント発生を無効に出来ます。 End Sub の前に Application.EnableEvents = True で元に戻します。

merlionXX
質問者

お礼

早速ありがとうございます。 標準モジュールがわではなく、 Private Sub Worksheet_Change(ByVal Target As Range) MsgBox "イベント発生" End Sub 側に書き入れて無効にする方法はないでしょうか? 例えば、このシートがActiveじゃなかったらExit Subするとかの方法です。 (Activeであれば他のマクロからの変更でもイベントを発生させます)

関連するQ&A

  • エクセルで、ワークシートチェンジのイベントを停止できますか。

    このようなマクロを作っています。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$C$2" Then Exit Sub Range("B2").Copy Range("C2").Select ActiveSheet.Paste End Sub しかし、このままだとループしてしまいます。 それで、B1:B2をコピーしてC1:C2に貼り付けています。   マクロの中で、ワークとチェンジのイベントを停止したり、開始できれば良いなと思っています。こんなこと、できますか。教えてください。

  • エクセル デバッグできるのとできないのがある

    シートイベントについて教えてください。 シートモジュールに --------------------------------------------------------- Option Explicit Private Sub Worksheet_Activate() MsgBox "" End Sub Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) MsgBox "" End Sub Private Sub Worksheet_Change(ByVal Target As Range) MsgBox "" End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) MsgBox "" End Sub --------------------------------------------------------- と記載した時に、 F8で動かせるのは、Worksheet_Activateだけなのですがなぜでしょうか? ほかのイベントは、F8で実行させても、OSの音が鳴るだけで、マクロの実行はされません。 ご回答よろしくお願いします。

  • Excel VBA イベントプロシージャを2つ記述する(基本です)

    基本的な事なのですが、Excelのイベントプロシージャで2つプログラムを作るにはどうやって記述すればよいのでしょうか? 具体的には、worksheetのchangeイベントで、セルC5の値を変えた時と、セルG7の値を変えた時の2通りのマクロを作成したいのです。 Private Sub Worksheet_Change(ByVal Target As Range) C5を変えた時の処理 End Sub Private Sub Worksheet_Change(ByVal Target As Range) G7を変えた時の処理 End Sub このように書けばよいのでしょうか?そうするとTargetがかぶっておかしくなる気がします。。 お願いします。

  • エクセルVBAのイベントについて教えてください。

    エクセルVBA初学者のです。 "C9"にいれるとchangeイベントが発生するコードなんですが、 "C9"のほかに"D1"においてもchangeイベントを発生させたいのですが 下記のコードに続けて書いてもイベントが発生しないのですが どのように書けばよいのでしょうか? private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("C9")) Is Nothing Then Exit Sub Range("H14:H56").Interior.ColorIndex = 2 If Intersect(Target, Range("D1")) Is Nothing Then Exit Sub Range("G14:G56").Interior.ColorIndex = 2 End Sub よろしくお願いします。

  • VBA:Callステートメントでいつでもイベント発生可能な準備をしたい。

    タイトルどおり、Callステートメントでいつでもイベント発生可能な準備ができるようにしたいと考えています。しかし、Sub 実行準備SUBでエラーが出ています。どこをどう直せばよいのか教えて頂きたいです。 Private Sub Auto_Open() MsgBox "Ctrl + t でイベント実行準備を行います。" Application.OnKey "^{t}", "実行準備SUB" End Sub '--------------------------------------------------- Sub 実行準備SUB() Dim Target As Range Target = Range(Cells(1, 1), Cells(100, 100)) Call Worksheet_Change(ByVal Target) End Sub '--------------------------------------------------- Private Sub Worksheet_Change(ByVal Target As Excel.Range) Dim r As Range For Each r In Target If r.Column = 2 Then r.Offset(0, -1).Value = Now End If Next r End Sub イベントは、シートの2列目のセルに変更があれば、1列目に日付時刻を記入するというものです。宜しくお願い致します。

  • エクセル: Changeイベントが発生しないのはなぜ?

    エクセルでChangeイベントが発生しないので以下の方法で確認してみました。 やはり駄目でした。 なぜでしょうか。 条件:Excel2000 セル"A1" に楽天証券から株価データをRSSでもらっています。 書いたコード Private Sub Worksheet(ByVal Target As Range) If Target.Address <> "" Then MsgBox "イベント確認" End if End Sub これで駄目なのでセルにをいじるとイベントは発生しているようです。 Intersectプロシージャも試しましたが駄目でした。 Case文で拾うことも試しましたが駄目でした。 RSSで信号を受けた場合イベントは発生しないものでしょうか? よろしくお願いいたします。

  • エクセル: Changeイベントが発生しないのはなぜ?

    エクセルでChangeイベントが発生しないので以下の方法で確認してみました。 やはり駄目でした。 なぜでしょうか。 条件:Excel2000 エクセルのセル に楽天証券から株価データをRSSでもらっています。 書いたコード Private Sub Worksheet(ByVal Target As Range) If Target.Address <> "" Then MsgBox "イベント確認" End if End Sub これで駄目なのですがセルをいじるとイベントは発生しているようです。 Intersectプロシージャも試しましたが駄目でした。 Case文で拾うことも試しましたが駄目でした。 RSSで信号を受けた場合イベントは発生しないものでしょうか? よろしくお願いいたします。

  • エクセル イベントマクロ Changeイベントを複数作りたい

    Private Sub Worksheet_Change(ByVal Target As Range)   If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub 以下マクロの内容 End Sub これでセルA1が変わるとイベントマクロが発生しますが セルB1が変わると別のマクロが発生し セルC1が変わるとまた別のマクロが発生し…とするには どうすればよいのですか 単純に並べて書いたらだめみたいだったんですけど

  • エクセルマクロ(VBA)で指定したセルが変化したときに実行するには?

    VBAでsheetの中のworksheet_changeなどでマクロを書くと、そのシー トの中のどのセルを変化させてもマクロが実行されるのですが、これ を、A1とc1とc2が変化したときだけ処理を実行させたいのです。 以下のマクロのどこかを編集すると、そのようなことが出来るのでし ょうか? Private Sub Worksheet_SelectionChange(ByVal Target As Range) ----実行する内容---- End Sub Private Sub Worksheet_Change(ByVal Target As Range) ----実行する内容---- End Sub

  • エクセルVBAで Cancel=Trueの使い方

    Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$A$1" Then Exit Sub Cancel = True MsgBox "キャンセルしました" End Sub Private Sub Worksheet_Deactivate() Cancel = True MsgBox "キャンセルしました" End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) Cancel = True MsgBox "キャンセルしました" End Sub 以上のように使ってみましたが、どれも「キャンセルしました」とメッセージは出るものの、直前の操作(入力、シート切替、セル移動)はキャンセルされませんでした。 どこが間違っているのでしょうか?

専門家に質問してみよう