Тема: Как обнулить ActiveSelectionSet?

Как обнулить ActiveSelectionSet, чтобы при следующем вызове программы не подцеплялись невыделенные на экране объекты?
    ThisDrawing.ActiveSelectionSet.Clear
    MsgBox ThisDrawing.ActiveSelectionSet.Count 'печатает не 0!

Re: Как обнулить ActiveSelectionSet?

vbamaker.narod.ru и там в часть "ИСХОДНИКИ" - смотреть, анализировать и использовать :)

Re: Как обнулить ActiveSelectionSet?

ну и где там написано, что CLEAR не работает как следует?

Re: Как обнулить ActiveSelectionSet?

Хотя бы потому, что используется

objSelSet.Delete

- первый пример со страницы http://vbamaker.narod.ru/Cod1.html

Re: Как обнулить ActiveSelectionSet?

> Svetlana
Корректней будет такой вариант:

axSset.Clear
axSset.Delete
Set axSset = Nothing

~'J'~

Re: Как обнулить ActiveSelectionSet?

> Svetlana
А сколько у вас объектов ThisDrawing?

Re: Как обнулить ActiveSelectionSet?

Странно, конечно, работает CLEAR: из help - Set после CLEAR должен остаться типа как пустая папка, без элементов... ну да ладно, лишь бы работало...
Объектов ThisDrawing немного - занимаюсь отладкой пока... если имелось ввиду ThisDrawing.ActiveSelectionSet.Count, то и >10, причем ThisDrawing.ActiveSelectionSet.RemoveItems также не срабатывает :)

Re: Как обнулить ActiveSelectionSet?

> Svetlana
LeonidSN, скорее всего имел в виду, что у каждого документа свой ActiveSelectionSet. То есть если вы очистили ActiveSelectionSet, закрыли файл или сделали активным другой чертеж, то .count покажет ASS этого другого файла. Т.е. текущего активного документа ThisDrawing.

Re: Как обнулить ActiveSelectionSet?

Нет, отладку я веду в одном файле не закрывая
и
    ThisDrawing.ActiveSelectionSet.Clear
    ThisDrawing.ActiveSelectionSet.Delete
    MsgBox ThisDrawing.ActiveSelectionSet.Count
дает мне >1

Re: Как обнулить ActiveSelectionSet?

> Сидор Лютый
Совершенно верно. Причем, предыдущий файл даже не надо закрывать, достаточно сделать активным другой... Кроме того, путаница возникает если в Автокад загружены несколько макросов VBA, каждый из которых имеет свой модуль ThisDrawing.
Поэтому, можно говорить о том, что вопрос об обнулении набора "вообще" поставлен некорректно.
Для того чтобы избежать в своей программе подобных проблем, надо обнулять набор непосредственно перед его заполнением:

Set axSset = ThisDrawing.ActiveSelectionSet
axSset.Clear
axSset.Select ...
Set axSset = Nothing

Т.е., когда ты уверен, что знаешь с чем имеешь дело

Re: Как обнулить ActiveSelectionSet?

Svetlana пишет:

ThisDrawing.ActiveSelectionSet.Clear
ThisDrawing.ActiveSelectionSet.Delete 'это - лишнее
MsgBox ThisDrawing.ActiveSelectionSet.Count
дает мне >1

А вообще, все это попахивает мистикой.
У меня Ваш код дает четкий ноль.
Скорее всего, Вы чего-то не договариваете...

Re: Как обнулить ActiveSelectionSet?

так у меня итак ситуация такая: при работе с программой надо определить, выбран ли объект до запуска макроса или, если не выбран, дать возможность выбора (возможно в цикле: выбор - обработка), то есть сразу, начиная программу, я имею какой-то "висяк", причем чищу ActiveSelectionSet и при выходе из программы и при входе, если выбор не устраивающий (в количестве и качестве), вернее хочу чистить...
Возможно (хотя почему?) помехи от запуска диалогового окна, но в отладчике все команды срабатывающие
модуль ThisDrawing один - все макросы в одном проекте acad.dvb

Re: Как обнулить ActiveSelectionSet?

> Svetlana
Я бы посоветовал использовать именованный набор
и не морочить себе голову с обнулением активного набора:

Sub GetSelectedItems()
    Dim MySSet As AcadSelectionSet
    On Error Resume Next
        Set MySSet = ThisDrawing.SelectionSets("Svetlana")
    If (Err <> 0) Then
        Set MySSet = ThisDrawing.SelectionSets.Add("Svetlana")
    End If
    MySSet.Clear
    Set MySSet = ThisDrawing.ActiveSelectionSet
    Dim vEntity As AcadEntity
    For Each vEntity In MySSet
        MsgBox TypeName(vEntity)
    Next vEntity
    Set MySSet = Nothing
End Sub