gpt4 book ai didi

vba - PowerPoint VBA/VSTO 有前途吗?

转载 作者:行者123 更新时间:2023-12-04 10:32:26 24 4
gpt4 key购买 nike

关闭。这个问题是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 不会很快消失。

注意 : 这不起作用 .如果人们想尝试将其开发成可以工作的东西,它只是作为一个起点提供(如果你能让它工作,请随时编辑这篇文章)。

  • 创建一个名为“clsPPTEvents”的类
  • 粘贴以下代码。
    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 边界框的坐标或只是图表本身。

    关于vba - PowerPoint VBA/VSTO 有前途吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1715492/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com