Вырезание области на одном листе и вставка в другой не работает.Но копия делает.Зачем? - PullRequest
0 голосов
/ 15 февраля 2019

Я уже давно борюсь с этой проблемой.

Я написал подпрограмму 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

Кто-нибудь видел подобную проблему раньше?Есть ли способ использовать функцию cut и заставить все это работать?

Чтобы получить доступ к электронной таблице с кодом VBA, перейдите сюда: https://www.dropbox.com/s/satv6z95tlqw7lr/CutBug.xlsm?dl=0

Подпрограмма называется "CreateDLDataPivot "(это урезанная версия более крупной программы, над которой я работаю).

Спасибо за любую помощь!

1 Ответ

0 голосов
/ 15 февраля 2019

PasteSpecial Paste:=xlPasteValues не работает с Range.Cut;он работает только с Range.Copy.

Range.Cut только очищает ячейки, но не удаляет ячейки.

Попробуйте выполнить прямую передачу значения и очистить.

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
...