- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
关闭。这个问题是opinion-based .它目前不接受答案。
想改进这个问题?更新问题,以便 editing this post 提供事实和引用来回答它.
6年前关闭。
Improve this question
有谁知道 PowerPoint 中的 VBA/VSTO 编程的 future 会怎样?我一直在从事一个 Office 自动化项目,发现使用 PowerPoint 尤其令人沮丧,因为它似乎比 Excel 或 Word 中的 VBA 支持低一级。
感觉就像 MS 正试图在 PowerPoint 中逐步取消对 VBA 的支持,因为他们在 2007 版中删除了宏录制并且对象模型缺乏一些关键功能支持。
最佳答案
我不确定这是否是您想听到的答案,但使用 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
关于vba - PowerPoint VBA/VSTO 有前途吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1715492/
我是一名优秀的程序员,十分优秀!