【问题标题】:Set Zoom in a PowerPoint document window without activation在不激活的情况下设置放大 PowerPoint 文档窗口
【发布时间】:2017-03-21 10:29:52
【问题描述】:

我正在从 Excel-VBA 文件创建 PPT,并希望将 ppt 的缩放设置为 100%。

如何在不激活 PowerPoint 窗口的情况下从 Excel 文件执行此操作?
或者我怎么能通过激活窗口来做到这一点?

以下excel中的示例代码在桌面上打开一个ppt文件并尝试设置此ppt的缩放但似乎不起作用:

Sub CreatePptAndSetZoom()
    Dim ppApp As PowerPoint.Application
    Dim ppPres As PowerPoint.Presentation
    Dim strTemplate$

    'Look for existing instance of PPT
    On Error Resume Next
    Set ppApp = GetObject(, "PowerPoint.Application")
    On Error GoTo 0

    'Create new instance of PPT if no instance exists
    If ppApp Is Nothing Then Set ppApp = New PowerPoint.Application

    'Define Path of Template and open new ppt
    strTemplate = Environ("UserProfile") & "\Desktop\Test.pptx"
    Set ppPres = ppApp.presentations.Open(strTemplate, False, True, True)

    'Set Zoom
    ppApp.ActiveWindow.View.Zoom = 100

End Sub

在 Excel 文件中设置来自 Excel 文件的缩放使用稍有不同的语句(不带 View):

Application.ActiveWindow.Zoom = 100

有没有人知道如何在没有ppt文件中的任何代码的情况下解决这个问题?

【问题讨论】:

    标签: vba excel powerpoint


    【解决方案1】:

    在一些帮助下(感谢 R3uK!)我根据问题中的最后一个代码找到了以下解决方案:

    解决方案:

    使用以下内容代替 ppApp.ActiveWindow.View.Zoom = 100

    ppPres.Windows(1).Panes(2).Activate --> 激活主滑动窗格
    ppPres.Windows(1).View.Zoom = 100 --> 设置活动窗格在窗口中的缩放比例


    一些备注:强>

    ppPres.Windows(1) -> 仅包含演示文稿的窗口的集合

    ppApp.Windows(1) -> 包含所有打开的 ppt 窗口的集合。因此,如果在第 1 项之前打开 ppt,则不会返回正确的窗口。

    ppPres.Windows(1).Panes(2) -> ppt 窗口内的窗格集合,在我的情况下,这些窗格是依赖于项目编号的以下 ViewType:

    第 1 项:ppViewThumbnails(左侧的微型幻灯片)
    第 2 项:ppViewSlide(主视图)
    第 3 项:ppViewNotesPage(底部评论区)

    所以在我的示例中,我想更改主幻灯片视图窗格中第 2 项的缩放。

    【讨论】:

      【解决方案2】:

      您的代码使用延迟出价可以顺利运行:

      Sub ZoomInPptFromExcel()
          Dim ppApp As Object
      
          'Get existing instance of PPT
          On Error Resume Next
          Set ppApp = GetObject(, "PowerPoint.Application")
          On Error GoTo 0
      
          'Set Zoom
          ppApp.ActiveWindow.View.Zoom = 100
      
      End Sub
      

      Sub CreatePptAndSetZoom()
          Dim ppApp As Object 'PowerPoint.Application
          Dim ppPres As Object 'PowerPoint.Presentation
          Dim strTemplate$
      
          'Look for existing instance of PPT
          On Error Resume Next
          Set ppApp = GetObject(, "PowerPoint.Application")
          On Error GoTo 0
      
          'Create new instance of PPT if no instance exists
          If ppApp Is Nothing Then Set ppApp = CreateObject("PowerPoint.Application")
      
          'Define Path of Template and open new ppt
          strTemplate = Environ("UserProfile") & "\Desktop\Test.pptx"
          Set ppPres = ppApp.Presentations.Open(strTemplate, False, True, True)
          'Set ppPres = ppApp.Presentations.Add
      
          'Set Zoom
          ppApp.ActiveWindow.View.Zoom = 100
      End Sub
      

      【讨论】:

      • 感谢您的回答。但我认为这与后期或早期绑定无关。当我打开一个新的 ppt 然后运行代码时,它适用于后期和早期绑定。当我尝试设置 VBA 创建的 ppt 文件的缩放比例时,这两个代码似乎都只会因自动化错误而失败。
      • @JackTheFruit:应用程序可见吗?请编辑您的帖子以提供您的完整代码,以便我们看到您在做什么。
      • @JackTheFruit :我已经编辑了我的帖子以包含您的代码的工作版本,我还使用Set ppPres = ppApp.Presentations.Add 对其进行了测试,这两种情况都适合我。
      • 感谢您的更新。但遗憾的是它对我不起作用。创建一个新文件Set ppPres = ppApp.Presentations.Add 并在之后设置缩放起作用了。但是,当我尝试打开现有文件并尝试在之后设置缩放时,出现自动化错误。我还尝试了模板的不同文件夹,以及打开方法的标准参数。我不知道如何继续解决问题......对不起。不小心过早发送此评论。
      • @JackTheFruit:你能准确点吗?告诉我出了什么问题,以便我能够理解并尝试找到解决方案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-09
      • 1970-01-01
      相关资源
      最近更新 更多