【问题标题】:How to create a PowerPoint with Excel VBA without seeing the application如何在不查看应用程序的情况下使用 Excel VBA 创建 PowerPoint
【发布时间】:2017-06-17 11:51:15
【问题描述】:

我想知道如何从 Excel VBA(我已经有代码)创建一个新的 PPT,但在创建时看不到应用程序。我发现了一些见解,但它仅在打开现有的 PPT 文件时才有效,但我正在创建一个新文件。

Dim pptApp As PowerPoint.Application
Dim pptPres As PowerPoint.Presentation
Dim pptSlide As PowerPoint.Slide
Dim pptShape As PowerPoint.Shape
Dim excelTable As Excel.Range
Dim SlideTitle As String
Dim SlideText As String
Dim SlideObject As Object
Dim pptTextbox As PowerPoint.Shape
Dim SlideNumber As String

On Error Resume Next
Set pptApp = New PowerPoint.Application
Err.Clear

Set pptPres = pptApp.Presentations.Add
pptPres.PageSetup.SlideSize = ppSlideSizeOnScreen

【问题讨论】:

  • On Error Resume Next 在这里 IMO 是一个特别糟糕的主意。如果您无法创建 PowerPoint 应用实例,您的代码应该退出,而不是像什么都没发生一样继续运行。
  • 您能否edit 澄清一下代码 sn-p 到底是什么?是你试图让pptApp 隐形吗?还是从打开现有 ppt 文件的代码中摘录?因为该代码根本没有打开任何东西,而且似乎指定了.Visible = False,所以不清楚它如何与实际问题联系起来。
  • 另外...您似乎引用了 PowerPoint 库(As PowerPoint.Application 确实 编译,对吗?) - 那么您为什么要延迟创建应用实例?只需Set pptApp = New PowerPoint.Application
  • 澄清一下,Err.ClearOn Error GoTo 0不是相同。第一个只是擦除记录的错误 - 第二个实际上重新启用错误捕获。
  • 谢谢。我编辑了我的代码。我需要有 On error Resume Next,因为我在幻灯片上粘贴了一些图片,如果没有该代码,它会给我一个错误,但它可以完美粘贴。现在,使用编辑后的代码,演示文稿仍然可见!

标签: vba excel powerpoint


【解决方案1】:

PowerPoint.Application 上调用 .Active 就是这样做的 - 它会激活它,从而使窗口可见:

Dim ppt As PowerPoint.Application
Set ppt = New PowerPoint.Application
Debug.Print ppt.Visible  '<--Prints 0 (msoFalse)
ppt.Activate             '<--THIS SHOWS THE WINDOW.
Debug.Print ppt.Visible  '<--Prints -1 (msoTrue)

只需完全删除pptApp.Activate 行。

如 cmets 中所述,您还需要修复错误处理程序。在这种情况下,最好的解决方法是完全删除它。 GetObject 如果存在,则返回现有实例。我假设当您说“创建一个新的 PPT”时,您不是的意思是“附加到正在运行的 PowerPoint 实例(如果存在),否则创建一个新的”。这就是您的代码当前所做的。

同样如 cmets 中所述,如果您引用了 Microsoft PowerPoint X.X 对象库(由 Dim pptApp As PowerPoint.Application 证明),您也不应该使用 CreateObject。那是为了后期绑定。如果您有参考,请使用早期绑定。

最后,当您创建 PowerPoint.Application 时,它默认情况下是不可见的。您可以通过将代码减少到这一行来“修复”您的代码:

Set pptApp = New PowerPoint.Application

【讨论】:

  • 谢谢。好的,我根据您的帖子和其他 cmets 编辑了我的代码。但它仍然可见,可能是因为我的 pptpresestation.add 代码?
  • Presentations.Add 采用可选参数 WithWindow。 Set pptPres = Presentations.Add(msoFalse) 将为您提供一个无窗口(不可见)演示文稿的引用,您可以使用该演示文稿进行大多数(如果不是全部)操作。
  • 我正在使用 .Add 打开一个空的演示文稿文件,然后从外部文件插入文件。当可见时,这工作正常但是当我尝试使用不可见的演示文稿时 PPT 崩溃......
猜你喜欢
  • 2012-01-13
  • 1970-01-01
  • 1970-01-01
  • 2020-12-06
  • 2017-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多