我目前在使用一些基本的东西时遇到了问题。我已使用以下代码成功将形状添加到当前的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
所以我现在要做的就是函数,无论何时单击它(在演示模式下)它都应该调用在同一个类中定义的名为“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而不必创建宏?
我希望自己清楚明白,你们明白我的问题。
提前致谢。
答案 0 :(得分:0)
您的代码是在支持宏的演示文稿还是加载项中运行?
我对你想做的事情的理解是这样的:
如果这是正确的,步骤2需要以下内容:
这会添加一个标准代码模块:
ActivePresentation.VBProject.VBComponents.Add vbext_ct_StdModule
这会从字符串中添加一个过程(您也可以从文件中执行此操作):
ActivePresentation.VBProject.VBComponents(1).CodeModule.AddFromString
答案 1 :(得分:0)
我偶然发现了我正在寻找的解决方案。我没有找到一种方法将动作引用到powerpoint形状,而是可以设法从OLEObject调用一个函数。 OLEObject具有处理程序,因此可以简单地使用click事件。
首先,您需要添加对Forms和Visual Basic for Application的引用,只需添加
即可。Imports System.Windows.Forms
Imports Microsoft.Vbe.Interop
代码。
其次,您需要向幻灯片添加一个OLEObject CommandButton并为其添加处理程序,您可以通过以下方式实现此目的:
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找到了一个非常有用的答案。
感谢您的帮助