Обработка ошибок при копировании из Excel в PowerPoint - PullRequest
0 голосов
/ 22 ноября 2018

У меня проблема с кодом, когда я пытаюсь скопировать некоторые данные из Excel в PowerPoint с помощью Excel VBA.

Проблема в том, что иногда он работает правильно и без ошибок, но иногда происходит сбой иостанавливается во время пробега.

Sub Test()


Set PowerPointApp = CreateObject("PowerPoint.Application")
Set ppApp = New powerpoint.Application
ppApp.Visible = True
DestinationPPT = "C:\Users\Saeed\Desktop\edit vba\test.pptx"
Set ppPres = PowerPointApp.Presentations.Open(DestinationPPT)
Sheets("Slide3").Activate
Sheets("Slide3").Range("A2").Select
Selection.Copy
ppApp.Activate
ppPres.Slides(3).Select
ppApp.Windows(1).View.Paste
Set shp = ppPres.Slides(3).Shapes(ppPres.Slides(3).Shapes.Count)
shp.Left = 17
shp.Top = 90
ppApp.Windows(1).Selection.Unselect

ppPres.SaveAs "C:\Users\Saeed\Desktop\edit vba\" & FileName, ppSaveAsPDF
ppPres.Close
ppApp.Quit
Set ppt = Nothing

Я пропустил тусклые части и некоторые неважные.

Но вот проблема: он всегда вылетает в

ppApp.Windows(1).View.Paste

иЯ не знаю, как это исправить, так как иногда он работает отлично, а иногда выдает ошибку в этой части!Я пытался использовать On Goto, но ничего не изменилось.Буду признателен за помощь в этой странной проблеме.

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Одна вещь, которую я хотел бы указать , заключается в том, что в вашем коде вы перепрыгивали между поздним и ранним связыванием. Я не знаю, было ли это намеренно или нет, но в идеале вы бы хотели выбрать толькоодин.В моем решении, я предполагаю, что вы хотите раннее связывание.

Теперь я рекомендую вам сделать еще одну вещь - убедиться, что вы объявили все наши переменные , чтобы вы могли написатькодируйте немного более кратко, и легче узнать, с каким объектом мы работаем.

Причиной возникновения проблемы может быть несколько разных проблем, но одна из них, возможно, связана с буфером обмена. Причина, по которой я подозреваю, заключается в том, что вы говорите, что ошибка является спорадической, обычно это указывает на ошибку буфера обмена. К счастью для нас, есть пара решений, которые мы можем реализовать.Мое решение состоит в том, чтобы приостановить приложение Excel на одну или две секунды, чтобы информация попала в буфер обмена.Это решение обычно исправляет 95% ошибок, связанных с буфером обмена.

При этом он не будет работать 100% времени.Как бы странно это ни звучало, у нас все еще могут быть ситуации, когда информация исчезает из буфера обмена.

Кроме того, если вы новичок в Excel VBA и PowerPoint VBA, работающих в тандеме, у меня есть несколько видео на YouTube, посвященных этой теме.,Не стесняйтесь проверить их, если вы думаете, что захотите писать более сложные сценарии.

https://www.youtube.com/playlist?list=PLcFcktZ0wnNlFcSydYb8bI1AclQ4I38VN

Попробуйте этот код и дайте мне знать, что вы получите:

Sub Test()

'Declare Variables
Dim PPTApp As PowerPoint.Application
Dim PPTPres As PowerPoint.Presentation
Dim PPTShape As PowerPoint.Shape

'Create a new instance of PowerPoint
Set PPTApp = New PowerPoint.Application
    PPTApp.Visible = True

'File Path
DestinationPPT = "C:\Users\Saeed\Desktop\edit vba\test.pptx"

'Open the File
Set PPTPres = PPTApp.Presentations.Open(DestinationPPT)

'Copy Range "A2" on the sheet.
Sheets("Slide3").Activate
Sheets("Slide3").Range("A2").Copy

'Pause the Excel Applicaiton for one second. This is for stability issues that may arise.
Application.Wait Now() + #12:00:01 AM#

'Paste the Range on the Slide
PPTPres.Slides(3).Shapes.Paste

Set PPTShape = PPTPres.Slides(3).Shapes(PPTPres.Slides(3).Shapes.Count)
    PPTShape.Select

'Set Dimensions of Shape
With PPTShape
    .Left = 17
    .Top = 90
End With

'Save & Close the file
PPTPres.SaveAs "C:\Users\Saeed\Desktop\edit vba\" & Filename, ppSaveAsPDF
PPTPres.Close
PPTApp.Quit

'Release Objects From Memory
Set PPTApp = Nothing
Set PPTPres = Nothing
Set PPTShape = Nothing

End Sub
0 голосов
/ 23 ноября 2018

Мое первое предположение состоит в том, что вы должны вставлять его не в вид, а в слайд.

ppPres.Slides(3).shapes.paste

Приветствия Йенс

...