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

Изменить цвет из списка
http://visio.getbb.ru/viewtopic.php?f=40&t=1372
Страница 1 из 1

Автор:  vin [ 07 сен 2018, 10:41 ]
Заголовок сообщения:  Изменить цвет из списка

Вложение:
Menu.png
Menu.png [ 22.92 Кб | Просмотров: 916 ]

Вложение:
ShapeSheet.png
ShapeSheet.png [ 79.66 Кб | Просмотров: 922 ]


Action меняет User.IdColor – это индекс (номер) цвета в списке User.ColorList.Prompt.
User.ColorList = INDEX(User.IdColor,User.ColorList.Prompt,";") – вытаскивает нужный цвет из списка.

А вот далее – самое интересное!!!
Код:
User.Row_3 = User.IdColor + SETF(GetRef(FillBkgnd), "=" & User.CorrectColor)
User.CorrectColor = SUBSTITUTE(User.ColorList,",",LISTSEP())
Если бы мы просто прописали в User.Row_3 указание на User.ColorList , то у нас бы сформировалась бы строка:
User.Row_3 = User.IdColor + SETF(GetRef(FillBkgnd), "=RGB(255,0,0)" )
Эту строку спокойно «проглатывает» Visio 2010, а вот у Visio 2007 это не проходит – возвращает ошибку.

Почему? А потому, что Visio 2007 считает выражение RGB(255,0,0) списком и требует, чтобы список разделялся корректным разделителем. Корректный разделитель можно узнать используя функцию LISTSEP.

Именно поэтому цвет сначала корректируется в User.CorrectColor – где «,» заменяются «;», ну а только после этого цвет применяется в User.Row_3.

Примерно на эти же грабли я наступал, когда писал макросы и записывал с помощью их формулы в ячейки.
Когда я писал формулу в ShapeSheet, то в качестве разделителя использовал «,». Но когда я пытался записать формулу с помощью макроса, то у меня появлялась ошибка. Ошибка появлялась потому, что в качестве разделителя нужно было использовать “;”, то есть тот, который прописывает функция LISTSEP.

Автор:  Tumanov [ 07 сен 2018, 11:15 ]
Заголовок сообщения:  Re: Изменить цвет из списка

Цитата:
А потому, что Visio 2007 считает выражение RGB(255,0,0) списком

Это должно быть не Visio, а в установках Windows. Разве не так?
В любом случае, определяющим является не версия Visio, а локализация.
В любом случае автору огромный плюс за напоминание!
Причем это не только со списками. Я даже чаще натыкался на схожий эффект в числовых представлениях (точка или запятая). Пока не приучился всегда, где только можно, ставить не локализованные версии продуктов.
Дополнено позднее:
David J Parker в статье Testing Regional Settings in Visio писал(а):
So today I was embarrassed by a Norwegian client because I forgot (again) to take extra care when using the RGB(…) function. The result was that the displayed colours were appearing black in Norwegian (and doubtless many other languages), but correctly grey (gray if you are in the USA), blue, green and yellow in English (both UK and US).

Автор:  vin [ 07 сен 2018, 12:50 ]
Заголовок сообщения:  Re: Изменить цвет из списка

Tumanov писал(а):
В любом случае, определяющим является не версия Visio, а локализация.

Дело не только в локализации. В Visio 2010 я смотрел - LISTSEP так же выдает точку с запятой, но функция без корректировки работает, а в 2007 - нет.

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