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

Форум по вопросам применения и программирования в Visio
Текущее время: 29 мар 2023, 05:21

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


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


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

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



Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: Как удалить повторяющиеся фигуры в контейнере типа List
СообщениеДобавлено: 25 фев 2023, 17:23 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 08 мар 2020, 00:19
Сообщений: 303
Использую Visio c: 2019
Очков репутации: 4

Добавить очки репутацииУменьшить очки репутации
Подскажите , как можно удалить повторяющиеся фигуры в контейнере типа list. Например если в контейнере несколько фигур с одинаковыми значениями , то нужно их удалить оставив одну фигуру. Для удаления использую такой код, но никак не могу сообразить, как внутри контейнера сравнивать между собой фигуры. :wall:
Код:
Dim arr() As Long
    Dim i As Integer
    Dim listMemberShape As Visio.Shape
    Dim listMemberShape2 As Visio.Shape
    Dim containerShape As Visio.Shape
    Dim n As Integer
     
    Set containerShape = Application.ActiveWindow.Selection(1)
   
    If containerShape.ContainerProperties.ContainerType = visContainerTypeList Then
       
        arr = containerShape.ContainerProperties.GetListMembers
        For i = 0 To UBound(arr)
            Set listMemberShape = ActivePage.Shapes.ItemFromID(arr(i))
           
            containerShape.ContainerProperties.RemoveMember listMemberShape

            listMemberShape.Delete
           
        Next
    End If

_________________
Группа в VK Фигуры электрики для Visio


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как удалить повторяющиеся фигуры в контейнере типа List
СообщениеДобавлено: 25 фев 2023, 17:38 
Не в сети
Administrator

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

Добавить очки репутацииУменьшить очки репутации
Цитата:
как можно удалить повторяющиеся фигуры в контейнере типа list. Например если в контейнере несколько фигур с одинаковыми значениями

Тут два момента:
1. Не бывает повторяющихся шейпов (фигур). У них может быть одинаковое значение какого-то свойства. Какого?
2. Контейнер, в отличие от группы, это только привязка. Сами шейпы находятся на странице. Удаление не отличается от удаления любых других шейпов.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как удалить повторяющиеся фигуры в контейнере типа List
СообщениеДобавлено: 25 фев 2023, 18:03 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 08 мар 2020, 00:19
Сообщений: 303
Использую Visio c: 2019
Очков репутации: 4

Добавить очки репутацииУменьшить очки репутации
Tumanov писал(а):
Цитата:
как можно удалить повторяющиеся фигуры в контейнере типа list. Например если в контейнере несколько фигур с одинаковыми значениями

Тут два момента:
1. Не бывает повторяющихся шейпов (фигур). У них может быть одинаковое значение какого-то свойства. Какого?
2. Контейнер, в отличие от группы, это только привязка. Сами шейпы находятся на странице. Удаление не отличается от удаления любых других шейпов.

Да например в окне данных Prop.Name у них есть одинаковые значения. Например 5 фигур со значением Prop.Name=1 нужно удалить все одинаковые, но чтобы осталась одна фигура с таким значением. К примеру в контейнере 3 фигуры со значением 1 , 2 со значением 2 , и нужно чтобы в контейнере осталась по одной фигуре каждого значения. Пробовал помещать в коллекцию, но в коллекции тоже не получилось отсортировать таким способом.

_________________
Группа в VK Фигуры электрики для Visio


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как удалить повторяющиеся фигуры в контейнере типа List
СообщениеДобавлено: 25 фев 2023, 19:39 
Не в сети
Administrator

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

Добавить очки репутацииУменьшить очки репутации
Вот так пойдет?
Код:
Sub ttt()
    Dim arr() As Long
    Dim i As Integer
    Dim listMemberShape As Visio.Shape
    Dim listMemberShape2 As Visio.Shape
    Dim containerShape As Visio.Shape
    Dim n As Integer
     
    Set containerShape = Application.ActiveWindow.Selection(1)
        arr = containerShape.ContainerProperties.GetListMembers
        Set Coll = New Collection
        For i = 0 To UBound(arr)
            Set listMemberShape = ActivePage.Shapes.ItemFromID(arr(i))
            n = listMemberShape.Cells("Prop.Name").ResultInt(32, 0)
            For j = i + 1 To UBound(arr)
                Set shpForDel = ActivePage.Shapes.ItemFromID(arr(j))
                n1 = shpForDel.Cells("Prop.Name").ResultInt(32, 0)
                On Error Resume Next
                    If n = n1 Then Coll.Add shpForDel, shpForDel.NameID
                On Error GoTo 0
            Next
        Next
        For Each Nid In Coll
            Nid.Delete
            'Debug.Print Nid.NameID
        Next
End Sub


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как удалить повторяющиеся фигуры в контейнере типа List
СообщениеДобавлено: 25 фев 2023, 20:00 
Не в сети
Administrator

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

Добавить очки репутацииУменьшить очки репутации
Извиняюсь. Точнее будет сначала исключить их из контейнера, а только потом удалить.
Код:
Sub ttt_2()
    Dim arr() As Long
    Dim i As Integer
    Dim listMemberShape As Visio.Shape
    Dim listMemberShape2 As Visio.Shape
    Dim containerShape As Visio.Shape
    Dim n As Integer
     
    Set containerShape = Application.ActiveWindow.Selection(1)
        arr = containerShape.ContainerProperties.GetListMembers
        Set Coll = New Collection
        For i = 0 To UBound(arr)
            Set listMemberShape = ActivePage.Shapes.ItemFromID(arr(i))
            n = listMemberShape.Cells("Prop.Name").ResultInt(32, 0)
            For j = i + 1 To UBound(arr)
                Set shpForDel = ActivePage.Shapes.ItemFromID(arr(j))
                n1 = shpForDel.Cells("Prop.Name").ResultInt(32, 0)
                On Error Resume Next
                    If n = n1 Then Coll.Add shpForDel, shpForDel.NameID
                On Error GoTo 0
            Next
        Next
        ActiveWindow.DeselectAll
        For Each Nid In Coll
            ActiveWindow.Select Nid, visSelect
        Next
        containerShape.ContainerProperties.RemoveMember ActiveWindow.Selection
        ActiveWindow.Selection.Delete
End Sub


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как удалить повторяющиеся фигуры в контейнере типа List
СообщениеДобавлено: 25 фев 2023, 20:33 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 08 мар 2020, 00:19
Сообщений: 303
Использую Visio c: 2019
Очков репутации: 4

Добавить очки репутацииУменьшить очки репутации
Tumanov писал(а):
Извиняюсь. Точнее будет сначала исключить их из контейнера, а только потом удалить.
Спасибо. То что нужно :)

_________________
Группа в VK Фигуры электрики для Visio


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

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



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

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


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

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