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

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


expression.expression. DropManyU( _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 by their universal names.
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



DropManyUメソッドを使用するのは、 PageMaster、またはShapeオブジェクトのDropメソッドを使用するのと似ていますが、 DropManyUメソッドを使用すると、一度に1つではなく、一度に多数の新しいShapeオブジェクトを作成できます。メソッドの呼び出し。Using the DropManyU method is like using the Page, Master, or Shape object's Drop method, except you can use the DropManyU method to create many new Shape objects at once, rather than one per method call. DropManyUメソッドは、ページ、マスターシェイプ、またはその図形が適用されるグループ図形に新しいshapeオブジェクトを作成します (次の説明では、この図形は "target オブジェクト" と呼ばれます)。The DropManyU 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).

DropManyUメソッドまたはマスターシェイプのインデックスまたはマスターシェイプの**** 名前を渡すことにより、ドロップするマスターシェイプを識別できます。You can identify which master to drop by passing the DropManyU method a Master object or the master's index or the master's name. オブジェクトを渡すとき、 DropManyUは、ドロップされている図面の図面ステンシルからマスターシェイプを削除するだけでは制限されません。When you pass an object, DropManyU 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.

整数 (マスターシェイプのインデックス) または文字列 (マスターシェイプの名前) をDropManyUに渡す方が、オブジェクトを渡すよりも高速ですが、整数または文字列は、ドロップ先の図面の図面ステンシルにある masters のみを識別できます。Passing integers (master indices) or strings (master names) to DropManyU 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) が整数_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 trigger.

  • ObjectsToInstance (i) が文字列_s_ (または文字列への参照) の__ 場合は、ターゲットオブジェクトのドキュメントの図面ステンシルに、name が_s_のMasterオブジェクトのインスタンスが作成されます。_s_は、 MasterオブジェクトのUniqueIDまたはNameUプロパティのいずれかと等しくなります。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 NameU 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. 配列内の値は、 DropManyUメソッドに、作成するShapeオブジェクトを配置する場所を通知します。The values in the array tell the DropManyU 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.

DropManyUメソッドによって返される整数値は、 DropManyUメソッドが正常に処理された_xyArray ()_ 内の_xy_エントリの数です。The Integer value returned by the DropManyU method is the number of xy entries in xyArray() that the DropManyU 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 integer.

すべての_m_ _xy_エントリが正しく処理される場合、 DropManyUメソッドによって生成される新しいShapeオブジェクトの数は、通常、 _m_と同じです。Presuming all m xy entries are processed correctly, the number of new Shape objects produced by the DropManyU 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. DropManyU メソッドを実行する前と後でターゲット オブジェクト内にある図形の数を比較することにより、呼び出し側は作成された 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 DropManyU 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.

DropManyUメソッドがゼロ (0) を返す場合、 idarray () は null (Nothing) を返します。If the DropManyU 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 () は、 DropManyUメソッドによって割り当てられる out パラメーターで、所有権はDropManyUメソッドを呼び出したプログラムに渡されます。IDArray() is an out parameter that is allocated by the DropManyU method and ownership is passed to the program that called the DropManyU method. 最終的には、呼び出し側は、返された配列に対して SafeArrayDestroy プロシージャを実行する必要があります。The caller should eventually perform the SafeArrayDestroy procedure on the returned array. このため、GetResults メソッドによって返されるすべての文字列の割り当てが解除されます (Microsoft Visual Basic および Microsoft Visual Basic for Applications ではこの処理が自動的に行われます)。(Microsoft Visual Basic and Microsoft Visual Basic for Applications take care of this for you.)

Idarray () が null 以外 ( Nothingではない) を返した場合、 idarray( i -1)、1 <= i <= intreturned れ_た場合は、 i ' th xyArray () エントリによって生成されたShapeオブジェクトの ID を返します。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.


次の例は、 DropManyUメソッドの使用方法を示しています。The following example shows how to use the DropManyU 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 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 
 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.