Ключевой момент, на который следует обратить внимание, это
Кроме того, если диапазон является закладкой, Word вставляет указанный текст, но не расширяет диапазон или закладку для включения нового текста.
С
Справка по InsertAfter
Следовательно, следующий код будет, вероятно, делать то, что вы хотите.
Public Sub testfmt()
For c = UBound(myArray) - LBound(myArray) + 1 To 1 Step -1
Dim myRange As Word.Range
Set myRange = ActiveDocument.Bookmarks("xxx").Range
myRange.InsertAfter myArray(c, 3) & myArray(c, 6)
myRange.Collapse Direction:=wdCollapseEnd
myRange.MoveEnd unit:=wdCharacter, Count:=len(myArray(c, 3))
myRange.Font.Bold = True
If c <> 1 Then ActiveDocument.Bookmarks("xxx").Range.InsertAfter vbNewLine
Next c
End Sub
Обновление: после публикации JLuc01 я посмотрел, используя .select, чтобы проверить, где выбор был после вставки после.
Если я сделаю
ActiveDocument.Bookmarks("xxx").Range.InsertAfter "Hello" & "World"
Код работает как ожидалось
Но в случае
Dim myRange As Word.Range
Set myRange = ActiveDocument.Bookmarks("xxx").Range
VBA больше не видит myRange как диапазон закладок, и, следовательно, диапазон после вставки включает в себя закладку и вставленный текст.
Следовательно код должен быть изменен на
Public Sub testfmt()
For c = UBound(myArray) - LBound(myArray) + 1 To 1 Step -1
Dim myRange As Word.Range
Set myRange = ActiveDocument.Bookmarks("xxx").Range
myRange.InsertAfter myArray(c, 3) & myArray(c, 6)
myRange.Collapse Direction:=wdCollapseEnd
myRange.Move unit:=wdCharacter, Count:=-Len(myArray(c, 3) & myArray(c, 6))
myRange.MoveEnd unit:=wdCharacter, Count:=Len(myArray(c, 3))
myRange.Font.Bold = True
If c <> 1 Then ActiveDocument.Bookmarks("xxx").Range.InsertAfter vbNewLine
Next c
End Sub