Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel/PowerPoint VBA和后期绑定_Vba_Excel_Powerpoint - Fatal编程技术网

Excel/PowerPoint VBA和后期绑定

Excel/PowerPoint VBA和后期绑定,vba,excel,powerpoint,Vba,Excel,Powerpoint,我一直在开发一个工具,从excel工作簿中的数据生成PowerPoint幻灯片。我在工作的电脑和家里的电脑之间来回移动。工作电脑有Excel 2013,家用电脑有2016。这通常不是问题……当我从家用计算机移动到工作计算机时,我只需将引用从v16对象库更改为v15对象库 本周早些时候,尽管我遇到了一个无法解决的错误……解决这个问题的一个详细建议是切换到后期绑定,这样我就不需要引用了。这是一个非常简单的切换,但是它导致了ppt幻灯片中的一个错误 在原始(早期绑定)版本中,我设置如下 Dim PPA

我一直在开发一个工具,从excel工作簿中的数据生成PowerPoint幻灯片。我在工作的电脑和家里的电脑之间来回移动。工作电脑有Excel 2013,家用电脑有2016。这通常不是问题……当我从家用计算机移动到工作计算机时,我只需将引用从v16对象库更改为v15对象库

本周早些时候,尽管我遇到了一个无法解决的错误……解决这个问题的一个详细建议是切换到后期绑定,这样我就不需要引用了。这是一个非常简单的切换,但是它导致了ppt幻灯片中的一个错误

在原始(早期绑定)版本中,我设置如下

Dim PPApp As PowerPoint.Application
Dim PPPres As PowerPoint.Presentation
Dim PPSlide As PowerPoint.Slide
Dim PPLayout As CustomLayout
Dim PPshape As Variant
Dim tBox As PowerPoint.Shape
然后

Set PPApp = New PowerPoint.Application
Set PPPres = PPApp.Presentations.Open(fileName, msoTrue, , msoFalse)
'Set PPApp = New PowerPoint.Application
Set PPApp = CreateObject("PowerPoint.Application")
然后幻灯片的一部分是用

wsGenerator.Activate
wsGenerator.Range("B32:L37").Select
Selection.Copy
With PPSlide.Shapes.PasteSpecial(ppPasteMetafilePicture)
     .Top = 450
     .Left = 50
     .Height = 100
     .Width = 325
End With
生成的幻灯片的一部分如下所示

底部的表格是由上述代码粘贴的零件

当我更改为后期绑定时,我只需进行这些更改

'Dim PPApp As PowerPoint.Application
Dim PPApp As Object

'Dim PPPres As PowerPoint.Presentation
Dim PPPres As Object

'Dim PPSlide As PowerPoint.Slide
Dim PPSlide As Object

'Dim PPLayout As CustomLayout
Dim PPLayout As Object

'Dim tBox As PowerPoint.Shape
Dim tBox As Object

Dim PPshape As Variant
然后

Set PPApp = New PowerPoint.Application
Set PPPres = PPApp.Presentations.Open(fileName, msoTrue, , msoFalse)
'Set PPApp = New PowerPoint.Application
Set PPApp = CreateObject("PowerPoint.Application")
其他一切都是一样的。现在生成的图表如下所示

请注意,它现在从幻灯片底部延伸


有什么想法吗?

您似乎已将声明更改为后期绑定,但您可能仍在使用某些PowerPoint常量(例如
ppPasteMetafilePicture
),这些常量将不再解析为早期绑定值,而是默认为
0

您需要为
ppPasteMetafilePicture
定义一个本地常量,以便该值可用


另外,您应该始终使用
选项Explicit
,然后VBE将自动发现未声明常量的用法。

Duh!当然谢谢你……我也很自责,因为我通常总是使用option explicit,但这次却以某种方式失败了。@jerH在VBE设置中有一个选项“要求变量声明”-它会自动将
option explicit
添加到每个项目中的每个模块中。您还可以使用来发现所有未声明的标识符(以及其他潜在的代码问题)。为什么不试试www.pptxbuilder.com,它的功能与您正在做的类似。。。