Interagindo com gráficos usando o VBA no Word 2007

1

Eu tenho um longo documento do MS Word 2007, no qual eu ocasionalmente preciso substituir todos os gráficos incorporados.

As alterações são simples e regulares o suficiente para que eu possa escrever uma macro VBA para fazer essas atualizações para mim.

Mas, entrei em um problema muito básico: não consigo descobrir como selecionar um gráfico incorporado no VBA. O recurso "Gravar Macro" no Word não registra alterações no gráfico por algum motivo e todos os tutoriais on-line abordam a interação com gráficos no Excel.

Alguém poderia postar algum código de exemplo curto (ou um link explicando) que mostre alguma interação básica com gráficos incorporados no Word?

    
por anschauung 20.11.2009 / 13:56

2 respostas

1

Veja este post no Blog do MSDN: Modelo de objeto de gráfico do Office no PowerPoint e no Word

Requer o SP2 para o Office 2007.

    
por 20.11.2009 / 15:58
2

Isso deve funcionar tanto para imagens incorporadas (jpg, etc) quanto para gráficos incorporados:

'Kill 'em all: pictures, OLE object, hyperlinks, ActiveX controls, etc.
Sub DeleteAllShapes()
    Dim shp As InlineShape

    For Each shp In ActiveDocument.InlineShapes
        shp.Delete
    Next shp
End Sub

Existe também um objeto "Shape" (e uma coleção Shapes) que se refere a todas as formas de forma mais genérica - sejam elas inline ou não. Uma forma pode ser muitas coisas - use a propriedade Type para retornar o tipo de forma inline: imagem, imagem vinculada, objeto OLE incorporado, objeto OLE vinculado, controles ActiveX e muito mais. Se você tiver muitos tipos diferentes e precisar distingui-los, poderá cercar sua exclusão com algo como:

If shp.Type = wdInlineShapeEmbeddedOLEObject Then
    shp.Delete
End If

Uma maneira de adicionar uma nova imagem:

' Insert a picture at the current insertion point.
Sub InsertPicture(ByVal FileName As String)

    Selection.InlineShapes.AddPicture _
                             FileName:=FileName, _
                             SaveWithDocument:=True
End Sub
    
por 20.11.2009 / 16:19