次の方法で共有


Master.GetResults メソッド (Visio)

複数のセルの結果または数式を取得します。

構文

expression. GetResults( _SID_SRCStream()_ , _Flags_ , _UnitsNamesOrCodes()_ , _resultArray()_ )

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

パラメーター

名前 必須 / オプション データ型 説明
SID_SRCStream() 必須 Integer 問い合わせるセルを識別する配列です。
Flags 必須 Integer 結果として返されるエントリの種類を制御するフラグです。
UnitsNamesOrCodes() 必須 バリアント型 返される結果の寸法の単位で構成される配列です。
resultArray() 必須 バリアント型 出力パラメーターです。 問い合わせたセルの結果または数式を受け取る配列です。

戻り値

なし

解説

GetResults メソッドは Cell オブジェクトの Result プロパティに類似していますが、一度に 1 つのセルではなく複数のセルの結果 (値) を取得できます。

Master オブジェクトに対して GetResults メソッドを使用すると、マスター シェイプの図形を組み合わせて、その中にあるセルの組み合わせに関する結果を取得できます。

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

{sheetID, sectionIdx, rowIdx, cellIdx }n

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

注:

エントリの sheetIDvisInvalShapeID (-1) の場合、または sectionIdx の下位バイトが visSectionInval (255) の場合、エントリは無視され、対応する結果配列エントリに空のバリアントが返されます。 その理由は、GetResultsSetResults、および同様のメソッドに対して、呼び出し元が呼び出し間のストリームに軽微な変更を加えるだけで済む、同じ SID_SRCStream() 配列を複数の呼び出しで使用できることです。

パラメーター Flags は、返される結果がどのような種類のデータであるかを示します。 パラメーターの値は次のいずれかになります。

定数 説明
visGetFloats 0 結果が倍精度浮動小数点型で返されます (VT_R8)。
visGetTruncatedInts 1 結果が、切り捨てられた長整数型で返されます (VT_I4)。
visGetRoundedInts 2 結果が、四捨五入された長整数型で返されます (VT_I4)。
visGetStrings 3 結果が文字列で返されます (VT_BSTR)。
visGetFormulas 4 数式が文字列として返されます (VT_BSTR)。
visGetFormulasU 5 数式が汎用構文として返されます (VT_BSTR)。

パラメーター UnitsNamesOrCodes() は、返される個々の結果の寸法の単位を制御する配列です。 この配列の各エントリには、"inches"、"inch"、"in"、"i" などの文字列が格納されます。 センチメートル、メートル、マイルなど、Visio がサポートしているすべての単位の文字列を使用できます。 Visio タイプ ライブラリで宣言されている整数の定数 (visCentimetersvisInches など) を使用して、必要な単位を指定することもできます。 FlagsvisGetFormulas の場合、UnitsNamesOrCodes() 配列に指定した値は無効になります。

UnitsNamesOrCodes() が null でない場合、アプリケーションは 1 = uVariants の 1 <次元配列であると想定します。 各エントリには、文字列または整数コード、または空 (nothing) を指定できます。 i 'th エントリが空の場合、返された結果UnitsNamesOrCodes(j)によって指定された単位で返されます。j は、以前の空でないエントリのインデックスです。 したがって、返されたすべての値を同じ単位にしたい場合は、 UnitsNamesOrCodes() 配列を 1 つのエントリで渡すだけです。 空でないエントリが存在しない場合、または UnitsNameOrCodes() 配列が指定されていない場合は、 visNumber (0x20) が使用されます。 これにより、内部ユニット (Cell オブジェクトの ResultIU プロパティなど) が返されます。

GetResults メソッドが成功すると、結果には、ゼロ (0) ~ n - 1 のインデックスが付いた n 個のバリアント型の値で構成される 1 次元配列が返されます。 返されるバリアントの種類は、Flags の関数です。 パラメーター resultArray() は、GetResults メソッドによって割り当てられる出力パラメーターであり、呼び出し側に所有権が戻されます。 最終的には、呼び出し側は、返された配列に対して SafeArrayDestroy を実行する必要があります。 SafeArrayDestroy には、配列のエントリによって参照されるバリアントをクリアする副作用があるため、GetResults メソッドが返す文字列の割り当てを解除することに注意してください。 このため、GetResults メソッドによって返されるすべての文字列の割り当てが解除されます (Microsoft Visual Basic および Visual Basic for Applications ではこの処理が自動的に行われます)。

次の例に、GetResults メソッドの使い方を示します。 この例では、少なくとも 3 個の図形を含むアクティブ ページがあることが前提となっています。 GetResults メソッドを使用して図形 1 の幅、図形 2 の高さ、および図形 3 の角度を取得します。

この例は、Page オブジェクトの GetResults メソッドを使用して 3 個のセル数式を取得します。 入力配列は、Master オブジェクトと同様に各セルの 4 個のスロットを持ちます。 Shape オブジェクトまたは Style オブジェクトに対しては、各セル (セクション、行、およびセル) に 3 個のスロットがあれば十分です。

 
Public Sub GetResults_Example() 
 
 On Error GoTo HandleError 
 
 Dim intCounter As Integer 
 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 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 
 
 For intCounter = 0 To 3 
 Debug.Print avarResults(intCounter) 
 Next 
 
 Exit Sub 
 
HandleError: 
 MsgBox "Error" 
 Exit Sub 
 
End Sub

サポートとフィードバック

Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。