私はExcel-VBA初心者です。ワークシート内のセルの値を変更した人がトリガーする短いコードを書き込もうとしています。 変更されたセルの値を0より小さい値に設定する必要があります。コードは次のようになります。今Worksheet_Changeイベントの対象範囲が正しくありません
Private Sub Worksheet_Change(ByVal Target As Range)
'Debug.Print Target.Address
If Target.Column = 6 Then
For Each Cell In Target.SpecialCells(xlCellTypeConstants, 3)
If Cell.Value < 0 Then
Cell.Value = 0
End If
Next
End If
End Sub
何が起こるかは、私が6列の任意のセルの値を変更すると、ゼロ未満の数値を含むシート内のすべてのセルがもがゼロに変更されたことです。
Worksheet_Change
イベントハンドラ用に作成された「ターゲット」オブジェクトには、変更されたセル/セルのみが含まれていると考えられていたため、変更されたセルの値が変更されました。最初の場所。
私は出力にオブジェクトのアドレスをDebug.Print
を使用して自分を助けようとしました。これはシート内のすべてのセルのアドレスを0より小さい値で表示していたので、ハンドラが何度か実行されたと仮定します。
私は実際には問題自体の回避策が見つかりましたが、私の質問は、これらのは次のとおりです:どのように私はWorksheet_Changeイベントを使用して失敗したと私はそのような問題を持っていないし、将来的に何ができるのでしょうか?
application.enableevents = falseを使用するか、イベントプロシージャがそれ自身の上で実行されます。 – Jeeped
'Target'は変更されたセルにのみ関連しています。あなたのエラーを複製することはできません。 Jeepedの修正案を試して、どのように乗り越えるかを見てください。 – SJR
それ以降に 'Application.EnableEvents = True'に戻すことを忘れないでください。そうでなければ、あなたのイベントは次回には起動しません。 – Tom