Compartir a través de


Método Shape.DropManyU (Visio)

Crea uno o varios objetos Shape en una página, un patrón o un grupo. Devuelve una matriz de identificadores de los objetos Shape creados.

Sintaxis

expresión. DropManyU( _ObjectsToInstance()_ , _xyArray()_ , _IDArray()_ )

expresión Variable que representa un objeto Shape.

Parameters

Nombre Obligatorio/opcional Tipo de datos Descripción
ObjectsToInstance() Obligatorio Variant Mediante sus nombres universales, identifica los patrones y los objetos a partir de los cuales se crearán las formas.
xyArray() Obligatorio Double Matriz de valores x e y alternantes que especifican las posiciones de las nuevas formas.
IDArray() Obligatorio Integer Parámetro de salida. Matriz que devuelve los identificadores de las formas creadas.

Valor devuelto

Entero

Comentarios

Utilizar el método DropManyU es como usar el método Drop del objeto Page, Master o Shape, con la excepción de que el método DropManyU le permite crear varios objetos Shape simultáneamente, sin necesidad de realizar una llamada al método para cada objeto. El método DropManyU crea objetos Shape nuevos en la página, el patrón o la forma de grupo a la que se aplica (en la discusión siguiente nos referiremos a esta forma como el "objeto de destino").

Para identificar el patrón que se va a colocar, puede pasar al método DropManyU un objeto Master, o el índice o el nombre del patrón. Cuando se pasa un objeto, DropManyU no se limita a colocar en un documento un patrón procedente de la galería de símbolos de dicho documento. El objeto puede ser un patrón de otro documento u otro tipo de objeto.

Pasar números enteros (índices de patrones) o cadenas (nombres de patrones) a DropManyU es más rápido que pasar objetos, pero los números enteros y las cadenas sólo pueden identificar patrones procedentes de las galerías de símbolos de los documentos donde se van a colocar dichos patrones. Por todo ello, en primer lugar el programa deberá situar de alguna manera los patrones en cuestión en la galería de símbolos del documento, siempre y cuando no estuvieran ya allí.

ObjectsToInstance() debe ser una matriz unidimensional de n>= 1 variantes. Sus entradas identifican los objetos a partir de los cuales se van a crear los nuevos objetos Shape. Con frecuencia, una entrada hace referencia a un objeto Master de la aplicación Microsoft Visio. Sin embargo, también podría referirse a un objeto Shape o Selection de la aplicación Visio o, incluso, a un objeto de otra aplicación. La aplicación no tiene en cuenta los límites inferior y superior de las matrices de las entradas ObjectsToInstance(). Llame a estos vlb y vub , respectivamente.

  • Si ObjectsToInstance(i) es el entero j , se crea una instancia del objeto Master en la galería de símbolos del documento del objeto de destino cuyo índice basado en 1 es j . No se desencadena la celda EventDrop de la sección Eventos de la nueva forma. Si desea que se desencadene la celda EventDrop, utilice el método Drop.

  • Si ObjectsToInstance(i) es la cadena s (o una referencia a la cadena s ), se realiza una instancia del objeto Master con el nombre s en la galería de símbolos del documento del objeto de destino; s puede ser igual a la propiedad UniqueID o NameU del objeto Master. No se desencadena la celda EventDrop de la sección Eventos de la nueva forma. Si desea que se desencadene la celda EventDrop, utilice el método Drop.

  • En el caso de vlb<i<= vub , si ObjectsToInstance(i) está vacío (Nothing o sin inicializar en Microsoft Visual Basic), la entrada i hará que ObjectsToInstance(j) se vuelva a crear una instancia, donde j es el valor < más grande, de modo que ObjectsToInstance(j) no esté vacío. Si desea crear n instancias de la misma entidad, sólo será necesario especificar ObjectsToInstance(vlb).

El argumento xyArray() debe ser una matriz unidimensional de 2 m dobles con xylb de límite inferior y xyub de límite superior, donde m>= n. Los valores de la matriz indican al método DropManyU dónde debe situar los objetos Shape que cree. ObjectsToInstance( vlb + ( i - 1)) se coloca en ( xy [( i - 1)2 + xylb ], xy [(i - 1)2 + xylb + 1]) para 1 <= i<= n.

Tenga en cuenta que m>n está permitido. Para n<i<= m , la instancia de i 'th es lo mismo que la n 'th cosa instanciada. Por lo tanto, para hacer que m>= 1 instancias de lo mismo, puede pasar una matriz ObjectsToInstance() con una entrada y una matriz xyArray() de entrada m.

Si la entidad para la que se están creando instancias es un patrón, el eje del nuevo objeto Shape se sitúa en la posición xy especificada. En caso contrario, el centro de los objetos Shape se sitúa en la posición xy especificada.

El valor Integer devuelto por el método DropManyU es el número de entradas xy de xyArray() que el método DropManyU ha procesado correctamente. Si se procesan correctamente todas las entradas, se devolverá m. Si algunas entradas se procesan correctamente antes de que se produzca un error, los objetos Shape generados no se eliminan y esto genera una excepción, pero sigue devuelve un entero positivo.

Suponiendo que todas las m entradas xy se procesan correctamente, el número de objetos Shape creados por el método DropManyU suele ser m. En raras ocasiones (por ejemplo, si se crean instancias para un objeto Selection), se crean más de m objetos Shape. El llamador puede determinar el número de objetos determinar el número de objetos Shape creados comparando el número de formas del objeto de destino antes y después de la ejecución del método DropManyU. El llamador puede determinar el número de objetos distinguir los nuevos objetos Shape porque son aquellos cuyos índices son mayores en la colección Shapes del objeto de destino.

Si el método DropManyU devuelve cero (0), IDArray() devuelve un valor nulo (Nothing). En caso contrario, devuelve una matriz unidimensional de m enteros indizados de 0 a m - 1. IDArray() es un parámetro de salida asignado por el método DropManyU, cuya propiedad se pasa al programa que realizó la llamada al método DropManyU. El llamador deberá realizar finalmente el procedimiento SafeArrayDestroy en la matriz devuelta. (Microsoft Visual Basic y Microsoft Visual Basic para Aplicaciones (VBA) se encargan de hacerlo).

Si IDArray() devuelve no null (no Nothing), IDArray( i - 1), 1 <= i<= intReturned , devuelve el identificador del objeto Shape generado por la entrada i 'th xyArray(), siempre que la entrada i 'th xyArray() produjera exactamente un objeto Shape . Si la entrada i 'th xyArray() produjo varios objetos Shape , se devuelve -1 en la entrada. Todas las entradas i , intReturned<= i<m , return -1.

Nota:

A partir de Microsoft Visio 2000, puede usar nombres locales y universales para hacer referencia a formas, patrones, documentos, páginas, filas, complementos, celdas, hipervínculos, estilos, fuentes, accesos directos maestros, objetos de interfaz de usuario y capas de Visio. Cuando un usuario asigna un nombre a una forma, por ejemplo, el usuario especifica un nombre local. A partir de Microsoft Office Visio 2003, la hoja de cálculo ShapeSheet solo muestra nombres universales en fórmulas y valores de celda. (En versiones anteriores, los nombres universales no eran visibles en la interfaz de usuario).

Como programador, puede usar nombres universales en un programa cuando no desee cambiar un nombre cada vez que localice una solución. Utilice el método DropMany si desea colocar varias formas y está usando nombres locales para identificarlas. Utilice el método DropManyU si desea colocar varias formas y está usando nombres universales para identificarlas.

Ejemplo

En el ejemplo siguiente, se muestra cómo utilizar el método DropManyU. Coloca una instancia de cada patrón de la galería de símbolos del documento del objeto Document de la macro en la página Page1 del objeto Document de la macro. Antes de ejecutar esta macro, asegúrese de que existe al menos un patrón en la galería de símbolos del documento.

 
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

Soporte técnico y comentarios

¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.