Ошибки с объектами Slide и Shape в Excel VBA - PullRequest
0 голосов
/ 05 августа 2020

Я пытаюсь получить ссылки, по которым PowerPoint подключен к VBA в Excel. Я получаю две разные ошибки из двух разных подходов, которые я приложу ниже, и обе связаны с вызовом объектов Slide и Shape в PowerPoint. Первый макрос приводит к ошибке «Требуется объект», начиная с первой строки файла For L oop.

Sub Macro1()
'Opening up the PowerPoint to retrieve the links
Dim PPTName As String
Dim PPTApp As Object

PPTName = Sheets("Sheet1").Range("G2").Value

Set PPTApp = CreateObject("PowerPoint.Application")
PPTApp.Presentations.Open PPTName

Dim i As Integer
Dim j As Long
Dim k As Long
i = 10

For j = 1 To PPT.ActivePresentation.Slides.Count
    For k = 1 To PPT.ActivePresentation.Slides(i).Shapes.Count
        If PPTShape.Type = msoLinkedPicture Or PPTShape.Type = msoLinkedOLEObject Then
            Sheets("Sheet1").Range("G" & CStr(i)) = PPTShape.LinkFormat.SourceFullName
            i = i + 1
        End If
        k = k + 1
    Next k
    
    j = j + 1
Next j

End Sub

. Второй макрос приводит к ошибке «Ошибка компиляции», начинающейся с «Set PPTSlides = CreateObject ("PowerPoint.Slides"). "

Sub Macro2()

Dim PPTName As String
Dim PPTApp As Object

PPTName = Sheets("Sheet1").Range("G2").Value

Set PPTApp = CreateObject("PowerPoint.Application")
PPTApp.Presentations.Open PPTName

Dim PPTSlides As Object
Dim PPTShapes As Object
Set PPTSlides = CreateObject("PowerPoint.Slides")
Set PPTShapes = CreateObject("PowerPoint.Shapes")

For Each PPTSlides In PPT.ActivePresentation.Slides
    For Each PPTShapes In PPT.ActivePresentation.Shapes
        If PPTShape.Type = msoLinkedPicture Or PPTShape.Type = msoLinkedOLEObject Then
            Sheets("Sheet1").Range("G" & CStr(i)) = PPTShape.LinkFormat.SourceFullName
            i = i + 1
        End If
    Next PPTShapes
Next PPTSlides

End Sub

Я раньше не использовал VBA в Excel для работы с PowerPoint, так что это новая кривая обучения для меня. Из-за этих ошибок я также не смог проверить свой For L oop на наличие ошибок. Любая помощь приветствуется по этим вопросам. Заранее спасибо!

1 Ответ

0 голосов
/ 05 августа 2020

К счастью, это лишь незначительная проблема: используется неправильный индекс:

i = 10

For j = 1 To PPT.ActivePresentation.Slides.Count
    For k = 1 To PPT.ActivePresentation.Slides(i).Shapes.Count

Если вы присмотритесь, вам нужно использовать j вместо i в последней строке.

И для второго листинга кода вы можете просто опустить строки

Set PPTSlides = CreateObject("PowerPoint.Slides")
Set PPTShapes = CreateObject("PowerPoint.Shapes")

, потому что внизу первая переменная будет установлена ​​как ActivePresentation.Slides.

Как вы используете for each l oop, также имеет смысл переименовать эти две переменные из множественного числа в единственное, т.е. PPTSlide вместо PPTSlides.

Обратите внимание, что For Each PPTShapes In PPT.ActivePresentation.Shapes делает не работает. Вам нужно получить Формы из For Each PPTShape in PPTSlide.Shapes.

Всего наилучшего

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...