PasteSpecial - 预期结束语句

时间:2016-09-20 22:22:16

标签: excel vba excel-vba

我有这个脚本可以将我的选择保存到另一个页面。我使用cut作为整理页面的一部分,用于下一个输入。

无论如何,我已经在xlPasteValues上尝试了几种变体,但仍然接受预期的结束语。

Mr Excel我复制了这个,但产生错误。

Worksheets("Positions").Range("W2").PasteSpecial xlPasteValues

尝试了udemy blog

中的变体
wb.Sheets(1).Range("A1").PasteSpecial Paste:=xlPasteValues

我只是不明白这些实现是如何没有遇到语句结束的,而我的是。

Sub SaveShrinkage()

    Dim LRow As Long
    Dim ws As Worksheet
    Dim Newcastle_Shrinkage As Range
    Dim ToSite_Shrinkage As Worksheet

    Set ws = ThisWorkbook.ActiveSheet
    LRow = ws.Cells(ws.Rows.Count, 5).End(xlUp).Row

    Set Newcastle_Shrinkage = ws.Range("A6:E" & LRow)

    Set ToSite_Shrinkage = Worksheets("Site_Shrinkage")

    Newcastle_Shrinkage.Cut Destination:=ToSite_Shrinkage.Range("B" & ToSite_Shrinkage.UsedRange.Rows.Count + 1).PasteSpecial xlPasteValues

End Sub

4 个答案:

答案 0 :(得分:4)

如果您只需要值,则可以完全跳过使用剪贴板。只需直接设置值,然后清除源范围:

\\

答案 1 :(得分:3)

Excel不支持(AFAIK)Cut / PasteValues,因此您需要使用:

Newcastle_Shrinkage.Copy 
ToSite_Shrinkage.Range("B" & ToSite_Shrinkage.UsedRange.Rows.Count + 1).PasteSpecial Paste:=xlPasteValues
Newcastle_Shrinkage.ClearContents

注意:共产国际的答案可能(肯定!)比我的好。任何避免剪贴板的东西,以及当用户在后台执行操作时导致的相关问题,都是一个非常好的解决方案。

答案 2 :(得分:3)

您收到错误的原因是Range().Cut方法将范围作为参数,Range().PasteSpecial xlPasteValues不返回范围。

这将更正您的代码。


Newcastle_Shrinkage.Cut Destination:=ToSite_Shrinkage.Range("B" & ToSite_Shrinkage.UsedRange.Rows.Count + 1)

就个人而言,我会重构代码,删除大部分仅使用一次的变量,并使用更通用的名称作为源范围。我认为更浓缩的代码实际上更容易阅读。

带格式的剪切范围

Sub SaveShrinkageWithFormat()

    Dim Source As Range

    With ThisWorkbook.ActiveSheet
        Set Source = .Range("A6", .Range("E" & .Rows.Count).End(xlUp))
    End With


    With Worksheets("Site_Shrinkage")
        Source.Cut Destination:=.Range("B" & .Rows.Count).End(xlUp).Offset(1)
    End With

End Sub

移动值无格式

Sub SaveShrinkageValuesOnly()

    Dim Source As Range

    With ThisWorkbook.ActiveSheet
        Set Source = .Range("A6", .Range("E" & .Rows.Count).End(xlUp))
    End With

    With Worksheets("Site_Shrinkage")
        .Range("B" & .Rows.Count).End(xlUp).Offset(1) = Source.Value
        Source.ClearContents
    End With

End Sub

答案 3 :(得分:1)

您在编写代码时遇到错误,因为您尝试在一行中使用“剪切”“目标”和“PasteSpecial” - 此处的Destination和PasteSpecial重叠,因此您可以通过删除其中一个术语可以得到:

range("A1").cut destination:=range("A2")

或:

range("A1").cut
range("A2").pastespecial xlpastevalues

但是,正如@ YowE3K在答案中标记的那样,“CUT”不适用于后续的“pastespecial”,所以第二种方法只能在他显示的.copy中使用。

最好的答案是共产国际。