es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Unir formas para un número desconocido de formas.

¡Vengo a ti en busca de sabiduría una vez más!

He escrito un código que inserta varias formas (número dinámico dependiendo de la selección del usuario) y como paso final, necesito fusionarlas usando el método MergeShapes.

Esta solución funciona si tienes un número fijo de objetos de forma:
https://stackoverflow.com/questions/46023622/two-shape-merge-as-union-using-vba-in-powerpoint/46025003

Pero no puedo hacer que funcione para un número desconocido de formas.

He intentado:
– Almacenar todas las formas en un array y luego intentar fusionar eso

ReDim UnionArray(1 To ShapeCounter)

For i = 1 To ShapeCounter
Set UnionArray(i) = TempSlide.Shapes(“Wrapper” & ShapeCounter)
Next i

TempSlide.Shapes(UnionArray).MergeShapes (msoMergeUnion)

  • Crear una cadena con los nombres de las formas y tratar de trabajar con eso

Dim ShapeNamesArray As String

ShapeNamesArray = “””Wrapper1″””

For i = 2 To ShapeCounter
ShapeNamesArray = ShapeNamesArray & “, ” & “””Wrapper” & i & “”””
Next i

El resultado es una cadena como: “Wrapper1”, “Wrapper2”, “Wrapper3”

TempSlide.Shapes.Range(Array(ShapeNamesArray)).MergeShapes (msoMergeUnion)

EDIT: También he intentado crear una cadena de las posiciones de orden Z.
Si haces …Range(Array(5, 6, 8)).MergeShapes… funciona, pero si haces ArrZOrders = “5, 6, 8” y luego …Range(Array(ArrZOrders)).MergeShapes… no funciona.

¿Alguna idea?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema que estás enfrentando está relacionado con pasar una matriz de objetos al método MergeShapes. Un enfoque posible para resolver esto podría ser recorrer las formas y fusionarlas de a pares hasta que todas las formas hayan sido fusionadas.

    Aquí tienes un ejemplo de cómo podrías implementar esto:

    Dim i As Long
    Dim mergedShape As Shape
    
    ' Comienza fusionando las dos primeras formas
    Set mergedShape = TempSlide.Shapes("Wrapper1").MergeShapes(TempSlide.Shapes("Wrapper2"), msoMergeUnion)
    
    ' Recorre las formas restantes y fúndelas de a pares con la forma fusionada
    For i = 3 To ShapeCounter
        Set mergedShape = mergedShape.MergeShapes(TempSlide.Shapes("Wrapper" & i), msoMergeUnion)
    Next i
    

    En este ejemplo, el código comienza fusionando las dos primeras formas usando el método MergeShapes. La forma fusionada resultante se guarda en una variable llamada mergedShape. Luego, el código recorre las formas restantes y las fusiona de a pares con la forma fusionada usando el mismo método. La forma fusionada final se guarda en la misma variable.

    Ten en cuenta que este código asume que las formas se llaman “Wrapper1”, “Wrapper2”, etc. Es posible que debas ajustar este código para que coincida con la convención de nomenclatura utilizada en tu presentación.

    ¡Espero que esto te ayude! Déjame saber si tienes alguna pregunta.

Comments are closed.