我正在尝试创建一个将信息从一个工作表复制到另一个工作表的函数,但我正在努力将粘贴作为值函数。你知道它为什么不起作用吗?
Sub Copy_Data()
Dim Src As Worksheet, Dst As Worksheet
Dim LastRow As Long, r As Range
Dim CopyRange As Range
'Change these to the correct sheet names
Set Src = Sheets("Sheet1")
Set Dst = Sheets("Sheet2")
LastRow = Src.Cells(Cells.Rows.Count, "A").End(xlUp).Row
For Each r In Src.Range("A2:A" & LastRow)
If (Month(r.Value) = "2" And Year(r.Value) = "1902") Then
If CopyRange Is Nothing Then
Set CopyRange = r.EntireRow
Else
Set CopyRange = Union(CopyRange, r.EntireRow)
End If
End If
Next r
If Not CopyRange Is Nothing Then
CopyRange.Copy Dst.Range("A1").PasteSpecial(xlPasteValues)
End If
End Sub
答案 0 :(得分:3)
或者你可能完全错过了剪贴板:
If Not CopyRange Is Nothing Then
Dst.Range("A1").Resize(CopyRange.Rows.Count, CopyRange.Columns.Count).Value = CopyRange.Value
End If
答案 1 :(得分:1)
试
CopyRange.Copy
Dst.Range("A1").PasteSpecial xlPasteValues
但你也可以这样做
Dst.EntireRow.Value = CopyRange.EntireRow.Value
答案 2 :(得分:1)
使用pastespecial
时,您需要在单独的命令中使用复制和粘贴语句。请注意,即使您正在进行“正常”粘贴,在声明目标范围后也不会有.Paste
。我认为在操作后将Application.CutCopyMode
设置为false也是一个好主意,尽管我对此并不乐观。
正确的语法如下:
If Not CopyRange Is Nothing Then
CopyRange.Copy
Dst.Range("A1").PasteSpecial xlPasteType:=xlPasteValues
Application.CutCopyMode = False
End If
答案 3 :(得分:1)
This answer是正确的,但我只是详细说明,因为这个问题在SO中出现了很多次。 Eirikdaude使用正确的语法是正确的:
表达 复制(目标)强>
来自MSDN Range Object Copy Method 所以这一行将起作用:
Range("A1").Copy Destination:=Range("B1")
目标参数需要一个您希望传输数据的范围。
提供此参数会跳过剪贴板而省略它会将范围复制到夹板(再次如链接中所述)。
现在,您的代码:CopyRange.Copy Dst.Range("A1").PasteSpecial(xlPasteValues)
不符合上述要求。为什么呢?
Method of a Range Object
PasteSpecial
。为了使它有效,你需要像Eirikdaude那样做,它将分隔两(2)行的语句。
CopyRange.Copy ' omit the argument so range is passed in clip board
Dst.Range("A1").PasteSpecial xlPasteValues ' execute PasteSpecial method
但他也补充了这一行:
Application.CutCopyMode = False ' clears the clip board
用于清除剪贴板。请记住,当您在没有目标参数的情况下执行Copy
时,您将其传递给剪贴板,因此您必须清除它(至少在我看来)。
你可以把它放在一行,但是这样:
CopyRange.Copy: Dst.Range("A1").PasteSpecial xlPasteValues
以上也可以。在:
之后记下结肠 CopyRange.Copy
这是一个行(语句)分隔字符,表示其后面的内容被视为新行,或者在另一个透视图中被视为语句分隔符表明个别陈述的结束。