Muchas propiedades de formato de las formas no se establecen con propiedades que se apliquen directamente a los objetos Shape o ShapeRange. En su lugar, los atributos de forma relacionados se agrupan en objetos secundarios, como el objeto FillFormat, que contiene todas las propiedades relacionadas con el relleno de la forma, o el objeto LinkFormat, que contiene todas las propiedades que son exclusivas de los objetos OLE vinculados.
Para establecer las propiedades de una forma, en primer lugar debe devolver el objeto que representa el conjunto de atributos de forma relacionados y, a continuación, establecer las propiedades del objeto devuelto. Por ejemplo, la propiedad Fill se usa para devolver el objeto FillFormat y, a continuación, se establece la propiedad ForeColor del objeto FillFormat para establecer el color de primer plano del relleno de la forma especificada, como se muestra en el ejemplo siguiente.
Aplicar una propiedad o un método a varias formas al mismo tiempo
En la interfaz de usuario puede realizar algunas operaciones con varias formas seleccionadas; por ejemplo, puede seleccionar varias formas y establecer los rellenos individuales a la vez. Existen otras operaciones que sólo pueden realizarse con una sola forma; por ejemplo, sólo puede modificar el texto de una forma si se ha seleccionado sólo una.
En Visual Basic existen dos maneras de aplicar propiedades y métodos a un conjunto de formas. Con estos dos modos es posible realizar cualquier operación que sea posible con una sola forma en un intervalo de formas, independientemente de que se pueda realizar la misma operación en la interfaz de usuario.
Si la operación funciona con varias formas seleccionadas en la interfaz de usuario, puede realizar la misma operación en Visual Basic creando una colección ShapeRange que contenga las formas con las que desea trabajar y aplicando las propiedades y los métodos correspondientes directamente a la colección ShapeRange.
Si la operación no funciona con varias formas seleccionadas en la interfaz de usuario, puede realizar la operación en Visual Basic recorriendo la colección Shapes o a través de una colección ShapeRange que contenga las formas con las que desee trabajar y aplicando las propiedades y los métodos correspondientes directamente a cada uno de los objetos Shape de la colección.
La mayoría de las propiedades y métodos que se pueden aplicar al objeto Shape y a la colección ShapeRange producen un error si se aplican a cierto tipo de formas. Por ejemplo, la propiedad TextFrame produce un error si se aplica a una forma que no puede contener texto.
Si no es positivo que cada una de las formas de una colección ShapeRange pueda tener aplicada una propiedad o un método determinados, no aplique la propiedad o el método a la colección ShapeRange . Si desea aplicar una de estas propiedades o uno de estos métodos a una colección de formas, debe recorrer la colección y comprobar cada una de las formas para asegurarse de que es un tipo de forma adecuado antes de aplicarle la propiedad o el método.
Creación de una colección ShapeRange que contiene todas las formas de una hoja
Para crear un objeto ShapeRange que contenga todos los objetos Shape de una hoja, seleccione las formas y, a continuación, utilice la propiedad ShapeRange para devolver un objeto ShapeRange que contenga las formas seleccionadas.
VB
Worksheets(1).Shapes.SelectSet sr = Selection.ShapeRange
En Microsoft Excel, el argumento Index no es opcional para la propiedad Range de la colección Shapes , por lo que no puede usar esta propiedad sin un argumento para crear un objeto ShapeRange que contenga todas las formas de una colección Shapes .
Aplicar una propiedad o un método a una colección ShapeRange
Si es posible realizar una operación con varias formas seleccionadas en la interfaz de usuario al mismo tiempo, puede hacerlo mediante programación si crea una colección ShapeRange y, a continuación, le aplica las propiedades o los métodos correspondientes. El siguiente ejemplo crea en myDocument un rango de formas que contiene las formas denominadas "Big Star" y "Little Star" y les aplica un relleno degradado.
VB
Set myDocument = Worksheets(1)
Set myRange = myDocument.Shapes.Range(Array("Big Star", _
"Little Star"))
myRange.Fill.PresetGradient _
msoGradientHorizontal, 1, msoGradientBrass
Estas son instrucciones generales del comportamiento de las propiedades y métodos cuando se aplican a una colección ShapeRange.
Aplicar un método a una colección equivale a aplicar el método a cada uno de sus objetos Shape.
Establecer el valor de una propiedad de la colección es equivalente a establecer el valor de la propiedad de cada forma del intervalo.
Una propiedad de la colección que devuelve una constante devuelve el valor de la propiedad de una forma individual de la colección si todas las formas de ésta tienen el mismo valor para dicha propiedad. Si no todas las formas de la colección tienen el mismo valor para la propiedad, devuelve la constante "mixed".
Una propiedad de la colección que devuelve un tipo de datos simple, como Long, Single o String, devuelve el valor de la propiedad de una forma si todas las formas de la colección tienen el mismo valor para dicha propiedad.
El valor de algunas propiedades puede devolverse o establecerse sólo si hay exactamente una forma en la colección. Si la colección contiene más de una forma, se producirá un error en tiempo de ejecución. Normalmente ocurre al devolver o establecer propiedades cuando la acción equivalente en la interfaz de usuario sólo puede realizarse con una única forma, por ejemplo, acciones como la modificación del texto de una forma o de los puntos de una forma libre.
Estas instrucciones también pueden aplicarse cuando se establecen propiedades de formas que están agrupadas en objetos secundarios de la colección ShapeRange, como el objeto FillFormat. Si el objeto secundario representa operaciones que pueden realizarse en una selección de varios objetos en la interfaz de usuario, podrá devolver el objeto de una colección ShapeRange y establecer sus propiedades.
Por ejemplo, puede utilizar la propiedad Fill para devolver el objeto FillFormat que representa los rellenos de todas las formas de la colección ShapeRange. Al establecer las propiedades del objeto FillFormat se establecen las mismas propiedades para todas las formas de la colección ShapeRange.
Recorrer una colección Shapes o ShapeRange
Aunque no pueda realizar una operación a la vez en varias formas en la interfaz de usuario, seleccionándolas y utilizando un comando después, podrá realizar la acción equivalente mediante un programa en Visual Basic, ejecutando un bucle en las colecciones Shapes o ShapeRange que contengan las formas con las que desea trabajar, y aplicando las propiedades y métodos apropiados a cada objeto Shapes de la colección.
El siguiente ejemplo ejecuta un bucle en todas las formas de myDocument y cambia el color de primer plano de cada forma que sea una Autoforma.
VB
Set myDocument = Worksheets(1)
ForEach sh In myDocument.Shapes
If sh.Type = msoAutoShape Then
sh.Fill.ForeColor.RGB = RGB(255, 0, 0)
EndIfNext
El siguiente ejemplo crea una colección ShapeRange que contiene todas las formas actualmente seleccionadas en la ventana activa, y establece el color de primer plano de cada una de las formas.
VB
ForEach sh in ActiveWindow.Selection.ShapeRange
sh.Fill.ForeColor.RGB = RGB(255, 0, 0)
Next
Alineación, distribución y agrupación de formas en un objeto ShapeRange
Use los métodos Align y Distribute para colocar un conjunto de formas relativas entre sí o en relación con el documento que las contiene.
Utilice los métodos Group o Regroup para crear una forma agrupada única a partir de un conjunto de formas.
¿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.
Al crear una aplicación de lienzo, ¿necesita mostrar al usuario todos los datos? ¿Y si solo quiere mostrar los datos que son de interés para ellos? Este módulo le ayudará a solucionar este problema.
Obtenga una certificación Microsoft Office Specialist (MOS) para demostrar que posee las aptitudes necesarias para sacar el máximo partido a Excel (Aplicaciones de Microsoft 365).