VBA. Как заменить определенный цвет?
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > VBA. Как заменить определенный цвет?

VBA. Как заменить определенный цвет?

Ответ
Поиск в этой теме
Непрочитано 05.08.2011, 11:11 #1
VBA. Как заменить определенный цвет?
praeeo
 
Регистрация: 20.10.2010
Сообщений: 10

Приветствую!
Никак не могу решить задачу изменения определенного цвета (например, черного) у всех объектов чертежа на другой цвет. Есть вот набросок макроса, но он отчего-то не работает. Подскажите, куда двигаться дальше.
Код:
[Выделить все]
Sub Sel()
Dim objSS As AcadSelectionSet
Dim objEnt As AcadEntity
On Error Resume Next
If SelectionSets(0).Name = "" Then
SelectionSets.Add ("q")
End If
Set objSS = SelectionSets(0)
objSS.Select (acSelectionSetAll)
For Each objEnt In objSS
objEnt.color = acGreen
Debug.Print objEnt.ObjectName
Next
End Sub
Апдейт:

Изменил For Each на For
Код:
[Выделить все]
For i = 0 To objSS.Count
objSS(i).color = acWhite
Стало лучше, но цвет все равно меняется не у всех элементов (как я понимаю, у блоков не меняется). И с размеров исчезают цифры, только линии остаются

Последний раз редактировалось praeeo, 05.08.2011 в 11:30. Причина: Исправление
Просмотров: 3798
 
Непрочитано 05.08.2011, 11:29
#2
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


praeeo, Твой код очень даже работает, только он изменяет цвет всем объектам независимо от их текущего цвета на зеленый
А вот так будет изменяться только у объектов черного цвет
Код:
[Выделить все]
Sub Sel()
Dim objSS As AcadSelectionSet
Dim objEnt As AcadEntity
On Error Resume Next
If SelectionSets(0).Name = "" Then
SelectionSets.Add ("q")
End If
Set objSS = SelectionSets(0)
objSS.Select (acSelectionSetAll)
For Each objEnt In objSS
If (objEnt.color = acWhite) Then
objEnt.color = acGreen
End If
Debug.Print objEnt.ObjectName
Next
End Sub
__________________
cadtools
TararykovDG вне форума  
 
Автор темы   Непрочитано 05.08.2011, 12:03
#3
praeeo


 
Регистрация: 20.10.2010
Сообщений: 10


Код с заменой Each For работает увереннее, но все равно не у всех элементов цвет меняется (у блоков и размеров он не меняется). Сейчас решить хотя бы задачу замены цвета всех элементов независимо от их исходного цвета.
praeeo вне форума  
 
Непрочитано 05.08.2011, 12:43
#4
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


Цвет у блоков тоже меняется, просто блок состоит из элементов у которых цвет может быть выставлен отдельно от самого блока ("послою" или вообще напрямую конктретный цвет), для того чтобы цвет элемента менялся вместе с цветом самого блока необходимо в описании блока для каждого элемента установить цвет "поблоку". Поэтому надо переопределить описание блока, тогда во всех его вхождениях установятся новые параметры (например цвет)
__________________
cadtools
TararykovDG вне форума  
 
Автор темы   Непрочитано 05.08.2011, 13:00
#5
praeeo


 
Регистрация: 20.10.2010
Сообщений: 10


Цитата:
Сообщение от TararykovDG Посмотреть сообщение
Цвет у блоков тоже меняется, просто блок состоит из элементов у которых цвет может быть выставлен отдельно от самого блока ("послою" или вообще напрямую конктретный цвет), для того чтобы цвет элемента менялся вместе с цветом самого блока необходимо в описании блока для каждого элемента установить цвет "поблоку". Поэтому надо переопределить описание блока, тогда во всех его вхождениях установятся новые параметры (например цвет)
А как это переопределение можно осуществить программно? Ведь блоков может быть очень много. То есть чтобы макрос проверял все блоки и все элементы блоков и если есть элементы с отличающимся цветом, то он всё же его реально заменял?
praeeo вне форума  
 
Непрочитано 05.08.2011, 13:42
#6
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


praeeo, я не пишу на VBA, поэтому не знаю насколько логичным получился код, поковырялся в справке и получилось как-то так
Код:
[Выделить все]
Sub Sel()

Dim blkColl As AcadBlocks
Dim blkDef As AcadBlock
Dim ent As AcadEntity
Dim i As Integer
' Перебираем все описания блоков чертежа
Set blkColl = ThisDrawing.Blocks    ' коллекция всех блоков чертежа
For Each blkDef In blkColl          ' описание каждого блока из коллекции всех блоков чертежа
    If ((Not (blkDef.Name Like "*Model_Space")) And _
    (Not (blkDef.Name Like "*Paper_Space*"))) Then    ' пропускаем блок модели чертежа и блоки листов чертежа
        For Each ent In blkDef      ' текущий элемент текущего описания блока
            ent.color = acByBlock   ' устанавливаем цвет "поблоку"
        Next
    End If
Next

Dim objSS As AcadSelectionSet
Dim objEnt As AcadEntity
On Error Resume Next
If SelectionSets(0).Name = "" Then
SelectionSets.Add ("q")
End If
Set objSS = SelectionSets(0)
objSS.Select (acSelectionSetAll)
For Each objEnt In objSS
If (objEnt.color = acWhite) Then
objEnt.color = acGreen
End If
Debug.Print objEnt.ObjectName
Next
End Sub
__________________
cadtools
TararykovDG вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > VBA. Как заменить определенный цвет?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пароль к VBA karp_b Программирование 24 29.08.2013 12:43
Как поменять цвет атрибутов уже вставленных в чертёж блоков? МишаИнженер Программирование 5 09.10.2012 20:55
перестал работать VBA макрос kvv0476 Программирование 15 13.01.2011 16:08
Фотошоп заменить цвет картинки на другой Spy Прочее. Программное обеспечение 21 24.04.2009 14:55
SW: Повторить цвет в сборке Creator SolidWorks 3 21.03.2008 17:24