Можно добавить в любую ячейку формулу ShapeSheet, например, можно в секции User.
Код:
User.Row_1= IF(Width<8.2 mm,Width+SETF("Width",8.2 mm),Width)
Но в этом случае появляется эффект убегания – когда мы пытаемся уменьшить размер фигуры слева – фигура начинает убегать влево.
Есть другой хитрый способ подсказанный господином Тумановым
Код:
EventXFMod = IF(Width<8.2 mm, SETF(GetRef(Width), 8.2 mm), 0)
Но в этом случае появляется эффект сдвижения фигуры. Мы будем двигать фигуру, уменьшая ее размер, и, при достижении минимума, фигура начнет двигаться. Можно изменить это поведение, назначив PinX=Width*0 или PinX=Width*1. В этом случае сдвиг будет только с одной стороны.
Другой способ, который позволяет полностью освободиться от посторонних эффектов – использовать функцию SETATREF.
SETATREF(reference [,set_expression [,ignore_eval ]])Эта функция позволяет передавать изменение значений в другую ячейку при изменении через графический интерфейс. При этом, используя set_expression можно пересчитывать эти значения «налету». Для этих пересчетом используются еще две функции SETATREFEVAL и SETATREFEXPR.
Заводим в секции User ячейку User.DeltaX – сюда будем передавать значения Width.
Код:
Width = SETATREF(User. DeltaX, SETATREFEVAL(IF(SETATREFEXPR()<8.2 mm, 8.2 mm,SETATREFEXPR())))
Здесь SETATREF используется в формате SETATREF(reference ,set_expression). В качестве set_expression выступает функция SETATREFEVAL.
Эта функция умеет работать с текущим значением. В качестве текущего значения выступает SETATREFEXPR().
Поэтому мы используем функцию IF: если текущее значение меньше нашего значения – возвращаем наше значение, иначе возвращаем переданное текущее значение
IF( SETATREFEXPR() < 8.2 mm, 8.2 mm, SETATREFEXPR() )
Ограничения удобнее указывать в отдельной ячейке:
Код:
User.RestrictWidth = 8.2 mm
Тогда:
Код:
IF( SETATREFEXPR() < User.RestrictWidth, User.RestrictWidth, SETATREFEXPR() )
В качестве ограничения может выступать ширина текста:
Код:
User.TextWidth = TEXTWIDTH(TheText)
User.RestrictWidth = User.TextWidth
И, наконец, самый простой способ - использовать функцию BOUND
Width = BOUND(,0,FALSE,0,40 mm)
Напомню, что BOUND имеет следующий синтаксис:
BOUND (value, type, ignore, value1, value2 [,ignore(n), value1(n), value2(n),...])Так как мы хотим ограничить значение самой ячейки, где прописана формула, то первый параметр мы опускаем. В дальнейшем Visio сама поставит туда текущее значение ширины, а можем и сами туда подставить текущее значение, чтобы при вводе формулы ширина фигуры не схлопывалась к минимальному значению.
Второй параметр 0 - означает - включить действие формулы. Если мы поставим 2, то формула работать не будет. Этот параметр служит для отключения всех ограничений.
Далее идет список ограничений, каждый элемент представлен тремя параметрами:
- Первый параметр в этом списке - это игнорировать\не игнорировать ограничение
- Второй - нижняя граница ограничения
- Третий верхняя граница ограничения
То есть FALSE,0,40 mm - это Ограничение не игнорировать, нижний диапазон 0, верхний - 40 mm.