Одна вещь, которую я хотел бы указать , заключается в том, что в вашем коде вы перепрыгивали между поздним и ранним связыванием. Я не знаю, было ли это намеренно или нет, но в идеале вы бы хотели выбрать толькоодин.В моем решении, я предполагаю, что вы хотите раннее связывание.
Теперь я рекомендую вам сделать еще одну вещь - убедиться, что вы объявили все наши переменные , чтобы вы могли написатькодируйте немного более кратко, и легче узнать, с каким объектом мы работаем.
Причиной возникновения проблемы может быть несколько разных проблем, но одна из них, возможно, связана с буфером обмена. Причина, по которой я подозреваю, заключается в том, что вы говорите, что ошибка является спорадической, обычно это указывает на ошибку буфера обмена. К счастью для нас, есть пара решений, которые мы можем реализовать.Мое решение состоит в том, чтобы приостановить приложение 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