Shape.DropMany メソッド (Visio)
グループに 1 つ以上の新しい Shape オブジェクトを作成します。 このメソッドは、作成された Shape オブジェクトの ID で構成される配列を返します。
構文
expression.
DropMany
( _ObjectsToInstance()_
, _xyArray()_
, _IDArray()_
)
式: Shape オブジェクトを表す変数。
パラメーター
名前 | 必須 / オプション | データ型 | 説明 |
---|---|---|---|
ObjectsToInstance() | 必須 | バリアント型 | 図形の作成元になるマスター シェイプまたはその他のオブジェクトです。 |
xyArray() | 必須 | 倍精度浮動小数点型 (Double) | 新しい図形の位置を指定する x 値と y 値が交互に表された配列です。 |
IDArray() | 必須 | Integer | 出力パラメーターです。 作成された図形の ID を返す配列です。 |
戻り値
整数
解説
DropMany メソッドの使用は、Page、Master、または Shape オブジェクトの Drop メソッドの使用に似ていますが、DropMany メソッドを使用すると、メソッド呼び出しごとに 1 つではなく、多数の新しい Shape オブジェクトを一度に作成できます。 DropMany メソッドは、ページ、マスター、または適用先のグループ図形に新しい Shape オブジェクトを作成します (この図形は、次の説明では"ターゲット オブジェクト" と呼ばれます)。
DropMany メソッドに Master オブジェクトまたはマスターのインデックス、またはマスターの名前を渡すことで、ドロップするマスターシェイプを特定できます。 オブジェクトを渡しても、 DropMany は、削除先のドキュメントのドキュメント ステンシルからマスター シェイプを削除するだけでは制約されません。 オブジェクトには、別のドキュメントまたは別の種類のオブジェクトのマスターを指定できます。
整数 (マスター シェイプのインデックス) または文字列 (マスター シェイプの名前) を DropMany に渡す方が、オブジェクトを渡すよりも高速に処理できますが、整数または文字列の場合は、ドロップ先の図面の図面ステンシルにあるマスター シェイプしか指定できません。 したがって、問題のマスター シェイプが図面ステンシルに存在しない場合、プログラムはまずそのマスター シェイプを図面ステンシルに格納する必要があります。
ObjectsToInstance() は 、n>= 1 バリアントの 1 次元配列である必要があります。 この配列のエントリは、新しい Shape オブジェクトの作成元となるオブジェクトを示します。 エントリは、通常 Microsoft Office Visio アプリケーションの Master オブジェクトを参照します。 ただし、Visio アプリケーションの Shape オブジェクト、Selection オブジェクト、または別のアプリケーションのオブジェクトを参照する場合もあります。 アプリケーションでは、 ObjectsToInstance エントリの下限と上限の配列境界は気にしません。 これらの vlb と vub をそれぞれ呼び出します。
ObjectsToInstance(i) が IDataObject インターフェイスを提供する OLE オブジェクトへの参照 (Microsoft Visual Basic for Applications の場合、選択範囲、図形、マスター シェイプ、ガイド、または OLE オブジェクトへの参照) である場合は、参照されるオブジェクトのインスタンスが作成されます。 これは基本的に Drop(ObjectsToInstance(i),x,y) を呼び出すことと同じです。
ObjectsToInstance(i) が整数 j の場合、1 ベースのインデックスが j であるターゲット オブジェクトのドキュメント ステンシル内の Master オブジェクトのインスタンス。 新しい図形の [Events] セクションの [EventDrop] セルは実行されません。 [EventDrop] セルを実行するには、代わりに Drop メソッドを使用します。
ObjectsToInstance(i) が文字列 s (または文字列 s への参照) の場合は、ターゲット オブジェクトのドキュメント ステンシル内の名前 s を持つ Master オブジェクトのインスタンスが作成されます。s は、Master オブジェクトの UniqueID プロパティまたは Name プロパティと等しい場合があります。 新しい図形の [Events] セクションの [EventDrop] セルは実行されません。 [EventDrop] セルを実行するには、代わりに Drop メソッドを使用します。
vlb<i<= vub の場合、ObjectsToInstance(i) が空 (Microsoft Visual Basic では Nothing または初期化されていない) 場合、エントリ i によって ObjectsToInstance(j) が再びインスタンス化されます。ここで、j は ObjectsToInstance(j) が空ではない最大値 <i です。 同じものの n 個のインスタンスを作成する場合は、 ObjectsToInstance(vlb) のみを指定する必要があります。
xyArray() 引数は、下限 xylb と上限 xyub を持つ 2 m 倍の 1 次元配列である必要があります (ここで、m>= n)。 配列内の値は 、DropMany メソッドが生成する Shape オブジェクトの位置を示します。 ObjectsToInstance( vlb + ( i - 1)) は、 ( xy [( i - 1)2 + xylb ], xy [(i - 1)2 + xylb + 1]) で 1 <= i<= n にドロップされます。
m>n は許可されることに注意してください。 n<i<= m の場合、インスタンス化された i 'th モノは、インスタンス化された n 個のモノと同じです。 したがって、同じものの m>= 1 インスタンスを作成するには、1 つのエントリと m エントリ xyArray() 配列を持つ ObjectsToInstance() 配列を渡すことができます。
インスタンスを作成するエンティティがマスター シェイプである場合、新しい Shape オブジェクトの Pin は、指定された xy に配置されます。 それ以外の場合は、Shape オブジェクトの中心が、指定された xy に配置されます。
DropMany メソッドによって返された値は、DropMany メソッドによって正常に処理された xyArray() 内の xy エントリの数を示します。 すべてのエントリが正常に処理された場合、m が返されます。 エラーが発生する前に一部のエントリが正常に処理された場合、生成された Shape オブジェクトは削除されず、例外が発生しますが、正の値が返されます。
すべての m 個の xy エントリが正常に処理された場合、DropMany メソッドによって作成された新しい Shape オブジェクトの数は通常、m になります。 ただし Selection オブジェクトのインスタンスが作成された場合など、m 個を超える Shape オブジェクトが作成されることもあります。 DropMany メソッドを実行する前と後でターゲット オブジェクト内にある図形の数を比較することにより、呼び出し側は作成された Shape オブジェクトの数を判別できます。 また呼び出し側は、新しい Shape オブジェクトが、ターゲット オブジェクトの Shapes コレクションで最大のインデックスを持つオブジェクトであることを判別できます。
DropMany メソッドが 0 (0) を返す場合、IDArray() は Null (Nothing) を返します。 それ以外の場合は、0 から m - 1 のインデックスが付いた m 整数の 1 次元配列を返します。 IDArray() は DropMany メソッドによって割り当てられる out パラメーターであり、所有権は DropMany メソッドを呼び出したプログラムに渡されます。 最終的には、呼び出し側は、返された配列に対して SafeArrayDestroy プロシージャを実行する必要があります。 このため、GetFormulasU メソッドによって返されるすべての文字列の割り当てが解除されます (Microsoft Visual Basic および Visual Basic for Applications ではこの処理が自動的に行われます)。
IDArray() がnull 以外 (Nothing ではない) を返す場合、IDArray( i - 1)、1 <= i<= intReturned 、 は、i 'th xyArray エントリによって生成された Shape オブジェクトの ID を返します。i'thxyArray() エントリが 1 つの Shape オブジェクトを生成した場合です。 i 'th xyArray() エントリで複数の Shape オブジェクトが生成された場合、エントリに -1 が返されます。 すべてのエントリ i 、 intReturned<= i<m 、return -1。
注:
Microsoft Visio 2000 以降では、ローカル名とユニバーサル名の両方を使用して、Visio の図形、マスター、ドキュメント、ページ、行、アドオン、セル、ハイパーリンク、スタイル、フォント、マスター ショートカット、UI オブジェクト、レイヤーを参照できます。 たとえば、ユーザーが図形に名前を付けると、ユーザーはローカル名を指定します。 Microsoft Office Visio 2003 以降、シェイプシート スプレッドシートには、セルの数式と値にユニバーサル名のみが表示されます。 (以前のバージョンでは、ユニバーサル名はユーザー インターフェイスに表示されませんでした)。
汎用名をプログラム内で使用すると、ソリューションをローカライズするたびに名前を変更する必要がなくなります。 ローカル名を使用して図形を識別する場合に複数の図形をドロップするには DropMany メソッドを使用します。 汎用名を使用して図形を識別する場合に複数の図形をドロップするには DropManyU メソッドを使用します。
例
次の例は、DropMany メソッドの使い方を示します。 ここでは、マクロの Document オブジェクトの図面ステンシル内の各マスター シェイプの 1 つのインスタンスを、マクロの Document オブジェクトのページ 1 にドロップします。 このマクロを実行する前に、図面ステンシル内に少なくとも 1 つのマスター シェイプが必要です。
Public Sub DropMany_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 name of object to drop to DropMany.
varObjectsToInstance(intCounter) = vsoMasters.Item(intCounter).Name
'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).DropMany(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 のサポートおよびフィードバックを参照してください。