Метод Shape.SetFormulas (Visio)

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

Синтаксис

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

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

Параметры

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

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

Целое число

Замечания

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

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

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

{sectionIdx, rowIdx, cellIdx }n

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

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

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

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

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