Проблемы с константами VBA - PullRequest
       10

Проблемы с константами VBA

1 голос
/ 29 апреля 2019

Ранее сегодня у меня была ошибка времени выполнения 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 сделал свое дело.

Этот комментарий, который я нашел дал мне решение.Теперь я знаю, что использовал позднюю привязку, объявив mySlide как Объект.Теперь я знаю, что это неэффективно и, очевидно, может привести к некоторым проблемам, с которыми я столкнулся.Но почему?Есть ли какая-то логика за этим или я просто должен признать, что «некоторые константы VBA не распознаются, и они рассматриваются как переменные» при позднем связывании?Кроме того, это случайное вхождение, потому что точно такой же код работал раньше?

1 Ответ

1 голос
/ 29 апреля 2019

Я всегда использую позднюю привязку, чтобы мой код запускался на других ПК без активации зависимостей.Переносимость имеет решающее значение.Я хотел бы затем определить константы, которые будут установлены при раннем связывании вручную.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...