Как установить отметку времени, когда значение ячейки, содержащей формулу, обновляется в первый раз?

У меня есть рабочая тетрадь с тремя листами.

Worksheet1 содержит наборы worksheet2 и worksheet3. Worksheet1 никогда не обновляется вручную, потому что данные/информация обновляются в worksheet2/3 и заполняются в worksheet1 с помощью формулы vlookup в ячейках.

Мне нужна отметка времени всякий раз, когда ячейки в столбце D на листе 1 сначала содержат процент от 1% до 99%.

  • Я хочу, чтобы эта метка времени никогда не менялась после ввода первых данных.
  • Я также хочу, чтобы метка времени отображалась в столбце G.

Мне нужна другая временная метка всякий раз, когда ячейки в столбце D на листе 1 сначала содержат 100%.

  • Я хочу, чтобы эта метка времени никогда не менялась после ввода первых данных.
  • Я также хочу, чтобы метка времени печаталась в столбце H.

Это происходит только тогда, когда ячейки изменяются вручную. Поскольку рабочий лист заполняется формулами, он не улавливает изменения.

Private Sub Worksheet_Change(ByVal Target As Range)

Dim myTableRange As Range
Dim myDateTimeRage As Range
Dim myUpdatedRange As Range

Set myTableRange = Range("D1:D314")

If Intersect(Target, myTableRange) Is Nothing Then Exit Sub

Set myDateTimeRage = Range("N" & Target.Row)
Set myUpdatedRange = Range("O" & Target.Row)

If myDateTimeRage.Value = "" Then
    myDateTimeRage.Value = Now
End If

myUpdatedRange.Value = Now

End Sub

person leslie    schedule 13.12.2019    source источник
comment
Если вы имеете дело с формулами, вам нужно использовать Worksheet_Calculate, а не Worksheet_Change.   -  person BigBen    schedule 13.12.2019
comment
вам придется искать изменения в таблицах 2+3; если они изменятся, посмотрите на рабочий лист 1, если ячейки содержат то, что вы ищете, а затем установите метку времени.   -  person Max    schedule 13.12.2019
comment
если я использую worksheet_calculate, код не работает   -  person leslie    schedule 13.12.2019
comment
Вы пытаетесь поставить временную метку в columns G and H для вашего текста или Columns N and O для вашего кода?   -  person GMalc    schedule 13.12.2019


Ответы (1)


Вот базовый код, который работает с Worksheet_Calculate

Private Sub Worksheet_Calculate()
Dim myTableRange As Range

Set myTableRange = Range("D1:D30") 'Change the range as needed

    For Each cel In myTableRange 
    'when a cell is changed in the range due to a formula, the code loops through and checks all the cells for a change. 

        If cel.Value >= 0.01 And cel.Value <= 0.99 And cel.Offset(, 3).Value = "" And cel.Offset(, 4).Value = "" Then 
       'If the timestamp is not for columns G and H, change the offset(,3) to 10, and offset(,4) to 11

            cel.Offset(, 3).Value = Now

        ElseIf cel.Value = 1# And cel.Offset(, 4).Value = "" Then
        'Test for 100%

            cel.Offset(, 4).Value = Now
        End If

    Next cel
End Sub
person GMalc    schedule 13.12.2019
comment
Этот код работал отлично! Я хочу добавить оператор, который сначала проверяет существующие данные в столбцах G и H. Если там есть существующие даты с предыдущего дня, код был запущен и отметка времени, я не хочу, чтобы этот код выше запускался и переопределял эти существующие даты. Можно ли вложить этот код в другой оператор else if? - person leslie; 05.02.2020