我正在使用下面的代码,当我输入非日期条目时,它会移动行。 如果我输入文本,它会移动行。 我只希望它有日期时移动。 什么日期并不重要,但它必须是一个日期。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 And Target.Cells.Count = 1 Then
If Target.Value > Date - 10000 Then
With Target.EntireRow
.Copy Sheets("Sheet2").Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
.Delete
End With
End If
End If
End Sub
以下是对代码的一些改进:
- 即使你可以在一行中做到这一点,我也添加了多个
IFs
,如果不满足条件,Exit Sub
(只是使代码更具可读性 IMO( - 尽可能使用对象来操作数据,例如,设置对目标工作表的引用并在代码中重用它
- 完全限定对象(例如,应
targetSheet.Rows.Count
Rows.Count
(
法典:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim targetSheet As Worksheet
Set targetSheet = ThisWorkbook.Worksheets("Sheet2")
' Check if is in column "B" and just one cell
If Target.Column = 2 And Target.Cells.CountLarge = 1 Then Exit Sub
' Check if is date
If IsDate(Target.Value) = False Then Exit Sub
' Check if is greater than current date - 10000 days
If Target.Value <= (Date - 10000) Then Exit Sub
' Copy and delete row
With Target.EntireRow
' Use full qualifying of objects (for example, Rows.Count should be targetSheet.Rows.Count)
.Copy targetSheet.Range("A" & targetSheet.Rows.Count).End(xlUp).Offset(1, 0)
.Delete
End With
End Sub
让我知道它是否有效