VBA:基于单元格值将Excel行移动和删除到其他工作表
我目前正在创建一个工作表,将Excel中包含包含文本“Voltooid”的单元格的行移动到第二个工作表中。我想根据单元格值移动行,或者复制+粘贴并删除行 到目前为止,我已经能够构建一个删除表中的行的函数。请参阅下面的代码: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(
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列中填写正确的单元格,以反映特定行的填写日期?