我有这个脚本可以将我的选择保存到另一个页面。我使用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
答案 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中使用。
最好的答案是共产国际。