1

古い値と新しい値を呼び出すために使用しているこのコードがあります。ただし、ユーザーが単純に a を強調表示して削除を押すと実行され、その変更が記録されるという問題が発生していますが、何らかの理由で同じ要求のインスタンスがさらに多く実行されます。一度だけ実行する方法はありますか?ありがとう

Public OldValues As New Collection

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Sheets("Pagination").Range("J11") <> "Yes" Then Exit Sub

    'Copy old values
    Set OldValues = Nothing
    Dim c As Range
    For Each c In Target
        OldValues.Add c.Value, c.Address
    Next c
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)

If Sheets("Pagination").Range("J11") <> "Yes" Then Exit Sub

    On Local Error Resume Next  ' To avoid error if the old value of the cell address you're looking for has not been copied
    Dim c As Range
    For Each c In Target
        Sheets("corrections").Cells(Rows.Count, "A").End(xlUp)(2).Value = Now & " Sheet " & ActiveSheet.Name & " Cell " & Target.Address(0, 0) & " has a new value of " & c.Value & "; old value was " & OldValues(c.Address)
    Next c
    'Copy old values (in case you made any changes in previous lines of code)
    Set OldValues = Nothing
    For Each c In Target
        OldValues.Add c.Value, c.Address
    Next c
End Sub
4

1 に答える 1

1

Application.EnableEvents = Falseイベントの先頭に追加してから、Worksheet_Changeイベントの最後に戻しApplication.EnableEvents = Trueます。

編集:私はあなたの問題を自分で再現することはできません.マクロは同じシートに変更を加えていないため、上記の解決策は違いを生むべきではありません. Worksheet_Changeおそらくこのようなイベントを無効にする必要がある「修正」シートに他のイベントがありますか?


Application.EnableEventsイベントを持つシート内のセルに影響を与える可能性のある他の関数にも追加する必要がありますworksheet_change

たとえば、セル A1 の値が変更された場合でも、worksheet_change イベントが呼び出されます。

于 2013-10-09T12:18:30.430 に答える