VBA Word - извлечение свойств объекта диапазона в тексте, содержащем метки ревизии - PullRequest
0 голосов
/ 11 декабря 2019

Текст

  • содержит строку скрытого текста

  • содержит метки ревизий, а удаленные ревизии форматируются как скрытые.

т.е. удаленный (скрытый) текст видимый текст

видимый текст был выбран (не зная, что ему предшествует скрытый текст) и выделение копируется в диапазон.

Dim R_Visible as range
set R_Visible = selection.range

Если я хочу определить какое-либо свойство, например стиль символа, VBA вызовет свойство стиля всей строки "удаленный (скрытый) текст видимый текст", а не только" видимый текст". Таким образом, если стиль символа удаленной части отличается от стиля символа видимой части, VBA вернет значение selection.ParagraphFormat.style.

Чтобы сделать вещи более сложными, я хочу извлечь стиль символа изтолько 1-й символ выделенного текста. Вот некоторые возможные подходы и их результаты:

a) Print R_Visible.characters(1).CharacterStyle ==> Ошибка времени выполнения 91

b) Print R_Visible.characters(1).Style ==> Стиль абзаца

КакОбходной путь Я написал следующую функцию:

Function ExactRange(Optional R_Range) As Range

Dim R_Selected As Range 

If IsMissing(R_Range) Then
    Set ExactRange = Selection.Range
Else
    'set ExactRange = R_Range.duplicate '(I haven't tested thoroughly whether that works under all circumstances)
    Set R_Selected = Selection.Range
    R_Range.Select
    Set ExactRange = Selection.Range
    R_Selected.Select 're-establishing the original selection-object 
End If

    ExactRange.SetRange Start:=ExactRange.Characters(1).End - 1, _ 
                          End:=ExactRange.Characters(Len(ExactRange)).End
End Function

, которая дает еще несколько результатов:

c) print Mtf_ExactRange(R_Visible).style ==> стиль символов

d) print MTF_ExactRange(R_Visible).Characters(1).Style ==> стиль абзаца

e) print MTF_ExactRange(R_Visible.characters(1)).Style == стиль символа

Мне кажется, что поведение довольно странное. Может ли кто-нибудь объяснить мне, что здесь происходит, и, возможно, указать на предполагаемый VBA-метод для выявления стиля символа в данных обстоятельствах без необходимости использования обходной функции?

1 Ответ

1 голос
/ 12 декабря 2019

Selection.Style вернет только один стиль, даже если было применено более одного стиля. Выбор может иметь до 4 стилей.

Чтобы найти стиль символов выделенного текста, используйте:

Selection.Range.CharacterStyle

Чтобы получить стиль абзаца:

Selection.Range.ParagraphStyle

Чтобы получить стиль таблицы:

Selection.Range.TableStyle

Чтобы получить стиль списка (маркеры или нумерация):

Selection.Range.ListStyle
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...