VBA:基于单元格值将Excel行移动和删除到其他工作表

VBA:基于单元格值将Excel行移动和删除到其他工作表,vba,excel,Vba,Excel,我目前正在创建一个工作表,将Excel中包含包含文本“Voltooid”的单元格的行移动到第二个工作表中。我想根据单元格值移动行,或者复制+粘贴并删除行 到目前为止,我已经能够构建一个删除表中的行的函数。请参阅下面的代码: Sub DeleteCompleted() Dim Test1 As ListObject Dim Test2 As Variant Dim Rowcount As Integer Set Test1 = Sheets("To Do Lijst").ListObjects(

我目前正在创建一个工作表,将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

  • 使用描述性变量名使您的生活更轻松
  • 始终对行计数变量使用
    Long
    ,Excel的行数超过
    Integer
    所能处理的行数。此外,除非您确实需要,否则切勿使用变体
  • 如果删除/添加行,则必须向后循环,因为删除/添加会更改行数
  • 要移动一行,请使用
    Range()。剪切
    并定义目的地,如另一工作表中的下一个空闲行
  • 所以你最终会得到像

    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
    

    一些评论。从列表中删除任何类型的元素时,都应该从上到下进行操作,否则可能会丢失项目。为此,请将
    步骤-1
    附加到
    For
    语句中。此外,在
    For
    循环中设置
    rRowcount=0
    可能会导致问题。不同意1。还有,嗨!谢谢你的回答。然而,在执行这段代码时,我看到第二个工作表上的行实际上相互覆盖。在第一行之后不添加新的已完成行。我还注意到第二张工作表中没有填写A列。这可能是问题所在吗?我改进了我的答案。复制整个潜艇,然后再试一次。谢谢,成功了。有些人能取得惊人的成就。最后一个问题。我现在已经开始工作了——每行(前6列)需要6个单元格,并将其添加到工作表存档中。在第7(G)列中,我想自动添加运行宏的日期。是否有办法在G列中填写正确的单元格,以反映特定行的填写日期?