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

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

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


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


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

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



Начать новую тему Ответить на тему  [ Сообщений: 48 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Re: Поиск шейпов при определённом событии
СообщениеДобавлено: 20 окт 2016, 13:14 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
Machestro писал(а):
Совпадения будут происходить регулярно
дружище, да у тебя железные нервы !!! Изображение а если примерно такой расклад:
-TJ- в сообщении #10017 писал(а):
факту у меня все схемы состоят из 20-30 фигур которые повторяются по 300-500 раз на листе. Итого на одном листе от 1 000 то 10 000 элементов. Таких листов 28.
тут же убиться можно, изменил лишь одну ячеечку и тебе до вечера "поздравительные MsgBox" будут моргать Изображение, что что-то где-то там в такой же ячейке совпало/не совпало у других шейпов !

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


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Поиск шейпов при определённом событии
СообщениеДобавлено: 20 окт 2016, 13:17 
Не в сети
Постоянный участник

Зарегистрирован: 16 окт 2016, 12:41
Сообщений: 99
Использую Visio c: 2016
Очков репутации: 4

Добавить очки репутацииУменьшить очки репутации
Чтож вы так зациклились на MsBox. Не будет их в "финальной версии". Это лишь прототип функции.
Это я для себя сделал MsBox. Пока объектов мало я могу в уме посчитать сколь ко раз окошко вышло. Делаю так потому что по другому не умею


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Поиск шейпов при определённом событии
СообщениеДобавлено: 20 окт 2016, 13:18 
Не в сети
Ветеран

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

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

если задача в том, чтобы найти другие шейпы с той же позицией, которая хранится в Prop.Row_1 после изменения позиции в текущем шейпе, то лучше сделать диалоговое окно, где пользователь будет вводить позицию, а прямое изменение ячейки заблокировать. тогда не надо будет использовать затратное событие CellChanged

про msgbox - если тебе надо для отладки, то выводи в соотв. окошко через Debug.Print


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Поиск шейпов при определённом событии
СообщениеДобавлено: 20 окт 2016, 13:18 
Не в сети
Постоянный участник

Зарегистрирован: 16 окт 2016, 12:41
Сообщений: 99
Использую Visio c: 2016
Очков репутации: 4

Добавить очки репутацииУменьшить очки репутации
Можно в принципе не все объекты перебирать, а сделать поиск до первого совпадения


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Поиск шейпов при определённом событии
СообщениеДобавлено: 20 окт 2016, 13:21 
Не в сети
Content manager
Content manager
Аватара пользователя

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

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


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Поиск шейпов при определённом событии
СообщениеДобавлено: 20 окт 2016, 13:23 
Не в сети
Постоянный участник

Зарегистрирован: 16 окт 2016, 12:41
Сообщений: 99
Использую Visio c: 2016
Очков репутации: 4

Добавить очки репутацииУменьшить очки репутации
Опишу ещё раз по проще. Хотя это обсуждалось в viewtopic.php?f=6&t=1038

Допустим есть у меня шейп на стр.1 У него есть данные - любые. И есть ключевое свойство - назвали его ПОЗИЦИЯ, и ровно оно - SF1
На стр. 2 я рисую другой Шейп (пока он без данных). Добавляю ему свойство - ПОЗИЦИЯ и задаю значение тоже SF1. В этот момент все данные из шейпа на стр.1 должны перекочевать в шейп на стр.2

Вот и хочу организовать поиск шейпов


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

Зарегистрирован: 16 окт 2016, 12:41
Сообщений: 99
Использую Visio c: 2016
Очков репутации: 4

Добавить очки репутацииУменьшить очки репутации
В итоге получим, что все шейпы с ПОЗИЦИЯ=SF1 будут иметь одинаковые свойства


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

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

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


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Поиск шейпов при определённом событии
СообщениеДобавлено: 20 окт 2016, 13:32 
Не в сети
Постоянный участник

Зарегистрирован: 16 окт 2016, 12:41
Сообщений: 99
Использую Visio c: 2016
Очков репутации: 4

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


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Поиск шейпов при определённом событии
СообщениеДобавлено: 20 окт 2016, 13:41 
Не в сети
Content manager
Content manager
Аватара пользователя

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

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


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Поиск шейпов при определённом событии
СообщениеДобавлено: 20 окт 2016, 13:52 
Не в сети
Постоянный участник

Зарегистрирован: 16 окт 2016, 12:41
Сообщений: 99
Использую Visio c: 2016
Очков репутации: 4

Добавить очки репутацииУменьшить очки репутации
В принципе, вы правы. Возможно не обязательно менять на лету. Но тогда может возникнуть ситуация. Допустим У нас есть кучка шейпов с одинаковой позицией, но разными данными и мы решили синхронизировать всё это... Как в этом случае выбирать кто источник а кто приёмник?


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Поиск шейпов при определённом событии
СообщениеДобавлено: 20 окт 2016, 14:05 
Не в сети
Content manager
Content manager
Аватара пользователя

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

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


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Поиск шейпов при определённом событии
СообщениеДобавлено: 20 окт 2016, 14:07 
Не в сети
Постоянный участник

Зарегистрирован: 16 окт 2016, 12:41
Сообщений: 99
Использую Visio c: 2016
Очков репутации: 4

Добавить очки репутацииУменьшить очки репутации
Дело в том, что у шейпов могут быть разные Мастера, а данные должны быть одинаковые


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

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

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


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

Зарегистрирован: 30 июл 2014, 14:28
Сообщений: 534
Использую Visio c: 2008
Очков репутации: 107

Добавить очки репутацииУменьшить очки репутации
Как отмечали выше компетентные товарищи, события FormulaChanged и CellChanged будут у тебя возникать все время. Если надо и не надо. Есть другой вариант, без использования событий.

В свои нужные шейпы добавить строку в секцию User-Defined Cells, под любым именем. И вставить туда такую формулу - "=Prop.Position+RUNMACRO("Module1.MonitoringData","Мониторинг_объектов")"
А в документе добавить модуль и макрос (В данном случае это - Module1 и MonitoringData. Мониторинг_объектов - это имя документа)
Макрос такой(собственно это твой макрос, чуток переделанный):
Код:
Option Explicit

Const cellName = "Prop.Position.Value" ' имя ячейки для поиска, изменить на нужное

Sub MonitoringData()
Dim vsoPage As Visio.Page 'Одна проверяемая страница
Dim sh As Visio.Shape 'Один проверяемый шейп
Dim strSubject As String 'строка которую будем искать

Set sh = ActiveWindow.Selection.PrimaryItem

If sh.CellExists(cellName, 1) Then
strSubject = sh.Cells(cellName).ResultStr("")
    For Each vsoPage In ThisDocument.Pages 'перебираем страницы в документе
        For Each sh In vsoPage.Shapes 'перебираем шейпы на странице
            If sh.CellExists(cellName, 1) Then 'Есть ли вообще нужная ячейка
                If sh.Cells(cellName).ResultStr("") = strSubject Then MsgBox "Совпадение: Страница - " & vsoPage.Name & ", " & "Фигура - " & sh.Name 'Если значение равно искомому
            End If
        Next
    Next
End If

End Sub

То есть у тебя этот макрос будет запускаться только для нужных шейпов и только если изменено значение в строке 'Position'.

Вот пример, попробуй:
Скачать файл - Мониторинг_объектов.zip
https://yadi.sk/d/qbpj9WI9d2eqF

_________________
GitHub
Yandex-диск с набором полезных утилит


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Поиск шейпов при определённом событии
СообщениеДобавлено: 20 окт 2016, 14:25 
Не в сети
Постоянный участник

Зарегистрирован: 16 окт 2016, 12:41
Сообщений: 99
Использую Visio c: 2016
Очков репутации: 4

Добавить очки репутацииУменьшить очки репутации
Согласен, что можно ограничить область поиска, но всё равно его вести придётся, а вот это я пока не могу организовать. Буду разбираться, что в начале темы советовали


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Поиск шейпов при определённом событии
СообщениеДобавлено: 20 окт 2016, 14:39 
Не в сети
Постоянный участник

Зарегистрирован: 16 окт 2016, 12:41
Сообщений: 99
Использую Visio c: 2016
Очков репутации: 4

Добавить очки репутацииУменьшить очки репутации
Shishok, спасибо огромное за пример. Вроде всё работает. Только вот писать такую формулу в ячейку - я смогу, а вот другим пользователям - это трудно будет объяснить.

И ещё вопрос. Если у меня постоянно будет происходить мониторинг в фоне - это очень сильно затормозит visio?


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Поиск шейпов при определённом событии
СообщениеДобавлено: 20 окт 2016, 14:52 
Не в сети
Ветеран

Зарегистрирован: 30 июл 2014, 14:28
Сообщений: 534
Использую Visio c: 2008
Очков репутации: 107

Добавить очки репутацииУменьшить очки репутации
Для других пользователей можно слепить макрос, который автоматом впишет.
Цитата:
И ещё вопрос. Если у меня постоянно будет происходить мониторинг в фоне - это очень сильно затормозит visio?

Зависит от количества страниц, количества шейпов на страницах, как часто будут изменяться формулы в шейпах. Ну и от конфигурации компа

_________________
GitHub
Yandex-диск с набором полезных утилит


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Поиск шейпов при определённом событии
СообщениеДобавлено: 20 окт 2016, 14:55 
Не в сети
Ветеран

Зарегистрирован: 30 июл 2014, 14:28
Сообщений: 534
Использую Visio c: 2008
Очков репутации: 107

Добавить очки репутацииУменьшить очки репутации
По поводу других пользователей.
Они что, сами будут рисовать шейпы, пихать туда формулы и прочее?

_________________
GitHub
Yandex-диск с набором полезных утилит


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Поиск шейпов при определённом событии
СообщениеДобавлено: 20 окт 2016, 14:59 
Не в сети
Постоянный участник

Зарегистрирован: 16 окт 2016, 12:41
Сообщений: 99
Использую Visio c: 2016
Очков репутации: 4

Добавить очки репутацииУменьшить очки репутации
Shishok писал(а):
Они что, сами будут рисовать шейпы...


Иногда да (По крайней мере рисовать), по мере наполнения базы. Иначе всегда меня будут дёргать и просить нарисовать


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

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



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

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


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

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