Я пытаюсь скопировать диапазон ячеек из Excel и вставить его на слайд презентации PowerPoint (обе версии 2016) с оригинальным форматированием.
Я пытался
Allg.Copy
mySlide2.Shapes.PasteSpecial DataType:=0
myPresentation.Slides(2).Shapes(3).Name = "AllgShape"
и это работает большую часть времени, но не всегда. Время от времени возникает следующая ошибка времени выполнения:
'- 2147188160 (80048240)': Shapes.PasteSpecial: Неверный запрос. Буфер обмена пуст или содержит данные, которые нельзя вставить сюда
, потому что (я думаю) буфер не заполнен во времени. Поэтому я попытался повторить процесс копирования и вставки, если произошла ошибка:
ALLGCOPY:
Allg.Copy
On Error GoTo ALLGCOPY:
mySlide2.Shapes.PasteSpecial DataType:=0
myPresentation.Slides(2).Shapes(3).Name = "AllgShape"
Кажется, что обработчик ошибок не совсем то, что я думаю, потому что иногда он просто вставляет одну и ту же форму 2 раза при запуске этого кода.
Затем я попытался
Allg.Copy
PowerPointApp.CommandBars.ExecuteMso "PasteExcelTableSourceFormatting"
myPresentation.Slides(2).Shapes(3).Name = "AllgShape"
, но иногда возникает проблема с назначением имени для фигуры, потому что она вставляется недостаточно быстро.
, поэтому я добавлен таймер после вставки
Public Sub Warten(ByVal MilliSekunden As Double)
Dim i As Double
Dim ENDE As Double
ENDE = Timer + (MilliSekunden / 1000)
Do While i < ENDE
DoEvents
i = Timer
Loop
End Sub
Но это ненадежно, потому что иногда достаточно 100 мс, но иногда даже 2000 мс недостаточно, и я хочу, чтобы макрос работал на большинстве (также старых) машин.
Желательно, чтобы я работал с обработчиком ошибок, а не с таймером, так как он ненадежен и зависит от загрузки процессора.
Может кто-нибудь сказать мне, почему код с обработчиком ошибок не работает и иногда вставляет одну и ту же форму 2 раза?
РЕДАКТИРОВАТЬ: очевидно мое понимание того, как обработчик ошибок работает недостаточно. Можно решить мою проблему с использованием соответствующего обработчика ошибок.
Спасибо