私はVBAを使用してExcelを変更し、Sheet1内に次の単純なイベントハンドラーを持っています。
Private Sub Worksheet_Change(ByVal Target As Range)
MsgBox "HI"
End Sub
しかし、これは決して発火しません。イミディエイトウィンドウでテストしました。
?Application.EnableEvents
最終的にTrueを返すので、起動するはずです。なぜこれがまったく発砲したくないのか誰かが知っていますか?
複数のシートをお持ちですか?シートの CodeName プロパティと Name プロパティ (Excel のタブ上の名前) は必ずしも同じではないことに注意してください。たとえば、Project Explorer に
Sheet2 (Sheet1)
次に、Sheet1 が Name で、Sheet2 が CodeName です。
コードを間違ったモジュールに配置したかどうかを確認する最も簡単な方法は、シートのタブを右クリックして [コードの表示] を選択することです。これにより、そのシートの CodePane が表示され、そこにコードが配置されます。
この質問はずっと前に投稿されましたが、最近同じ問題が発生しました。これに苦労している VBA 初心者が他にいる場合は、ワークブックを保存して再度開いてみてください。それを行った後、期待どおりにシートの Worksheet_Change Sub が起動しました。
おそらく、私が見逃していたワークシートのサブをコンパイルするためのコントロールがありますか???
通常は と一緒に使用しTargetます。M4 を強調表示して値を変更した場合の例を次に示します。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$M$4" Then
MsgBox ("HI")
End If
End Sub
HEREは、このイベントに関する非常に素晴らしい投稿です
その投稿からコードを適応させると、次のようなことができます
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Me.Range("$A$1:$V$100")) Is Nothing Then Exit Sub
If Target.Address = "$A$1" Then
MsgBox ("A1")
ElseIf Target.Address = "$A$2" Then
MsgBox ("A2")
End If
End Sub
わかりました-以下のコメントを参照してください+テストしたところ、コードは実際に機能するはずです。これを試して?これもうまくいきませんか?
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Me.Cells) Then
MsgBox ("A1")
End If
End Sub