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

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

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


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


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

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



Начать новую тему Ответить на тему  [ Сообщений: 133 ]  На страницу 1, 2, 3, 4, 5 ... 7  След.
Автор Сообщение
 Заголовок сообщения: Автоматическое создание сложной организационной диаграммы
СообщениеДобавлено: 02 окт 2017, 14:44 
Не в сети

Зарегистрирован: 22 сен 2017, 17:50
Сообщений: 2
Использую Visio c: 2017
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Добрый день, уважаемые форумчане!

Помогите пожалуйста в освоении Visio 2016. Я хочу создать орг. структуру компании на основе Excel файла (пример во вложении). Структура периодически меняется, поэтому хочу использовать Excel как исходник для последующего автоматического обновления.

Вопрос в следующем : Как сделать многоуровневую структуру к примеру из 4 - 6 отделов? Как к некоторым отделам добавить фотографию? Где почитать по "настройкам" , к примеру если я хочу что бы Visio нарисовал некоторые отделы в виде квадратов, а другие в виде круга?

p/s В интернете нашел инфу по мастеру создания диаграмм, но там описание на небольшом примере, не понимаю как его использовать по своей задачи.

Очень надеюсь на вашу помощь!

Дополнено позднее: 29.09.2021
ниже добавлена ссылка на обсуждение, начавшееся в 2010 году, где утверждается что проще сделать свое решение с нуля, чем пытаться скрестить его с существующим мастером построения орг-диаграмм.
nashwaan в ветке обсуждения Its time for Visio MVPs/Developers to help us *sorting* organization chart писал(а):
The problem: The order of subordinates is unpredictable/undefined when laying out organization chart by Visio. Everytime you import same source file, it is layed out differently which is really frustrating.


Вложения:
Комментарий к файлу: Пример
_пример Visio.xlsx [16.58 Кб]
Скачиваний: 422
Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Автоматическое создание сложной организационной диаграммы
СообщениеДобавлено: 02 окт 2017, 17:40 
Не в сети
Administrator

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

Добавить очки репутацииУменьшить очки репутации
Основные приемы создания оргдиаграмм должны быть в Microsoft. Или в переводном виде вот здесь:
https://blogs.technet.microsoft.com/vis ... 7/08/3931/
https://blogs.technet.microsoft.com/vis ... 06/08/854/
https://blogs.technet.microsoft.com/vis ... 4/03/3693/
https://blogs.technet.microsoft.com/vis ... 10/03/726/
Возможно, все это Вы уже видели.
Для освоения автопостроения оргструктуры путем импорта данных я бы посоветовал начать с обратной операции. Сначала рисуете оргструктуру вручную, потом экспортируете ее в тот же Excel. Смотрите, что там получилось и оформляете свои данные таким же образом.
Ваши данные для импорта не подходят. В первую очередь потому, что в штатных средствах все связи основаны на отношении подчиненный - начальник. То есть связь описывается двумя колонками (а не более). Поэтому Вашу таблицу придется переформатировать.
Опять же штатными средствами связи трактуются как связи подчинения, а не входимости. Это значит не "отдел 1 и отдел 2 входят в отделение 5", а "начальник отдела 1 подчиняется начальнику отделения 5, начальник отдела 2 подчиняется начальнику отделения 5". Поэтому у них и фотографии возможны на любом уровне.
Теперь по вопросам:
1. Многоуровневая структура. Ну, это само получается. Просто цепочка подчиненности составится из нескольких строк.
2. К некоторым отделам добавить фотографии. В тех ссылках, которые я привел выше, это есть.
3. Некоторые отделы в виде квадратов, а другие в виде круга... А вот это штатными средствами седлать невозможно. Если уж меняется вид шейпов, то он меняется для всей диаграммы сразу. Причем диаграмма еще и полностью перерисовывается.
Но если возможностей штатных средств не хватает, то можно их уже самому усовершенствовать. Например так, как показано в этой статье
https://blog.bvisual.net/2012/05/08/cre ... roperties/
Или еще более радикально. Вплоть до создания своего приложения для импорта. Уж в своем приложении можно делать все, что угодно. (Кстати, для оргструктуры это должно быть не такой уж сложной задачей).


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Автоматическое создание сложной организационной диаграммы
СообщениеДобавлено: 02 окт 2017, 17:44 
Не в сети
Administrator

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

Добавить очки репутацииУменьшить очки репутации
И можно попробовать другой подход к освоению этого процесса...
Попробуйте нарисовать и приложить не исходные данные, а то, что Вам хотелось бы получить в Visio. Результирующую картинку. Тогда можно будет советовать варианты - какими средствами этого добиться.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Автоматическое создание сложной организационной диаграммы
СообщениеДобавлено: 02 окт 2017, 21:27 
Не в сети

Зарегистрирован: 22 сен 2017, 17:50
Сообщений: 2
Использую Visio c: 2017
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Спасибо большое за развернутый ответ, буду разбираться :)


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

Зарегистрирован: 23 апр 2015, 19:23
Сообщений: 306
Использую Visio c: 2013
Очков репутации: 3

Добавить очки репутацииУменьшить очки репутации
man_2017 писал(а):
буду разбираться


К сожалению, вынужден Вас огорчить.
Профессиональное использование Мастера орг-диаграмм от Microsoft нереально.
В нем нельзя задавать горизонтальное ранжирование подразделений.

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

Для ранжирования должно предусматриваться отдельное поле или браться строгая очередность из таблицы (при горизонтальном ранжировании подразделений, т.е. кто "левее"). В штатном мастере Microsoft - этого нет (во всяком случае в 2010).

Поэтому серьезно относиться к штатному Мастеру орг - диаграмм нельзя, - это игрушка.
Однако, существуют Мастера орг-диаграмм (Excel -> Visio) сторонних компаний.
Там вводится дополнительное поле "ранг", которое и позволяет задавать нужную горизонтальную иерархию.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Автоматическое создание сложной организационной диаграммы
СообщениеДобавлено: 11 окт 2017, 10:14 
Не в сети
Administrator

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

Добавить очки репутацииУменьшить очки репутации
Цитата:
Поэтому серьезно относиться к штатному Мастеру орг - диаграмм нельзя, - это игрушка.

Ну, уж слишком категорично...
Есть и другие формулировки. Типа, "могут потребоваться некоторые ручные перемещения".
Но в целом - да. Замучаешься создать алгоритм, который подойдет всегда и всем и не потребует ручной доводки.
Частную задачу, когда не нужна универсальность, проще решить своим алгоритмом.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Автоматическое создание сложной организационной диаграммы
СообщениеДобавлено: 11 окт 2017, 12:09 
Не в сети
Administrator

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

Добавить очки репутацииУменьшить очки репутации
Кстати...
Можно еще попробовать "доводку" штатного алгоритма своими средствами.
Например, есть предположение, что визард игнорирует очередность только в момент первоначального размещения шейпов. После этого при выполнении функции Re-Layout шейпы смещаются, выравниваются, но порядок следования сохраняется.
Отсюда идея. Если после автоматического построения диаграммы своим макросом переставить шейпы в нужном порядке и потом использовать функцию Re-Layout, то получим желаемую отсортированную картинку.
Как я понимаю, макрос всего-то должен в зависимости от какого-то параметра (тот же "ранг") выстроить значение User.DeltaX с автоувеличением. Причем даже не волнуют конкретные значения, нужно только, чтобы они нарастали. И в конце - Re-Layout.
Для конкретного случая можно даже делать разные сортировки. Например, у главного начальника выстраивать подчиненных по номеру (заместителя), а у начальников отделов - по алфавиту.
Надо бы как-нибудь попробовать... ;)
В простейшем случае можно такую операцию проводить узконаправлено. Например, только для зам'ов, а все остальные шейпы игнорировать.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Автоматическое создание сложной организационной диаграммы
СообщениеДобавлено: 11 окт 2017, 13:18 
Не в сети
Administrator

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

Добавить очки репутацииУменьшить очки репутации
Попробовал.
Можно сказать, что, по крайней мере, в простейших случаях способ работает.


Вложения:
sort.gif
sort.gif [ 120.85 Кб | Просмотров: 4906 ]
Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Автоматическое создание сложной организационной диаграммы
СообщениеДобавлено: 11 окт 2017, 19:45 
Не в сети
Ветеран

Зарегистрирован: 23 апр 2015, 19:23
Сообщений: 306
Использую Visio c: 2013
Очков репутации: 3

Добавить очки репутацииУменьшить очки репутации
> Ну, уж слишком категорично...

Именно категорично. Свой Мастер MS распиарила, а работать с ним как проф-инструментом невозможно. Только поиграться.
"Доводить руками" - представьте, когда сложная иерархия и вся перемешена. Проще ее изначально руками нарисовать, чем переделать после мастера. Я говорю не о простых иерархиях, умещающихся на пол-страничке.

> Для конкретного случая можно даже делать разные сортировки. Например, у главного начальника выстраивать подчиненных по номеру (заместителя), а у начальников отделов - по алфавиту.

Подход должен быть один. Например, часто имеем НТЦ 1, НТЦ 2 и т.д.
В состав НТЦ входят управления, далее отделы.
Так пятый отдел из второго управления третьего НТЦ будет иметь номер "325". И все это должно соблюдаться на схеме. Это тривиально. Никаких "по алфавиту" ФИО начальников.

Подскажите, что нужно сделать ("доводку" штатного алгоритма своими средствами) чтобы получить то желаемое, о чем я сказал выше?
Просьба пошагово.

Вообще, применение Мастера орг-диаграмм применимо не только к орг-структуре., а к любой иерархической структуре.
Например, пытался его использовать для построения дерева бизнес-процессов (все процессы пронумерованы). Но из-за указанной проблемы Мастера - он неприменим НИГДЕ, т.к. работает непредсказуемо.
Хотя добавить поле "ранг" (или выстраивать лево-право на последовательности в таблице) - думаю совсем не великая проблема для MS.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Автоматическое создание сложной организационной диаграммы
СообщениеДобавлено: 11 окт 2017, 23:45 
Не в сети
Administrator

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

Добавить очки репутацииУменьшить очки репутации
Я могу показать, как я изменяю сортировку в показанном выше примере.
Код:
Sub ttt()
    Dim Col As Collection
    Dim shp As Visio.Shape
    Set shp = ActivePage.Shapes("Executive")
    Set Col = New Collection
    Debug.Print shp.NameU
    ConnectedRecursive shp, Col
    Debug.Print Col.Count
    For i = 1 To Col.Count
        Debug.Print Col(i).Text
        Col(i).Cells("User.DeltaX") = i * 2
    Next
    ActiveWindow.DeselectAll
    ActiveWindow.Select Col(Col.Count), visSelect
    ActiveWindow.Selection.Move 0.2, 0
    ActiveWindow.DeselectAll
End Sub

Private Sub ConnectedRecursive(ByVal shp As Visio.Shape, Coll As Collection)
    For j = 1 To shp.FromConnects.Count
        If shp.FromConnects(j).FromSheet.Connects(2).ToSheet Is shp Then
            'Set shp1 = shp.FromConnects(j).FromSheet.Connects(1).ToSheet
        Else
            Set shp1 = shp.FromConnects(j).FromSheet.Connects(2).ToSheet
        End If
        '   Add unique
        Flag = True
        For i = 1 To Coll.Count   'Check
            If Coll(i) Is shp1 Then
                Flag = False
                Exit For
            End If
        Next
        AddSorted Coll, shp1
    Next
End Sub
Private Sub AddSorted(ByVal Coll As Collection, ByVal shp As Visio.Shape)
    shpText = shp.Text
    Flag = True
    For i = 1 To Coll.Count
        sText = Coll(i).Text
        If shpText < sText Then
            Coll.Add shp, , i
            Flag = False
            Exit For
        End If
    Next
    If Flag Then Coll.Add shp
End Sub


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Автоматическое создание сложной организационной диаграммы
СообщениеДобавлено: 11 окт 2017, 23:47 
Не в сети
Administrator

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

Добавить очки репутацииУменьшить очки репутации
Для сортировки я взял текст шейпа.
Объект сортировки - шейп Executive и его подчиненные.
Находится нужный шейп, его подчиненные выбираются функцией ConnectedRecursive в коллекцию. Коллекция сортированная.
Потом изменяем User.DeltaX в подчиненных шейпах.
-------
Если делать полную автоматику, то к этому макросу нужно бы добавить запуск штатного построителя (в начало) и вызов функции Re-Layout (в конец).
Вот по такому образцу и делать, но с Вашими полями.


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

Зарегистрирован: 23 апр 2015, 19:23
Сообщений: 306
Использую Visio c: 2013
Очков репутации: 3

Добавить очки репутацииУменьшить очки репутации
При использовании русского Excel, в макросе нужно заменить «Executive» на «Директор».
Попытался понять, как работают мастер и макрос. Картинка ниже.
Макрос «ttt» сортирует только второй уровень иерархии (подчинённых «Директора»). Третий ряд уже без сортировки. Что сделать, чтобы сортировка шла по всей иерархии?
Сортировка идет по алфавиту по имени шейпа. Имя шейпа берется на основе чего? Наклоном показал имена шейпов. Таблицу Excel строил штатным мастером, плюс добавил несколько строчек.

Спасибо за макрос и комментарий к нему.
Можете чуть подробнее прокомментировать код макроса? Может, недавно встречались подобные примеры на эту тему?
Появилась надежда, что действительно можно исправить кривую работу «Мастера орг - диаграмм».
Как вариант, под поле «ранг» использовать не отображаемое в шейпе поле.

И еще: на одной из машинок у меня стоят Excel 2010 + Visio 2003. Экспортировать мастером табличку Excel не вышло: Organization Chart Wizard Error: Unable to load Excel. Это нормально? Может где-то их (Excel & Visio) связать нужно?


Вложения:
primer_5a.gif
primer_5a.gif [ 68.74 Кб | Просмотров: 5320 ]
Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Автоматическое создание сложной организационной диаграммы
СообщениеДобавлено: 14 окт 2017, 23:10 
Не в сети
Administrator

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

Добавить очки репутацииУменьшить очки репутации
Цитата:
на одной из машинок у меня стоят Excel 2010 + Visio 2003

Не обязательно брать данные непосредственно из Excel. Скорее всего можно сохранить их в CSV и брать в этом формате.
Цитата:
Макрос «ttt» сортирует только второй уровень

Да, макрос тестовый, поэтому сортирует даже не второй уровень, а только подчиненных «Executive». (Просто они действительно попадают на второй уровень).
Чтобы сортировать что-то еще, нужно отобрать нужные шейпы (например, по имени мастер-шейпа) и провести сортировку для каждого из них по-очереди.
Цитата:
Сортировка идет по алфавиту по имени шейпа

В макросе сортировка идет по тексту шейпа при заполнении коллекции.
Код:
    shpText = shp.Text
...
        sText = Coll(i).Text
        If shpText < sText Then
...
        End If
    Next

Очередной шейп вставляется в найденное место или в конец коллекции.
Если вместо shp.Text b Coll(i).Text брать другой атрибут, то будет сортироваться по нему.


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

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

Добавить очки репутацииУменьшить очки репутации
Я макрос особо не причесывал... Просто надрал куски из другой программы.
Если немного поподробнее, то
Код:
    Set shp = ActivePage.Shapes("Executive")

Здесь принимается единственный шейп, который обслуживается макросом. Вместо этого нужно будет собрать несколько. Например, в коллекцию.
Код:
    Set Col = New Collection
    ConnectedRecursive shp, Col
    Debug.Print Col.Count
    For i = 1 To Col.Count
        Col(i).Cells("User.DeltaX") = i * 2
    Next

Здесь собраются все подчиненные. Если выше будет набрано несколько шейпов, то этот участок нужно будет повторить несколько раз в цикле.
ConnectedRecursive собирает подчиненные шейпы. Она использует AddSorted, чтобы одновременно сортировать их при сборе.
А цикл, где Col(i).Cells("User.DeltaX") = i * 2 - это расстановка подчиненных шейпов в линейку со смещением по горизонтали на два дюйма. OrgChart использует такие шейпы, в которых смещение от родительского шейпа передается через ячейку User.DeltaX.


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

Зарегистрирован: 23 апр 2015, 19:23
Сообщений: 306
Использую Visio c: 2013
Очков репутации: 3

Добавить очки репутацииУменьшить очки репутации
Цитата:
Да, макрос тестовый, поэтому сортирует даже не второй уровень, а только подчиненных «Executive».

Видимо нужно сделать цикл, в котором перебрать все шейпы на странице типа «квадрат с двойной линией» (корневой шейп), т.е. те, которые имеют ветвление. Далее в цикле запустить макрос «ttt» (с параметром корневого шейпа, вместо const=«Executive») и таким образом отсортировать всех подчиненных всех корневых шейпов.

Вопрос аналогичный:
Как определить тип фигуры (шейпа)?
viewtopic.php?f=5&t=778

Как определить тип фигуры (шейпа) – применительно к нашему случаю: Rectangle c двойной линией (или как он правильно называется в ADDON OrgC11). А заодно - как определить Rectangle с одинарной линией.

Далее:
Dim shpAll As Visio.Shapes
Set shpAll = ActivePage.Shapes
For i = 1 To shpAll.Count
if sh.CellExists("Ellipse, Visio.VisExistsFlags.visExistsAnywhere) = -1 then ‘ только нужен не овал "Овал или круг", а прямоугольник с двойной линией
ttt shpAll(i).name
end if

Next


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

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

Добавить очки репутацииУменьшить очки репутации
Если вспомнить, что мы исправляем последствия работы оргвизарда, то можно действовать даже проще.
Он ведь использует только нужные шейпы. Значит для фильтрации достаточно перебрать все двумерные шейпы (не коннекторы).
Тогда головная процедура будет выглядеть вот так
Код:
Sub ReSort()
    Dim Col As Collection
    Dim shp As Visio.Shape
    For j = 1 To ActivePage.Shapes.Count
        Set shp = ActivePage.Shapes(j)
        If Not shp.OneD Then
            Set Col = New Collection
            ConnectedRecursive shp, Col
            For i = 1 To Col.Count
                Col(i).Cells("User.DeltaX") = i * 2
            Next
            If Col.Count > 0 Then
                ActiveWindow.DeselectAll
                ActiveWindow.Select Col(Col.Count), visSelect
                ActiveWindow.Selection.Move 0.2, 0
                ActiveWindow.DeselectAll
            End If
        End If
    Next
End Sub

(Это вместо ttt)


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

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

Добавить очки репутацииУменьшить очки репутации
Да, и в самом конце полезно прописать строчку
Application.Addons("OrgC11").Run ("/relayout")
Это чтобы вручную кнопку Re-Layout не нажимать.
Код:
    Next
    Application.Addons("OrgC11").Run ("/relayout")
End Sub

Скорректированная версия макроса на данный момент:
Код:
Sub ReSort()
    Dim Col As Collection
    Dim shp As Visio.Shape
    For j = 1 To ActivePage.Shapes.Count
        Set shp = ActivePage.Shapes(j)
        If Not shp.OneD Then
            Set Col = New Collection
            ConnectedRecursive shp, Col
            For i = 1 To Col.Count
                Col(i).Cells("User.DeltaX") = i * 2
            Next
            If Col.Count > 0 Then
                ActiveWindow.DeselectAll
                ActiveWindow.Select Col(Col.Count), visSelect
                ActiveWindow.Selection.Move 0.2, 0
                ActiveWindow.DeselectAll
            End If
        End If
    Next
    Application.Addons("OrgC11").Run ("/relayout")
End Sub

Private Sub ConnectedRecursive(ByVal shp As Visio.Shape, Coll As Collection)
    For j = 1 To shp.FromConnects.Count
        Set shp1 = Nothing
        If Not shp.FromConnects(j).FromSheet.Connects(2).ToSheet Is shp Then
            Set shp1 = shp.FromConnects(j).FromSheet.Connects(2).ToSheet
        End If
        '   Add unique
        Flag = True
        For i = 1 To Coll.Count   'Check
            If Coll(i) Is shp1 Then
                Flag = False
                Exit For
            End If
        Next
        If Not shp1 Is Nothing Then AddSorted Coll, shp1
    Next
End Sub
Private Sub AddSorted(ByVal Coll As Collection, ByVal shp As Visio.Shape)
    shpText = shp.Text
    Flag = True
    For i = 1 To Coll.Count
        sText = Coll(i).Text
        If shpText < sText Then
            Coll.Add shp, , i
            Flag = False
            Exit For
        End If
    Next
    If Flag Then Coll.Add shp
End Sub


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

Зарегистрирован: 23 апр 2015, 19:23
Сообщений: 306
Использую Visio c: 2013
Очков репутации: 3

Добавить очки репутацииУменьшить очки репутации
Ну вот, и почти готово. Может быть, соберете красиво? И громко заявим, что проблема, с которой бьются на просторах VBA Visio не годами, а десятилетиями решена товарищем Tumanov.

И это решение торжественно объявим на других многочисленных ресурсах, где много печали по поводу кривой работы Мастера орг-диаграмм, например,
http://www.visguy.com/vgforum/index.php?topic=2055.0
"Я думаю, что это одна из наиболее востребованных функций в организационной структуре Visio.
Проблема: порядок подчиненных непредсказуем / неопределенен при составлении организационной диаграммы Visio. Каждый раз, когда вы импортируете один и тот же исходный файл, он выкладывается по-разному, что действительно расстраивает…. "


Странно, все это как-то: оказалось решение и не очень сложным …
Кстати, хорошо бы в макросе сразу учесть поле ранг, ну хотя бы по номеру телефона (вместо).


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

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

Добавить очки репутацииУменьшить очки репутации
Надо подумать, как "собрать красиво".


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

Зарегистрирован: 23 апр 2015, 19:23
Сообщений: 306
Использую Visio c: 2013
Очков репутации: 3

Добавить очки репутацииУменьшить очки репутации
Tumanov писал(а):
Надо подумать, как "собрать красиво".

просьба при этом учесть:
а) реальные схемы орг-структуры содержат более одного листа (нужно "пробежаться" по всем листам);
б) для комментариев (в коде макроса) не нужно жалеть букв ("кашу маслом не испортить").


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 133 ]  На страницу 1, 2, 3, 4, 5 ... 7  След.

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



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

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


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

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