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

Автонумерация обозначений шейпов
http://visio.getbb.ru/viewtopic.php?f=15&t=685
Страница 1 из 1

Автор:  Shishok [ 01 дек 2014, 01:49 ]
Заголовок сообщения:  Автонумерация обозначений шейпов

Вот. Старенький макрос раскопал. Там есть нюанс. Либо все время копировать/дублировать шейпы с листа, либо все время тащить из трафарета. А то нумерация сбивается. В свое время так и не смог пофиксить. Visio как-то различает событие добавления шейпа из стенсила и событие копирования/дублирования. А я не смог различить :cry: .
Вложение:
Комментарий к файлу: Не понял почему файл без названия?
.7z [33.58 Кб]
Скачиваний: 218

Автор:  Surrogate [ 01 дек 2014, 13:35 ]
Заголовок сообщения:  Re: Автонумерация обозначений шейпов

действительно, RUNMACRO не срабатывает как событие при копировании шейпа. SETF в данной ситуации
работает одинаково при вытаскивании шейпа из стенсила и при копи/пасте.
попробовал вместо RUNMACRO использовать CALLTHIS. не вышло не понял, что там за параметры надо в
шейпшите задавать для его запуска…

чтоб в твоем сообщении появилось название файла нужно, кликнуть по кнопке Вставить в текст сообщения
Изображение

Автор:  Shishok [ 01 дек 2014, 17:35 ]
Заголовок сообщения:  Re: Автонумерация обозначений шейпов

Цитата:
действительно, RUNMACRO не срабатывает как событие при копировании шейпа.

Не не, Surrogate, Runmacro срабатывает при копировании и при дублировании тоже(это которое Ctlr+D). Вот вытащи одну фигурку на лист, и копируй ее. Нумерация прекрасно увеличивается.
А вот если все время вытаскивать из стенсила то первый шейп будет например Р1, второй опять Р1, а уже третий и далее нормально перенумеровываются. Но общее количество данных шейпов естественно не совпадает с нумерацией. Вот, только что еще раз попробовал.
Гложет меня мысль - мой косяк! Подумал что из-за того что в стенсиле шейп без номера. Нет, не в этом дело.

Автор:  Surrogate [ 01 дек 2014, 17:41 ]
Заголовок сообщения:  Re: Автонумерация обозначений шейпов

у меня при вытаскивании на лист работает так. первые два шейпа имеют номер 1, потом идет увеличение номера на единицу.
при дублировании шейпа выдается правильный номер… т.е. перескакивает через единицу

Автор:  Shishok [ 01 дек 2014, 18:10 ]
Заголовок сообщения:  Re: Автонумерация обозначений шейпов

Surrogate писал(а):
у меня при вытаскивании на лист работает так. первые два шейпа имеют номер 1, потом идет увеличение номера на единицу.
при дублировании шейпа выдается правильный номер… т.е. перескакивает через единицу

Ну вот я об этом. Где-то я накосячил. Надо пересмотреть код, он давнишний.
По моему кто-то уже спрашивал, но тем не менее - чем делаешь гифки?

Автор:  Surrogate [ 01 дек 2014, 18:28 ]
Заголовок сообщения:  Re: Автонумерация обозначений шейпов

я код посмотрел, очень изысканно. но в чем косяк не понял…
а гифки делаю прогой LiceCap

Автор:  Shishok [ 01 дек 2014, 18:34 ]
Заголовок сообщения:  Re: Автонумерация обозначений шейпов

Surrogate писал(а):
я код посмотрел, очень изысканно. но в чем косяк не понял…
а гифки делаю прогой LiceCap

Изысканно? Ну не знаю. Лично мне было немного стыдновато его выкладывать. Разве что писалось это давно.
Но спасибо за оценку. Ха! Только он неправильно работает! :)

Автор:  Shishok [ 01 дек 2014, 20:23 ]
Заголовок сообщения:  Re: Автонумерация обозначений шейпов

Есть еще НЮАНС :wall: Не из области программирования , а что-то из области логической несуразицы!

Пример:
Создаем 5 шейпов от Р1 до Р5

For i=1 to 4
____Удаляем шейп с обозначением меньше Р5
____Копируем любой из оставшихся шейпов
Next

Результат = все шейпы с обозначением Р5 :cry:

Автор:  Shishok [ 01 дек 2014, 22:23 ]
Заголовок сообщения:  Re: Автонумерация обозначений шейпов

Короче, я выяснил интересное поведение Visio.
Мой код после вызова из добавляемого шейпа подсчитывает количество шейпов с определенным обозначением на листе. Так вот:

При копировании/дублировании подсчитываются все подходящие по критерию(обозначение) шейпы, включая только что вставленный, откуда и был вызов макроса.
При вытаскивании и бросании шейпа из стенсила, подсчитываются только уже лежащие на листе шейпы, но не бросаемый. Ощущение что код отрабатывается до того как шейп "упал" на лист. Шейпа на листе еще нет, но код спровоцированный этим шейпом уже выполнился. Как-то так.

Вот поэтому идет неправильная нумерация. Или скажем, в сильной степени поэтому. Да, нет! Точно из за этого.
Никто не замечал такого казуса?

Автор:  Tumanov [ 01 дек 2014, 23:51 ]
Заголовок сообщения:  Re: Автонумерация обозначений шейпов

Не может это быть связано с тем, что при копировании шейпа активным является окно рисунка (то есть тот же документ), а при работе с мастером - другой документ - трафарет? Ну или что-то в таком роде.

Автор:  Shishok [ 02 дек 2014, 00:58 ]
Заголовок сообщения:  Re: Автонумерация обозначений шейпов

Tumanov писал(а):
Не может это быть связано с тем, что при копировании шейпа активным является окно рисунка (то есть тот же документ), а при работе с мастером - другой документ - трафарет? Ну или что-то в таком роде.

Нет! Я усе выяснил!
А вот это попрошу забыть!
Цитата:
Короче, я выяснил интересное поведение Visio.

Это у меня в мозгах к вечеру интересное поведение :D .
Вот строка где собака порылась:
Код:
(Я там немного переделал - PrDes это строка "Prop.Designation")
If shpObj.CellExistsU(PrDes, 1) Then

А надо:
Код:
If shpObj.CellExistsU(PrDes, 0) Then

Из документации по свойству CellExistsU:
If fExistsLocally is non-zero (True), the CellExists property value is True only if the object contains the cell locally; if the cell is inherited, the CellExists property value is False.
If fExistsLocally is zero (False), the CellExists property value is True if the object either contains or inherits the cell.


В общем когда тащишь из стенсила, свойство Prop.Designation оригинально, а когда копируешь, то это свойство наследуется. Из за этого строка If shpObj.CellExistsU(PrDes, 1) Then с параметром 1 давала неправильное поведение кода.
Вот так подобная невнимательность к мелочам, приводит к замене планов на вечер. ;) . Тем не менее, определенное удовольствие получил. Архив обновил.

Автор:  Shishok [ 02 дек 2014, 01:09 ]
Заголовок сообщения:  Re: Автонумерация обозначений шейпов

Я не могу вложить файл с названием! Поэтому там же:
https://yadi.sk/d/qbpj9WI9d2eqF

Автор:  Surrogate [ 02 дек 2014, 17:52 ]
Заголовок сообщения:  Re: Автонумерация обозначений шейпов

Digitall в скайпе писал(а):
В visio 2013 на этой строчке тормознулся макрос таблиц.
Код:
ThemeE = ActivePage.ThemeEffect
в модуле MainModule

он выкосил все упоминания о темах из кода и заработало в 2013 ! Передает респект создателю

Автор:  Shishok [ 02 дек 2014, 18:42 ]
Заголовок сообщения:  Re: Автонумерация обозначений шейпов

Surrogate писал(а):
Digitall в скайпе писал(а):
В visio 2013 на этой строчке тормознулся макрос таблиц.
Код:
ThemeE = ActivePage.ThemeEffect
в модуле MainModule

он выкосил все упоминания о темах из кода и заработало в 2013 ! Передает респект создателю

Странно. У меня было мало возможностей проверять код на visio 2013. А теперь и вовсе нет возможности.
А вообще-то в оригинале строка ThemeE = ActivePage.ThemeEffect, выглядит так
Код:
ThemeE = ActivePage.ThemeEffects

С буквой "s" в конце.
Эти фрагменты кода важны только если на листе используются эффекты и цвета тем. И только при создании таблиц. Просто управляющие ячейки немного не Ok будут.


Изображение

Автор:  Shishok [ 08 янв 2015, 12:44 ]
Заголовок сообщения:  Re: Автонумерация обозначений шейпов

Появилась возможность иногда работать в Visio 2013.
Оказывается файлы .vsd открытые в V13, это не то же что файлы .vsdx и .vsdm по крайней мере в плане работы с эффектами тем и цветов.

Вот вкладка Конструктор для .vsd:
Изображение

а вот для того же файла сохраненного в .vsdx:
Изображение

Соответственно код работающий для .vsd, вызывает ошибку для .vsdx и .vsdm.
Объектная модель приложения чуток изменилась. Так что все надо тестировать. (Ваш кэп :) )

Автор:  Surrogate [ 08 янв 2015, 16:19 ]
Заголовок сообщения:  Re: Автонумерация обозначений шейпов

Кэп, а ты уверен что темы главное в данном коде?

Автор:  Shishok [ 08 янв 2015, 18:14 ]
Заголовок сообщения:  Re: Автонумерация обозначений шейпов

Surrogate писал(а):
Кэп, а ты уверен что темы главное в данном коде?

Если ты про заголовок темы, то да, маненько не туды.
Просто я наконец врубился почему у Digitall ошибка появлялась.

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