Форум пользователей Visio

Форум по вопросам применения и программирования в Visio
Текущее время: 28 мар 2024, 19:09

Часовой пояс: UTC + 3 часа [ Летнее время ]


Правила форума


При размещении файлов предпочтительным является формат vsd (а не vsdx/vsdm)
Размещая ваши вложения на форуме не используйте имена файлов содержащих кириллицу, в противном случае файл будет иметь имя .<расширение файла> !

Для форматирования ваших сообщений используйте BBCodes, описание используемых на форуме BBCodes.



Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Изменить цвет у группы элементов
СообщениеДобавлено: 26 янв 2010, 09:23 
Не в сети

Зарегистрирован: 26 янв 2010, 09:19
Сообщений: 1
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Нарисовал схему разными цветами, а теперь при печати встал вопрос о том, чтобы заменить желтый цвет на оранжевый. Подскажите как можно все линии и объекты желтого цвета перекрасить в оранжевый. Схема очень большая и перекрасит вручную просто нереально. Заранее спасибо, Алексей.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Изменить цвет у группы элементов
СообщениеДобавлено: 26 янв 2010, 23:03 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 2253
Очков репутации: 100626

Добавить очки репутацииУменьшить очки репутации
Можно попробовать примерно такой макрос
Sub ttt()
For Each sh In ActivePage.Shapes
If sh.Cells("FillForegnd") = 25 Then sh.Cells("FillForegnd") = 29
If sh.Cells("LineColor") = 25 Then sh.Cells("LineColor") = 29
Next
End Sub
Обойдет все шейпы на странице. Если найдет цвет 25 (желтый), заменит на 29 (оранжевый). Какой у Вас цвет на самом деле, можно посмотреть в соответствующих ячейках ShapeSheet нужного шейпа.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Изменить цвет у группы элементов
СообщениеДобавлено: 24 окт 2012, 12:59 
Не в сети
Новичок

Зарегистрирован: 17 апр 2012, 18:04
Сообщений: 25
Очков репутации: 6

Добавить очки репутацииУменьшить очки репутации
Обойдет все шейпы, но обойдет стороной все сгруппированные шейпы. Любая группа сама по себе является шейпом, поэтому ссылка на группу будет ActiveWindow.Page.shpGroup. А ссылка на элемент группы будет ActiveWindow.Page.shpGroup.shpElement
Перебирая коллекцию шейпов на странице, цикл не затронет шейпы из групп. Решение в организации вложенных циклов:
Код:
Private Sub test_1()
Dim vsoCurShp As Visio.Shape, vsoCurShp_1 As Visio.Shape, vsoCurShp_2 As Visio.Shape
Dim stNames$, stNameID As Variant, booErr As Boolean, stNames_1$

Set vsoShpSet = New Collection
For Each vsoCurShp In ActiveWindow.Page.Shapes
    If vsoCurShp.Type = 2 Then
        For Each vsoCurShp_1 In vsoCurShp.Shapes
            If vsoCurShp_1.Type = 2 Then
                For Each vsoCurShp_2 In vsoCurShp_1.Shapes
                    If vsoCurShp_2.Type = 2 Then booErr = True
                vsoShpSet.Add vsoCurShp_2
                Next
            End If
        vsoShpSet.Add vsoCurShp_1
        Next
    End If
vsoShpSet.Add vsoCurShp
Next
If booErr then MsgBox "Глубина вложенности более двух"
' Здесь код самих операций над шейпами
End sub

Здесь организовано два вложенных цикла. Если шейп на странице является группой, (Shape.Type=2) вложенный цикл перебирает элементы этой группы. Если какой-либо из элементов группы сам является группой, запускается еще один вложенный цикл. Если глубина вложенности более 2, то появится сообщение об этом. Перебранные элементы заносятся в коллекцию vsoShpSet, с которой в последующем и предполагается работать.

_________________
F1, ObjectBrowser и Artberg Вам в помощь!


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Изменить цвет у группы элементов
СообщениеДобавлено: 24 дек 2012, 16:24 
Не в сети
Ветеран

Зарегистрирован: 21 окт 2011, 12:01
Сообщений: 939
Откуда: г. Екатеринбург
Использую Visio c: 2011
Очков репутации: 127

Добавить очки репутацииУменьшить очки репутации
Использование приема рекурсии.
Здесь происходит перебор всех шейпов всех страниц с любой степенью вложенности в группах.
Запускать процедуру "a()". Все шейпы выводятся в окно Immediate:

Код:
Sub a()
    Dim sh As Visio.Shape
    Dim pg As Visio.Page
    Dim coll As New Collection

    For Each pg In ThisDocument.Pages
        For Each sh In pg.Shapes
            If sh.Shapes.Count>0 Then
                Recursion sh.Shapes, coll
            End If
            coll.add sh
        Next sh
    Next pg
    For Each sh In coll
         Debug.Print sh.NameID
    Next sh
End Sub

Sub Recursion(ByVal shps As Visio.Shapes, coll As Collection)
    Dim sh As Visio.Shape
    For Each sh In shps
        If sh.Shapes.Count>0 Then
            Recursion sh.Shapes, coll 'здесь происходит вызов самой себя
        End If
        coll.add sh
    Next sh
End Sub


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Изменить цвет у группы элементов
СообщениеДобавлено: 24 дек 2012, 18:14 
Не в сети
Новичок

Зарегистрирован: 17 апр 2012, 18:04
Сообщений: 25
Очков репутации: 6

Добавить очки репутацииУменьшить очки репутации
Пааааа-рикольно!

_________________
F1, ObjectBrowser и Artberg Вам в помощь!


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Вы можете создать форум бесплатно PHPBB3 на Getbb.Ru, Также возможно сделать готовый форум PHPBB2 на Mybb2.ru
Русская поддержка phpBB