Если вы установите точку останова на 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