Редактирование позиции привязки в заголовке Microsoft Word с использованием vba - PullRequest
0 голосов
/ 17 мая 2018

Я работаю над макросом VBA, который сам написал только для него, для MS-Word, который изменяет ориентацию страницы, а затем копирует верхний и нижний колонтитулы предыдущих страниц на новую страницу и некоторые другие вещи:

Selection.PageSetup.Orientation = wdOrientLandscape
ActiveDocument.Sections.Last.PageSetup.DifferentFirstPageHeaderFooter = False

ActiveDocument.Sections(ActiveDocument.Sections.Last.index - 1).Headers(wdHeaderFooterPrimary).Range.Select
Selection.Copy

ActiveDocument.Sections.Last.Headers(wdHeaderFooterPrimary).Range.Select
Selection.Paste

ActiveDocument.Sections.Last.Headers(wdHeaderFooterPrimary).LinkToPrevious = False
ActiveDocument.Sections.Last.Footers(wdHeaderFooterPrimary).LinkToPrevious = False

formatHeader wdHeaderFooterPrimary
formatHeader wdHeaderFooterFirstPage

В TextBox есть текст, привязанный к заголовку.Теперь я хочу изменить его положение на страницах с альбомной ориентацией.

Как изменить параметры макета (см. Изображения ниже)?Я не смог найти никакой информации.

Вот так выглядит мой документ после изменения ориентации страницы на «Пейзаж»:

КакВы видите, абзац сбоку, в TextBox не посередине.поэтому я хочу переместить это немного выше.Вы также можете увидеть якорь на этом изображении.

Вот как я это сделал в Word как пользователь:

enter image description here enter image description here

1 Ответ

0 голосов
/ 24 мая 2018

Ключ должен установить, откуда следует брать измерение (RelativeHorizontalPosition), а затем использовать настройку Shape Left.Относительно всего, кроме wdCharacter, горизонтальная позиция будет статичной на странице при редактировании текста;по вертикали wdLine и wdParagraph будет эквивалентно использованию «Переместить с текстом».

Я несколько упростил код, который вы опубликовали, объявив и используя объекты для последнего раздела и формы.

Вместо копирования и вставки этот код использует Range.FormattedText для копирования-переноса содержимого из одного заголовка в другой.Это предпочтительнее использования буфера обмена в тех ситуациях, когда он работает (между любыми двумя диапазонами слов).

Dim secLast as Word.Section
Dim shp as Word.Shape

Set secLast = ActiveDocument.Sections.Last
secLast.PageSetup.Orientation = wdOrientLandscape
secLast.PageSetup.DifferentFirstPageHeaderFooter = False
secLast.Headers(wdHeaderFooterPrimary).Range.FormattedText = _
  ActiveDocument.Sections(secLast.index - 1).Headers(wdHeaderFooterPrimary).Range.FormattedText

secLast.Headers(wdHeaderFooterPrimary).LinkToPrevious = False
secLast.Footers(wdHeaderFooterPrimary).LinkToPrevious = False

formatHeader wdHeaderFooterPrimary
formatHeader wdHeaderFooterFirstPage

Set shp = secLast.Range.Shapes(1)
shp.RelativeHorizontalPosition = wdRelativeHorizontalPositionPage 
shp.Left = 33 ' Or you can use, for example CentimetersToPoints(1.4)
shp.RelativeVerticalPosition = wdRelativeVerticalPositionPage
shp.Top = CentimetersToPoints(14)
...