Метод Shape.SetResults (Visio)

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

Синтаксис

выражение. SetResults( _SRCStream()_ , _UnitsNamesOrCodes()_ , _resultArray()_ , _Flags_ )

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

Параметры

Имя Обязательный или необязательный Тип данных Описание
SID_SRCStream() Обязательный Integer Массив, определяющий изменяемые ячейки.
UnitsNamesOrCodes() Обязательный Variant Единицы измерения, которые необходимо приписать записям в массиве результатов.
resultArray() Обязательный Variant Параметр Out. Результаты или формулы, назначаемые определенным ячейкам.
Flags Обязательный Integer Флаги, влияющие на поведение SetResults.

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

Целое число

Замечания

Метод SetResults похож на метод Result объекта Cell , за исключением того, что его можно использовать для задания результатов (значений) нескольких ячеек одновременно, а не одной ячейки за раз.

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

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

{sectionIdx, rowIdx, cellIdx }n

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

Массив UnitsNamesOrCodes() определяет, в каких единицах измерения находятся отдельные записи в результатах. Каждая запись в массиве может быть строкой, например "дюймов", "дюйм", "in." или "i". Строки можно использовать для всех поддерживаемых единиц Microsoft Office Visio, таких как сантиметры, метры, мили и т. д. Вы также можете указать нужные единицы с целыми константами (visCentimeters, visInches и т. д.), объявленными библиотекой типов Visio в VisUnitCodes. Список констант, используемых для единиц измерения, см. в разделе Сведения о единицах измерения. Обратите внимание, что значения, указанные в массиве UnitsNamesOrCodes(), не оказывают влияния, если visSetFormulas задан в разделе Флаги.

Если unitsNamesOrCodes() не пуст, мы ожидаем, что это одномерный массив, состоящий из 1 <= u вариантов. Каждая запись может быть строковым или целочисленным кодом или пустой (ничего). Если запись i 'th пуста, i 'th запись в resultArray находится в единицах, указанных с помощью UnitsNamesOrCodes()(j) , где j — это последняя ранее запись, которая не пуста. Таким образом, если требуется, чтобы все записи в resultArray интерпретировались в одних и том же единицах, необходимо передать только массив UnitsNamesOrCodes(), содержащий одну запись. Если ранее пустая запись отсутствует или массив UnitsNamesOrCodes() не указан, будет использоваться visNumber (0x20). Это приводит к тому, что по умолчанию приложение будет использовать внутренние единицы (как и свойство ResultIU объекта Cell ).

Параметр resultArray() должен быть одномерным массивом из 1 <= m variants. Результат можно передать как Double, Integer, String или ссылку на строку. Строки принимаются только в том случае, если visSetFormulas задан в разделе Флаги, и в этом случае строки интерпретируются как формулы. Если resultArray(i) пуст, i 'th ячейка будет иметь значение в resultArray(j), где j — индекс последней предыдущей записи, которая не пуста. Если нет предыдущей записи, которая не была бы пустой, соответствующая ячейка не изменяется. Если указано меньше результатов, чем ячейки (если m < n ), i 'th cell, i < m , будет иметь то же значение, что и ячейка m 'th. Таким образом, чтобы задать для нескольких ячеек одно и то же значение, необходимо передать только одну копию значения.

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

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

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

Пример

В следующем примере показано, как использовать метод SetResults . В этом примере предполагается, что есть активная страница, на ней есть по крайней мере 3 фигуры. Метод GetResults используется для получения ширины фигуры 1, высоты фигуры 2 и угла фигуры 3. Затем он использует SetResults , чтобы задать ширину фигуры 1 на высоту фигуры 2, а высоту фигуры 2 — на ширину фигуры 1. Угол фигуры 3 остается неотправленным.

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

 
Public Sub Set Results_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 
 
 'Get the first two values in inches. The second element in 
 'the units array is left uninitialized (empty) because we 
 'want the second result in the same units as the first 
 'result. The third result is initialized in degrees. Note that 
 'units can be expressed as a string or an integer constant. 
 Dim avarUnits(1 To 3) As Variant 
 avarUnits(1) = "in." 
 avarUnits(3) = visDegrees 
 
 'Return results of cells as an array of floating point numbers. 
 Dim avarResults() As Variant 
 ActivePage.GetResults aintSheetSectionRowColumn, visGetFloats, _ 
 avarUnits, avarResults 
 
 'Use SetResults to: 
 
 ' - Set the width of shape 1 to the height of shape 2. 
 
 ' - Set the height of shape 2 to the width of shape 1. 
 
 'NOTE: avarResults() is indexed from 0 to 2. 
 
 Dim varTemp As variant 
 varTemp = avarResults(0) 
 avarResults(0) = avarResults(1) 
 avarResults(1) = varTemp 
 
 'Pass the same array back to SetResults that we 
 'just passed to GetResults, but leave the angle 
 'alone. By setting the sheet ID entry in the third 
 'slot of the aintSheetSectionRowColumn array to 
 'visInvalShapeID, we tell SetResults to ignore that slot. 
 aintSheetSectionRowColumn(9) = visInvalShapeID 
 
 'Set the results of the cells. 
 ActivePage.SetResults aintSheetSectionRowColumn, avarUnits, avarResults, 0 
 
 Exit Sub 
 
HandleError: 
 
 MsgBox "Error" 
 
 Exit Sub 
 
End Sub

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

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