ノート:私はこれをかなり頻繁にこのリンクに紹介していますので、これをWorksheet_Change
の1つのストップポストにします。時間がたつごとに、新しいコンテンツを追加して人々がそれに利益をもたらすことができるようにしています。
Worksheet_Change
を使用したとき、私はいつもあなたがシート名を必要としない、これをお勧めします。コードが現在のシートで実行されることが理解されていますUNLESS参照として別のシートを使用しようとしています。 "testpage"はActivesheetの名前ですか、それとも別のシートですか?
Worksheet_Change
イベントで作業しているときはいつでも。セルにデータを書き込む場合は、常にOff
イベントを切り替えます。これは、コードが無限ループにならないようにするために必要です。
イベントをオフにするたびにエラー処理を使用します。エラーが発生した場合は、次回は実行されません。
あなたはこのイベントでの作業時に知ってほしいことがあり、この
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Whoa
Application.EnableEvents = False
Range("A1:A8").Formula = "=B1+C1"
Letscontinue:
Application.EnableEvents = True
Exit Sub
Whoa:
MsgBox Err.Description
Resume Letscontinue
End Sub
いくつか他のものを試してみてください。
あなたはTarget.Cells.Count
がどのInteger
値を返すためCountLarge
が以降のExcel 2007で導入された
Private Sub Worksheet_Change(ByVal Target As Range)
'~~> For Excel 2003
If Target.Cells.Count > 1 Then Exit Sub
'
'~~> Rest of code
'
End Sub
小さなチェックを追加し、複数のセルが、その後変更されたときに、コードが実行されないようにしたい場合行/列が増えたためにExcel 2007でエラーが発生しました。 Target.Cells.CountLarge
はLong
の値を返します。Intersect
を使用し、特定の細胞の変化を検出するために、このコード
Private Sub Worksheet_Change(ByVal Target As Range)
Dim aCell As Range
For Each aCell In Target.Cells
With aCell
'~~> Do Something
End With
Next
End Sub
を使用する変更されたすべてのセルで動作するように
Private Sub Worksheet_Change(ByVal Target As Range)
'~~> For Excel 2007
If Target.Cells.CountLarge > 1 Then Exit Sub
'
'~~> Rest of code
'
End Sub
。変化は、細胞A1
に発生した場合、例えば、その後、以下のコードは、再びIntersect
を使用し、範囲の特定のセットの変化を検出する
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1")) Is Nothing Then
MsgBox "Cell A1 was changed"
'~~> Your code here
End If
End Sub
を起動します。変化範囲A1:A10
で起こる場合、例えば、その後、以下のコードは、Excel VBAが機能しないクラッシュし
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:A10")) Is Nothing Then
MsgBox "Cell in A1:A10 range was changed"
'~~> Your code here
End If
End Sub
クラス内のコードは「クラッシュ」しませんが、呼び出し側のコードではクラッシュしません。 「testpage」は存在しますか? –
はい、それはWorksheet_Changeでコードを実行するとエラーが発生したように見えます – derek
式を書き込むときに "testpage"シートの範囲( "A1:A8")がきれいですか?ピボットテーブルなど何もありません。また、興味があるだけに、ワークシート内のすべての変更後に同じ場所に同じ数式を書く必要があるのはなぜですか? –