在一个工作表上剪切区域并粘贴到另一个工作表不起作用。但是复制。为什么?

时间:2019-02-15 01:14:37

标签: excel vba copy-paste paste cut

我一直在努力解决这个问题。

我编写了一个VBA例程,该例程应该在一个工作表上找到一个区域,然后将其剪切并粘贴到另一个工作表上。如果我运行以下代码,它将无法正常工作:

   ' This does not work
   DSheet.Range(SummaryDataAddr, DSheet.Cells.SpecialCells(xlLastCell)).Cut
   PSheet.Range(SummaryDataLocation).PasteSpecial Paste:=xlPasteValues

但是,如果我更改代码以从第一个工作表中复制区域,将其粘贴到第二个工作表中,然后返回第一个工作表并显式删除该区域,则它可以工作。

   ' But this does work.  Why?
   DSheet.Range(SummaryDataAddr, DSheet.Cells.SpecialCells(xlLastCell)).Copy   
   PSheet.Range(SummaryDataLocation).PasteSpecial Paste:=xlPasteValues
   DSheet.Range(SummaryDataAddr, DSheet.Cells.SpecialCells(xlLastCell)).Delete

有人以前见过这种问题吗?有没有办法使用剪切功能并使所有功能正常工作?

要访问包含VBA代码的电子表格,请转到此处: https://www.dropbox.com/s/satv6z95tlqw7lr/CutBug.xlsm?dl=0

该例程称为“ CreateDLDataPivot”(这是我正在处理的较大程序的简化版本)。

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

PasteSpecial Paste:=xlPasteValues在Range.Cut中不起作用;它仅适用于Range.Copy。

范围。剪切只会清除单元格,不会删除单元格。

尝试直接转移价值并清除。

with DSheet.Range(SummaryDataAddr, DSheet.Cells.SpecialCells(xlLastCell))
  PSheet.Range(SummaryDataLocation).resize(.rows.count, .columns.count) = .value
  .clear   'use .clearcontents to retain formatting
end with