Trabalhar com Formas (Objetos de Desenho)
Formas ou objetos de desenho são representados por três objetos diferentes: a coleção Shapes a coleçãoShapeRange e o objeto Shape. Em geral, a coleção Shapes é usada para criar formas e para iterar por todas as formas em um slide; o objeto Shape é usado para modificar uma única forma; e a coleção ShapeRange é usada para modificar várias formas da mesma maneira, pode ser usada para trabalhar com várias formas selecionadas na interface do usuário.
Defina as propriedades da forma
Várias propriedades de formatação de formas não são definidas por propriedades que aplicam-se diretamente aos objetos Shape ou ShapeRange. Em vez disso, os atributos de forma relacionados são agrupados em objetos secundários, como o objeto FillFormat, que contém todas as propriedades relacionadas ao preenchimento da forma ou o objeto LinkFormat, que contém todas as propriedades exclusivas dos objetos OLE vinculados. Para definir propriedades para uma forma, você deve primeiro retornar o objeto que representa a coleção de atributos de forma relacionados e, em seguida, definir as propriedades desse objeto retornado. Por exemplo, use a propriedade Fill para retornar o objeto FillFormat e, em seguida, defina a propriedade CorDePrimeiroPlano do objetoFillFormat para definir a cor de primeiro plano de preenchimento da forma especificada, conforme mostrado no exemplo a seguir.
Set myDocument = ActivePresentation.Slides(1)
myDocument.Shapes(1).Fill.ForeColor.RGB = RGB(255, 0, 0)
Aplicar uma propriedade ou um método para várias formas ao mesmo tempo
Na interface do usuário, você pode realizar algumas operações com várias formas selecionadas, por exemplo, você pode selecionar várias formas e definir seus preenchimentos individuais ao mesmo tempo. Você pode executar outras operações com apenas uma única forma selecionada; por exemplo, você só pode editar o texto em uma forma se uma única forma estiver selecionada.
No Visual Basic, há duas maneiras de aplicar métodos e propriedades a uma coleção de formas. Essas duas maneiras permitem que você execute qualquer operação que possa ser executada em uma única forma em um intervalo de formas, mesmo que você possa ou não executar a mesma operação na interface do usuário.
Se a operação funcionar em várias formas selecionadas na interface do usuário, será possível executar a mesma operação no Visual Basic criando uma coleção ShapeRange com as formas com que você deseja trabalhar e aplicando as propriedades e os métodos adequados diretamente à coleção ShapeRange.
Se a operação não funcionar em várias formas selecionadas na interface do usuário, ainda será possível executar a operação no Visual Basic criando um loop na coleção Shapes ou por meio de uma coleção ShapeRange que contém as formas com que você deseja trabalhar e aplicando as propriedades e os métodos adequados aos objetos Shape individuais na coleção.
Muitos métodos e propriedades que se aplicam ao objeto Shape e à coleção ShapeRange falham quando aplicados a determinados tipos de formas. Por exemplo, a propriedade TextFrame falhará se for aplicada a uma forma que não contêm texto. Se você não tiver certeza de que cada forma em uma coleção ShapeRange pode ter uma determinada propriedade ou método aplicado a ela, não aplique a propriedade ou método à coleção ShapeRange. Se você quiser aplicar uma dessas propriedades ou métodos a uma coleção de formas, percorra a coleção e teste cada forma individual para garantir que seja o tipo de forma apropriado antes de aplicar a propriedade ou o método a ela.
Aplicar uma propriedade ou método a uma coleção ShapeRange
Se for possível efetuar uma operação em várias formas selecionadas na interface do usuário ao mesmo tempo, você poderá fazer o equivalente por programa criando uma coleção ShapeRange e, em seguida, aplicando as propriedades ou os métodos apropriados a ela. O exemplo a seguir cria um intervalo de forma que contém AutoShapes chamadas "Estrela Grande" e "Estrela Pequena" em myDocument
e aplica um preenchimento de gradiente a elas e aplica um preenchimento de gradiente a elas.
Set myDocument = ActivePresentation.Slides(1)
Set myRange = myDocument.Shapes _
.Range(Array("Big Star", "Little Star"))
myRange.Fill.PresetGradient msoGradientHorizontal, _
1, msoGradientBrass
A seguir, as diretrizes gerais sobre o comportamento das propriedades e dos métodos quando aplicados a uma coleção ShapeRange.
A aplicação de um método à coleção é equivalente à aplicação do método a cada objeto Shape individual naquela coleção.
A configuração do valor de uma propriedade da coleção é equivalente à configuração do valor da propriedade de cada forma individual naquele intervalo.
Uma propriedade da coleção que retorne uma constante retornará o valor da propriedade para uma forma individual na coleção caso todas as formas da coleção tenham o mesmo valor para a propriedade. Se nem todas as formas na coleção tiverem o mesmo valor para a propriedade, ela retornará a constante "mista".
Uma propriedade da coleção que retorne um tipo de dados simples (como Long, Single ou String) retornará o valor da propriedade para uma forma individual caso todas as formas da coleção tenham o mesmo valor para a propriedade.
O valor de algumas propriedades pode ser retornado ou definido somente se houver exatamente uma forma na coleção. Se houver mais de uma forma na coleção, ocorrerá um erro de tempo de execução. Esse geralmente é o caso de retornar ou configurar propriedades quando a ação equivalente na interface do usuário só é possível com uma única forma (ações como editar texto em uma forma ou editar os pontos de uma forma livre).
As diretrizes anteriores também se aplicam quando você está configurando propriedades das formas agrupadas em objetos secundários da coleção ShapeRange, como o objeto FillFormat. Se o objeto secundário representar operações que podem ser executadas em vários objetos selecionados na interface do usuário, você poderá retornar o objeto de uma coleção ShapeRange e definir suas propriedades. Por exemplo, você pode usar a propriedade Fill para retornar o objeto FillFormatque representa os preenchimentos de formas na coleção ShapeRange. Definir as propriedades deste objeto FillFormat é definir as mesmas propriedades para todas as formas individuais na coleção ShapeRange.
Percorrer uma coleção Shapes ou ShapeRange
Mesmo que você não possa executar uma operação em várias formas na interface do usuário ao mesmo tempo selecionando-as e usando um comando em seguida, uma ação equivalente pode ser executada via programação executando um loop na coleção Shapes ou ShapeRange que contenha as formas que serão trabalhadas e aplicando as propriedades e os métodos apropriados aos objetos Shape individuais da coleção. O exemplo a seguir executa loops por todas as formas em myDocument
e adiciona o texto para cada forma que for uma AutoShape.
Set myDocument = ActivePresentation.Slides(1)
For Each sh In myDocument.Shapes
If sh.Type = msoAutoShape Then
sh.TextFrame.TextRange.InsertAfter " (version 1)"
End If
Next
O exemplo a seguir cria a coleção ShapeRange que contém todas as formas selecionadas no momento na janela ativa e define o texto em cada forma da coleção que pode conter texto.
For Each sh in ActiveWindow.Selection.ShapeRange
If sh.HasTextFrame Then
sh.TextFrame.TextRange = "Initially selected"
End If
Next
Alinhando, distribuindo e agrupando formas em um intervalo de formas
Use os métodos Alinhar e Distribuir para posicionar uma coleção de formas em relação uma à outra ou em relação ao documento que as contém. Use o método Grupo ou o métodoReagrupar para formar uma forma agrupada única de uma coleção de formas.
Suporte e comentários
Tem dúvidas ou quer enviar comentários sobre o VBA para Office ou sobre esta documentação? Confira Suporte e comentários sobre o VBA para Office a fim de obter orientação sobre as maneiras pelas quais você pode receber suporte e fornecer comentários.