PowerPoint 2007 - 如何使用Application.NewPresentation事件处理程序?

时间:2010-09-16 06:00:28

标签: vba event-handling powerpoint powerpoint-vba powerpoint-2007

所以我发现PowerPoint 2007确实支持应用程序级别的事件处理程序。例如Application.NewPresentation或甚至Application.AfterNewPresentation

这里描述http://msdn.microsoft.com/en-us/library/ff745073.aspx

但真正的问题是,我该如何使用这些?我在哪里使用它们? 为了告诉你我的场景,我想要的是将动态文本插入到几个文本框中。我有宏代码来执行此操作,它正如我想要的那样工作。但是,一旦从potm模板创建新演示文稿,我就需要触发宏。而且只在那个事件上。就像在Word 2007中一样。

我从哪里开始?我试图创建一个看起来像这样的子并将其保存为potm文件并基于该模板打开一个新的演示文稿。什么也没发生。

Private Sub App_NewPresentation(ByVal Pres As Presentation)
    MsgBox "Running!"
End Sub

编辑:可以使用XML编辑器打开任何Office 2007文件。我使用Microsoft Office的自定义UI编辑器,然后按照此处提供的指南添加Office 2007自定义UI.XML部分:http://www.pptalchemy.co.uk/PowerPoint_Auto_Open_Code.html

但是当PowerPoint基于该模板创建新的演示文稿时,我遇到了问题。 打开模板本身就可以了。事件处理程序在那里,代码运行得很漂亮。但基于它的新演示文稿?没办法,处理程序也在那里。但它说它无法找到宏。即使宏也在新的演示文稿中,因为我可以打开Visual Basic编辑器并找到宏然后运行它。它只是汽车配件似乎没有像它应该的那样工作。

2 个答案:

答案 0 :(得分:2)

在PowerPoint VBA中创建自动宏的唯一方法是将您的文件作为加载项(.ppa或.ppam - 而不是.pptx / .pptm / .potm / etc) 。创建它的方法是:

  1. 创建一个类模块。在顶部 (在任何Option XXX之后),放 Public WithEvents App As Application然后把你的 以上常规。
  2. 创建任何名称的模块并放置:

    Dim X As New Class1
    Sub AutoOpen()
        Set X.App = Application
        ''# Code to create new presentation
    End Sub
    
  3. 同样,这不符合您对.potm的要求。您可以考虑的另一种方法已被折旧,但它仍然有效,即创建一个向导文件。

答案 1 :(得分:2)

创建的演示文稿中的宏无法运行,因为auto_open宏仅适用于插件。根据您的方式,您必须重新加载功能区才能在您想要运行的新演示文稿中启动该事件。