有谁知道PowerPoint中的VBA / VSTO编程的未来是什么?我一直在研究Office自动化项目,发现使用PowerPoint特别令人沮丧,因为它似乎比Excel或Word中的VBA支持低一级。
感觉MS正试图逐步淘汰PowerPoints中对VBA的支持,因为他们在2007版本中删除了宏录制,并且对象模型缺少一些关键功能支持。
答案 0 :(得分:8)
我不确定这是否是您想听到的答案,但使用VBA开发PowerPoint实际上是好的。我做了很多(以及Word和Excel)并且它足够强大。可以使用VBA编程的PowerPoint OM随每个新版本的PPT更新。在PPT 2007中,您可以对幻灯片上的任何对象创建自定义XML - 远比Excel和Word中的选项强大。相比之下,Word 2007具有内容控件,为了使PPT成为某种Crystal Reports轻量级替代品,它将受益于。例如,在PPT 2010(测试版)中,您可以使用Word / Excel 2010以编程方式创建SmartArt。您还可以以编程方式更好地使用媒体元素。从OM的角度来看,VSTO并不比VBA提供更多的东西。
它可能仅取决于您的需求 - 您是否创建了标准子弹幻灯片?你做扩展动画吗?你做报道吗?你在创建电子学习“应用程序”吗?如果您对OM有特定问题,我们可以尝试在这里为您提供帮助(但可能该功能不存在)。
同意删除宏记录器的类型,这是一个有用的功能。直接使用PML / DML也很痛苦。有些事情我希望OM也支持。但是,与洞穴探险同时,我不相信VBA会很快消失。
注意:这不起作用。它只是作为一个起点提供,如果民众想要将其发展为可能有用的东西(如果你能使它工作,请随时编辑这篇文章)。
粘贴以下代码。
Public WithEvents PPTEvent As Application
Private Declare Function GetCursorPos Lib "user32" (ByVal lpPoint As POINTAPI) As Long
Private Type POINTAPI
x As Long
y As Long
End Type
Dim ret As Long
Dim mousePosition As POINTAPI
Private Sub PPTEvent_WindowSelectionChange(ByVal Sel As Selection)
Dim ElementID As Long
Dim Arg1 As Long
Dim Arg2 As Long
With Sel
If .Type = ppSelectionShapes Then
Dim sr As ShapeRange
sr = .ShapeRange
If sr.Type = msoChart Then
Dim sh As Shape
Dim slideNumber As Integer
slideNumber = ActiveWindow.View.Slide.SlideIndex
sh = ActivePresentation.Slides(slideNumber).Shapes(sr.Name)
Dim crt As Chart
crt = sh.Chart
H = ActiveWindow.Height
w = ActiveWindow.Width
ret = GetCursorPos(mousePosition)
x = mousePosition.x
y = mousePosition.y
crt.GetChartElement(x, y, ElementID, Arg1, Arg2)
MsgBox("X: " & x & ", Y: " & y & vbNewLine & _
"ElementID: " & ElementID & ", Arg1: " & Arg1 & ", Arg2: " & Arg2)
End If
End If
End With
End Sub
在常规模块中,您可以使用以下命令启动/停止事件处理:
Public newPPTEvents As New clsPPTEvents
Sub StartEvents()
Set newPPTEvents.PPTEvent = Application
End Sub
Sub EndEvents()
Set newPPTEvents.PPTEvent = Nothing
End Sub
请注意,在#2中的代码中,由于GetCursorPos返回的内容,它不起作用,即屏幕X,Y。在查看事件时,看起来GetChartElement需要的是Window或Pane边界框的坐标或只是图表本身。
答案 1 :(得分:4)
Powerpoint从未成为VBA开发的热门平台。我可以理解在该上下文中删除VBA的UI功能。 Tt非常容易包含VBA对Powerpoint的强大支持和Excel - 如果有的话,它不会很快消失。从长远来看,我的资金将用于传统支持,微软对问题的帮助很小甚至不存在。
请记住,MS完全是向后兼容性 - 当他们放弃时,他们会非常小心。
答案 2 :(得分:1)
我同意PPT远低于其他vba。最重要的是,它看起来像马车 Weird bug on powerpoint vba
模型事件很尴尬,就像没有自动执行一样 How to automatically trigger the App Object initialization in Powerpoint?
auto_open只能通过创建插件才能以一种环绕的方式实现接收你的ppt并且不知道如何安装插件的用户:(
答案 3 :(得分:0)
请参阅此article,了解为什么选择VSTO。与VBA for Excel相比,但同样适用于Powerpoint。