Метод Master.SetResults (Visio)
Задает результаты или формулы одной или нескольких ячеек.
выражение. SetResults
( _SID_SRCStream()_
, _UnitsNamesOrCodes()_
, _resultArray()_
, _Flags_
)
Выражение Переменная, представляющая главный объект.
Имя | Обязательный или необязательный | Тип данных | Описание |
---|---|---|---|
SID_SRCStream() | Обязательный | Integer | Массив, определяющий изменяемые ячейки. |
UnitsNamesOrCodes() | Обязательный | Variant | Единицы измерения, которые необходимо приписать записям в массиве результатов. |
resultArray() | Обязательный | Variant | Результаты или формулы, назначаемые определенным ячейкам. |
Flags | Обязательный | Integer | Флаги, влияющие на поведение SetResults. |
Целое число
Метод SetResults похож на метод Result объекта Cell , за исключением того, что его можно использовать для задания результатов (значений) нескольких ячеек одновременно, а не одной ячейки за раз.
Для основных объектов можно использовать метод SetResults, чтобы задать результаты любого набора ячеек в любом наборе фигур страницы или master. Вы указываете методу SetResults , какие ячейки необходимо задать, передав массив целых чисел в _SID_SRCStream(). SID_SRCStream() — это одномерный массив из 2-байтовых целых чисел.
Для основных объектов SID_SRCStream() должен быть одномерным массивом из 4 n 2-байтовых целых чисел для n>= 1. Метод SetResults интерпретирует поток как:
{sheetID, sectionIdx, rowIdx, cellIdx }n
где sheetID — это свойство ID объекта Shape на странице или master, результат ячейки которого необходимо изменить.
Если sheetID в записи имеет тип visInvalShapeID (-1) или если нижний байт sectionIdx имеет значение visSectionInval (255), то запись игнорируется методом SetResults . Причина этого заключается в том, что один и тот же массив SID_SRCStream() можно использовать для нескольких вызовов SetResults, GetResults и аналогичных методов, при этом вызывающему объекту необходимо только внести незначительные изменения в поток между вызовами.
Массив 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 и обратная связь.