Shape.DropManyU メソッド (Visio)

ページ上、マスター シェイプ内またはグループ内に 1 つまたは複数の Shape オブジェクトを新規作成します。 このメソッドは、作成された Shape オブジェクトの ID で構成される配列を返します。

構文

expression. DropManyU( _ObjectsToInstance()_ , _xyArray()_ , _IDArray()_ )

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

パラメーター

名前 必須 / オプション データ型 説明
ObjectsToInstance() 必須 バリアント型 図形の作成元になるマスター シェイプまたはその他のオブジェクトを汎用名で識別します。
xyArray() 必須 倍精度浮動小数点型 (Double) 新しい図形の位置を指定する xy の値が交互に表された配列です。
IDArray() 必須 Integer 出力パラメーターです。 作成された図形の ID を返す配列です。

戻り値

整数

注釈

DropManyU メソッドの使用は、PageMaster、または Shape オブジェクトの Drop メソッドの使用と似ていますが、DropManyU メソッドを使用すると、メソッド呼び出しごとに 1 つずつではなく、一度に多数の新しい Shape オブジェクトを作成できる点が異なります。 DropManyU メソッドは、ページ、マスター、またはそれが適用されるグループ図形に新しい Shape オブジェクトを作成します (この図形は、次の説明では "ターゲット オブジェクト" と呼ばれます)。

DropManyUメソッド、マスターオブジェクト、マスターのインデックス、マスターの名前を渡すことで、削除するマスターを識別できます。 オブジェクトを渡すとき、 DropManyU は、ドロップ先のドキュメントのドキュメント ステンシルからマスターを削除するだけに制限されません。 オブジェクトは、別のドキュメントのマスターまたは別の種類のオブジェクトにすることができます。

整数 (マスター シェイプのインデックス) または文字列 (マスター シェイプの名前) を DropManyU に渡す方が、オブジェクトを渡すよりも高速に処理できますが、整数または文字列の場合は、ドロップ先の図面の図面ステンシルにあるマスター シェイプしか特定できません。 したがって、問題のマスター シェイプが図面ステンシルに存在しない場合、プログラムはまずそのマスター シェイプを図面ステンシルに格納する必要があります。

ObjectsToInstance() は、 n>= 1 個のバリアントの 1 次元配列である必要があります。 この配列のエントリは、新しい Shape オブジェクトの作成元となるオブジェクトを示します。 エントリは、通常 Microsoft Office Visio アプリケーションの Master オブジェクトを参照します。 ただし、Visio アプリケーションの Shape オブジェクト、Selection オブジェクト、または別のアプリケーションのオブジェクトを参照する場合もあります。 アプリケーションでは、ObjectsToInstance() エントリの配列の下限と上限は考慮されません。 これらを それぞれ vlbvub と呼びます。

  • ObjectsToInstance(i) が整数 j の場合、1 から始まるインデックスが j である対象オブジェクトのドキュメントのドキュメント ステンシル内のマスター オブジェクトのインスタンスが作成されます。 新しい図形の [Events] セクションの [EventDrop] セルは実行されません。 [EventDrop] セルを実行するには、代わりに Drop メソッドを使用します。

  • ObjectsToInstance(i) が文字列 s (または文字列 s への参照) の場合、ターゲットオブジェクトのドキュメントのドキュメントステンシルに s という名前を持つマスターオブジェクトのインスタンスが作成されます。s は、マスター オブジェクトの UniqueID プロパティまたは NameU プロパティのいずれかと等しくなります。 新しい図形の [Events] セクションの [EventDrop] セルは実行されません。 [EventDrop] セルを実行するには、代わりに Drop メソッドを使用します。

  • vlb<i<= vub の場合、ObjectsToInstance(i)空 (Microsoft Visual Basic では Nothing または初期化されていない) の場合、エントリ i により ObjectsToInstance(j)が<再びインスタンス化されます。 同じものを n 個のインスタンスにしたい場合は、 ObjectsToInstance(vlb) のみを指定する必要があります。

xyArray() 引数は、下限 xylb と上限 xyub を持つ 2 m の倍数の 1 次元配列である必要があります (m>= n)。 配列の値は、生成される Shape オブジェクトを配置する場所を DropManyU メソッドに指示します。 ObjectsToInstance( vlb + ( i - 1)) は、1 <= i<= n の場合、( xy [( i - 1)2 + xylb ], xy [(i - 1)2 + xylb + 1]) にドロップされます。

m>n が許可されていることに注意してください。 n<i<= m の場合、インスタンス化された i 番目のものは、インスタンス化された n 番目のものと同じものです。 したがって、同じものの m>= 1 インスタンスを作成するには、1 つのエントリと m エントリの xyArray() 配列を持つ ObjectsToInstance() 配列を渡すことができます。

インスタンスを作成するエンティティがマスター シェイプである場合、新しい Shape オブジェクトの Pin は、指定された xy に配置されます。 それ以外の場合は、Shape オブジェクトの中心が、指定された xy に配置されます。

DropManyU メソッドによって返された整数型 (Integer) の値は、DropManyU メソッドによって正常に処理された xyArray() 内の xy エントリの数を示します。 すべてのエントリが正常に処理された場合、m が返されます。 エラーが発生する前に一部のエントリが正常に処理された場合、生成された Shape オブジェクトは削除されず、例外が発生しますが、それでも正の整数が返されます。

すべての m 個の xy エントリが正常に処理された場合、DropManyU メソッドによって作成された新しい Shape オブジェクトの数は通常、m になります。 ただし Selection オブジェクトのインスタンスが作成された場合など、m 個を超える Shape オブジェクトが作成されることもあります。 DropManyU メソッドを実行する前と後でターゲット オブジェクト内にある図形の数を比較することにより、呼び出し側は作成された Shape オブジェクトの数を判別できます。 また呼び出し側は、新しい Shape オブジェクトが、ターゲット オブジェクトの Shapes コレクションで最大のインデックスを持つオブジェクトであることを判別できます。

DropManyU メソッドがゼロ (0) を返す場合、IDArray() は null (なし) を返します。 それ以外の場合は、0 から m - 1 までのインデックスが付けられた m 個の整数の 1 次元配列を返します。 IDArray()DropManyU メソッドによって割り当てられる out パラメーターであり、所有権は DropManyU メソッドを呼び出したプログラムに渡されます。 最終的には、呼び出し側は、返された配列に対して SafeArrayDestroy プロシージャを実行する必要があります。 このため、GetResults メソッドによって返されるすべての文字列の割り当てが解除されます (Microsoft Visual Basic および Microsoft Visual Basic for Applications ではこの処理が自動的に行われます)。

IDArray() が null 以外の (Nothing ではない) を返す場合、IDArray( i - 1), 1 <= i<= intReturned は、i 番目の xyArray() エントリが 1 つの Shape オブジェクトを生成した場合に、i 番目の xyArray() エントリによって生成された Shape オブジェクトの ID を返します。 i 番目の xyArray() エントリが複数の Shape オブジェクトを生成した場合、エントリで -1 が返されます。 すべてのエントリ i , intReturned<= i<m , return -1.

注:

Microsoft Visio 2000 以降では、Visio の図形、マスター、ドキュメント、ページ、行、アドオン、セル、ハイパーリンク、スタイル、フォント、マスター ショートカット、UI オブジェクト、レイヤーを参照するために、ローカル名とユニバーサル名の両方を使用できます。 たとえば、ユーザーが図形に名前を付ける場合、ユーザーはローカル名を指定しています。 Microsoft Office Visio 2003 以降では、シェイプシート スプレッドシートには、セルの数式と値に汎用名のみが表示されます。 (以前のバージョンでは、ユニバーサル名はユーザー インターフェイスに表示されませんでした)。

汎用名をプログラム内で使用すると、ソリューションをローカライズするたびに名前を変更する必要がなくなります。 ローカル名を使用して図形を識別する場合に複数の図形をドロップするには DropMany メソッドを使用します。 汎用名を使用して図形を識別する場合に複数の図形をドロップするには DropManyU メソッドを使用します。

次の例は、DropManyU メソッドの使い方を示します。 ここでは、マクロの Document オブジェクトの図面ステンシル内の各マスター シェイプの 1 つのインスタンスを、マクロの Document オブジェクトのページ 1 にドロップします。 このマクロを実行する前に、図面ステンシル内に少なくとも 1 つのマスター シェイプが必要です。

 
Public Sub DropManyU_Example() 
 
 On Error GoTo HandleError 
 
 Dim vsoMasters As Visio.Masters 
 Dim intMasterCount As Integer 
 Set vsoMasters = ThisDocument.Masters 
 intMasterCount = vsoMasters.Count 
 
 ReDim varObjectsToInstance(1 To intMasterCount) As Variant 
 ReDim adblXYArray(1 To (intMasterCount * 2)) As Double 
 Dim intCounter As Integer 
 For intCounter = 1 To intMasterCount 
 
 'Pass universal name of object to drop to DropManyU. 
 varObjectsToInstance(intCounter) = vsoMasters.ItemU(intCounter).NameU 
 
 'Set x components of where to drop to 2,4,6,2,4,6,2,4,6,... 
 adblXYArray (intCounter * 2 - 1) = (((intCounter - 1) Mod 3) + 1) * 2 
 
 'Set y components to 2,2,2,4,4,4,6,6,6,... 
 adblXYArray (intCounter * 2) = Int((intCounter + 2) / 3) * 2 
 
 Next intCounter 
 
 Dim aintIDArray() As Integer 
 Dim intProcessed As Integer 
 
 intProcessed = ThisDocument.Pages(1).DropManyU(varObjectsToInstance, _ 
 adblXYArray, aintIDArray) 
 Debug.Print intProcessed 
 
 For intCounter = LBound(aintIDArray) To UBound(aintIDArray) 
 Debug.Print intCounter; aintIDArray(intCounter) 
 Next intCounter 
 
 Exit Sub 
 
 HandleError: 
 MsgBox "Error" 
 
 Exit Sub 
 
End Sub

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

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