Очистить буфер обмена при копировании графиков в Excel VBA - PullRequest
1 голос
/ 17 октября 2011

Я копирую и вставляю несколько графиков Excel из Excel в Powerpoint, используя VBA:

'copy from excel worksheet
    Workbooks(Stats & ".xls").Worksheets(Stats).ChartObjects("graph4").Copy
'paste into powerpoint presentation
    .Slides(3).Shapes.Paste

' more code and more copy and pastes
' ...

Иногда копирование графиков заканчивается неудачей. У меня нет объяснения этому, кроме, может быть, проблем с памятью. Сообщение об ошибке, которое я получаю:

Сбой метода «Копирование» объекта «Chartobject».

Затем Excel перестает отвечать на запросы, и я должен перезапустить его.

Что я могу сделать, чтобы предотвратить это? Может быть, я смогу очистить буфер обмена между операциями копирования и вставки?

Обновление: Я попробовал два упомянутых способа очистить буфер обмена. Операция копирования и вставки по-прежнему время от времени не выполняется. Ошибка времени выполнения: -2147417848 (80010108). В сети есть информация об этой ошибке, поэтому я начну с нее.

Обновление (Финал): Я думаю, что я решил проблему, поместив этот код перед частями, где диаграммы копируются и вставляются. Ошибка не появилась снова.

DoEvents 'lets the operating system clear / execute any backed up / queued events that it might have to execute.
'slow down the execution (to not get an error)
Workbooks(Stats & ".xls").Save

Ответы [ 5 ]

2 голосов
/ 17 октября 2011

Вот небольшой пример доступа к буферу обмена с помощью VBA:

http://word.mvps.org/faqs/macrosvba/ManipulateClipboard.htm

Очистите буфер обмена, поместив в него пустой текст.Честно говоря, я не знаю, решит ли это вашу первоначальную проблему.

1 голос
/ 18 октября 2011

Попытка поместить Application.CutCopyMode = 0 между операциями копирования и вставки.

0 или False означает «Отмена режима обрезки или копирования и удаление движущейся границы»: http://msdn.microsoft.com/en-us/library/office/ff839532.aspx

0 голосов
/ 10 мая 2016

Активируйте объект перед вставкой.Я решил использовать следующее

.Slides(3).shapes.activate

0 голосов
/ 13 марта 2014

У меня не получилось вставить application.cutcopymode = 0 между операциями копирования и вставки.

Я был успешным, когда я вставил application.cutcopymode = 0
между инструкциями вставки и закрытия.

windows(ThisBook).activate: range(nextcell).select: activesheet.paste
application.cutcopymode = 0
windows(OtherBook).activate: activewindow.close
0 голосов
/ 17 октября 2011

Вы не упоминаете, в какой версии Office вы работаете. Если в 2007 году вы применяли пакет обновления 2 и проверяли наличие исправлений, которые могут решить эту проблему?

Оригинальный выпуск 2007 года был ужасным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...