Поделиться через


Функция SETATREF

Перенаправляет обновленные значения, полученные в результате действий в пользовательском интерфейсе или автоматизации, в другую ячейку.

Синтаксис

SETATREF(reference [, set_expression [, ignore_eval ]])

Параметры

Имя Необходимость Тип данных Описание
reference
Обязательный
String
Ссылка на ячейку, в которой перенаправляются обновления.
set_expression
Необязательный
String
Выражение, назначенное для ссылки.
ignore_eval
Необязательный
Логический
Если значение TRUE, функция SETATREF оценивается как (0) ноль; Если значение FALSE (значение по умолчанию), функция SETATREF вычисляет значение ссылки.

Замечания

Когда действие пользователя в окне рисования или метод автоматизации заставляет Microsoft Visio обновить ячейку, содержащую формулу SETATREF, вместо этого значение перенаправляется в ячейку, на которую ссылается формула SETATREF ( ссылка). Формула в ячейке, содержащей функцию SETATREF, остается нетронутой.

Если set_expression опущен, значение, заданное в пользовательском интерфейсе или с помощью службы автоматизации, присваивается указанной ячейке; В противном случае содержимое set_expression назначается указанной ячейке. Это позволяет изменять или преобразовывать новое значение перед присвоением указанной ячейке.

Функция SETATREF имеет две связанные функции:

  • Функция SETATREFEXPR, которую можно использовать для представления нового значения в set_expression. Например, set_expression SETATREFEXPR()-2 в. можно использовать для вычитания 2 дюйма из результата SETATREFEXPR.

  • Функция SETATREFEVAL, которую можно использовать, чтобы указать, что некоторая часть set_expression должна быть оценена и заменена ее результатом.

Функция SETATREF предназначена для использования в ячейках, которые могут быть изменены действиями пользователя в окне документа. Поддерживаются следующие ячейки:

  • Раздел ShapeTransform — ячейки Width, Height, Angle, PinX и PinY

  • Раздел преобразования текста— ячейки TxtWidth, TxtHeight, TxtAngle, TxtPinX и TxtPinY

  • Раздел 1-D Endpoints — ячейки BeginX, BeginY, EndX и EndY

  • Раздел Controls — ячейки Controls.X и Controls.Y

  • Раздел "Данные фигуры"

Так как SETATREF изменяет расположение, в котором изменяются значения ячеек, это влияет на срабатывание события. Если ячейка содержит SETATREF, события FormulaChanged и CellChanged активируются для ячейки, на которую ссылается SETATREF, а не для ячейки, содержащей SETATREF. Если ячейка, содержащая SETATREF, также содержит SETATREFEXPR, событие FormulaChanged также срабатывает для ячейки, содержащей SETATREF, из-за изменения параметра функции.

Другие важные моменты, которые следует отметить о функции SETATREF, включают следующее:

  • Функции SETATREF могут цепочки до 10 ссылок на другие функции SETATREF.

  • Ячейки могут содержать другие выражения в дополнение к функции SETATREF, включая несколько вхождений SETATREF в одной ячейке.

  • Если фигуры склеены, Visio следует цепочке ссылок SETATREF на том же листе и помещает формулы склеивания в ячейку, на которые указывает ссылка.

  • Автоматизация распознает функцию SETATREF и следует цепочке ячеек, на которые указывает ссылка.

  • Как и GUARD, SETATREF не защищает ячейки от изменений, внесенных с помощью функции SETF в таблице фигур.

Пример1

Предположим, что фигура имеет пользовательское свойство Width, а ячейка Width в разделе Преобразование фигуры содержит следующую формулу:

=SETATREF(Prop.Width)

Если пользователю нужно было изменить ширину фигуры в пользовательском интерфейсе, новое значение присваивается ячейке Prop.Width, а не ячейке Width в разделе ShapeTransform; формула в ячейке Ширина остается неизменной. Вы также можете задать ширину фигуры с помощью данных фигуры.

Пример2

Решения Visio часто имеют фигуры с иерархической связью, поэтому дочерние фигуры должны перемещаться при перемещении родительской фигуры. Ниже приведен пример управления этой связью с помощью функции SETATREF в таблице фигур.

Следующие формулы содержатся в разделе Преобразование фигуры дочерней фигуры. Кроме того, мы определяем пользовательские ячейки с именами User.DeltaX и User.DeltaY, которые отслеживают измерение смещения из ParentShape. Это позволяет дочерней фигуре перемещаться при перемещении родительской фигуры, а также сохранять иерархическую связь при перемещении дочерней фигуры.

PinX =SETATREF(User.DeltaX, SETATREFEVAL(SETATREFEXPR() - ParentShape! PinX)) + ParentShape! PinX

PinY =SETATREF(User.DeltaY, SETATREFEVAL(SETATREFEXPR() - ParentShape! PinY)) + ParentShape! PinY

При перемещении дочерней фигуры с помощью пользовательского интерфейса новые значения PinX и PinY задаются в качестве параметра в функции SETATREFEXPR. Функция SETATREF оценивает формулу, заключенную в SETATREFEVAL, и заменяет PinX и PinY их результатами, а затем результирующая формула назначается пользовательским ячейкам, на которые ссылается функция SETATREF — User.DeltaX и User.DeltaY. Наконец, значения, возвращаемые SETATREF (User.DeltaX или User.DeltaY), добавляются в расположение закрепления ParentShape, чтобы вычислить расположение закрепления дочерней фигуры.