哪个VBA宏在单元格填充时给出日期,但在发生任何事件时不给出日期

时间:2019-03-15 22:03:24

标签: excel vba events

我有一个excel文件,它实际上是我定期更新的数据库。每次进行更新时,我都希望过滤当天输入的数据。

所以我在线上找到了这个宏,对我的应用程序真的很有用。

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim C As Range, D As Range, Inte As Range, r As Range
    Set C = Range("C:C")
    Set Inte = Intersect(C, Target)
    If Inte Is Nothing Then Exit Sub
    Application.EnableEvents = False
        For Each r In Inte
            r.Offset(0, 1).Value = Date
        Next r
    Application.EnableEvents = True
End Sub

它为我提供了单元格D修改单元格C时的日期。问题是,我只希望在确实将文本放入单元格C中时显示日期。有时我只插入一行,但在单元格C中为空,则宏将其视为事件。然后,它在单元格D中给了我日期,但是我什么都没写。

我想这应该是一条非常简单的行,用If Not IsEmpty(C.Value) Then添加到宏中的某个位置,但是由于它不起作用,所以我无法将其放在正确的位置... < / p>

在此先感谢您提供的任何帮助。祝大家周末愉快!

2 个答案:

答案 0 :(得分:0)

尝试

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim C As Range, D As Range, Inte As Range, r As Range
    Set C = Range("C:C")
    Set Inte = Intersect(C, Target)
    If Inte Is Nothing Then Exit Sub
    Application.EnableEvents = False
        For Each r In Inte
        If Not IsEmpty(r.Value) Then  ' line added
        r.Offset(0, 1).Value = Date
        Else
        r.Offset(0, 1).Value = ""
        End If
        Next r
    Application.EnableEvents = True
End Sub

答案 1 :(得分:0)

使用SpecialCells不仅可以对空单元格进行操作

您不需要循环播放

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Inte As Range

    Set Inte = Intersect(Range("C:C"), Target)
    If Inte Is Nothing Then Exit Sub
    Application.EnableEvents = False
    Inte.SpecialCells(xlCellTypeConstants).Offset(0, 1).Value = Date
    Application.EnableEvents = True
End Sub