Ошибка VBA Excel 91 — объектная переменная не найдена — Автоматизация PowerPoint — простая ошибка?

#excel #vba #object #powerpoint

#excel #vba #объект #powerpoint

Вопрос:

Я относительно новичок в VBA и уже несколько часов пытаюсь найти причину этой ошибки. Мне действительно нужна помощь: P

У меня есть макрос Excel, который автоматически создает PowerPoint и копирует фигуры из Excel в PP. Пока все хорошо. Теперь я пытаюсь добавить текстовые поля в виде фигур в PP, что работает для 1-го поля, но выдает ошибки для второго текстового поля на следующем слайде. Основной метод создает PP, а затем вызывает Subs для вставки разных текстовых полей из другого модуля

Код выглядит следующим образом:

 Sub mainmethod()
Public Shape As Object
Public PPshape As PowerPoint.Shape
Public PPapp As PowerPoint.Application
Public PPpres As PowerPoint.Presentation
Public PPslide As PowerPoint.Slide
Public rng As Range
Public PPdateipfad As String
Public maturitylevel As String
Public PPtextbox_1 As PowerPoint.Shape
...
Set PPslide = PPapp.ActivePresentation.Slides(2).Duplicate.Item(1)
Call Textbox_1(PPslide)
Call Textbox_2(PPslide)
...
  
 Sub Textbox_1(ByVal PPslide As PowerPoint.Slide)

Set PPtextbox_1 = PPslide.Shapes.AddTextbox(msoTextOrientationHorizontal, Left:=167, Top:=460, Width:=625, Height:=25)

With PPtextbox_1.TextFrame.TextRange
    .Text = "textbox1"

End With
End Sub
  
 Sub Textbox_2(ByVal PPslide As PowerPoint.Slide)

Set PPtextbox_2 = PPslide.Shapes.AddTextbox(msoTextOrientationHorizontal, Left:=167, Top:=460, Width:=625, Height:=25)

With PPtextbox_2.TextFrame.TextRange
    .Text = "textbox2"

End With
End Sub
  

Теперь иногда это работает для textbox1 и выдает ошибку только для textbox2. Иногда это работает только для textbox1, но всегда выдает ошибку для textbox2.

Ошибка заключается в том, что «Переменная объекта или с переменной блока не установлена» в строке:

Установите PPtextbox_1 = PPslide .Фигуры.AddTextBox(msotextorientation horizontal, слева: = 167, Сверху: = 460, Ширина: = 625, Высота: = 25)

Спасибо за вашу помощь!

Комментарии:

1. PPslide нет Set .

2. Спасибо за ваш ответ! Я тоже думал об этом. Но где я должен ее установить? Причина установлена в основном методе. Должен ли я снова установить его в Textbox-Sub? Я подумал, что если он общедоступен, он берет его из метода main. Большое спасибо за ваш ответ. Я уже пробовал «Установить PPslide = PowerPoint. ActivePresentation. Слайды (PowerPoint. ActivePresentation. Слайды. Количество)» в текстовом поле, но это не сработало..

3. В этом опасность использования Public переменных. Я бы добавил аргумент: Sub Textbox_1(ByVal PPslide As Powerpoint.Slide) .

4. Я сделал это, и теперь в основном методе написано «Ошибка компиляции: аргумент не является необязательным», где он вызывает Subtext1() Извините, что трачу ваше время, будучи новичком в VBA, но я действительно ценю вашу помощь

5. Измените Call Textbox_1() на TextBox_1 PPslide , или Call Textbox_1(PPslide) , если вы предпочитаете использовать Call .