Shapes and InlineShape

Программирование на Visual Basic for Applications
snic
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 20.10.2004 (Ср) 3:22
Откуда: Saratov

Shapes and InlineShape

Сообщение snic » 20.10.2004 (Ср) 3:44

Необходимо получить ширину и высоту всех графических объектов в документе. Если это делать просто перебирая их попорядку методом GoToNext, то пропускаются изображения в настройках положения которых стоит не "В тексте". Как быть? Может есть что-нибудь лучше чем просто перебор объектов?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 20.10.2004 (Ср) 10:21

Сам на свой вопрос ответил, причём названием темы :)

for each s in shapes...
for each s in inlineshapes...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

snic
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 20.10.2004 (Ср) 3:22
Откуда: Saratov

Сообщение snic » 20.10.2004 (Ср) 12:51

так в том то и дело что не могу я получить размеры ВСЕХ графических объектов. Те у которых положение стоит "перед текстом" и т.п. пропускаются. Как мне получить их размеры? :(

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 20.10.2004 (Ср) 13:17

Ещё раз читай мой пост...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

snic
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 20.10.2004 (Ср) 3:22
Откуда: Saratov

Сообщение snic » 22.10.2004 (Пт) 8:39

ладно, ставлю вопрос по другому. все графические объекты в документе объединяются в коллекцию, вопрос: как получить доступ к этой коллекции и к содержащимся в ней объектам, и нужно ли самому создавать эту коллекцию или она создается автоматически при наличии в документе графики? А по поводу перебора объктов, если не сложно приведи полный код программки которая получала бы их размеры (просто может я чегото не допонимаю, а глядя на полный код разберусь).

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 22.10.2004 (Пт) 9:12

Код: Выделить всё
dim s as shape, si as inlineshape

for each s in activedocument.shapes
  debug.? s.width, s.heigth
next

for each si in activedocument.inlineshapes
  debug.? si.width, si.heigth
next
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

snic
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 20.10.2004 (Ср) 3:22
Откуда: Saratov

Сообщение snic » 22.10.2004 (Пт) 20:54

Спасибо, всетаки я смог сам разобраться. Вот как я сделал (писал в VB.Net)
Dim Sp As Word.Shape
Dim ILSp As Word.InlineShape
Dim SizeShapes As Double
Dim SizeTxt As Double
Dim PrintLists As Double

'Анализ документа
Wrd = New Word.Application
With Wrd
Doc = .Documents.Open(FileName, False, True, , , , , , , , , , , , True)
'Размер текста в п.л.
SizeTxt = CDbl(Doc.ComputeStatistics(Word.WdStatistic.wdStatisticCharactersWithSpaces) / 40000)
'Считаем площадь Shapes
For Each Sp In Doc.Shapes
SizeShapes = SizeShapes + CDbl(.PointsToMillimeters(Sp.Width) * .PointsToMillimeters(Sp.Height)) / 300000
Next Sp
'Считаем площадь InLineShapes
For Each ILSp In Doc.InlineShapes
SizeShapes = SizeShapes + CDbl(.PointsToMillimeters(ILSp.Width) * .PointsToMillimeters(ILSp.Height)) / 300000
Next ILSp
End With
PrintLists = (Doc.ComputeStatistics(Word.WdStatistic.wdStatisticPages) - 2) / 16
Doc.Close(Nothing)
Wrd.Quit()

Спасибо за помощь!!!


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 98

    TopList