使用Excel VBA更改PowerPoint幻灯片大小-后期绑定

使用Excel VBA更改PowerPoint幻灯片大小-后期绑定,excel,vba,binding,powerpoint,Excel,Vba,Binding,Powerpoint,我是VBA新手,也是StackOverflow新手,所以请原谅任何违反礼仪的行为。我有一个项目,使用Excel VBA创建一个工具,允许用户识别源Excel文件,然后将Excel文件中每个工作表的打印区域复制到新创建的PowerPoint演示文稿中的幻灯片中。我必须使用后期绑定,因为我不能假设该工具的用户都将使用相同版本的Microsoft Office产品,或者他们将启用对PowerPoint对象库的引用。这一切我都做到了。当我尝试设置幻灯片的大小时,我被挂断了——我被要求幻灯片的大小为Pow

我是VBA新手,也是StackOverflow新手,所以请原谅任何违反礼仪的行为。我有一个项目,使用Excel VBA创建一个工具,允许用户识别源Excel文件,然后将Excel文件中每个工作表的打印区域复制到新创建的PowerPoint演示文稿中的幻灯片中。我必须使用后期绑定,因为我不能假设该工具的用户都将使用相同版本的Microsoft Office产品,或者他们将启用对PowerPoint对象库的引用。这一切我都做到了。当我尝试设置幻灯片的大小时,我被挂断了——我被要求幻灯片的大小为PowerPoint 2013中可用的4:3(或类似比例,如果需要使该工具在较旧版本的PowerPoint中工作,我一直在尝试ppSlideSizeLetterPaper)。这将引发“运行时错误“438”:对象不支持此属性或方法”。如果有人能就如何解决这个问题提出建议,我将不胜感激

以下是相关的代码片段:

Public PowerPointApp As Object
Public TargetFile As Object
…
Sub Master()
Set PowerPointApp = CreateObject("PowerPoint.Application")
Err.Clear
If PowerPointApp Is Nothing Then Set PowerPointApp = CreateObject(class:="PowerPoint.Application")
If Err.Number = 429 Then
    MsgBox "PowerPoint could not be found.  Exiting macro."
    Exit Sub
End If
Set TargetFile = PowerPointApp.Presentations.Add
    PowerPointApp.Visible = True
    PowerPointApp.Activate
…<code to add slides and paste data from Excel into the slides>
PowerPointApp.TargetFile.PageSetup.SlideSize = 2    ‘this is where the error is thrown.  2 is the numeric equivalent of ppSlideSizeLetterPaper
Public PowerPointApp作为对象
作为对象的公共目标文件
…
副船长()
设置PowerPointApp=CreateObject(“PowerPoint.Application”)
呃,明白了
如果PowerPointApp为空,则设置PowerPointApp=CreateObject(类:=“PowerPoint.Application”)
如果错误号=429,则
找不到MsgBox“PowerPoint。正在退出宏。”
出口接头
如果结束
设置TargetFile=PowerPointApp.Presentations.Add
PowerPointApp.Visible=True
PowerPointApp.Activate
…<添加幻灯片并将Excel中的数据粘贴到幻灯片中的代码>
PowerPointApp.TargetFile.PageSetup.SlideSize=2'这是引发错误的地方。2是ppSlideSizeLetterPaper的数字等效项

Targetfile在该上下文中未定义-在应用程序对象上没有调用该方法或属性

因为您已经有了一个同名的对象,所以只需使用它即可

TargetFile.PageSetup.SlideSize = 2 

是的。应用程序对象没有TargetFile属性,这就是为什么会出现错误。此外,我会在您添加演示文稿之后和向幻灯片添加任何内容之前,立即移动设置幻灯片大小的行。否则,当你调整大小时,内容很容易被扭曲。多亏了Trigger和Steve。我尝试了Trigger的建议(并根据Steve的建议重新定位了令人不快的代码行),它工作得非常好。触发器,我会在测试中尝试这个,但我认为(显然是错误的)我必须引用PowerPointApp对象,因为我使用的是后期绑定。很明显,我不太明白延迟绑定到底是如何工作的——我必须在这篇文章中做一些解释。早/晚绑定指的是二进制接口。早期程序知道跳转到vtable中#5的地址(对于第5种方法)。在后期绑定中,这是一次对话。你好,对象,您是否有一个名为
print
的命令,对象回答
是,编号5
。然后你的程序说请执行5号命令。物体说是肯定的。因此,早期绑定是一种具有一级间接性和快速性的函数调用。一切都是在编译时完成的。后期绑定很慢,您用半英语与对象通信,您不需要知道对象是什么。如果excel文件和word文件都支持打印,那么在后期绑定中从它们创建对象并要求它们打印就可以了。如果一家新公司在您的程序发布后发布了文字处理器,并且它支持打印,那么您的程序将在后期绑定(但不是早期绑定)中使用它。此外,通常最好连接到文档而不是应用程序。如果需要应用程序对象,可以使用类似于
TargetFile.Application.caption的内容,其中目标文件是演示对象。