Shape メソッド (Visio)Shape.DropMany method (Visio)

グループに 1 つ以上の新しい Shape オブジェクトを作成します。Creates one or more new Shape objects in a group. このメソッドは、作成された Shape オブジェクトの ID で構成される配列を返します。It returns an array of the IDs of the Shape objects it produces.


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

Shape オブジェクトを表す変数を取得します。expression A variable that represents a Shape object.


名前Name 必須 / オプションRequired/Optional データ型Data type 説明Description
ObjectsToInstance ()ObjectsToInstance() 必須Required VariantVariant 図形の作成元になるマスター シェイプまたはその他のオブジェクトです。Identifies masters or other objects from which to make shapes.
xyArray ()xyArray() 必須Required DoubleDouble 新しい図形の位置を指定する x 値と y 値が交互に表された配列です。An array of alternating x and y values specifying the positions for the new shapes.
IDArray ()IDArray() 必須Required 整数型 (Integer)Integer 出力パラメーターです。Out parameter. 作成された図形の ID を返す配列です。An array that returns the IDs of the created shapes.

戻り値Return value



Dropmanyメソッドを使用するのは、 PageMaster、またはShapeオブジェクトのDropメソッドを使用するのと似ていますが、 dropmanyメソッドを使用すると、メソッドごとに1つではなく、一度に多数の新しいShapeオブジェクトを作成できます。呼ん.Using the DropMany method is like using the Page, Master, or Shape object's Drop method, except you can use the DropMany method to create many new Shape objects at once, rather than one per method call. DropManyメソッドは、ページ、マスターシェイプ、またはそれが適用されるグループ図形に新しいshapeオブジェクトを作成します (次の説明では、この図形は "target オブジェクト" と呼ばれます)。The DropMany method creates new Shape objects on the page, in the master, or in the group shape to which it is applied (this shape is called the "target object" in the following discussion).

ドロップするマスターシェイプを特定するには、 DropManyメソッドにmasterオブジェクトまたはマスターシェイプのインデックスまたはマスターシェイプ名を渡します。You can identify which master to drop by passing the DropMany method a Master object or the master's index or the master's name. オブジェクトを渡す場合、ドロップされた図面の図面ステンシルからマスターシェイプを削除するだけでは、 DropManyは制限されません。When you pass an object, DropMany isn't constrained to just dropping a master from the document stencil of the document onto which it is being dropped. オブジェクトは、別のドキュメントまたは別の種類のオブジェクトのマスターシェイプである場合があります。The object can be a master from another document or another type of object.

整数 (マスター シェイプのインデックス) または文字列 (マスター シェイプの名前) を DropMany に渡す方が、オブジェクトを渡すよりも高速に処理できますが、整数または文字列の場合は、ドロップ先の図面の図面ステンシルにあるマスター シェイプしか指定できません。Passing integers (master indices) or strings (master names) to DropMany is faster than passing objects, but integers or strings can identify only masters in the document stencil of the document onto which it is being dropped. したがって、問題のマスター シェイプが図面ステンシルに存在しない場合、プログラムはまずそのマスター シェイプを図面ステンシルに格納する必要があります。Hence your program has to somehow get the masters in question into the document stencil in the first place, provided they weren't there already.

ObjectsToInstance() は、n >= 1 のバリアント型の値で構成される 1 次元配列です。ObjectsToInstance() should be a one-dimensional array of n >= 1 variants. この配列のエントリは、新しい Shape オブジェクトの作成元となるオブジェクトを示します。Its entries identify objects from which you want to make new Shape objects. エントリは、通常 Microsoft Office Visio アプリケーションの Master オブジェクトを参照します。An entry often refers to a Microsoft Visio application Master object. ただし、Visio アプリケーションの Shape オブジェクト、Selection オブジェクト、または別のアプリケーションのオブジェクトを参照する場合もあります。It might also refer to a Visio application Shape object, Selection object, or even an object from another application. アプリケーションは、 _ObjectsToInstance_エントリの下限および上位の配列の範囲を考慮しません。The application doesn't care what the lower and upper array bounds of the ObjectsToInstance entries are. これらの_vlb_と_vub_をそれぞれ呼び出します。Call these vlb and vub , respectively.

  • ObjectsToInstance (i) が、 IDataObjectインターフェイスを提供する OLE オブジェクトへの参照である場合 (Microsoft Visual Basic for Applications、選択範囲、図形、マスターシェイプ、ガイド、または OLE オブジェクトへの参照)、参照されているオブジェクトは、インスタンス.If ObjectsToInstance(i) is a reference to an OLE object that provides an IDataObject interface (in Microsoft Visual Basic for Applications, a reference to a selection, shape, master, guide, or OLE object), the object it is referencing is instanced. これは基本的には、 Drop(ObjectsToInstance (i)、x、y) の呼び出しと同じです。This is essentially equivalent to calling Drop(ObjectsToInstance(i),x,y).

  • ObjectsToInstance (i) が整数_j_の場合は、ターゲットオブジェクトの**** 図面ステンシルにある、1から始まるインデックスが_j_になっているオブジェクトのインスタンスが作成されます。If ObjectsToInstance(i) is the integer j , an instance of the Master object in the document stencil of the target object's document whose 1-based index is j is made. 新しい図形の [Events] セクションの [EventDrop] セルは実行されません。The EventDrop cell in the Events section of the new shape is not triggered. [EventDrop] セルを実行するには、代わりに Drop メソッドを使用します。Use the Drop method instead if you want the EventDrop cell to be triggered.

  • ObjectsToInstance (i) が文字列_s_ (または文字列への参照) の__ 場合は、ターゲットオブジェクトのドキュメントの図面ステンシルに、name が_s_のMasterオブジェクトのインスタンスが作成されます。_s_は、 MasterオブジェクトのUniqueIDまたはNameプロパティのいずれかと一致します。If ObjectsToInstance(i) is the string s (or a reference to the string s ), an instance of the Master object with name s in the document stencil of the target object's document is made; s can equal either the Master object's UniqueID or Name property. 新しい図形の [Events] セクションの [EventDrop] セルは実行されません。The EventDrop cell in the Events section of the new shape is not triggered. [EventDrop] セルを実行するには、代わりに Drop メソッドを使用します。Use the Drop method instead if you want the EventDrop cell to be triggered.

  • Vlb < __ i <= _vub_の場合、 ObjectsToInstance (i) が空 (Microsoft Visual Basic ではNothingまたは初期化されていない) の場合、entry i_によって_ObjectsToInstance (j) が再びインスタンス化されます。ここで、 j_は_ObjectsToInstance (j) が空ではない < _i_の最大値です。For vlb < i <= vub , if ObjectsToInstance(i) is empty (Nothing or uninitialized in Microsoft Visual Basic), entry i will cause ObjectsToInstance(j) to be instanced again, where j is the largest value < i such that ObjectsToInstance(j) isn't empty. 同じ事柄の_n 個_のインスタンスを作成する場合は、 ObjectsToInstance (vlb) のみを指定する必要があります。If you want to make n instances of the same thing, only ObjectsToInstance(vlb) needs to be provided.

引数_xyArray ()_ は、下限が_xylb_で、上限が_xyub_である1次元配列である必要があります ( m >= n)。 __The xyArray() argument should be a one-dimensional array of 2 m doubles with lower bound xylb and upper bound xyub , where m >= n. 配列内の値は、作成するShapeオブジェクトを配置するDropManyメソッドを指定します。The values in the array tell the DropMany method where to position the Shape objects it produces. ObjectsToInstance( vlb + ( i -1)) は、1 <= i <= n_の_xy [(i-1) 2 + xylb ], xy [(i-1) 2 + xylb + 1]) にドロップされます。 __ObjectsToInstance( vlb + ( i - 1)) is dropped at ( xy [( i - 1)2 + xylb ], xy [(i - 1)2 + xylb + 1]) for 1 <= i <= n.

M > _n_が許可されていることに注意してください。Note that m > n is allowed. N < i __ __ __ m の場合、インスタンス化された i 番目のものは、n 番目にインスタンス化されたものと同じです。 <= For n < i <= m , the i 'th thing instanced is the same thing as the n 'th thing instanced. したがって、同じオブジェクトのインスタンスを m >= 1 個作成するには、1 つのエントリを持つ ObjectsToInstance() 配列と m 個のエントリを持つ xyArray() 配列を渡します。Thus to make m >= 1 instances of the same thing, you can pass an ObjectsToInstance() array with one entry and an m entry xyArray() array.

インスタンスを作成するエンティティがマスター シェイプである場合、新しい Shape オブジェクトの Pin は、指定された xy に配置されます。If the entity being instanced is a master, the pin of the new Shape object is positioned at the given xy. それ以外の場合は、Shape オブジェクトの中心が、指定された xy に配置されます。Otherwise, the center of the Shape objects is positioned at the given xy.

DropMany メソッドによって返された値は、DropMany メソッドによって正常に処理された xyArray() 内の xy エントリの数を示します。The value returned by the DropMany method is the number of xy entries in xyArray() that the DropMany method successfully processed. すべてのエントリが正常に処理された場合、m が返されます。If all entries were processed successfully, m is returned. エラー発生前に正常に処理されたエントリがある場合、作成されたShapeオブジェクトは削除されず、例外が発生しても正の値が返されます。If some entries are successfully processed prior to an error occurring, the produced Shape objects are not deleted and this raises an exception but still returns a positive value.

すべての_m_ _xy_エントリが正常に処理された場合、 DropManyメソッドによって生成された新しいShapeオブジェクトの数は、通常、 _m_と同じです。Presuming all m xy entries are processed correctly, the number of new Shape objects produced by the DropMany method is usually equal to m. ただし Selection オブジェクトのインスタンスが作成された場合など、m 個を超える Shape オブジェクトが作成されることもあります。In rare cases (for example, if a Selection object gets instanced), more than mShape objects may be produced. DropMany メソッドを実行する前と後でターゲット オブジェクト内にある図形の数を比較することにより、呼び出し側は作成された Shape オブジェクトの数を判別できます。The caller can determine the number of produced Shape objects by comparing the number of shapes in the target object before and after the DropMany method is executed. また呼び出し側は、新しい Shape オブジェクトが、ターゲット オブジェクトの Shapes コレクションで最大のインデックスを持つオブジェクトであることを判別できます。The caller can assert the new Shape objects are those with the highest indices in the target object's Shapes collection.

DropManyメソッドがゼロ (0) を返す場合、 idarray ()Null (Nothing) を返します。If the DropMany method returns zero (0), IDArray() returns Null (Nothing). それ以外の場合は、0から_m_ -1 のインデックスが付けられた_m_個の整数の1次元配列を返します。Otherwise, it returns a one-dimensional array of m integers indexed from 0 to m - 1. Idarray () は、 dropmanyメソッドによって割り当てられる out パラメーターで、所有権はdropmanyメソッドを呼び出したプログラムに渡されます。IDArray() is an out parameter that is allocated by the DropMany method and ownership is passed to the program that called the DropMany method. 最終的には、呼び出し側は、返された配列に対して SafeArrayDestroy プロシージャを実行する必要があります。The caller should eventually perform the SafeArrayDestroy procedure on the returned array. このため、GetFormulasU メソッドによって返されるすべての文字列の割り当てが解除されます (Microsoft Visual Basic および Visual Basic for Applications ではこの処理が自動的に行われます)。(Microsoft Visual Basic and Visual Basic for Applications take care of this for you.)

Idarray ()null以外 ( Nothingではない) を返した場合、 idarray( i -1)、1 <= i <= _intreturned れ_た場合は、 i_番目の_xyArray_によって生成されたShapeオブジェクトの ID を返します。entry。 i ' th xyArray () エントリが正確に1つのShapeオブジェクトを生成し_まし_た。If IDArray() returns non- null (not Nothing), IDArray( i - 1), 1 <= i <= intReturned , returns the ID of the Shape object produced by the i 'th xyArray entry, provided the i 'th xyArray() entry produced exactly one Shape object. I_の th xyArray () エントリで複数のShapeオブジェクトが生成された場合、エントリには-1 が返されます。If the i 'th xyArray() entry produced multiple Shape objects, -1 is returned in the entry. すべてのエントリ_i 、intreturned_i < m_を_返し <= 、-1 を返します。All entries i , intReturned <= i < m , return -1.


Microsoft Visio 2000 以降では、ローカル名と汎用名の両方を使用して、Visio 図形、マスターシェイプ、ドキュメント、ページ、行、アドオン、セル、ハイパーリンク、スタイル、フォント、マスターショートカット、UI オブジェクト、およびレイヤーを参照することができます。Beginning with Microsoft Visio 2000, you can use both local and universal names to refer to Visio shapes, masters, documents, pages, rows, add-ons, cells, hyperlinks, styles, fonts, master shortcuts, UI objects, and layers. ユーザーが図形に名前を指定した場合 (たとえば、ユーザーがローカル名を指定している場合など)。When a user names a shape, for example, the user is specifying a local name. Microsoft Office Visio 2003 以降、シェイプシートでは、セルの数式と値に汎用名だけが表示されます。Beginning with Microsoft Office Visio 2003, the ShapeSheet spreadsheet displays only universal names in cell formulas and values. (以前のバージョンでは、ユーザーインターフェイスに汎用名が表示されていませんでした)。(In prior versions, universal names were not visible in the user interface.)

汎用名をプログラム内で使用すると、ソリューションをローカライズするたびに名前を変更する必要がなくなります。As a developer, you can use universal names in a program when you don't want to change a name each time a solution is localized. ローカル名を使用して図形を識別する場合に複数の図形をドロップするには DropMany メソッドを使用します。Use the DropMany method to drop more than one shape when you are using local names to identify the shapes. 汎用名を使用して図形を識別する場合に複数の図形をドロップするには DropManyU メソッドを使用します。Use the DropManyU method to drop more than one shape when you are using universal names to identify the shapes.


次の例は、DropMany メソッドの使い方を示します。The following example shows how to use the DropMany method. ここでは、マクロの Document オブジェクトの図面ステンシル内の各マスター シェイプの 1 つのインスタンスを、マクロの Document オブジェクトのページ 1 にドロップします。It drops one instance of every master in the document stencil of the macro's Document object onto Page1 of the macro's Document object. このマクロを実行する前に、図面ステンシル内に少なくとも 1 つのマスター シェイプが必要です。Before running this macro, make sure there is at least one master in the document stencil.

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 
 MsgBox "Error" 
 Exit Sub 
End Sub

サポートとフィードバックSupport and feedback

Office VBA またはこの説明書に関するご質問やフィードバックがありますか?Have questions or feedback about Office VBA or this documentation? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.