我一直在努力解决这个问题。
我编写了一个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”(这是我正在处理的较大程序的简化版本)。
感谢您的帮助!
答案 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