Этот член может быть доступен только для группы документов VBA Word

Я пытаюсь найти объект ole в документе Word и, похоже, в InlineShapes(1).GroupItems. Но не удается получить доступ к элементам группы, поскольку это дает мне ошибку.

Sub findOle()
 Dim shp As GroupShapes
 Dim c As Integer
 Set shp = ActiveDocument.InlineShapes(1).GroupItems
End Sub

этот член может быть доступен только для группы

Я могу получить доступ к ActiveDocument.Shapes(1).GroupItems.Item(1) но не к InlineShapes.

Какие-либо предложения?

1 ответ

Если в Word есть только одна группа фигур, это будет работать, если вы хотите присвоить ее форме:

Sub FindOle()

 Dim shp As Shape
 Dim allShapes As Shape
 Dim c As Long

 For Each shp In ActiveDocument.Shapes
 Debug.Print shp.Name
 Set allShapes = shp
 Next shp

 Debug.Print allShapes.Name

End Sub

После некоторого обходного пути, вот хороший способ использования класса GroupShapes:

Option Explicit

Sub FindOle()

 Dim shp As Shape
 Dim allShapes As GroupShapes
 Dim cnt As Long

 With ActiveDocument.Shapes
 .AddShape(msoShapeIsoscelesTriangle, 10, 10, 100, 100).Name = "shp1"
 .AddShape(msoShapeIsoscelesTriangle, 150, 10, 100, 100).Name = "shp2"
 .AddShape(msoShapeIsoscelesTriangle, 300, 10, 100, 100).Name = "shp3"

 'assign the shapes to a group
 With .Range(Array("shp1", "shp2", "shp3")).Group
 Set allShapes = .GroupItems
 End With

 'format the first and the third shape, prints the name of the shape:
 For cnt = 1 To allShapes.Count
 Debug.Print allShapes.Item(cnt).Name
 If cnt / 2 <> 1 Then
 allShapes.Item(cnt).Fill.PresetTextured msoTextureGreenMarble
 End If
 Next cnt

 'print the name of the shapes in a different way:
 For cnt = 1 To allShapes.Count
 Debug.Print .Range(Array("shp1", "shp2", "shp3"))(cnt).Name
 Next cnt

 End With

End Sub

На пустой документ Word он создает 3 формы, назначает их группе и получает к ним доступ через переменную allShapes или через .Range(Array()).

GroupShapes MSDN

licensed under cc by-sa 3.0 with attribution.