Вложение:
Menu.png [ 22.92 Кб | Просмотров: 916 ]
Вложение:
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.