次の方法で共有


Page.SetFormulas メソッド (Visio)

1 つまたは複数のセルの数式を設定します。

構文

expression. SetFormulas( _SID_SRCStream()_ , _formulaArray()_ , _Flags_ )

Page オブジェクトを表す変数。

パラメーター

名前 必須 / オプション データ型 説明
SID_SRCStream() 必須 Integer 変更するセルを識別するストリームです。
formulaArray() 必須 バリアント型 識別されたセルに割り当てる数式です。
Flags 必須 Integer SetFormulas の動作を制御するフラグです。

戻り値

整数

注釈

SetFormulas メソッドの動作は、Formula プロパティに似ています。ただし、1 セルずつ数式を設定するのではなく、一度に複数のセルの数式を設定することができます。

Page オブジェクトに対して SetFormulas メソッドを使用すると、マスター シェイプまたはページの図形を組み合わせて、その中にあるセルの組み合わせに関する結果を設定できます。 SetFormulas メソッドで SID_SRCStream() に整数の配列を渡すことにより、設定するセルを指定します。 SID_SRCStream() は 2 バイトの整数で構成される 1 次元配列です。

Page オブジェクトの場合SID_SRCStream() は、n>= 1 の場合、4 n 個の 2 バイト整数の 1 次元配列である必要があります。 SetFormulas メソッドはストリームを次のように解釈します。

{sheetID, sectionIdx, rowIdx, cellIdx }n

この sheetID は、セルの結果を変更するページまたはマスター シェイプ上にある Shape オブジェクトの ID プロパティです。

エントリの sheetIDvisInvalShapeID (-1) の場合、または sectionIdx の下位バイトが visSectionInval (255) の場合、エントリは SetResults メソッドによって無視されます。 これは、同じ SID_SRCStream() 配列を SetFormulasGetFormulas、および呼び出し元が呼び出し間のストリームに軽微な変更を加える必要がある類似のメソッドに対して複数の呼び出しで使用できるためです。

formulaArray() パラメーターは、1 = m バリアントの 1 <次元配列である必要があります。 各 バリアント型 (Variant)、StringString への参照、または である必要があります。 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 のサポートおよびフィードバックを参照してください。