Страницы: 1
RSS
Отслеживание перерасчета в ячейке формулой
 
Добрый вечер. Есть рабочий макрос
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim WorkRng As Range
Dim Rng As Range
Dim xOffsetColumn As Integer
Set WorkRng = Intersect(Application.ActiveSheet.Range("MI2:MI20"), Target)
xOffsetColumn = 1
If Not WorkRng Is Nothing Then
    Application.EnableEvents = False
    For Each Rng In WorkRng
        If Not VBA.IsEmpty(Rng.Value) Then
            Rng.Offset(0, xOffsetColumn).Value = Now
            Rng.Offset(0, xOffsetColumn).NumberFormat = "dd-mm-yyyy, hh:mm:ss"
        Else
            Rng.Offset(0, xOffsetColumn).ClearContents
        End If
    Next
    Application.EnableEvents = True
End If
End Sub

выводящий текущую дату в соседний столбец при изменении значения ячейки пользователем.

Проблема в том, что он не работает, если значение в ячейке изменяется формулой, а не вводится вручную.
Например если в MI2 указать =MH2, то при изменении значения в MH2 дата в MJ2 не напечатается.


Что нужно поправить в макросе, чтобы он работал с отображаемым результатом, а не с вводимым значением?
 
=MH2*СЕГОДНЯ()^0
Регировать не на изменение ячейки, а на пересчет листа (Worksheet_Calculate)

Недостаток: пересчет формулы при любом изменении на листе и, как следствие, пересчет макроса.
 
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rDependents As Range

    On Error Resume Next
    Set rDependents = Target.Dependents
    If Err.Number > 0 Then
        Exit Sub
    End If
    If Not Application.Intersect(rDependents, Range("C1:C10")) Is Nothing Then
        Call abc
    End If
End Sub

Private Sub abc()
    MsgBox """abc()"" is running now"
End Sub
Нашел готовое решение
Изменено: xseed - 11.11.2018 08:17:43
Страницы: 1
Наверх