Excel cra sh после копирования и вставки изображения диаграммы - PullRequest
1 голос
/ 08 мая 2020

Мне нужно скопировать изображение / изображение диаграммы из другой книги (WbO) и вставить изображение на лист в этой книге (TWb), используя Excel vba. Я придумал для этого простой код. Хорошо, что код работает. Построчно по коду, все завершается отлично.

Однако, если я запускаю код (без пошагового выполнения), он также выполняется до конца без каких-либо ошибок и завершает работу. НО, к концу Excel вылетает без сообщения об ошибке , перезапускает и повторно открывает книгу. (вся работа потеряна). Самое странное, что вылетает через 3-5 секунд после завершения запуска . 3-5 секунд - это колоссальный срок для вычислений. Что он делает в это время ??

Для тестирования я добавил «Msgbox« Completed », vbokonly» в качестве последней строки кода. Это заставило vba остановиться и показать сообщение, а не cra sh, пока сообщение отображается на экране. При нажатии кнопки «ОК» макрос выполняется до конца, а затем, через несколько секунд ... Cra sh.

Искал похожие проблемы в Интернете и обнаружил несколько старых сообщений об ошибках, связанных с копированием / вставкой, но нет полного cra sh вроде этого.

Пробовал этот же файл / код на разных ПК, оба с обновленным Office 365, но с разными каналами обновления (не той же сборкой). Результат был точно таким же.

Попытался изменить оператор .CopyPicture на обычный Copy, а затем использовать PasteSpecial как Picture. Тот же результат.

Даже пытался переместить инструкции копирования / вставки в разные подпрограммы (предложение из публикации 2018 года) и вставить DoEvents между ними ... безуспешно.

Есть ли у кого-то подсказка почему это происходит? Как решить эту проблему?

Помощь приветствуется

Пример кода ниже:

Application.EnableEvents= False
Set WbO = /Workbooks.Open("WbOFileName",0)
Set ChrtObj= Worksheets("MyCharts").ChartObjects(1) 'Set handle to the Chart obj
TWb.Activate  ' Activate destination Workbook = The Wb which contains the macro

ChrtObj.CopyPicture
RangeToPasteOn(1,1).Select  ' Select Top-Left cell to paste the Chart on
ActiveSheet.paste         ' Paste the Chart
  ' ... here Code to ajust Size and position to fit destination range

Application.CutCopyMode = False
Set ChartObj = Nothing   'Release handle
WbO.Close
Set WbO = Nothing
Application.EnableEvents= True
...