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

Форум по вопросам применения и программирования в Visio
Текущее время: 21 июл 2017, 16:40

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


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


Размещение файлов в формате vsd (а не vsdx/vsdm), увеличивает вероятность ответа стремительным домкратом !!!



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

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


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

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

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


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

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

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

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

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


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

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

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


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

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


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

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

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

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

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


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

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

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


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

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


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

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

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


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

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


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

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

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


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

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


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

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

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


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

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


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

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

Добавить очки репутацииУменьшить очки репутации
Как отмечали выше компетентные товарищи, события 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


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

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

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


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

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

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

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


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

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

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

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


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

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

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


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

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

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


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


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

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



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

Сейчас этот форум просматривают: Google [Bot], Google Adsense [Bot], Yandex [bot] и гости: 2


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

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