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

时间:2015-02-03 16:56:46

标签: excel

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

1 个答案:

答案 0 :(得分:0)

你应该按原样运作的代码。如果[传入的表达式]属于日期数据类型或者可以转换为日期,则IsDate函数“返回True。”值为日期的范围可以转换为日期,因此应识别其中包含日期返回公式的单元格。 (我通过实验验证了这一点。)

唯一需要注意的是,如果你想要复制值而不是公式(如果公式是依赖于上下文的话,可能是必要的),你应该替换

.Range("E" & nextRow) = Target

.Range("E" & nextRow) = Target.Value

并在可能包含您不想复制的公式的任何.Value之后同样附加Offsets