W temacie SelectionSet samo podświetlanie powinno działać właśnie tak jak działa, czyli Highlight nie zmienia aktualnie wybranych obiektów a jedynie je podświetla. Natomiast, żeby selectionset rzeczywiście wybrać, należałoby użyć Thisdocument.ActiveSelectionSet. niestety ZWCAD 2012 jakoś generuje błąd w tym miejscu. Zgłosiliśmy to Producentowi
A czy konieczne ta procedura musi być obsługiwana przez VBA? może mógłby Pan zastąpić ją funkcją w LISP. Tam jest dostępna funkcja sssetfirst, która zmienia wybrane obiekty i działa to dobrze.
W sprawie Warstw jest kilka kwestii.
1. Definiuje Pan zmienne jako String. Niby można ale nie jest to najlepsze rozwiązanie. Zmienne powinny mieć taki typ danych użyty w definicji warstwy. Więc kolor jako Integer, nazwa String, zablokowany czy widoczny Boolean itd.
2. Jeśli warstwa jest zablokowana kolor zmieniany jest na liczbę przeciwną. W tym przypadku wystarczy użyć wartości bezwzględnej.
3. Szybszym sposobem jest przepisanie wartości bezpośrednio z warstwy do warstwy, bez konieczności używania dodatkowych zmiennych. Czyli gotowy kod wyglądałby następująco:
Sub war()
Dim zero As ZwcadLayer
Dim jeden As ZwcadLayer
Set zero = Thisdocument.Layers("0")
Set jeden = Thisdocument.Layers.Add("1")
With jeden
.Color = Abs(zero.Color)
.LineWeight = zero.LineWeight
.Linetype = zero.Linetype
.Plottable = zero.Plottable
.Freeze = zero.Freeze
.Lock = zero.Lock
.LayerOn = zero.LayerOn
End With
Thisdocument.Regen
End Sub