Как сделать функцию в VBA для отображения даты последнего обновления ячейки в указанном диапазоне? - PullRequest
0 голосов
/ 10 июля 2019

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

Например, я хочу иметь возможность набирать в ячейке (например, A8) что-то вроде:

= ModDate (A1: A7)

и результат для отображения в A8 даты последнего обновления ячейки в указанном диапазоне (A1: A7). Он также должен обновляться при изменении ячейки в этом диапазоне A1: A7.

Пока что я немного покопался на этом сайте и нашел подпрограмму, которая будет делать это, однако, когда она запускается, она не позволяет пользователям листа (другим людям, с которыми я работаю) отменять действия.

Следующий код поместит метку времени, которую я хочу, в столбец 6, когда обновится значение ячейки в столбце слева в той же строке:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rInt As Range
Dim rCell As Range
Dim tCell As Range
Dim tColInt As Integer

tColInt = 6 'Column Index, Example: A=1, B=2, ...... ,Z=26


Set rInt = Intersect(Target, Range("A2:D43415")) 'Change cell range
 If Not rInt Is Nothing Then
    For Each rCell In rInt
        Set tCell = Cells(rCell.Cells.Row, tColInt)
        If IsEmpty(tCell) Or Not IsEmpty(tCell) Then
            tCell = Now
            tCell.NumberFormat = "dd/mm/yyyy h:mm:ss AM/PM" 'Custom Format
        End If
    Next
 End If
End Sub

(это любезно предоставлено Asela Jayathissa в отдельном потоке stackoverflow)

Я довольно новичок в VBA, и я пытался преобразовать это в требуемую функцию, описанную выше, но не могу понять, как это сделать. Буду очень признателен за любую помощь, которую может оказать кто-либо.

Большое спасибо

Ответы [ 2 ]

0 голосов
/ 18 июля 2019

Для всех, кто сталкивался с такой же проблемой, мне удалось найти решение этой проблемы.Следующая функция возвращает отметку времени, которая обновляется при каждом редактировании любой из ячеек в указанном диапазоне функций:

Function ModDate(Reference As Range)
Dim cell As Range


For Each cell In Reference
    If cell.Value <> "" Then
    Timestamp = Format(Now, "dd-mm-yyyy hh:mm:ss")
    Else
    Timestamp = ""
    End If

Next cell

End Function

Для этого необходимо, чтобы значение присутствовало в последней ячейке диапазона.Более простая версия этого (всегда будет отображать дату / время):

Function ModDate(Reference As Range)
Dim cell As Range

For Each cell In Reference

    ModDate = Format(Now, "dd-mm-yyyy hh:mm:ss")

Next cell

End Function

Надеюсь, это поможет

0 голосов
/ 11 июля 2019

Исходя из вашего объяснения, вы можете ввести в A6:

=A6

Поскольку вы уже поместили соответствующее значение в A6 в свою Worksheet_Change процедуру.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...