如何在VBA中创建函数以显示指定范围内的单元格的最后更新日期?

时间:2019-07-10 14:35:56

标签: excel vba

我正在尝试创建一个函数,该函数将返回指定范围内的单元格最近一次更新的日期(和时间)。

例如,我希望能够像这样键入一个单元格(例如A8):

= ModDate(A1:A7)

,并显示结果在A8中显示单元格在指定范围(A1:A7)中最近更新的日期。当更改范围A1:A7中的单元格时,还需要更新。

到目前为止,我已经在此站点上进行了一些挖掘,发现可以执行此操作的Sub,但是,每当运行此Sub时,它都不允许撤消工作表的用户(与我一起工作的其他人)。

以下代码将更新同一行左侧一列中的单元格值时,将我需要的时间戳记放在第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 :(得分:0)

根据您的解释,您可以输入A6:

=A6

因为您已经在Worksheet_Change例程中将相关值放在 A6 中。

答案 1 :(得分:0)

对于其他遇到相同问题的人,我设法找到了解决此问题的方法。以下函数返回一个时间戳,该时间戳在指定函数范围内的任何单元格的每次编辑时更新:

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

希望这会有所帮助