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

Изменение цвета линии через таблицу данных.
http://visio.getbb.ru/viewtopic.php?f=5&t=844
Страница 1 из 1

Автор:  Aleksandr [ 26 окт 2015, 06:26 ]
Заголовок сообщения:  Изменение цвета линии через таблицу данных.

Необходимо изменять цвет линий через таблицу данных.

В разделе «Данные фигуры», задал постоянный список: Prop.Row_1.Format = "Цвет 1;Цвет 2;Цвет 3;Цвет 4;Цвет 5"

В разделе Пользовательские ячейки список цветов: User.Row_1 = "RGB(205,138,255);RGB(255,100,30);RGB(160,32,240);RGB(181,181,0);RGB(170,150,0)"

и формулу для передачи цвета в ячейку LineColor: User.Row_2 = SETF(GetRef(LineColor),INDEX(LOOKUP(Prop.Row_1,Prop.Row_1.Format),User.Row_1))

В версиях Visio 2010 и старше данная схема работает,
В версии Visio 2007, работать не хочет.

Что можно сделать, чтобы и в Visio 2007 работала.

Вложения:
.vsd [13 Кб]
Скачиваний: 251

Автор:  Surrogate [ 26 окт 2015, 11:34 ]
Заголовок сообщения:  Re: Изменение цвета линии через таблицу данных.

в визио 2007 ни разу не работал, по долгу службы© использую только системные цвета, никаких комбинаций RGB.

Попробовал на визио 2003. Так же не работает.
Setf ничего не пишет в нужную ячейку, если прописать в ячейку LineColor
LineColor
INDEX(LOOKUP(Prop.Row_1,Prop.Row_1.Format),User.Row_1)
значение в этой ячейке всегда 0
даже если в ячейку LineColor тупо прописать значение
LineColor
RGB(205,138,255)
то визуально цвет линии не меняется Изображение

Автор:  Aleksandr [ 26 окт 2015, 12:07 ]
Заголовок сообщения:  Re: Изменение цвета линии через таблицу данных.

LineColor = RGB(205,138,255) в Visio 2007 свет линии меняет.
LineColor = IF(LOOKUP(Prop.Row_1,Prop.Row_1.Format)=0,RGB(205,138,255),IF(LOOKUP(Prop.Row_1,Prop.Row_1.Format)=2,RGB(255,100,30),RGB(160,32,240))) - то-же работает.
Но почему не работает функция SETF для LineColor или формула INDEX(LOOKUP(Prop.Row_1,Prop.Row_1.Format),User.Row_1), никак не пойму :wall:

Автор:  Surrogate [ 26 окт 2015, 12:23 ]
Заголовок сообщения:  Re: Изменение цвета линии через таблицу данных.

странно! INDEX и LOOKUP в списке функций появившихся еще до визио 2003 есть
John Goldsmith" в статье Visio ShapeSheet Functions by Version писал(а):
This document is designed as a quick reference for understanding which Visio ShapeSheet functions can be used in which versions. The functions are split into the current 2013 release, followed by 2010, 2007, 2003 and finally all functions that appeared in versions prior to 2003.
The data for this document is collated from the online and downloadable Visio SDK with cross-references to each year’s “What’s New” sections. If you find any discrepancies, please let me know at http://visualsignals.typepad.co.uk/visl ... rsion.html
в строке user.row_33 это работает
user.row_33
INDEX(LOOKUP(Prop.Row_1,Prop.Row_1.Format),User.Row_1)

Автор:  Гость [ 11 фев 2019, 01:57 ]
Заголовок сообщения:  Re: Изменение цвета линии через таблицу данных.

Работаю в Visio 2016
Также столкнулся с проблемой изменения цвета в зависимости от значения свойств.

Конечно, можно решить так, и оно будет работать:
Цитата:
LineColor = IF(LOOKUP(Prop.Row_1,Prop.Row_1.Format)=0,RGB(205,138,255),IF(LOOKUP(Prop.Row_1,Prop.Row_1.Format)=2,RGB(255,100,30),RGB(160,32,240)))


Но хочется как-то поудобнее, через некий внутренний массив данных от INDEX'а:
Но формулу INDEX(LOOKUP(Prop.Raw,Prop.Raw.Format),"RGB(255,50,50);RGB(100,100,100)") программа не понимает. Я так полагаю, что Visio читает список индекса как ряд текстовых значений, а не как самостоятельные формулы внутри массива.

Игрался с синтаксисом (доходило даже до "=RGB(255,50,50);=RGB(100,100,100)"), но ничего не выходит.

В тщетных попытках, пришел к забавному извращению:
1. Добавил User.RED и User.GREY со значениями: RGB(255,50,50) и RGB(100,100,100)
2. Вписал массив ссылками: INDEX(LOOKUP(Prop.Raw,Prop.Raw.Format),"User.RED;User.GREY")

Честно, я не понимаю логику программы, но оно заработало.

Конечно, оно так не должно быть. Это, как минимум, не красиво.
Считаю тему не закрытой.

Автор:  Surrogate [ 11 фев 2019, 02:30 ]
Заголовок сообщения:  Re: Изменение цвета линии через таблицу данных.

Гость писал(а):
Считаю тему не закрытой.
тема имела продолжение в ветках:
Выбор цвета из списка
Изменить цвет из списка
возможно изложенное в этих ветках поможет найти решение!

Автор:  nbelyh [ 11 фев 2019, 04:38 ]
Заголовок сообщения:  Re: Изменение цвета линии через таблицу данных.

А теория насчет языка системы не помогает?
То есть, в английском языке, разделитель списка - "," (запятая), а в русском - ";" (точка с запятой)

Возможно, разные версии Visio по-разному это обрабатывают.
То есть, если попробовать заменить
"INDEX(LOOKUP(Prop.Raw,Prop.Raw.Format),"RGB(255,50,50);RGB(100,100,100)")"
на
"INDEX(LOOKUP(Prop.Raw,Prop.Raw.Format),"RGB(255,50,50),RGB(100,100,100)")" <<<< запятая !!

то может заработает?

Автор:  Tumanov [ 11 фев 2019, 13:05 ]
Заголовок сообщения:  Re: Изменение цвета линии через таблицу данных.

То есть в формат можно ставить хоть звездочку, лишь бы потом вовремя заменить ее на ListSeparator :)
Код:
.Format ="RGB(205*138*255);RGB(255*100*30);RGB(160*32*240);RGB(181*181*0);RGB(170*150*0)"
LineColor = SUBSTITUTE(INDEX(Prop.Row_2.Prompt,Prop.Row_1.Format),"*",LISTSEP())

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