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

Форум по вопросам применения и программирования в Visio
Текущее время: 29 мар 2024, 01:31

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


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


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

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



Начать новую тему Ответить на тему  [ Сообщений: 15 ] 
Автор Сообщение
 Заголовок сообщения: Не всегда работает PAGENUMBER() и отображ-е данных документа
СообщениеДобавлено: 17 янв 2015, 22:19 
Не в сети
Постоянный участник

Зарегистрирован: 02 апр 2013, 10:52
Сообщений: 93
Очков репутации: 9

Добавить очки репутацииУменьшить очки репутации
Добрый день.

Пытаюсь сделать Shape(точнее групу), в к-ом отображаются много данных, к-ые берутся с разделов TheDoc!User, ThePage!Prop и ThePage!User.
Словил пару забавных глюков.
  • Первый, не всегда обновляются данные в шейпе, после того как я макросом поменял параметры в TheDoc!User, ThePage!Prop и ThePage!User. Глюк плавающий. При масштабировании, выделении шейпа и различных других телодвижений изображение в шейпе меняются на правильные, правда не всегда одни и те же движения помогают. Причем бывает, что работает все как часы. Пока не понял что за напасть.
  • Второй, это веселая работа стандартной функции PAGENUMBER(). Если данная функция тупо прописана в Text fields то она работает всегда, если же в user-defined cells группы то есть нюансы. Если перетаскивать страницу, в к-ой расположен шейп, к последним страницам, то все работает, если же к первым страницам, то перестает работать перенумерация. Так же не работает перенумерация, если вставить страницу перед этой страницей. Причем заставить обновится на правильное значение у меня получилось только зайдя в таблицу свойств группы, зайти в редактирование строки, гдпе прописана функция Pagenumber и нажатие клавиши ввода.
    В приложении файл, в котором получилось у меня добиться 100% срабатывания, и в к-ом все лишнее убрано.

В итоге возникли вопросы:
  • Как можно заставить работать функцию PAGENUMBER корректно при использовании ее в user-defined cells?
  • На какие подводные грабли я наступил, что у меня иногда не обновляются данные в группе шейпов, к-ые берутся в параметрах документа и страниц, хотя в параметрах документа и страницы макрос точно все меняет?


Вложения:
16.vsd [40 Кб]
Скачиваний: 161
Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Не всегда работает PAGENUMBER() и отображ-е данных документа
СообщениеДобавлено: 18 янв 2015, 00:52 
Не в сети
Content manager
Content manager
Аватара пользователя

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

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


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Не всегда работает PAGENUMBER() и отображ-е данных документа
СообщениеДобавлено: 18 янв 2015, 01:46 
Не в сети
Ветеран

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

Добавить очки репутацииУменьшить очки репутации
Пробовал запустить файл на Visio 2010. Нет никакого 100% срабатывания.
Цитата:
Как можно заставить работать функцию PAGENUMBER корректно при использовании ее в user-defined cells?

Можно принудительно пересчитывать формулу. Например так:

в момент изменения положения шейпа на листе
=PAGENUMBER()+DEPENDSON(PinX,PinY)

в момент изменения размера шейпа
=PAGENUMBER()+DEPENDSON(Width,Height)

в момент изменения текста шейпа
=PAGENUMBER()+DEPENDSON(TheText)

ну или по другому событию, здесь мне трудно сказать что лучше.

PS
Вот такая штука тоже не работает :cry:
=PAGENUMBER()+DEPENDSON(PAGENUMBER())

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


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Не всегда работает PAGENUMBER() и отображ-е данных документа
СообщениеДобавлено: 18 янв 2015, 12:41 
Не в сети
Administrator

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

Добавить очки репутацииУменьшить очки репутации
Надо же...
Красивый баг!
Цитата:
Как можно заставить работать функцию PAGENUMBER корректно при использовании ее в user-defined cells?

Оказалось, что такая постановка вопроса не отражает всей картины.
user-defined cells здесь ни при чем.
PageNumber() не работает в любой ячейке, но только в тот момент, когда исследуемая страница становится первой. В остальных случаях претензий вроде бы нет.
Для исправления можно попробовать вместо PageNumber() использовать связку
=PAGENUMBER()+DEPENDSON(NOW())
Только я бы не стал делать множество вызовов функции PageNumber в пределах одного шейп-листа. Наверное лучше отвести какую-то одну ячейку, в нее поставить указанную связку, а во всех остальных формулах ссылаться на эту ячейку уже без всякого Dependson.
--
P.S. Смотрел в Visio 2007
Приложил кратчайший пример.


Вложения:
PageNumberError.vsd [24 Кб]
Скачиваний: 158
Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Не всегда работает PAGENUMBER() и отображ-е данных документа
СообщениеДобавлено: 19 янв 2015, 13:44 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
Tumanov в сообщении #6378 писал(а):
P.S. Смотрел в Visio 2007
а в 2003 версии, что-то такого не замечал.
да, вспомнил. встречался мне в 2010-ом и второй баг. я лечу его макросом, обновляю формулы в шейпах где есть ссылки на номер страницы на всех листах перед закрытием документа.
PS это не первый случай кривой работы функций shapesheet в версии 2010…

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


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Не всегда работает PAGENUMBER() и отображ-е данных документа
СообщениеДобавлено: 19 янв 2015, 23:02 
Не в сети
Постоянный участник

Зарегистрирован: 02 апр 2013, 10:52
Сообщений: 93
Очков репутации: 9

Добавить очки репутацииУменьшить очки репутации
Surrogate, версия Visio 2010.
Shishok, к сожалению если и использовать DEPENDSON, то в моем случае подходит конструкция предложенная Tumanov(забавно получается - каждую минуту обновлять данные. Надо как-нибудь попробовать.. грызут меня небольшие сомнения, что и тут мелкософт подсунул граблю и работать корректно в определенных условиях не будет), но к сожалению полностью вопросы юзверей, типо я поменял а оно все не меняется, данная конструкция не решает.

Поэкспериментировал и вроде нашел закономерности
По первому глюку: желательно все формулы и ссылки на параметры страницы и документа прописывать в таблице параметров группы, а потом уж из нее брать данные и отображать в шейпах группы. Когда все переделал в таком ключе, все вроде стало корректно обновляться
По второму глюку. У меня в 2010 ведет себя функция PAGENUMBER() как я описывал ранее: если она не прописана в Text fields, то при перетаскивании страницы с увеличением ее порядкового индекса, она с большой долей вероятности работать будет, при понижении порядкового индекса, сразу забивает большой такой болт. Но если прописать формулу в Text fields, то она срабатывает всегда. И вроде первый глюк, если шейп, где находится поле с номером страницы, находится в группе не влияет.
С PageCount() та же беда.

Surrogate, обновляешь формулы в шейпах как? в макросе переприсваиваешь значение формулы?

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


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Не всегда работает PAGENUMBER() и отображ-е данных документа
СообщениеДобавлено: 20 янв 2015, 01:19 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
RoMMaN писал(а):
Surrogate, обновляешь формулы в шейпах как? в макросе переприсваиваешь значение формулы?
в своих документах на базе шаблона (см. сообщение #33) я делаю обновление номеров листов так
Код:
Sub UpdatePageNumbers()
Dim pg As Page, shp As Shape
For Each pg In ActiveDocument.Pages ' перебор листов документа
If pg.Shapes.Item(1).NameU = "Штамп" Then ' если первый шейп на листе "Штамп"
Set shp = pg.Shapes.Item(1) ' назначаем этому шейпу переменную shp
shp.Cells("Fields.Value").FormulaU = "=pagenumber()-1" ' обновляем этому шейпу формулу
Else
End If
Next pg
End Sub
RoMMaN писал(а):
Про то, что когда-то здесь создавали шаблон(кажется точно не помню),чтобы из него работали все макросы в любых документах помню, но не уверен, что у меня времени хватит снова попытаться понять что там и как и сделать использование приемлемым в работе.
это было здесь. у меня там все работало, только у меня это дело не прижилось.
RoMMaN писал(а):
Не уверен, что стоит создавать новую тему. Никто навскидку не ткнет носом, как макросом скопировать макрос из одного документа в другой документ?
та самая тема

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


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Не всегда работает PAGENUMBER() и отображ-е данных документа
СообщениеДобавлено: 21 янв 2015, 10:48 
Не в сети
Постоянный участник

Зарегистрирован: 02 апр 2013, 10:52
Сообщений: 93
Очков репутации: 9

Добавить очки репутацииУменьшить очки репутации
Surrogate
, спасибо что дал ссылку. За форумом мало слежу и данные труды прошли мимо меня. Tumanov, большое спасибо что делитесь своими знаниями и работами .
По описанию вы упростили мне сильно задачу . Осталось только добраться до компа с визио и попробывать.
Еще пару нубских вопросов. А возможно ли запускать макрос из другого документа:
1. из макроса текущего документа
2. с помощью функций из шейпшита. не помню точно как они называются и визио под рукой нет. точно помню, что прописывал вызов макроса на эктион шейпа. но макрос был в том же документе .
3 ну и совсем простенький. как корректно присвоить строку в параметр шейпшита, если в ней есть символы ".

На счет обновления данных. Много не очерь хороших слов. К сожалению первая проблема не ушла. На некоторых компьютерах работает все нормально, на других постоянные проблемы с обновлениями отображения.
Пришлось применять метод убеждения для юзверей, объясняю что немного помасштабировать страницу в лучшем случае или сохранить и переоткрыть файл не так страшно(слава богу это рамки документов, и изменять ее приходится нечасто)
Решил, что когда появится свободное время сделаю action который через setf будет менять параметр в группе шейпе а во всех нужных полях доиишу Dependson на это поле.
А вот Pagnumber после тгого как переделал, работает как часы.



извиняюсь за ошибки. пишу в планшете


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Не всегда работает PAGENUMBER() и отображ-е данных документа
СообщениеДобавлено: 21 янв 2015, 12:05 
Не в сети
Content manager
Content manager
Аватара пользователя

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

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


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Не всегда работает PAGENUMBER() и отображ-е данных документа
СообщениеДобавлено: 21 янв 2015, 12:18 
Не в сети
Ветеран

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

Добавить очки репутацииУменьшить очки репутации
1. если вопрос про то как вызывать функцию в документе А из документа Б, то у меня так и не вышло. в инете пишут, что просто надо так: ИмяПроекта.ИмяМодуля.ИмяПроцедуры. у меня спотыкается на ИмяПроекта - не видит, даже если оба документа открыты.
2. из шейпшита вот такая формула: "CALLTHIS("ИмяМодуля.ИмяПроцедуры","ИмяПроекта")"
если нужно с кнопки на тулбаре или в контекстном меню, то св-во: OnAction = "ИмяПроекта!ИмяМодуля.ИмяПроцедуры"
3. кавычки просто удваиваются: .FormulaU ="CALLTHIS(""ИмяМодуля.ИмяПроцедуры"",""ИмяПроекта"")"


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Не всегда работает PAGENUMBER() и отображ-е данных документа
СообщениеДобавлено: 21 янв 2015, 13:27 
Не в сети
Administrator

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

Добавить очки репутацииУменьшить очки репутации
Дополню конкретным примером :)
Если сделать 2 документа Visio с именами doc1 и doc2. Открыть их в таком же порядке.
В один документ вписать 2 макроса
Код:
'Основной документ
Sub test()
    Set doc = Documents(2)
    doc.ExecuteLine ("ThisDocument.macDoc2")
End Sub

Sub test2()
    Set shp = ActivePage.Shapes(1)
    shp.Cells("EventXFMod").Formula = "=RUNMACRO(""ThisDocument.macDoc2""; ""doc2"")"
    shp.Cells("EventDblClick").Formula = "=CALLTHIS(""ThisDocument.macDoc2bis""; ""doc2"")"
End Sub

В другой тоже 2 макроса
Код:
'Другой документ
Sub macDoc2()
    MsgBox "macDoc2"
End Sub

Sub macDoc2bis(sh As Visio.Shape)
    MsgBox "macDoc2 from " & sh.Name
End Sub

И еще в первый документ добавить один шейп (например, квадратик).
Теперь выполняем test2 в первом документе. В шейпе заряжаются два события.
Если теперь подвинуть шейп, вызовется macDoc2 из второго документа. Без параметра.
Если даблкликнуть, вызовется macDoc2bis. В качестве параметра ему передано имя шейпа.
Ну а test1 из первого документа просто вызывает macDoc2.
----
P.S. Когда формула =RUNMACRO(""ThisDocument.macDoc2""; ""doc2"") запишется в шейп она будет выглядеть как
=RUNMACRO("ThisDocument.macDoc2", "doc2")
Меняются не только кавычки, но и точка с запятой на запятую. Это в локализованном Visio.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Не всегда работает PAGENUMBER() и отображ-е данных документа
СообщениеДобавлено: 21 янв 2015, 14:12 
Не в сети
Ветеран

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

Добавить очки репутацииУменьшить очки репутации
да, про волшебную ExecuteLine я и забыл :D


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Не всегда работает PAGENUMBER() и отображ-е данных документа
СообщениеДобавлено: 21 янв 2015, 14:17 
Не в сети
Content manager
Content manager
Аватара пользователя

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

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


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Не всегда работает PAGENUMBER() и отображ-е данных документа
СообщениеДобавлено: 21 янв 2015, 16:46 
Не в сети
Постоянный участник

Зарегистрирован: 02 апр 2013, 10:52
Сообщений: 93
Очков репутации: 9

Добавить очки репутацииУменьшить очки репутации
Surrogate, потому я и высказывал неуверенность. не выделить ли вопросы в отдельную тему :?

На счет последних моих вопросов. Написал некорректно, но смотрю все-равно разобрались.
1. вопрос раскрыт по-моему полностью. Осталось только мне на практике все попробовать.
2. Аналогично
3. Я имел ввиду следующее. Например, в форме в TextEdit-е юзверь пишет: ООО "Компания" Корпус № ХХХ.
Надо вот эту строчку присвоить параметрах документа. Но у меня не получилось присвоить данный текст. вместо двойных кавычек прописывал их по два и три раза. По два была ошибка. Когда три раза, то прописывались два раза кавычки без ошибок. И ведь помню, что год назад, как-то решил я сию проблему, а как не понмю


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Не всегда работает PAGENUMBER() и отображ-е данных документа
СообщениеДобавлено: 21 янв 2015, 18:11 
Не в сети
Administrator

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

Добавить очки репутацииУменьшить очки репутации
Цитата:
ООО "Компания"

Пусть s содержит ООО "Компания".
Тогда в ячейку записывать
...Formula = CHR(34) & Replace(s, CHR(34), CHR(34)&CHR(34)) & CHR(34)
То есть в строке все одиночные кавычки задваиваются полюс кавычки по краям для преобразования в формулу.
Это преобразование вроде бы во всех SDK приводилось.
Естественно, при чтении данных понадобится обратное преобразование.


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

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



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

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


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

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