Учитывая объект Range в VBA для MS Word, мне нужно найти, где он будет напечатан на бумаге.

Контекст

У меня есть около 40 связанных словарных шаблонов для писем. Они должны быть распечатаны и отправлены автоматически, поэтому адресная информация для всех шаблонов должна быть на одном месте на бумаге. Адреса вставляются в объекты Field посредством слияния.

Чтобы узнать, какие из них мне нужно исправить, я написал

Sub screen_fields()
    Dim Fld As Field
    For Each Fld In ActiveDocument.Fields
        Debug.Print Fld.Result.Start, Fld.Result.Font.Name, Fld.Result.Font.Size, Fld.Code
    Next
End Sub

Но начальная позиция представляется в символах, а не в сантиметрах, точках или дюймах.

Есть ли свойство объекта Range или функция, которая может сказать мне, где он будет напечатан?

Поскольку в документах интенсивно используются таблицы, поиск положения ячейки в таблице будет частичным решением.

0
Dirk Horsten 23 Апр 2020 в 11:37

2 ответа

Лучший ответ

Прямой ответ на ваш вопрос - использовать свойство Information объекта Range.

.Range.Information(wdVerticalPositionRelativeToPage)

Однако, как указал макропод в своем ответе, ваша проблема может быть решена путем редактирования шаблона. Вы должны убедиться, что если есть какие-либо поля слияния над адресом, они не смогут развернуться, чтобы сдвинуть адрес вниз. Это не то, что вы можете обнаружить с помощью одного только кода.

1
Timothy Rylatt 23 Апр 2020 в 10:39

Тестирование длины полей перед выполнением слияния не очень полезно, поскольку поля слияния обычно не отражают длину данных, которые они выводят. После слияния нет поля для тестирования.

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

Код не требуется.

0
macropod 23 Апр 2020 в 09:15