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

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

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


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


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

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



Начать новую тему Ответить на тему  [ Сообщений: 17 ] 
Автор Сообщение
 Заголовок сообщения: Вызов макроса из ячейки EventXFMod
СообщениеДобавлено: 18 авг 2021, 00:20 
Не в сети
Ветеран
Аватара пользователя

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

Добавить очки репутацииУменьшить очки репутации
Сделал макрос для соединительной линии для определения куда она подключена. Макрос работает , если его вызывать после подключения соединительной линии. Но возникают проблемы , если вызывать макрос из ячейки EventXFMod. Если на фигуре стоят точки соединения и соединительную линию подключить на них, все хорошо макрос работает. Но если подключить соединительную линию к контуру фигуры , то макрос начинает бесконечно выполнятся и его можно остановить только сочетание клавиш Ctrl+Break. Почему так происходит? И можно ли как то решить эту проблему?
Содержимое спрятано под спойлер ↓
Спойлер:
Вложение:
_2021_08_17_22_59_17_953.gif
_2021_08_17_22_59_17_953.gif [ 533.4 Кб | Просмотров: 721 ]

Код:
Sub teststartend()
Dim shp As Visio.Shape
    Set shp = Application.ActiveWindow.Selection(1)
               If shp.OneD Then   
                If shp.Connects.Count = 1 Then
                Set shpToSheet = shp.Connects(1).ToSheet       
                     m = shpToSheet.Text
                     shp.Cells("Prop.StartTV").Formula = Chr(34) & m & Chr(34)
                     shp.Cells("Prop.EndTV").Formula = ""   
                ElseIf shp.Connects.Count > 1 Then
                Set shpToSheet = shp.Connects(1).ToSheet
                     m = shpToSheet.Text
                     shp.Cells("Prop.StartTV").Formula = Chr(34) & m & Chr(34)
                     Set shpToSheet = shp.Connects(2).ToSheet
                     m = shpToSheet.Text
                     shp.Cells("Prop.EndTV").Formula = Chr(34) & m & Chr(34)
                ElseIf shp.Connects.Count = 0 Then
                shp.Cells("Prop.StartTV").Formula = ""
                shp.Cells("Prop.EndTV").Formula = ""
                End If
             End If
End Sub


Вложения:
testsatrtend.vsd [39.5 Кб]
Скачиваний: 44

_________________
Группа в VK Фигуры электрики для Visio
Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Вызов макроса из ячейки EventXFMod
СообщениеДобавлено: 18 авг 2021, 01:29 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
у нас в соседнем районе был похожий случай (c)
TheHeat в сообщении #14478 писал(а):
Дело в том, что EventXFMod при этом запускает макрос 5 раз и CALLTHIS без останова в теле макроса корректно не выполняется
Tim Umix писал(а):
макрос начинает бесконечно выполнятся и его можно остановить только сочетание клавиш Ctrl+Break. Почему так происходит?
EventXFMod срабатывает при любом изменении в положении или ориентации фигуры:
1. потянули фигуру - изменилась ее длина / первое срабатывание
2. после этого изменится ее геометрический центр / второе срабатывание
3. у коннектора много чего управляется ядром визио. возможно это генерит повторные срабатывания.
Tim Umix писал(а):
И можно ли как то решить эту проблему?
в ветке по ссылке выше вроде проблему удалось решить. лично я не пробовал, я тупо не использую EventXFMod

Дополнено позднее: тему с определением присоединенного к коннектору шейпа видел на http://visguy.com/vgforum/index.php.
подозреваю, что точно должно быть в проекте https://github.com/gtfox/SAPR_ASU, боюсь кроме автора нам не подскажет где это можно поискать :wall:
Изображение

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


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

Зарегистрирован: 26 авг 2019, 21:07
Сообщений: 267
Использую Visio c: 2019
Очков репутации: 11

Добавить очки репутацииУменьшить очки репутации
Surrogate писал(а):
должно быть в проекте https://github.com/gtfox/SAPR_ASU, боюсь кроме автора нам не подскажет где это можно поискать :wall:
:lol: я тоже боюсь

В САПР-АСУ для соединительной линии не используется EventXFMod. Используются события _ConnectionsAdded, _ConnectionsDeleted переменной страницы, объявленной как WithEvents (см. картинку)
Важно, чтобы этот код располагался в ThisDocument
Содержимое спрятано под спойлер ↓
Спойлер:
Изображение


Дополнено позднее: У меня пример не вызывает зацикливания
Содержимое спрятано под спойлер ↓
Спойлер:
Изображение

_________________
САПР-АСУ
https://github.com/gtfox/
YouTube


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Вызов макроса из ячейки EventXFMod
СообщениеДобавлено: 18 авг 2021, 15:50 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
gtfox писал(а):
У меня пример не вызывает зацикливания
так то на классике (в версии 15 летней давности) ! :mrgreen:

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


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

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

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

У меня тоже он иногда перестает зацикливаться и работает все нормально.

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


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

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

Добавить очки репутацииУменьшить очки репутации
Surrogate писал(а):
1. потянули фигуру - изменилась ее длина / первое срабатывание
2. после этого изменится ее геометрический центр / второе срабатывание
3. у коннектора много чего управляется ядром визио. возможно это генерит повторные срабатывания.

Ясно, вот только почему если к точкам соединения цеплять то все нормально , а с контуром проблемы. Для себя пока решил проблему таким образом , что линия может цепляться только к точкам соединения.

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


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Вызов макроса из ячейки EventXFMod
СообщениеДобавлено: 18 авг 2021, 17:00 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
Tim Umix писал(а):
линия может цепляться только к точкам соединения
в моих экспериментах зацикливание начинается, даже когда коннектор теряет соединение с точкой или контуром фигуры.

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Вызов макроса из ячейки EventXFMod
СообщениеДобавлено: 18 авг 2021, 19:51 
Не в сети
Ветеран
Аватара пользователя

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

Добавить очки репутацииУменьшить очки репутации
Surrogate писал(а):
в моих экспериментах зацикливание начинается, даже когда коннектор теряет соединение с точкой или контуром фигуры.

Поменял код. Теперь запись куда подключена линия передаю в текст линии и вроде перестало зацикливаться.
Содержимое спрятано под спойлер ↓
Спойлер:
Вложение:
_2021_08_18_18_46_35_594.gif
_2021_08_18_18_46_35_594.gif [ 347.47 Кб | Просмотров: 673 ]


Вложения:
testsatrtend.vsd [38.5 Кб]
Скачиваний: 40

_________________
Группа в VK Фигуры электрики для Visio
Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Вызов макроса из ячейки EventXFMod
СообщениеДобавлено: 18 авг 2021, 21:01 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
Tim Umix писал(а):
запись куда подключена линия передаю в текст линии и вроде перестало зацикливаться.
перестало. интересно как запись значений в shape data влияет EventXFMod ?

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


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

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

Добавить очки репутацииУменьшить очки репутации
Surrogate писал(а):
Tim Umix писал(а):
запись куда подключена линия передаю в текст линии и вроде перестало зацикливаться.
перестало. интересно как запись значений в shape data влияет EventXFMod ?

Похоже проблема именно в shape data. Добавил ячейки User-defined Cells макросом передаю туда что откуда подключено, а уже в свойствах фигуры передаю данные в shape data. Вроде все работает без зацикливаний.
Содержимое спрятано под спойлер ↓
Спойлер:
Вложение:
_2021_08_18_20_20_59_751.gif
_2021_08_18_20_20_59_751.gif [ 290.06 Кб | Просмотров: 648 ]


Вложения:
testsatrtend.vsd [39.5 Кб]
Скачиваний: 39

_________________
Группа в VK Фигуры электрики для Visio
Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Вызов макроса из ячейки EventXFMod
СообщениеДобавлено: 19 авг 2021, 10:47 
Не в сети
Administrator

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

Добавить очки репутацииУменьшить очки репутации
Цитата:
Похоже проблема именно в shape data. Добавил ячейки User-defined Cells макросом передаю туда что откуда подключено, а уже в свойствах фигуры передаю данные в shape data. Вроде все работает без зацикливаний.

Можно попробовать принудительно рвать зацикливание.
Я ввел переменную flag
Код:
Dim flag As Integer
Sub teststartend()

и обращаюсь к ней вот так
Код:
    If flag > 2 Then flag = 0: Exit Sub
            If shp.OneD Then
    flag = flag + 1

После этого первый вариант файла перестает зацикливаться.


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

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

Добавить очки репутацииУменьшить очки репутации
Tumanov писал(а):
Код:
    If flag > 2 Then flag = 0: Exit Sub
            If shp.OneD Then
    flag = flag + 1

После этого первый вариант файла перестает зацикливаться.

Спасибо. Да с этим кодом перестало зацикливаться.

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


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Вызов макроса из ячейки EventXFMod
СообщениеДобавлено: 29 авг 2021, 01:13 
Не в сети
Ветеран
Аватара пользователя

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

Добавить очки репутацииУменьшить очки репутации
А можно ли как то сделать , чтобы shp.Connects(1) был началом линии или сразу как то получать куда подключено начало линии. Хочу сделать свою линию чтобы она подключалась только началом. Если оставить код как сейчас , то какой конец первый подключить тот и начало. Или можно , как то сделать так , чтобы линия липла только одним концом?

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


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Вызов макроса из ячейки EventXFMod
СообщениеДобавлено: 29 авг 2021, 01:47 
Не в сети
Ветеран

Зарегистрирован: 26 авг 2019, 21:07
Сообщений: 267
Использую Visio c: 2019
Очков репутации: 11

Добавить очки репутацииУменьшить очки репутации
Tim Umix писал(а):
shp.Connects(1) был началом линии или концом?
Начало или конец содержатся в свойстве FromPart объекта Connects: shp.Connects(1).FromPart
Содержимое спрятано под спойлер ↓
Спойлер:
Изображение

_________________
САПР-АСУ
https://github.com/gtfox/
YouTube


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

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

Добавить очки репутацииУменьшить очки репутации
gtfox писал(а):
Начало или конец содержатся в свойстве FromPart объекта Connects: shp.Connects(1).FromPart

Спасибо. То что надо. Все получилось :D

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


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

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

Добавить очки репутацииУменьшить очки репутации
Продолжаю экспериментировать. Сделал линию, которая от фигуры получает текст и вставляет в себя. Все вроде работает. Вот только если после коннекта с фигурой к этой фигуре подключать другие соединительные линии, то на них начинает срабатывать макрос в хаотичном порядке, хотя у них то в ячейках евент ничего не прописано. :wall: Похоже это и есть причина зацикливания. Только не пойму, почему макрос срабатывает на другие линии?!?
Содержимое спрятано под спойлер ↓
Спойлер:
Вложение:
_2021_08_31_00_13_07_834.gif
_2021_08_31_00_13_07_834.gif [ 638.71 Кб | Просмотров: 500 ]


Вложения:
test2.vsd [68 Кб]
Скачиваний: 44

_________________
Группа в VK Фигуры электрики для Visio
Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Вызов макроса из ячейки EventXFMod
СообщениеДобавлено: 31 авг 2021, 02:14 
Не в сети
Ветеран

Зарегистрирован: 26 авг 2019, 21:07
Сообщений: 267
Использую Visio c: 2019
Очков репутации: 11

Добавить очки репутацииУменьшить очки репутации
Мелкомягкие, в очередной раз доказывают, что они круче чем тефаль, и они 2 раза подумали за вас, хотя их никто не просил :lol:
Содержимое спрятано под спойлер ↓
Спойлер:
Изображение

_________________
САПР-АСУ
https://github.com/gtfox/
YouTube


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

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



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

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


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

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