我正在尝试创建一个函数,该函数将返回指定范围内的单元格最近一次更新的日期(和时间)。
例如,我希望能够像这样键入一个单元格(例如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还是很陌生,我曾尝试将其转换为上述必需的功能,但无法解决该问题。任何人都可以提供的任何帮助将不胜感激。
非常感谢
答案 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
希望这会有所帮助