Поскольку Shape
объекты «плавают» на странице, их можно легко позиционировать. Они также могут быть легко (и случайно) перемещены. Shape
объекты также могут быть сложны для использования кода. Итак, полезное практическое правило, которое я использую: если работает InlineShape
, используйте его, а не Shape
.
Ниже представлены три возможности;два для InlineShapes и один для Shape.
* InlineShape
можно расположить по правому краю страницы, используя два разных метода (в зависимости от того, находится ли он один в абзаце).
- Выровнять по правому краю абзац, содержащий
InlineShape
. Это уместно, когда у абзаца нет другого содержания. Извлечение только кода из вопроса для обработки этого:
Dim SHP as InlineShape
Set SHP = Selection.InlineShapes.AddPicture(FileName:=FIRMADOC, _
LinkToFile:=False, SaveWithDocument:=True)
SHP.Range.ParagraphFormat.Alignment = wdAlignParagraphRight
Если у абзаца есть другое содержимое слева, то будет работать выравнивание по правому краю TAB с символом TAB, предшествующим
InlineShape
. A
Нижний колонтитул по умолчанию имеет две позиции табуляции: одна выровнена по центру, вторая выровнена по правому краю.
Для этого я собираюсь изменить весь код в вопроседля того, чтобы оптимизировать работу в нижнем колонтитуле. (Тот же подход применяется к заголовку BTW). Макро-рекордер создает код, который имитирует действия пользователя, поэтому он фактически открывает нижний колонтитул (или заголовок), используя такие вещи, как ActiveWindow
и Selection
. Это довольно сложно точно контролировать;работа с реальными объектами Word более надежна.
Думайте о Range
объекте как о невидимом выделении. Вся область нижнего колонтитула назначается диапазону (rng
). Поскольку в нижнем колонтитуле уже есть содержимое (текст «Company Inc»), необходимо «свернуть» Range
. (Думайте об этом, как о нажатии стрелки влево, чтобы новый контент не заменял выделение.)
Затем к нему добавляются два символа табуляции (rng.Text = vbTab & vbTab
) и добавляется подпись.
Sub Macro1()
Dim FIRMADOC as String
Dim SHP as InlineShape
Dim rng as Word.Range
FIRMADOC = "C:\Users\user\Pictures\1.png"
Set rng = ActiveDocument.Sections(1).Footers(wdHeaderFooterPrimary).Range
rng.Collapse wdCollapseStart
rng.Text = vbTab & vbTab 'position at second, right-aligned tab in the footer)
Set SHP = rng.InlineShapes.AddPicture(FileName:=FIRMADOC, LinkToFile:=False, SaveWithDocument:=True, Range:=rng)
With SHP
' MANTIENE EL RATIO
.LockAspectRatio = msoTrue
'AJUSTA A ANCHO 1 inch
.Width = InchesToPoints(1)
End With
End sub
Если необходимо использовать объект
Shape
, то требуется сочетание свойств
Left
и
RelativeHorizontalPosition
. Члены перечислений
wdShapePosition
и
WdRelativeHorizontalPosition
задают эти специальные настройки.
Обратите внимание, что может также потребоваться включить свойство Top
, чтобы получить правильную вертикальную позицию Shape
к тексту "Company, Inc".
Sub Macro1()
Dim FIRMADOC as String
Dim SHP as InlineShape
Dim rng as Word.Range
FIRMADOC = "C:\Users\user\Pictures\1.png"
Set rng = ActiveDocument.Sections(1).Footers(wdHeaderFooterPrimary).Range
rng.Collapse wdCollapseStart
Set SHP = rng.InlineShapes.AddPicture(FileName:=FIRMADOC, LinkToFile:=False, SaveWithDocument:=True, Range:=rng)
Set SHP = SHP.ConvertToShape
With SHP
' MANTIENE EL RATIO
.LockAspectRatio = msoTrue
'AJUSTA A ANCHO 1 inch
.Width = InchesToPoints(1)
.Left = wdShapeRight '-999996
.RelativeHorizontalPosition = wdRelativeHorizontalPositionMargin '0
End With
End sub