2013-11-23 3 views
1

Я пытаюсь автоматизировать некоторые слайды с помощью VBA на OSX office 2011. Однако я не могу добавить основные фигуры. Я подумал, что это может быть что-то сложное в проекте, поэтому я ввернул его в прилагаемый тестовый скрипт. Когда я запускаю это, я получаю ошибку «неправильная процедура или метод» из последней строки. Все это работает на ПК и работает, когда я запускаю его из PowerPoint, но объектная модель кажется более сложной, когда я пытаюсь запустить ее из excel. Любая помощь приветствуется!Невозможно добавить простые фигуры в Office 2011

Sub test() 

Dim ppApp As PowerPoint.Application 
Dim pptPres As Presentation 

Dim powerpointApp As PowerPoint.Application 
Dim powerpointPres As Presentation 

Set powerpointApp = New PowerPoint.Application 

powerpointApp.Visible = msoTrue 
Application.ScreenUpdating = True 
Set powerpointPres = powerpointApp.Presentations.Add 

Dim sld1 As Slide 
Dim oLayout As CustomLayout 
Set oLayout = powerpointPres.Designs(1).SlideMaster.CustomLayouts(1) 
Set sld1 = powerpointPres.Slides.addSlide(1, oLayout) 

Dim shp1 As SmartArt 

Dim shapes1 As Object 

Set shp1 = sld1.Shapes.addShape(msoShape10pointStar, 1, 1, 1, 1) 



End Sub 
+0

Метод addshape добавляет нормальную форму, а не объект smartart; Я не могу попробовать это на Mac в настоящий момент, но я подозреваю, что он должен работать, если вы Dim shp1 как Shape, а не как SmartArt –

ответ

0

Всякий раз, когда вы сомневаетесь, если это то объект объявим его как Object и если это переменная, то объявим его как Variant, а затем просто добавить часы, чтобы увидеть Type этого объекта/переменная.

Например

Вставить этот код в модуль и добавить Watch

Option Explicit 

Sub Sample() 
    Dim shp As Object 

    Set shp = ActivePresentation.Slides(1).Shapes.AddShape(msoShape10pointStar, 10, 10, 10, 10) 

    Debug.Print shp.Name 
End Sub 

enter image description here

Другой пример для объектов

enter image description here

Аналогично для переменной

enter image description here

Таким образом, в первом случае, объект должен быть объявлен как Shape и во 2-объекты должны быть объявлены как CustomLayout и Slide соответственно, и, наконец, в 3-й переменной должен быть Double

+0

Или откройте браузер объекта, найдите метод AddShape и найдите, что он возвращает форму объект. Или Debug.Print TypeName (code_that_returns_some_object_or_value) –

+0

@SteveRindsberg: Yup :) –

Смежные вопросы