6

我希望能够从加载项本身的一些 VBA 代码访问 PowerPoint 加载项文件(另存为“PowerPoint 加载项 (*.ppa)”的演示文稿的文档属性。

如果有助于理解问题,我实际上要做的是读取一个自定义文档属性,该属性存储了加载项的版本号,以便我可以在对话框中显示它。

使用 Word 和 Excel,我可以使用ThisDocument&来执行此操作ThisWorkbook,这两者都返回对包含正在运行代码的文档的引用。ThisPresentation但是, PowerPoint中没有等效项。

对于标准的 PowerPoint 演示文稿或模板,我可以使用ActivePresentation. 但是,此方法不适用于加载项。

有任何想法吗?请不要建议我应该在哪里粘贴版本号:-)

4

3 回答 3

2

像其他人一样,我期望 PowerPoint 中出现 ThisPresentation 对象。我想到了另一种方法来完成它,没有硬编码的文件名。显然,任何一段代码都需要知道如何区分项目。我选择为此使用项目名称(项目资源管理器中的默认名称“VBAProject”):它不用于其他任何用途,任何用户都不会更改它,如果它受到保护,他们就不能。

这是我的代码(将 MyProject 更改为您自己的项目名称):

Function ThisPresentation() As Presentation
Dim p As Presentation

For Each p In Presentations
    If p.VBProject.Name = "MyProject" Then
        Set ThisPresentation = p
        Exit Function
    End If
Next
End Function
于 2013-02-28T08:40:32.317 回答
0

2010 年 2 月 2 日修订:清理答案以仅显示最终解决方案


这是执行要求的方法,没有DLL。真的很简单:

Sub ReturnPPAasPresentation()
    Dim p As Presentation
    Set p = Presentations("presentation1.ppa")
    Dim title As String, version As String
    version = p.CustomDocumentProperties("Version").Value
    title = p.BuiltInDocumentProperties("Title").Value
    MsgBox "Version: " & version & " of " & title, vbOKOnly, title
End Sub
于 2009-09-24T20:30:46.200 回答
-1

总体想法归功于 macnerd nerd,但添加了 OP 要求的 AddIn 功能。不幸的是,加载项没有 VBProject 名称,因此不那么健壮:

Function ThisPresentation(project_name As String) As Object
Dim p As Object

all_presentations = Array(Application.AddIns, Application.Presentations)
For Each pArray In all_presentations
    For Each p In pArray
        Debug.Print p.FullName
        If InStr(p.FullName, project_name) > 0 Then
            Set ThisPresentation = p
            Exit Function
        End If
    Next
Next
End Function
于 2017-07-15T03:29:26.243 回答