使用PowerPoint对象库15.0的代码在具有库14.0的计算机上不起作用

时间:2015-06-16 18:58:41

标签: excel vba powerpoint late-binding

我有一个VBA宏,可以从Excel中的行创建PPT卡片组。它在我的PC(使用PowerPoint对象库15.0)上运行良好,但是当我分发给具有较旧PowerPoint对象库(例如,14.0)的人时,它会使用粘贴形状的格式。

我读到了早期/晚期绑定,但不知道如何解决这个问题。如何更改我的代码以使用早期绑定而不是后期绑定?我发现的其他相关问题没有答案。

2 个答案:

答案 0 :(得分:1)

使用早期绑定编写代码,这样更容易。完成后,将其更改为后期绑定。

早期绑定: 检查Ms PowerPoint 15.0对象库的参考(工具 - >参考)。

Dim pptApp As PowerPoint.Application
Dim pptPres As PowerPoint.Presentation
Dim pptSlide As PowerPoint.Slide

Set pptApp = CreateObject("Powerpoint.Application")
Set pptPres = pptApp.Presentations.Add
Set pptSlide = pptPres.Slides.Add(1, ppLayoutTwoObjects)

后期绑定: 删除对PP15对象库的引用。

Dim pptApp As Object
Dim pptPres As Object
Dim pptSlide As Object

Set pptApp = CreateObject("Powerpoint.Application")
Set pptPres = pptApp.Presentations.Add
Set pptSlide  = pptPres.Slides.Add(1, 29)

请注意,在后期绑定中,您不能使用内置常量,例如。 ppLayoutTwoObjects。你将不得不使用他们的数值。

您可以在此处阅读有关早期VS后期绑定的更多信息: http://word.mvps.org/faqs/interdev/EarlyvsLateBinding.htm

答案 1 :(得分:0)

要使用Late Binding,请在VBA IDE中进入Tools - >引用并取消选中Powerpoint条目。这将从编译器中删除所有关于Powerpoint对象模型和常量的知识。您需要将提及Powerpoint对象的任何Dim语句更改为Object,例如:

Dim mySlide As Slide

Dim mySlide As Object

如果您在此代码中使用任何常量,例如msoTextOrientationHorizontal

    ActivePresentation.Slides(1).Shapes.AddTextbox(Orientation:=msoTextOrientationHorizontal, _
    Left:=100, Top:=100, Width:=200, Height:=50).TextFrame _
    .TextRange.Text = "Test Box"

您需要将常数替换为数值。

    ActivePresentation.Slides(1).Shapes.AddTextbox(Orientation:=1, _
    Left:=100, Top:=100, Width:=200, Height:=50).TextFrame _
    .TextRange.Text = "Test Box"