Powerpoint VBA -Presentation.Slides(index) 给出“对象不支持属性错误”

问题描述 投票:0回答:1

我正在尝试创建一个自定义 Powerpoint 工具栏,它会生成一个有用布局的工具栏,当我遇到它们时,我将其保存在“templates.pptx”甲板中。

templates.pptx 中有一系列部分,我将幻灯片添加到各个部分中。我希望 VBA 能够:

  1. 指定特定部分(在下面的示例中,第 #1 部分)
  2. 找到该部分的所有幻灯片
  3. 循环每张幻灯片并生成一个 XML 按钮到字符串中,该按钮在加载时传回工具栏

加载时处理菜单调用

getProcessContent

Sub getProcessContent()
    Dim xml As String
    xml = generateXML(1)
    MsgBox (xml)
    getProcessContent = xml

End Sub

这会调用一个通用的生成 XML 函数,该函数采用部分 ID 参数

Function generateXML(sectionId)
    Dim template As presentation
    Dim path As String
    Dim xml As String
    Dim sectionName As String
    Dim Slide As Integer
    Dim slideObj As Slide
    Dim slideTitle As String
    
    'Load template layouts
    'path = AddIns("km_ppt_toolbar").path
    path = "[HIDDEN]\ppt toolbar\v2"
    Set template = Presentations.Open(path & "\templates.pptx")
    
    'Generate blank XML string
    xml = ""
    
    FirstSlide = template.SectionProperties.FirstSlide(sectionId)
    
    Lastslide = (FirstSlide + template.SectionProperties.SlidesCount(sectionId) - 1)
    
    For Slide = FirstSlide To Lastslide
        ' Add a button for each slide
        Set slideObj = template.Slides(Slide)
        slideTitle = slideObj.Shapes.Title.TextFrame.TextRange.Text
    
        slideXML = "<button id=""" & slide & """ label=""" & slideTitle & """ imageMso=""HappyFace"" size=""normal"" onAction=""InsertSlide " & slide & """ />"
        xml = xml & slideXML
    Next Slide
    
    presentation.Close
    
    generateXML = xml
    
End Function

当我运行

getProcessContent
子程序时,For 循环中的第一张幻灯片出现运行时错误,突出显示
slideObj = presentation.Slides(Slide)
行,显示“对象不支持此属性或方法”

vba powerpoint
1个回答
0
投票

您收到的“对象不支持此属性或方法”错误表明您的代码的presentation.Slides(Slide) 部分存在问题。当尝试从演示文稿对象访问幻灯片时,您可能没有定义名为演示文稿的变量。相反,您应该从您定义的模板访问幻灯片。

Function generateXML(sectionId)
Dim template As Presentation
Dim path As String
Dim xml As String
Dim sectionName As String
Dim Slide As Integer
Dim slideObj As Slide
Dim slideTitle As String


'path = AddIns("km_ppt_toolbar").path
path = "[HIDDEN]\ppt toolbar\v2"
Set template = Presentations.Open(path & "\templates.pptx")


xml = ""

FirstSlide = template.SectionProperties.FirstSlide(sectionId)

LastSlide = (FirstSlide + template.SectionProperties.SlidesCount(sectionId) - 1)

For Slide = FirstSlide To LastSlide
    
    Set slideObj = template.Slides(Slide)
    slideTitle = slideObj.Shapes.Title.TextFrame.TextRange.Text

    slideXML = "<button id=""" & Slide & """ label=""" & slideTitle & """ imageMso=""HappyFace"" size=""normal"" onAction=""InsertSlide " & Slide & """ />"
    xml = xml & slideXML
Next Slide

template.Close

generateXML = xml

结束功能

我将变量名称更新为lastslide

© www.soinside.com 2019 - 2024. All rights reserved.