我当前正在创建一个工作表,该工作表将Excel中包含文本“ Voltooid”单元格的行移动到第二个工作表。我想根据单元格值移动行,或复制+粘贴并删除它们。
到目前为止,我已经能够构建一个删除表中行的函数。请查看下面的代码:
Sub DeleteCompleted()
Dim Test1 As ListObject
Dim Test2 As Variant
Dim Rowcount As Integer
Set Test1 = Sheets("To Do Lijst").ListObjects("Table2")
Test2 = Test1.ListRows.Count
For Rowcount = 1 To Test2 Step 1
If Test1.DataBodyRange(Rowcount, 4) = "Voltooid" Then
Test1.DataBodyRange(Rowcount, 4).Delete Shift:=xlUp
Rowcount = 0
End If
Next Rowcount
您能为我建议一种更好的格式吗?
亲切的问候,
Pim
答案 0 :(得分:1)
Long
作为行计数变量,Excel的行数超过Integer
不能处理。除非确实需要,否则也不要使用Variant
。Range().Cut
并定义一个目的地,例如另一个工作表中的下一个空闲行。所以您最终会得到类似...
Sub DeleteCompleted()
Dim ToDoList As ListObject
Dim ListRowCount As Long
Dim iRow As Long
Set ToDoList = Sheets("To Do Lijst").ListObjects("Table2")
ListRowCount = ToDoList.ListRows.Count
Dim NextFreeRow As Range
For iRow = ListRowCount To 1 Step -1
With ToDoList
If .DataBodyRange(iRow, 4).Value = "Voltooid" Then
Set NextFreeRow = Worksheets("Destination").Cells(Rows.Count, 4).End(xlUp).Offset(1, -3)
ToDoList.ListRows(iRow).Range.Copy Destination:=NextFreeRow
ToDoList.ListRows(iRow).Range.Delete Shift:=xlUp
End If
End With
Next iRow
End Sub