我有一个VBA宏,可以从Excel中的行创建PPT卡片组。它在我的PC(使用PowerPoint对象库15.0)上运行良好,但是当我分发给具有较旧PowerPoint对象库(例如,14.0)的人时,它会使用粘贴形状的格式。
我读到了早期/晚期绑定,但不知道如何解决这个问题。如何更改我的代码以使用早期绑定而不是后期绑定?我发现的其他相关问题没有答案。
答案 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"