Рисунки ищем перебором. Если речь идёт о InlineShape, то
Dim oInlShp as InlineShape
For Each oInlShp in ActiveDocument.InlineShapes
Next oInlShp
Но их двигать не получится. Они являются частью .Range документа. Можно взять их начало и конец для выделения, а также использовать метод .ConvertToShape для двиганья всего, что не двигается.
iStart = oInlShp.Range.Start
iEnd = oInlShp.Range.End
oDoc.Range(iStart, iEnd).Select
Selection.Range.InlineShapes(1).ConvertToShape
Для Shapes то же самое с перебором только
Dim oShp as Shape
For Each oShp in ActiveDocument.Shapes
Next oShp
У них используются свойства Left и Top до левого верхнего угла поля ввода
oShape.Select
iPosL = oShape.left
iPosTop = oShape.top
Вот и двигайте, сколько надо, указывая эти позиции.
Последняя страница определяется так: Смотрим для документа, сравниваем с объектом:
Set oDoc = ActiveDocument
iLast = oDoc.Content.Information(wdActiveEndAdjustedPageNumber)
oShape.Select
If Selection.Information(wdActiveEndAdjustedPageNumber) = iLast Then
'Двигаем объект
End if
Во всяком случае я вижу это так.
Ах да, относительно чего они будут перемещаться регулируется свойством .RelativeHorizontalPosition и .RelativeVerticalPosition этих самых Shapes. Есть на майрософте табличка этих констант. А за положение относительно текста отвечает свойсто .WrapFormat.Type = . Также есть ZOrderPosition для смещения относительно других шейпов. По факту всё есть банально в объектной модели Shape на майкрософте.
Разработка VBA макросы Excel, Word на
заказ.
Сказать спасибо на
Юмани