如果范围C:\C中有日期,我将使用以下工作表更改将信息从工作表1复制到工作表2。但我想在范围C:C中插入时间戳公式以自动生成日期。我想知道如何修改我的VBA代码,使其能够识别现在处于该范围内的公式?谢谢
Private Sub Worksheet_Change(ByVal Target As Range)
Dim nextRow As Long
If Not Intersect(Target, Range("C:C")) Is Nothing Then
If VBA.IsDate(Target) Then
With Worksheets("Summary")
nextRow = IIf(VBA.IsEmpty(.Range("A1048576").End(xlUp)), 1, .Range("A1048576").End(xlUp).Row + 1)
.Range("A" & nextRow) = Target.Offset(0, -2)
.Range("B" & nextRow) = Target.Offset(0, -1)
.Range("E" & nextRow) = Target
.Range("H" & nextRow) = Target.Offset(0, 5)
End With
End If
End If
End Sub
您所拥有的代码应该按原样工作。IsDate
函数"如果[传入的表达式]为日期数据类型或可以转换为日期,则返回True。"值为日期的Range可以转换为Date,因此应识别其中包含日期返回公式的单元格。(我通过实验验证了这一点。)
唯一需要注意的是,如果你想复制值而不是公式(如果公式依赖于上下文,可能是必不可少的),你应该替换
.Range("E" & nextRow) = Target
带有
.Range("E" & nextRow) = Target.Value
并类似地在任何可能包含您不想复制的公式的Offsets
之后附加.Value
。