Как выделить определенную строку c в предложении? - PullRequest
0 голосов
/ 13 апреля 2020

Я хотел бы выделить первую строку: myArray (c, 3), но я не знаю, как это сделать. Это не должно быть сложно?

    For c = UBound(myArray) - LBound(myArray) + 1 To 1 Step -1
        ActiveDocument.Bookmarks("xxx").Range.InsertAfter myArray(c, 3) & myArray(c, 6)
        If c <> 1 Then ActiveDocument.Bookmarks("xxx").Range.InsertAfter vbNewLine
    Next c

Я пробовал различные варианты с Range.Characters (). Bold = True, но, кажется, я могу использовать только это обозначение символов (5), а не символы (2, 5) несмотря на то, что я видел онлайн. Другими словами, мне придется l oop для каждого символа, если я хочу, чтобы они были выделены жирным шрифтом.

Есть ли простой способ сделать это? Или что-то более эффективное?

Ответы [ 2 ]

2 голосов
/ 13 апреля 2020

Ключевой момент, на который следует обратить внимание, это

Кроме того, если диапазон является закладкой, 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
0 голосов
/ 13 апреля 2020

Благодаря «freeflow» я смог найти способ заставить его работать.

 For c = UBound(myChemicalArray) - LBound(myChemicalArray) + 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.MoveStart unit:=wdCharacter, Count:=7 ' For the key word used as Bookmark
        myRange.Font.Bold = True
        myRange.MoveStart unit:=wdCharacter, Count:=Len(myArray(c, 3))
        myRange.Font.Bold = False
        If c <> 1 Then myRange.InsertAfter vbNewLine
Next c
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...