需要VBA帮助根据工作表1中的值将数据复制到工作表2中的行,并从工作表1中删除原始数据

时间:2012-11-05 21:17:35

标签: excel vba

我在VBA代码方面相对缺乏经验,但我有一个工作簿,我试图根据行中列出的项目的“状态”进行组织。

我在“M”栏中有一个下拉框,允许用户选择“HOLD”或“RELEASED”...根据此值,需要将订单项复制并粘贴到同一行中第2页,如果值=“RELEASED”(行项目范围的示例是(“B7:N7”)(表格格式完全相同)。我有此代码,但我需要删除“RELEASED”的行项目“复制并粘贴到表2后,从表1开始。

这是我所拥有的......(零件分段日志=第1页......已发布零件日志=第2页)

Public Sub CopyPasteRows()

Sheets("Parts Staging Log").Select
' Find the last row of data
FinalRow = Range("B828").End(xlUp).Row
' Loop through each row
For x = 7 To FinalRow
' Decide to copy based on column M value "RELEASED"
ThisValue = Range("M" & x).Value
If ThisValue = "RELEASED" Then
Range("B" & x & ":BM" & x).Copy
Sheets("Released Parts Log").Select
NextRow = Range("B828").End(xlUp).Row + 1
Range("B" & NextRow).Select
ActiveSheet.Paste
Sheets("Parts Staging Log").Select
End If
Next x

End Sub

如果有人可以帮我删除原来很好的订单项。其他评论也被接受!

谢谢!

1 个答案:

答案 0 :(得分:0)

我对此的看法:删除循环(太慢)并用autofilter替换

Public Sub CopyPasteRows()
Dim FinalRow As Long

With Sheets("Parts Staging Log")
' Find the last row of data
    FinalRow = .Range("B828").End(xlUp).Row
    .Range("B6:BM" & FinalRow).AutoFilter
    .Range("B6:BM" & FinalRow).AutoFilter field:=12, Criteria1:="RELEASED"
    .Range("B7:BM" & FinalRow).SpecialCells(xlCellTypeVisible).Copy Sheets("Released Parts Log").Range("B828").End(xlUp).Offset(1)
    .Range("B7:BM" & FinalRow).SpecialCells(xlCellTypeVisible).EntireRow.Delete
    .Range("B6:BM" & FinalRow).AutoFilter    
End With


End Sub