Ошибка: Переменная типа Object не установлена

Автор Gulogulo, 22 апреля 2022, 22:20

0 Пользователи и 1 гость просматривают эту тему.

Gulogulo

Добрый день!
Стырила из энциклопедии вот такую строку:

Set myDocument = ActivePresentation.Slides(1)

Ругается именно на это строку. Что делать? Помогите пожалуйста!


kompilainenn

А можно чуть ширше вопрос осветить? В какой ситуации, в каком файле и при каких действиях, кто именно ругается и какими словами? А также было бы совсем уж кучеряво приложить сам проблемный файл и рассказать, в какой версии офиса сие происходит. Благодарствую за ответ премного и заранее
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

mikekaganski

А ещё - ссылку на энциклопедию.

Потому что ActivePresentation - это VBA.
С уважением,
Михаил Каганский

Gulogulo

Чуть шире.
Вот тут есть видосик: https://youtu.be/fVy-CM4-EoY
Это генератор случайных чисел. Он генерирует (внезапно) случайное число от 1 до 6 и в презентацию вставляется картинка кубика, соответствующая этому числу.
В видео автор пишет руками вот это:

Dim X As Integer
X = Int((6 * Rnd) + 1)    ' Generate random value between 1 and 6.

Dim Y As Integer
X = Int((6 * Rnd) + 1)    ' Generate random value between 1 and 6.

Тут всё более-менее понятно - это генерация случайного числа.
Далее надо связать полученное число с открытием файла с соответствующим номером.
Автор открывает энциклопедию:
https://docs.microsoft.com/ru-ru/office/vba/api/powerpoint.shapes.addpicture

И сдувает оттуда пример:

Set myDocument = ActivePresentation.Slides(1)
myDocument.Shapes.AddPicture FileName:="c:\microsoft office\" & _
    "clipart\music.bmp", LinkToFile:=msoTrue, SaveWithDocument:=msoTrue, _
    Left:=100, Top:=100, Width:=70, Height:=70

Меняя только номер слайда и путь к файлу.

И дальше у автора всё работает, а у мене напротив строки:
Set myDocument = ActivePresentation.Slides(1)

выскакивает сообщение:

"Ошибка времени выполнения BASIC.
Переменная типа Object не установлена."

Весь код выглядит так:

Sub Main

Dim X As Integer
X = Int((6 * Rnd) + 1)    ' Generate random value between 1 and 6.

Dim Y As Integer
X = Int((6 * Rnd) + 1)    ' Generate random value between 1 and 6.

Set myDocument = ActivePresentation.Slides(2)
myDocument.Shapes.AddPicture FileName:="D:\Лариска\PP RandomGenerator\ & X & *.png", _
LinkToFile:=msoTrue, SaveWithDocument:=msoTrue, _
    Left:=300, Top:=180
   
myDocument.Shapes.AddPicture FileName:="D:\Лариска\PP RandomGenerator\ & Y & *.png", _
LinkToFile:=msoTrue, SaveWithDocument:=msoTrue, _
    Left:=500, Top:=180
   
End Sub

Версия Импресса была 4.1.10. Сегодня обновила до 4.1.11, но это не помогло.

sokol92

Приложения LibreOffice (LO) и OpenOffice (OO) имеют объектную модель, которая существенно отличается от объектной модели приложений MS Office.

Описанию объектной модели Impress / Draw посвящена глава 16 знаменитой книги А.Питоньяка OOME_4_0.odt, содержащая большое число содержательных примеров.

Проект LO развивается (в отличие от OO) и большинство участников форума (насколько я могу судить) используют именно LO.
Владимир.

Gulogulo

Цитата: sokol92 от 23 апреля 2022, 14:32Приложения LibreOffice (LO) и OpenOffice (OO) имеют объектную модель, которая существенно отличается от объектной модели приложений MS Office.

То есть код, работающий в OO, не будет работать в PP и наоборот.
Поняла. Спасибо.