如何在 Powerpoint 中添加调用函数(无宏)的形状?

How to add a shape in Powerpoint that calls a function (no macro)?

我目前在一些视觉基础方面遇到问题。我已使用以下代码成功地将形状添加到我当前的 Powerpoint 幻灯片中:

dim pres as Microsoft.Office.Interop.Powerpoint
dim slide as pres.ActivePresentation.Slides(1)
With slide.Shapes.AddShape(Type:=Microsoft.Office.Core.MsoAutoShapeType.msoShapeActionButtonCustom, Left:=50, Top:= 50, Width:=70, Height:=30)
    .Name="Test"
End With

所以我现在想要做的是函数,无论何时单击它(在演示模式下),它都应该调用在同一个 class 中定义的名为 "test()" 的 Sub。我做不到。我现在所能做的就是使用以下代码从演示文稿中调用宏:

dim pres as Microsoft.Office.Interop.Powerpoint
dim slide as pres.ActivePresentation.Slides(1)
With slide.Shapes.AddShape(Type:=Microsoft.Office.Core.MsoAutoShapeType.msoShapeActionButtonCustom, Left:=50, Top:= 50, Width:=70, Height:=30)
    .Name="Test"
    With .ActionSettings(PowerPoint.PpMouseActivation.ppMouseClick)
        .Run = "test"
        .Action = PowerPoint.PpActionType.ppActionRunMacro
    End With
End With

但是由于我的演示文稿中没有任何宏,这将导致错误。当我在 powerpoint 中使用集成的 visual basic 编辑器手动添加宏时,它就按我预期的方式工作。

有没有什么方法可以在我的 visual basic 代码中直接调用 Sub 而无需创建宏?

我希望我说清楚了,你们理解了我的问题。

提前致谢。

您的代码 运行 是来自启用宏的演示文稿还是加载项?

我对你想做的事情的理解是这样的:

  1. 以编程方式向幻灯片添加形状,将其操作方法设置为 运行 宏 "test" 然后在幻灯片放映模式下单击。
  2. 以编程方式将宏 "test" 添加到演示文稿。

如果这是正确的,则第 2 步需要执行以下操作:

  1. 将演示文稿 (.pptx) 重新保存为启用宏的文件,例如.pptm、.potm、ppsm
  2. PowerPoint 在文件/选项/信任中心/信任中心设置/开发人员宏设置下设置为"Trust access to the VBA project object model"
  3. 您添加对 Microsoft Visual Basic for Applications Extensibility 5.3 库的引用
  4. 然后您使用 VBA 对象模型(需要参考上面的内容)来创建代码模块,然后将过程插入 VBA 项目中。从这里开始探索对象模型:ActivePresentation.VBProject

这将添加一个标准代码模块:

ActivePresentation.VBProject.VBComponents.Add vbext_ct_StdModule

这从字符串中添加了一个过程(您也可以从文件中添加):

ActivePresentation.VBProject.VBComponents(1).CodeModule.AddFromString

我偶然发现了我正在寻找的解决方案。我没有找到将动作引用到 powerpoint 形状的方法,而是可以设法从 OLEObject 调用函数。 OLEObject 有处理程序,因此可以简单地使用点击事件。

首先,您需要添加对 Forms 和 Visual basic for Application 的引用,只需添加

Imports System.Windows.Forms
Imports Microsoft.Vbe.Interop

到您的代码。

其次,您需要向幻灯片添加一个 OLEObject 命令按钮并向其添加一个处理程序,您可以通过以下方式实现:

Dim oshape As Microsoft.Office.Interop.PowerPoint.Shape = ppt.ActivePresentation.Slides(1).Shapes.AddOLEObject(Left:=100, Top:=100, _
        Width:=150, Height:=50, ClassName:="Forms.CommandButton.1")
    With oshape.OLEFormat.Object
        .Name = "Button1"
        .Caption = "Test"
        .Font.Bold = True
        .Font.Name = "Verdana"
        .Object.BackColor = RGB(25, 25, 50)
    End With
    AddHandler CType(oshape.OLEFormat.Object, MSForms.CommandButton).Click, _
          AddressOf Button1_Click

我在 vbarchiv 找到了一个非常有用的答案。

感谢您的帮助