RUS  ENG 

Скрипты/Макросы

Страницы: 1
RSS
Скрипты/Макросы
 
Как обычно, проблема на ровном месте :)
Решил посмотреть, что такое скрипты (макросы) и попробовать решить простейшую задачу: посчитать количество слоёв в карте.
Итак, мне нужно получить коллекцию слоёв Layers и прочитать его свойство Count. Чего уж проще, но...
Судя по диаграмме объектной модели, иерархия объектов получается такая: Zulu/Application - Documents - Document - MapDoc - Layers
Используя библиотеку ZuluLib, перейти мы можем сразу к карте MapDoc
Код
Set obj = CreateObject("ZuluLib.MapDoc")
Дальше читаем указатель на коллекцию слоев
Код
Set ls obj.Layers
И затем количество объектов в коллекции
Код
Set number = ls.Count
Выводим полученное значение
Код
MsgBox number
При попытке выполнить эту простейшую конструкцию получаем на строке Set number = ls.Count
Цитата
Ошибка выполнения Microsoft VB * Script:
Требуется объект ls.Count
Т.е. где-то нет требуемого объекта, поэтому нет и нужного свойства. Подозреваю, что нет obj - карты.
Вопрос такой: есть ли какой-то отладчик скриптов с просмотрщиком значенй переменных во время выполнения скрипта?
Спасибо.
 
Цитата
написал:
Как обычно, проблема на ровном месте
Решил посмотреть, что такое скрипты (макросы) и попробовать решить простейшую задачу: посчитать количество слоёв в карте.
Итак, мне нужно получить коллекцию слоёв Layers и прочитать его свойство Count. Чего уж проще, но...
Судя по диаграмме объектной модели, иерархия объектов получается такая: Zulu/Application - Documents - Document - MapDoc - Layers
Используя библиотеку ZuluLib, перейти мы можем сразу к карте MapDoc
Код
 Set obj = CreateObject("ZuluLib.MapDoc") 
Дальше читаем указатель на коллекцию слоев
Код
 Set ls obj.Layers 
И затем количество объектов в коллекции
Код
 Set number = ls.Count 
Выводим полученное значение
Код
 MsgBox number 
При попытке выполнить эту простейшую конструкцию получаем на строке Set number = ls.Count
Цитата
Ошибка выполнения Microsoft VB * Script:
Требуется объект ls.Count
Т.е. где-то нет требуемого объекта, поэтому нет и нужного свойства. Подозреваю, что нет obj - карты.
Вопрос такой: есть ли какой-то отладчик скриптов с просмотрщиком значенй переменных во время выполнения скрипта?
Спасибо.
Отладчик правильно сказал, что требуется объект. Т.к. SET присваивает ссылку на объект. А ls.Count не объект, а число

Напишите просто number = ls.Count

Значение будет 0, т.к. в созданной карте слоев нет.
 
, , спасибо за науку. Но главный вопрос всё-таки относительно просмотра значений переменных в процессе выполнения скрипта. Я так понимаю, такой возможности нет? :(
Да и в моём случае это никак не помогло. Всё-таки мне кажется, нет объекта: либо коллекции слоёв, либо карты. ls.Count не работает...
 
Цитата
написал:
, , спасибо за науку. Но главный вопрос всё-таки относительно просмотра значений переменных в процессе выполнения скрипта. Я так понимаю, такой возможности нет?
Да и в моём случае это никак не помогло. Всё-таки мне кажется, нет объекта: либо коллекции слоёв, либо карты. ls.Count не работает...
нет объекта - это не мы сообщаем. Это сообщение системы, выполняющей VB Script
Свой мощный отладчик для отладки довольно примитивных сценариев решили не делать.
Проще выводить нужные значения в MsgBox или в Zulu.OutputChannel на этапе отладки
 
Понято. Спасибо, буду пользоваться существующими возможностями отладки. Спасибо.

Дополнено.
Код
Да и в моём случае это никак не помогло. Всё-таки мне кажется, нет объекта: либо коллекции слоёв, либо карты. ls.Count не работает...
Всё работает. Просто я сдуру запускал макрос не из окна карты, а из окна редактора макросов.
Изменено: Хитроумный идальго - 19.07.2022 15:12:21
 
Цитата
написал:
Понято. Спасибо, буду пользоваться существующими возможностями отладки. Спасибо.

Дополнено.
Код
 Да и в моём случае это никак не помогло. Всё-таки мне кажется, нет объекта: либо коллекции слоёв, либо карты. ls.Count не работает... 
Всё работает. Просто я сдуру запускал макрос не из окна карты, а из окна редактора макросов.
Тут еще для ознакомления:
https://politerm.com/samples/zulugis/macros/
Страницы: 1