如果在 excel 中输入日期,则尝试将一行移动到另一个工作表



我正在使用下面的代码,当我输入非日期条目时,它会移动行。 如果我输入文本,它会移动行。 我只希望它有日期时移动。 什么日期并不重要,但它必须是一个日期。

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

以下是对代码的一些改进:

  1. 即使你可以在一行中做到这一点,我也添加了多个IFs,如果不满足条件,Exit Sub(只是使代码更具可读性 IMO(
  2. 尽可能使用对象来操作数据,例如,设置对目标工作表的引用并在代码中重用它
  3. 完全限定对象(例如,应targetSheet.Rows.CountRows.Count
  4. (

法典:

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

让我知道它是否有效

相关内容

  • 没有找到相关文章

最新更新