Тема: Три глюка VBA или иди тренируйся

1. Задача: выбрать объект типа "Single Text".
-Решение:
   Set mospace = ThisDrawing.ModelSpace ' Инициализация объекта ModelSpace
   Dim ssetObj As AcadSelectionSet  ' Создание Select set
   Set ssetObj = ThisDrawing.SelectionSets.Add("New_STSS")
   ssetObj.SelectOnScreen 0, "TEXT" ' Фильтр для выбора только текста
-Результат:
Ошибка в последней строке: "Invalid argument FilterType in SelectOnScreen".
-Вопрос: что не так?

2. Задача: разработать VBA приложение в среде AutoCAD
-Решение: разработано.
-Результат: dvb файл содержит в теле кучу мусора (куски других dvb и т.д.)
-Вопрос: как почистить (сжать) dvb?

3. Задача: программно загрузить dvb на постоянной основе (автозагрузка при каждом
запуске AutoCAD). То же - добавить dvb в Startup Suite.
-Решение: максимум, что получено - автозагрузка dvb при открытии AutoCAD или нового чертежа:(,
при этом выдается сообщение, что dvb уже загружен.
-Вопрос: как это сделать?

Re: Три глюка VBA или иди тренируйся

1. Сталкивался. Сейчас посмотрел DevHelp, там прямо не указано, но два аргумента фильтра должны быть _массивами_.

3. Кажется, Startup Suite, в "Load Application"

Re: Три глюка VBA или иди тренируйся

1. Как пользоваться фильтром: (в хэлпе есть)
         Dim ssetText As AcadSelectionSet

         ' Preparing a filter
         Dim gpCode(0) As Integer
         Dim dataValue(0) As Variant
         gpCode(0) = 0
         dataValue(0) = "TEXT"
         Dim groupCode As Variant, dataCode As Variant
         groupCode = gpCode
         dataCode = dataValue

         ' Select only TEXT objects, by using filters
         ssetText.Clear
         ssetText.SelectOnScreen groupCode, dataCode

2. Если приложение "содержит в теле кучу мусора" то оно просто неграмотно разработано. Выход тут один - начать с концептуальной модели приложения (хотя бы алгоритмы карандашиком...) и ручками всё подправить и почистить...

3. Посмотри там: https://www.caduser.ru/forum/topic4289.html

Re: Три глюка VBA или иди тренируйся

1. Действительно, необходимо использовать массивы.
Правильное решение:
   Set mospace = ThisDrawing.ModelSpace ' Инициализация объекта ModelSpace
   Dim ssetObj As AcadSelectionSet ' Создание Select set
   Set ssetObj = ThisDrawing.SelectionSets.Add("New_STSS")

   Dim FilterType(0) As Integer, FilterData(0) As Variant
   FilterType(0) = 0: FilterData(0) = "TEXT"
   ssetObj.SelectOnScreen FilterType, FilterData
-Результат: запрос на выбор с экрана объекта типа "Single Text".

2. 2Иван. Причем здесь подправить ручками, если dvb (именно не source, а тело - просмотр через F3) содержит строки, которых не было в проекте или которые удалены оттуда!

Re: Три глюка VBA или иди тренируйся

2. .dvb это хранилище, там действительно много мусора, который разрастается по мере работы над программой.  Сохрани проект под другим именем и сравни размеры.

Re: Три глюка VBA или иди тренируйся

2. Я делаю так: экспорт всех компонентов проекта, создание нового проекта через VBA Manager и импорт в него этих компонентов. Может есть более простой способ?

Re: Три глюка VBA или иди тренируйся

Помогите на VBA Выбрать из всех документов открытых в AutoCAD ни чего не выделяя, значения всех текстовых полей определённого цвета??