Shape.SetFormulas メソッド (Visio)
1 つまたは複数のセルの数式を設定します。
構文
expression. SetFormulas
( _SRCStream()_
, _formulaArray()_
, _Flags_
)
式: Shape オブジェクトを表す変数。
パラメーター
名前 | 必須 / オプション | データ型 | 説明 |
---|---|---|---|
SID_SRCStream() | 必須 | Integer | 変更するセルを識別するストリームです。 |
formulaArray() | 必須 | バリアント型 | 識別されたセルに割り当てる数式です。 |
Flags | 必須 | Integer | SetFormulas の動作を制御するフラグです。 |
戻り値
整数
注釈
SetFormulas メソッドの動作は、Formula プロパティに似ています。ただし、1 セルずつ数式を設定するのではなく、一度に複数のセルの数式を設定することができます。
Shape オブジェクトに対して SetFormulas メソッドを使用すると、セルの組み合わせに関する結果を設定できます。 SetFormulas メソッドで SID_SRCStream() に整数の配列を渡すことにより、設定するセルを指定します。 SID_SRCStream() は 2 バイトの整数で構成される 1 次元配列です。
Shape オブジェクトの場合、SID_SRCStream() は、n>= 1 の場合、3 n 個の 2 バイト整数の 1 次元配列である必要があります。 SetFormulas メソッドはストリームを次のように解釈します。
{sectionIdx, rowIdx, cellIdx }n
この sectionIdx は、対象となるセルのセクション インデックスです。また rowIdx は、そのセルの行インデックスで、cellIdx は、そのセルのセル インデックスです。
formulaArray() パラメーターは、1 = m バリアントの 1 <次元配列である必要があります。 各 バリアント型 (Variant) は 、String、 String への参照、または 空である必要があります。 formulaArray(i) が空の場合、i 番目のセルは formulaArray(j) の数式に設定されます。ここで、j は空ではない最新の以前のエントリのインデックスです。 空でない以前のエントリがない場合、対応するセルは変更されません。 セルが指定されている式 ( m<n ) よりも少ない数式の場合、 i 番目のセル i>m は、 m '番目のセルを に設定するために選択した数式と同じ数式に設定されます。 したがって、多くのセルを同じ数式に設定するには、数式のコピーを 1 つだけ渡す必要があります。
引数 Flags はビットマスクであり、次の値を指定できます。
定数 | 値 | 説明 |
---|---|---|
visSetBlastGuards | &H2 | 保護されている場合でも、現在のセルの値を上書きします。 |
visSetTestCircular | &H4 | 循環セル参照の設定をテストします。 |
visSetUniversalSyntax | &H8 | 数式を汎用構文で指定します。 |
SetFormulas メソッドによって返された値は、正常に処理された SID_SRCStream() 内のエントリの数を示します。 i<n エントリが正しく処理されても、i + 1 番目のエントリでエラーが発生した場合、SetFormulas メソッドは例外を発生させ、i を返します。 それ以外の場合は、n が返されます。
例
次のマクロは、SetFormulas メソッドの使い方を示します。 少なくとも 3 個のシェイプを含むアクティブ Visio ページがあることを前提としています。 GetFormulas メソッドを使用してシェイプ 1 の幅、シェイプ 2 の高さ、およびシェイプ 3 の角度を取得します。 次に SetFormulas を使用してシェイプ 1 の幅をシェイプ 2 の高さに設定し、シェイプ 2 の高さをシェイプ 1 の幅に設定します。 シェイプ 3 の角度は変わりません。
この例は、Page オブジェクトの GetFormulas メソッドを使用して 3 個のセル数式を取得し、同じオブジェクトの SetFormulas メソッドを使用して数式を設定します。 入力配列は、Master オブジェクトと同様に各セルの 4 個のスロットを持ちます。 Shape オブジェクトまたは Style オブジェクトに対しては、各セル (セクション、行、およびセル) に 3 個のスロットがあれば十分です。
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 のサポートおよびフィードバックを参照してください。