Форум пользователей Visio
http://visio.getbb.ru/

VBA в Visio
http://visio.getbb.ru/viewtopic.php?f=6&t=1248
Страница 1 из 1

Автор:  Серж [ 03 ноя 2017, 16:45 ]
Заголовок сообщения:  VBA в Visio

Здравствуйте.

Начинаю изучать данный язык его применение в Визио. Подскажите, пожалуйста, как решить след. задачу.

есть цикл по shape на листе. у каждого шейпа есть имя.

нужно вывести ошибки по шейпам , у которых совпадают наименования с указаним ИД шейпа

В каком направлении копать?

Заранее спасибо

Автор:  nbelyh [ 03 ноя 2017, 17:07 ]
Заголовок сообщения:  Re: VBA в Visio

А что такое "ошибка шейпа"?

Автор:  Гость [ 03 ноя 2017, 17:50 ]
Заголовок сообщения:  Re: VBA в Visio

шейпы, у которых наименования совпадают - это ошибка. их нужно идентифицировать

Автор:  Гость [ 03 ноя 2017, 18:24 ]
Заголовок сообщения:  Re: VBA в Visio

Гость писал(а):
шейпы, у которых наименования совпадают - это ошибка.
наименования чего ?

Автор:  Tumanov [ 03 ноя 2017, 18:36 ]
Заголовок сообщения:  Re: VBA в Visio

Цитата:
наименования чего ?

Дело в том, что у шейпов на одной странице не может быть одинаковых имен.
Значит Вы под именем или наименованием понимаете что-то другое. Отсюда и вопрос.
Полезно было бы приложить файлик, в котором было бы хотя бы 2 шейпа с этим одинаковым чем-то.

Автор:  Dmitrii [ 03 ноя 2017, 18:38 ]
Заголовок сообщения:  Re: VBA в Visio

@Tumanov, в точку!
Встроенное видео спрятано под спойлер ↓ Прямая ссылка на видео
Спойлер:
phpBB [youtube]

Автор:  nbelyh [ 03 ноя 2017, 20:39 ]
Заголовок сообщения:  Re: VBA в Visio

А, кажется понял. На диаграмме не должно быть дубликатов одного и того же по нескольку раз.
Две фигуры считаются дубликатами, если на них написано одно и тоже. Вот их-то и надо вывести.
Правильно?

Код:
Sub PrintDuplicates()

Set seen = CreateObject("Scripting.Dictionary")

For Each s In ActivePage.Shapes
   
    shapeText = s.Text
   
    If Not seen.Exists(shapeText) Then
        seen.Add shapeText, New Collection
    End If
   
    seen(shapeText).Add s.ID
Next

For Each k In seen
    If seen(k).Count > 1 Then
   
        Line = "'" & k & "'"
        For Each ShapeID In seen(k)
            Line = Line & " " & ShapeID
        Next
       
        Debug.Print Line
       
    End If
Next

End Sub


Вложения:
Sub PrintDuplicates.vsd [27 Кб]
Скачиваний: 110

Страница 1 из 1 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/