Я унаследовал некоторый код, который использует три глобальные переменныеОшибка 451 при обращении Powerpoint презентации и слайдов
Global PPTApp As PowerPoint.Application
Global PPTPres As PowerPoint.Presentation
Global PPtSlides As PowerPoint.Slide
Позже в коде он использует их следующий образ
Sub PasteTablesPPT(TargetText As String, PPTRange As Range)
Dim TargetSlide As PowerPoint.Slide
PPTApp.Activate
For Each PPtSlides In PPTPres.Slides 'Error on colleagues PC
With PPtSlides.Shapes.Title.TextFrame
If .HasText Then
If UCase(.TextRange.Text) = UCase(TargetText) Then
TargetNum = CInt(PPtSlides.SlideIndex)
Exit For
End If
End If
End With
Next
На моем ПК это работает так, как должно быть, т. Е. Активирует приложение открытой Powerpoint, а затем проходит через каждый из слайдов внутри этой презентации.
Однако на моих коллегах ПК, ошибки в строке помечены. Конкретная ошибка Error 451, и я думаю, что это связано с тем, что PPtSlides не распознается как часть, если PPtPres.Slides. Также в режиме отладки, когда я наводил более PPtSlides, он говорит = «Ничего».
У нас есть те же ссылки в инструментах VBA, может ли кто-нибудь пролить свет на то, почему это будет работать на моем ПК, а не на моих коллегах?
РЕДАКТИРОВАТЬ: часть, где определяется PPTPres (в другом суб и это только экстракт этого суб)
On Error GoTo ErrHandler
Set PPTApp = GetObject(class:="PowerPoint.Application")
PPTApp.Visible = msoTrue
Set PPTPres = PPTApp.Presentations("Testing File")
Exit Sub
Вы используете тот же PPT-файл? –
Если вы проверяете значение «PPtSlides», когда строка желтого цвета, это нормально, что он ничего не говорит о том, что строка еще не выполнена. Хотя, можете ли вы ** добавить часть, были определены «PPTPres»? ** Вероятно, это оттуда. * И просто замечание, чтобы соблюдать соглашения, было бы проще понять, что вместо «PPtSlides» вместо «PPtSlides» следует использовать «PPtSlides», как для одного слайда, а не для коллекций. * – R3uK
Та же версия PowerPoint? –