Freigeben über


Shape.DropMany-Methode (Visio)

Erstellt ein oder mehrere neue Shape-Objekte in einer Gruppe. Die Methode gibt ein Array von IDs der erzeugten Shape-Objekte zurück.

Syntax

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

expression Eine Variable, die ein Shape-Objekt darstellt.

Parameter

Name Erforderlich/Optional Datentyp Beschreibung
ObjectsToInstance() Erforderlich Variant Identifiziert die Master oder sonstigen Objekte, aus denen die Shapes erstellt werden.
xyArray() Erforderlich Double Ein Array von wechselnden X- und Y-Werten, mit denen die Positionen der neuen Shapes angegeben werden.
IDArray() Erforderlich Integer Ausgabeparameter. Ein Array, das die IDs der erstellten Shapes zurückgibt.

Rückgabewert

Ganze Zahl

Hinweise

Die Verwendung der DropMany-Methode ähnelt der Verwendung der Drop-Methode des Page-, Master- oder Shape-Objekts, mit der Ausnahme, dass Sie die DropMany-Methode verwenden können, um viele neue Shape-Objekte gleichzeitig zu erstellen, anstatt eines pro Methodenaufruf. Die DropMany-Methode erstellt neue Shape-Objekte auf dem Zeichenblatt, im master oder in der Gruppenform, auf die sie angewendet wird (diese Form wird in der folgenden Diskussion als "Zielobjekt" bezeichnet).

Sie können den abzulegenden Master identifizieren, indem Sie an die DropMany-Methode ein Master-Objekt oder den Index oder den Namen des Masters übergeben. Wenn Sie ein Objekt übergeben, ist DropMany nicht nur auf das Ablegen eines Masters von der Dokumentschablone des Dokuments beschränkt, auf das es abgelegt wird. Bei dem Objekt kann es sich um einen Master aus einem anderen Dokument oder aus einem anderen Objekttyp handeln.

Ganze Zahlen (Masterindizes) oder Zeichenfolgen (Masternamen) können schneller als Objekte an DropMany übergeben werden, aber ganze Zahlen oder Zeichenfolgen können nur Master in der Dokumentschablone des Dokuments bestimmen, auf dem sie abgelegt werden. Also muss das Programm die fraglichen Master zunächst in die Dokumentschablone aufnehmen, sofern sie dort noch nicht vorhanden sind.

ObjectsToInstance() sollte ein eindimensionales Array von n>= 1 Varianten sein. Seine Einträge identifizieren Objekte, aus denen Sie neue Shape-Objekte erstellen möchten. Ein Eintrag bezieht sich häufig auf ein Master-Objekt der Microsoft Visio-Anwendung. Es kann sich auch auf ein Shape-Objekt der Visio-Anwendung, ein Selection-Objekt oder sogar auf ein Objekt aus einer anderen Anwendung beziehen. Der Anwendung ist es egal, was die unteren und oberen Arraygrenzen der ObjectsToInstance-Einträge sind. Rufen Sie diese vlb bzw. vub auf.

  • Wenn ObjectsToInstance(i) ein Verweis auf ein OLE-Objekt ist, das eine IDataObject-Schnittstelle bereitstellt (in Microsoft Visual Basic für Applikationen ein Verweis auf eine Auswahl, ein Shape, einen Master, eine Führungslinie oder ein OLE-Objekt), wird das Objekt instanziiert, auf das verwiesen wird. Dies entspricht im Wesentlichen dem Aufrufen von Drop(ObjectsToInstance(i),x,y).

  • Wenn ObjectsToInstance(i) die ganze Zahl j ist, wird ein instance des Master-Objekts in der Dokumentschablone des Zielobjektdokuments erstellt, dessen 1-basierter Index j ist. Die Zelle EventDrop im Abschnitt Ereignisse der neuen Form wird nicht ausgelöst. Verwenden Sie stattdessen die Drop-Methode , wenn die EventDrop-Zelle ausgelöst werden soll.

  • Wenn ObjectsToInstance(i) die Zeichenfolge s (oder ein Verweis auf die Zeichenfolgen ) ist, wird eine instance des Master-Objekts mit namen s in der Dokumentschablone des Zielobjektdokuments erstellt; s kann entweder der UniqueID- oder der Name-Eigenschaft des Master-Objekts entsprechen. Die Zelle EventDrop im Abschnitt Ereignisse der neuen Form wird nicht ausgelöst. Verwenden Sie stattdessen die Drop-Methode , wenn die EventDrop-Zelle ausgelöst werden soll.

  • Für vlb<i<= vub , wenn ObjectsToInstance(i) leer ist (Nothing oder nicht initialisiert in Microsoft Visual Basic), bewirkt der Eintrag i , dass ObjectsToInstance(j) erneut instanziert wird, wobei j der größte Wert <i ist, sodass ObjectsToInstance(j) nicht leer ist. Wenn Sie n-Instanzen von einem Element erstellen möchten, muss nur ObjectsToInstance(vlb) angegeben werden.

Das xyArray() -Argument sollte ein eindimensionales Array von 2 m Doubles mit unterer Grenze xylb und oberem xyub sein, wobei m>= n ist. Die Werte im Array teilen der DropMany-Methode mit, wo die von ihr erzeugten Shape-Objekte positioniert werden sollen. ObjectsToInstance( vlb + ( i - 1)) wird bei ( xy [( i - 1)2 + xylb ], xy [(i - 1)2 + xylb + 1]) für 1 <=<n gelöscht.

Beachten Sie, dass m>n zulässig ist. Für n<i<= m ist das i 'th-Ding, das instanziert wurde, dasselbe wie die n 'th-Sache instanziert. Um also m>= 1 Instanzen desselben Objekts zu erstellen, können Sie ein ObjectsToInstance()-Array mit einem Eintrag und einem xyArray()-Array m-Eintrag übergeben.

Wenn es sich bei der instanziierten Entität um einen Master handelt, wird der Drehbezugspunkt des neuen Shape-Objekts an der angegebenen xy-Position platziert. Andernfalls wird der Mittelpunkt des Shape-Objekts an der angegebenen xy-Position platziert.

Der von der DropMany-Methode zurückgegebene Wert ist die Anzahl der xy-Einträge in xyArray(), die die DropMany-Methode erfolgreich verarbeitet hat. Wenn alle Einträge erfolgreich verarbeitet wurden, wird m zurückgegeben. Wenn einige Einträge erfolgreich verarbeitet werden, bevor ein Fehler auftritt, werden die erstellten Shape-Objekte nicht gelöscht, und dadurch wird eine Ausnahme ausgelöst, aber trotzdem ein positiver Wert zurückgegeben.

Wenn alle mxy-Einträge richtig verarbeitet werden, entspricht die Anzahl neuer Shape-Objekte, die von der DropMany-Methode erzeugt wurden, normalerweise m. In Ausnahmefällen (z. B. wenn ein Selection-Objekt instanziiert wird) können mehr als m Shape-Objekte erzeugt werden. Der Aufrufer kann die Anzahl der erzeugten Shape-Objekte ermitteln, indem die Anzahl von Shapes im Zielobjekt vor und nach der Ausführung der DropMany-Methode verglichen werden. Der Aufrufer kann die neuen Shape-Objekte daran erkennen, dass sie in der Shapes-Auflistung des Zielobjekts die höchsten Indizes aufweisen.

Wenn die DropMany-Methode null (0) zurückgibt, gibt IDArray()Null (Nothing) zurück. Andernfalls gibt es ein eindimensionales Array mit m ganzen Zahlen zurück, die von 0 bis m - 1 indiziert sind. IDArray() ist ein Ausgabeparameter, der von der DropMany-Methode zugeordnet wird und dessen Besitz an das Programm übergeben wird, das die DropMany-Methode aufgerufen hat. Der Aufrufer sollte zum Schluss die SafeArrayDestroy-Prozedur für das zurückgegebene Array ausführen. (Dies wird von Microsoft Visual Basic und Visual Basic für Applikationen ausgeführt.)

Wenn IDArray() ungleich NULL (nicht Nothing) zurückgibt, gibt IDArray( i - 1), 1 <= i<= intReturned die ID des Shape-Objekts zurück, das vom i 'th xyArray-Eintrag erzeugt wurde, vorausgesetzt, der i 'th xyArray() -Eintrag hat genau ein Shape-Objekt erzeugt. Wenn der i 'th xyArray() -Eintrag mehrere Shape-Objekte erzeugt hat, wird -1 im Eintrag zurückgegeben. Alle Einträge i , intReturned<= i<m , geben -1 zurück.

Hinweis

Ab Microsoft Visio 2000 können Sie sowohl lokale als auch universelle Namen verwenden, um auf Shapes, Master-Shapes, Dokumente, Zeichenblätter, Zeilen, Add-Ons, Zellen, Hyperlinks, Formatvorlagen, Schriftarten, Master-Shape-Verknüpfungen, Benutzeroberflächenobjekte und Layer von Visio zu verweisen. Wenn ein Benutzer z. B. ein Shape verwendet, gibt er einen lokalen Namen an. Ab Microsoft Office Visio 2003 werden in der ShapeSheet-Kalkulationstabelle nur universelle Namen in Zellformeln und Werten angezeigt. (In früheren Versionen wurden universelle Namen in der Benutzeroberfläche nicht angezeigt.)

Als Entwickler können Sie universelle Namen in einem Programm verwenden, falls Sie einen Namen nicht jedes Mal ändern möchten, wenn eine Lösung lokalisiert wird. Verwenden Sie die DropMany-Methode, um mehr als ein Shape abzulegen, wenn Sie für die Identifikation von Shapes lokale Namen verwenden. Verwenden Sie die DropManyU-Methode, um mehr als ein Shape abzulegen, wenn Sie für die Identifikation von Shapes universelle Namen verwenden.

Beispiel

Das folgende Beispiel zeigt die Verwendung der DropMany-Methode . Es löscht eine instance jedes master in der Dokumentschablone des Document-Objekts des Makros auf Page1 des Document-Objekts des Makros. Stellen Sie vor dem Ausführen dieses Makros sicher, dass in der Dokumentschablone mindestens ein master vorhanden ist.

 
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

Support und Feedback

Haben Sie Fragen oder Feedback zu Office VBA oder zu dieser Dokumentation? Unter Office VBA-Support und Feedback finden Sie Hilfestellung zu den Möglichkeiten, wie Sie Support erhalten und Feedback abgeben können.