VBA常量的问题

问题描述 投票:1回答:1

今天早些时候我有一个运行时错误448(找不到命名对象),下面的代码用Excel编写:

Sub PPTextbox()

Dim PowerPointApp As PowerPoint.Application
Dim myPresentation As PowerPoint.Presentation
Dim mySlide As Object
Dim DestinationPPT As String

Set PowerPointApp = CreateObject("PowerPoint.Application")
DestinationPPT = "H:\VBA\Kapitalanlageplanung - Präsentationen\Monatsbericht\MonatsberichtTemplate.pptm"
Set myPresentation = PowerPointApp.Presentations.Open(DestinationPPT)
Set mySlide = myPresentation.Slides.Add(myPresentation.Slides.Count + 1, 12)

mySlide.Shapes.AddTextbox(Type:=msoTextOrientationHorizontal, Left:=100, Top:=100, Width:=200, Height:=50).TextFrame.TextRange.Text = "Test Box"

End Sub

事实证明,问题是Type:=msoTextOrientationHorizontal,用一个简单的1取而代之。

This comment I found给了我解决方案。我现在知道我通过将mySlide声明为对象来使用后期绑定。我知道现在它效率低下,显然会导致像我遇到的一些问题。但为什么?它背后是否有一些逻辑,或者我只是必须接受“一些VBA常量未被识别,并且在后期绑定时它们被视为变量”?此外,这是一个随机发生,因为完全相同的代码工作较早?

excel vba powerpoint
1个回答
1
投票

我总是使用后期绑定,以便我的代码可以在其他PC上运行而无需激活依赖项。便携性至关重要。我喜欢然后定义将通过手动提前绑定设置的常量。

Const msoTextOrientationHorizontal = 1    

Sub PPTextbox() 
    Dim PowerPointApp As Object
    Set PowerPointApp = CreateObject("PowerPoint.Application")
    Dim DestinationPPT As String
    DestinationPPT = "H:\VBA\Kapitalanlageplanung - Präsentationen\Monatsbericht\MonatsberichtTemplate.pptm"
    Dim myPresentation As Object
    Set myPresentation = PowerPointApp.Presentations.Open(DestinationPPT)
    Dim mySlide As Object
    Set mySlide = myPresentation.Slides.Add(myPresentation.Slides.Count + 1, 12)

    mySlide.Shapes.AddTextbox(Type:=msoTextOrientationHorizontal, Left:=100, Top:=100, Width:=200, Height:=50).TextFrame.TextRange.Text = "Test Box" 
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.