2013-10-09 3 views
1

У меня есть этот код, который я использую для вызова старых и новых значений. Однако у меня теперь есть проблема, когда пользователь просто выделяет и удаляет его, и он будет запускаться, и заметьте это изменение, однако по какой-то причине он будет запускать несколько экземпляров этого же запроса. Есть ли способ, чтобы он работал только один раз? БлагодаряИзменение старых значений и новых значений

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 
+0

Что вы подразумеваете под «бликами»? что вы подразумеваете под «другими примерами»? Возможно, проблема может быть решена так, как описано в [этом ответе] (http://stackoverflow.com/a/17405206/2143262). –

+0

, если вы нажмете delete на ячейке B5, например, это то, что вы получаете 10/9/2013 9:41:15 AM Лист UCF (2) Cell B5: AE5 имеет новое значение; старое значение было 5 10/9/2013 9:41:15 AM Лист UCF (2) Cell B5: AE5 имеет новое значение; старое значение было 10/9/2013 9:41:15 AM Лист UCF (2) Cell B5: AE5 имеет новое значение; старое значение было 10/9/2013 9:41:15 AM Лист UCF (2) Cell B5: AE5 имеет новое значение; old значение было – imageicb

+0

решение находится в моей ссылке или в ответе ниже ... –

ответ

1

Добавить Application.EnableEvents = False в начале Worksheet_Change события, а затем обратно в Application.EnableEvents = True в конце.

EDIT: Я не могу самостоятельно воссоздать вашу проблему, и поскольку макрос не вносит изменений на одном листе, вышеупомянутое решение не должно иметь значения. Есть ли у вас какие-либо другие события Worksheet_Change на листе «исправлений», где вам нужно отключить такие события, как это возможно?


Application.EnableEvents должны также быть добавлены в другие функции, которые могут afftect любую ячейку листа, который имеет worksheet_change событие.

Например, даже если значение ячейки A1 изменяет событие workheet_change, будет вызываться.

Смежные вопросы