VBA-在另一个表上复制并粘贴行作为值

我正在根据单元格值中的条件将行从一个表格移动到另一个表格。 如果单元格值被满足,它将移动到另一个工作表。 但是,当它移动时,我需要它作为值移动。 我的一个单元格中有一个公式,我只是想要在新的表单中的单元格的值。 下面是我的代码,它移动行的一部分。 我的问题是我在哪里添加PasteSpecial或等价的代码将其作为值? 谢谢!

For Each xCell In xRg If CStr(xCell.Value) = "Pipeline" Then xCell.EntireRow.Copy Destination:=Worksheets("Pipeline2").Range("A" & B + 1) xCell.EntireRow.Delete B = B + 1 

如果你只是想要的值,你可以设置范围等于eachother。

 For Each xCell In xRg If CStr(xCell.Value) = "Pipeline" Then Worksheets("Pipeline2").Range("A" & B + 1).EntireRow.Value = xCell.EntireRow.Value xCell.EntireRow.Delete B = B + 1 

编辑:要保持格式也,

 For Each xCell In xRg If CStr(xCell.Value) = "Pipeline" Then Worksheets("Pipeline2").Range("A" & B + 1).EntireRow.Value = xCell.EntireRow.Value xCell.EntireRow.Copy Worksheets("Pipeline2").Range("A" & B + 1).EntireRow.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False xCell.EntireRow.Delete B = B + 1 

我不相信你可以(这很奇怪),但你必须申报原始的工作表,然后复制,然后粘贴,然后回去..这样的事情:

 '...... Set ws1 = Activeworksheet For Each xCell In xRg If CStr(xCell.Value) = "Pipeline" Then xCell.EntireRow.Copy Destination:=Sheets("Pipeline2").Range("A" & B + 1) Sheets("Pipeline2").Activate Sheets("Pipeline2").Range("A" & B + 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False ws1.astivate xCell.EntireRow.Delete B = B + 1 

build立在“蝙蝠侠”的解决scheme,你可以限制实际复制的范围值所需的最低限度 (即从第1列到最后一个非空单元格在该行):

 For Each xCell In xRg If CStr(xCell.Value) = "Pipeline" Then With xCell.Parent With .Range(.Cells(xCell.row, 1), .Cells(xCell.row, .Columns.count).End(xlToLeft)) Worksheets("Pipeline2").Range("A" & B + 1).Resize(.Columns.count).Value = .Value End With End With xCell.EntireRow.Delete B = B + 1 

像这样的东西应该为你做。

 Sub copy_paste() Dim i As Integer i = 2 Sheets("Sheet1").Select Range("E2").Select Do While ActiveCell <> "" If Range("E" & ActiveCell.Row) <> "" And Range("F" & ActiveCell.Row) <> "" Then Range("E" & ActiveCell.Row).Copy Sheets(Sheet3).Range("B" & i) Range("F" & ActiveCell.Row).Copy Sheets(Sheet3).Range("E" & i) Range("A" & ActiveCell.Row).Copy Sheets(Sheet3).Range("F" & i) Range("H" & ActiveCell.Row).Copy Sheets(Sheet3).Range("G" & i) Range("I" & ActiveCell.Row).Copy Sheets(Sheet3).Range("H" & i) Range("K" & ActiveCell.Row).Copy Sheets(Sheet3).Range("I" & i) i = i + 1 End If ActiveCell.Offset(1, 0).Select Loop End Sub