Style.SetFormulas - метод (Visio)

Задает формулы для одной или нескольких ячеек.

Синтаксис

выражение. SetFormulas( _SRCStream()_ , _formulaArray()_ , _Flags_ )

выражение Переменная, представляющая объект стиля .

Параметры

Имя Обязательный или необязательный Тип данных Описание
SID_SRCStream() Обязательный Integer Stream идентифицирует ячейки, которые необходимо изменить.
formulaArray() Обязательный Variant Формулы, которые должны быть назначены определенным ячейкам.
Flags Обязательный Integer Флаги, влияющие на поведение SetFormulas.

Возвращаемое значение

Целое число

Примечания

Метод SetFormulas функционирует аналогично свойству Formula , за исключением того, что с его помощью можно задавать формулы сразу во многих ячейках, а не в одной ячейке за раз.

Для объектов типа Style можно использовать метод SetFormulas , чтобы задать результаты любого набора ячеек. Вы сообщаете методу SetFormulas , какие ячейки нужно задать, передавая массив целочисленных значений в SID_SRCStream(). SID_SRCStream() — одномерный массив двухбайтовых целых чисел.

Для объектов стиляSID_SRCStream() должен быть одномерным массивом из 3 n 2-байтовых целых чисел для n>= 1. Метод SetFormulas интерпретирует поток следующим образом:

{sectionIdx, rowIdx, cellIdx }n

где sectionIdx — индекс раздела нужной ячейки, rowIdx — индекс строки, а cellIdx — индекс ячейки.

Параметр formulaArray() должен быть одномерным массивом из вариантов 1 <= m . Каждый вариант должен быть строкой, ссылкой на строку или пустым. Если formulaArray(i) пуста, i'я ячейка будет задана формулой в formulaArray(j), где j — индекс самой последней предыдущей записи, которая не является пустой. Если нет предварительной записи, которая не является пустой, соответствующая ячейка не изменяется. Если указано меньше формул, чем ячеек ( m<n ), для i'й ячейки, i>m , будет применена та же формула, что и для m '-й ячейки. Таким образом, чтобы поместить несколько ячеек в одну формулу, нужно передать только одну копию формулы.

Аргумент Flags должен быть битовой маской следующих значений.

Константа Значение Описание
visSetBlastGuards &H2 Переопределять текущие значения ячеек, даже если они защищены.
visSetTestCircular &H4 Тест на установление циклических ссылок на ячейки.
visSetUniversalSyntax &H8 Формулы используют универсальный синтаксис.

Значение, возвращаемое методом SetFormulas , — это количество записей в SID_SRCStream(), которые были успешно обработаны. Если i<n записей обрабатываются правильно, но возникает ошибка на i + 1-й записи, метод SetFormulas вызывает исключение и возвращает i. В противном случае возвращается n .

Пример

В следующем макросе показано, как использовать метод SetFormulas . Предполагается, что имеется активная страница Microsoft Office Visio, содержащая по крайней мере три фигуры. Он использует метод GetFormulas для получения ширины фигуры 1, высоты фигуры 2 и угла фигуры 3. Затем с помощью функции SetFormulas можно задать для ширины фигуры 1 высоту фигуры 2 и для высоты фигуры 2 значение ширины фигуры 1. Угол фигуры 3 остается неизменным.

В этом примере метод GetFormulas объекта Page используется для получения формул из трех ячеек, а метод SetFormulas того же объекта — для задания формул. Входной массив имеет четыре слота для каждой ячейки, как и для объектов Master . Для объектов Shape или Style для каждой ячейки (секции, строки и ячейки) требуется всего три слота.

 
Public Sub SetFormulas_Example() 
 
 On Error GoTo HandleError 
 
 Dim aintSheetSectionRowColumn(1 To 3 * 4) As Integer 
 aintSheetSectionRowColumn(1) = ActivePage.Shapes(1).ID 
 aintSheetSectionRowColumn(2) = visSectionObject 
 aintSheetSectionRowColumn(3) = visRowXFormOut 
 aintSheetSectionRowColumn(4) = visXFormWidth 
 
 aintSheetSectionRowColumn(5) = ActivePage.Shapes(2).ID 
 aintSheetSectionRowColumn(6) = visSectionObject 
 aintSheetSectionRowColumn(7) = visRowXFormOut 
 aintSheetSectionRowColumn(8) = visXFormHeight 
 
 aintSheetSectionRowColumn(9) = ActivePage.Shapes(3).ID 
 aintSheetSectionRowColumn(10) = visSectionObject 
 aintSheetSectionRowColumn(11) = visRowXFormOut 
 aintSheetSectionRowColumn(12) = visXFormAngle 
 
 'Return the formulas of the cells. 
 Dim avarFormulaArray() As Variant 
 ActivePage.GetFormulas aintSheetSectionRowColumn, avarFormulaArray 
 
 'Use SetFormulas to: 
 ' - Set the width of shape 1 to height of shape 2. 
 ' - Set height of shape 2 to width of shape 1. 
 ' Note: avarFormulaArray() is indexed from 0 to 2. 
 Dim varTemp As variant 
 varTemp = avarFormulaArray(0) 
 avarFormulaArray(0) = avarFormulaArray(1) 
 avarFormulaArray(1) = varTemp 
 
 'Pass the same array back to SetFormulas that we 
 'just passed to GetFormulas, leaving angle alone. By setting 
 'the sheet ID entry in the third slot of the 
 'aintSheetSectionRowColumn array to visInvalShapeID, 
 'we tell SetFormulas to ignore that slot. 
 aintSheetSectionRowColumn (9) = visInvalShapeID 
 
 'Tell Microsoft Visio to set the formulas of the cells. 
 ActivePage.SetFormulas aintSheetSectionRowColumn, avarFormulaArray, 0 
 
 Exit Sub 
 
HandleError: 
 
 MsgBox "Error" 
 
 Exit Sub 
 
End Sub

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.