Выберите и отформатируйте вставленную статью в слове - PullRequest
0 голосов
/ 15 ноября 2018

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

Sub Macro1()

    Dim artic As Word.Range
    Set artic = Selection.Range
         'keep bold word bold and avoid paragraphs to cluster into one 
    artic.PasteAndFormat (wdFormatOriginalFormatting)
         'paste and select pasted article
    artic.Select
    artic.Font.Name = "Calibri"
    artic.Font.Size = 10.5
    artic.Font.Italic = False
    artic.ParagraphFormat.Alignment = wdAlignParagraphLeft

End Sub

1 Ответ

0 голосов
/ 15 ноября 2018

Если вы установите точку останова на artic.Font.Name = "Calibri", чтобы код останавливался после artic.Select, вы увидите, что метод Paste включает , а не , что вставлено.Как правило, artic будет в начале вставленного содержимого.

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

Следующий пример кода работал для меня в моих тестах.Он использует два Ranges: один для того, где контент будет вставлен, другой для конечной позиции после вставки.

(Ответ на запрос о дополнительных разъяснениях об объектной модели Word): Подумайте о Range объект, подобный выделению, с той разницей, что может быть много объектов Range, но только один объект Selection.При манипулировании Range часто помогает подумать об использовании клавиатуры для ее уменьшения или расширения.Нажатие клавиш со стрелками влево или вправо «свернет» выделение до точки вставки;удерживая Shift и нажимая эти клавиши, вы увеличите / уменьшите выделение;нажатие Shift при нажатии в другом месте документа также сделает это.Думайте об установке Range.Start или Range.End как эквивалент этого последнего.Начальная или конечная точка диапазона произвольно устанавливается в другое место в документе.

В случае, если первая If в коде ниже диапазона сокращается / сворачивается до своей начальной точки (нажмите клавишу со стрелкой влево), затем переместите один символ вправо (нажмите клавишу со стрелкой вправо).Это ставит его за пределы того места, куда будет вставлен новый материал, поэтому расширение точки вставки до начальной точки этого диапазона позволит подобрать все, что находится между ними.

Sub TestPasteAndSelect()
    Dim artic As Word.Range, rng As Word.Range
    Dim bNotAtEnd As Boolean

    Set artic = Selection.Range
    Set rng = artic.Duplicate
    rng.End = ActiveDocument.content.End
    If rng.Characters.Count > 1 Then
        'selection is not at end of document
        rng.Collapse wdCollapseStart
        rng.MoveStart wdCharacter, 1
        bNotAtEnd = True
    End If
         'keep bold word bold and avoid paragraphs to cluster into one
    artic.PasteAndFormat (wdFormatOriginalFormatting)
         'paste and select pasted article

    'artic.Select
    'rng.Select
    If bNotAtEnd Then
        artic.End = rng.Start
    Else
        Set artic = rng.Duplicate
    End If
    artic.Font.Name = "Calibri"
    artic.Font.Size = 10.5
    artic.Font.Italic = False
    artic.ParagraphFormat.Alignment = wdAlignParagraphLeft
End Sub
...