基于条件的复制单元格被取消

时间:2015-02-19 03:39:42

标签: excel-vba excel-2007 vba excel

我正在尝试编写宏来将单元格(基于条件)从一个工作表复制到另一个工作表。 当我运行宏时,我得到“Range类失败的pasteSpecial方法”错误。

我试图解决它。但我无法做到。

 Sub update_tuning()
Dim tun_num, tun_select, source1, target1 As Range
Dim r, lr As Long


Sheets("Calc").Select
Set tun_num = Range("B2")

If tun_num <> Null Then
Sheets("Calc").Select
Range("C22:BE22").Select
Selection.Copy

End If

Sheets("DATA_Lbf_ft").Select
lr = Sheets("DATA_Lbf_ft").Range("B3:B1803").Count

For r = 3 To lr
 If Range("B" & r).Value = tun_num Then
 Exit For
 End If
 Next r

Sheets("DATA_Lbf_ft").Range("B" & r).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

 End Sub

请发表意见解决。

1 个答案:

答案 0 :(得分:0)

.Copy.PasteSpecial之间的操作过多。 .CutCopyMode(当您通常会看到工作表上复制的单元格周围闪烁的边框时)将被其他操作取消。

最好在完成目的地确定后进行复制和粘贴。

For r = 3 To lr
  If Range("B" & r).Value = tun_num Then
    Exit For
  End If
Next r

Sheets("Calc").Range("C22:BE22").copy _
  destination:=Sheets("DATA_Lbf_ft").Range("B" & r)

如果您放弃原始复制操作并使用此方法,我相信您应该得到您正在寻找的结果。

附录:

仅限值传输将以下内容替换为.Copy Destination:= ...操作。

  With Sheets("Calc").Range("C22:BE22")
      Sheets("DATA_Lbf_ft").Range("B" & r).Resize(.Rows.Count, .Columns.Count) = .Cells.Value
  End With