Активная ошибка X 429 не может создать объект, когда я пытаюсь запустить приведенный ниже макрос
Итак, я пытаюсь создать макрос, который будет копировать данные из таблицы Excel (в данном случае "Регионы"), а затем копировать вставить в существующий шаблон PowerPoint, слайд № 4.
Обратите внимание, что PowerPoint и файл Excel сохраняются в папке Dropbox. (если это что-то меняет) Я не эксперт в VBA, поэтому не могу понять, почему он показывает мне эту ошибку.
Код ниже:
Sub excelrangetopowerpoint()
Dim rng As Range
Dim powerpointapp As Object
Dim mypresentation As Object
Dim destinationPPT As String
Dim myshape As Object
Dim myslide As Object
Set rng = Worksheets("regions").Range("B1:N18")
On Error Resume Next
Set powerpointapp = CreateObject("powerpoint.application")
detinationppt = ("C:\Users\OLX-Admin\Dropbox (Corporate Finance)\Naspers Monthly Reporting\Prep for call\From teams\FY2019\OLX Group Monthly Report_Sep'18_Macro.pptx")
PowerPoint.Presentations.Open (destinationPPT)
On Error GoTo 0
Application.ScreenUpdating = False
Set mypresentation = PowerPoint.ActivePresentation
Set myslide = mypresentation.Slides(4)
rng.Copy
myslide.Shapes.PasteSpecial DataType:=2 '2 = enhanced metafile
Set myshape = myslide.Shapes(myslide.Shapes.Count)
myshape.Left = 152
myshape.Top = 152
powerpointapp.Visible = True
powerpointapp.Activate
Application.CutCopyMode = False
End Sub
3 ответа
Сначала добавьте эту строку в начало вашего модуля, как самый первый текст в целом:
Option Explicit
Затем в строке меню нажмите "Отладка" и "Скомпилировать проект VBA"
Вы получите серию сообщений об ошибках, например:
Ошибка компиляции:
Переменная не определена
И переменная, которая не была определена, будет выбрана для вас VBA. Большинство из них, кажется, опечатки, такие как
detinationppt = ("C:
вместоdestinationPPT = ("C:
PowerPoint.Presentations.Open (destinationPPT)
вместоPowerPointApp.Presentations.Open (destinationPPT)
Set mypresentation = PowerPoint.ActivePresentation
вместоSet mypresentation = PowerPointApp.ActivePresentation
По сути, похоже, что вы скопировали и вставили 2 разных блока кода вместе и забыли проверить, совпадают ли все имена переменных (также, кажется, что это Раннее связывание, а другое - Позднее связывание)
Если вы идете в "Инструменты" > "Параметры..." > "Редактор", появляется флажок "Требуется объявление переменной". Включите, оставьте это включенным и регулярно используйте опцию "Компилировать проект VBA" для проверки на наличие опечаток и подобных ошибок.
У вас есть две неопределенные переменные в вашем коде
detinationppt
вместо destinationppt
Вы назначаете объект приложения PowerPoint для powerpointapp
, но через 2 строки вы получаете доступ к (неопределенному) объекту PowerPoint
Вы можете легко избежать таких ошибок, поставив Option Explicit
в верхней части вашего кода.
Следующее, что вы можете назначить открытую презентацию, а не получить доступ к ActivePresentation
, Я сделал тест, и для меня доступ ActivePresentation
не удалось.
И, пожалуйста, не кладите On Error resume Next
в ваш код, если вы не знаете точно, что вы делаете. Если вы хотите избежать ошибки времени выполнения, так как Powerpoint не может быть запущен, вы должны самостоятельно обработать ошибку (как это делается вашим "кодом, который работает нормально"). Для начала просто удалите его.
Этот код работал для меня (конечно, с другим именем файла)
Set powerpointApp = CreateObject("powerpoint.application")
destinationPPT = C:\Users\OLX-Admin\Dropbox (Corporate Finance)\Naspers Monthly Reporting\Prep for call\From teams\FY2019\OLX Group Monthly Report_Sep'18_Macro.pptx
Set myPresentation = powerpointApp.Presentations.Open(destinationPPT)
Set mySlide = myPresentation.Slides(4)
(...)
Вот код, который работает нормально:
Sub ExcelRangeToPowerPoint()
Dim rng As Range
Dim PowerPointApp As Object
Dim myPresentation As Object
Dim mySlide As Object
Dim myShape As Object
'Range to copy
Set rng = Worksheets("regions").Range("B1:N18")
On Error Resume Next
Set PowerPointApp = GetObject(class:="PowerPoint.Application")
Err.Clear
'If PowerPoint is not already open then open PowerPoint
If PowerPointApp Is Nothing Then Set PowerPointApp = CreateObject(class:="PowerPoint.Application")
'Handle if the PowerPoint Application is not found
If Err.Number = 429 Then
MsgBox "PowerPoint could not be found, aborting."
Exit Sub
End If
On Error GoTo 0
Application.ScreenUpdating = False
'To create new presentation
Set myPresentation = PowerPointApp.Presentations.Add
'to add new slide to the Presentation
Set mySlide = myPresentation.Slides.Add(1, 11) '11 = ppLayoutTitleOnly
rng.Copy
'Paste to PowerPoint and position
mySlide.Shapes.PasteSpecial DataType:=2 '2 = ppPasteEnhancedMetafile
Set myShape = mySlide.Shapes(mySlide.Shapes.Count)
myShape.Left = 152
myShape.Top = 152
PowerPointApp.Visible = True
PowerPointApp.Activate
Application.CutCopyMode = False
End Sub