PasteSpecial – 声明期满

我有这个脚本,将我的select保存到另一个页面。 我使用cut作为整理下一个input页面的一部分。

无论如何,我已经尝试了xlPasteValues几个变化,但不断收到预期的结束语句。

从Excel先生我复制这个,但产生的错误。

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

尝试从udemy博客的变种

 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 

Excel不支持(AFAIK)Cut / PasteValues,所以你需要使用:

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

注:共产国际的答案可能(绝对)比我的好。 任何避免剪贴板的东西,以及当用户在后台执行某些操作时产生的相关问题,都是一个更好的解决scheme。

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

 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") With ToSite_Shrinkage Dim rowCount As Long rowCount = ToSite_Shrinkage.UsedRange.Rows.Count .Range(.Cells(rowCount + 1, 2), _ .Cells(rowCount + Newcastle_Shrinkage.Rows.Count, 6)).Value = _ Newcastle_Shrinkage.Value End With Newcastle_Shrinkage.ClearContents End Sub 

你得到一个错误的原因是Range().Cut方法使用范围作为参数和Range().PasteSpecial xlPasteValues不返回一个范围。

这将更正您的代码。


 Newcastle_Shrinkage.Cut目的地:= ToSite_Shrinkage.Range(“B”&ToSite_Shrinkage.UsedRange.Rows.Count + 1)

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

剪切范围与格式

 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 

您在编写代码时遇到错误,因为您尝试在一行中使用“剪切”“目标”和“粘贴特殊” – 目标和粘贴特殊在此处重叠,因此您可以通过删除其中一个条款来得到:

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

要么:

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

然而,正如@ YowE3K的回答中所标记的那样,“CUT”不适用于随后的“pastespecial”,因此这第二种方法只能在.copy中显示。

要遵循的最好的答案是共产国际的。