识别目标范围内的公式的工作表更改



如果范围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

最新更新