Как сделать последние два слова каждой сноски жирным, используя Word VBA? - PullRequest
2 голосов
/ 10 июля 2019

Я изменил комментарии к воздушным шарам на сноски, тоже взяв имя автора. Мне нужно, чтобы имя автора было выделено жирным шрифтом, но я не могу получить код для чтения сносок. Моя проблема в настройке: oFootnote

Я пытался вызвать strAuthor и выделить его жирным шрифтом, но, поскольку он больше не является комментарием. Автор, я больше не могу установить его, так как он теперь находится в сноске. Я пробовал много примеров в Интернете, но я просто не могу заставить их работать: StackOverflow's Как сделать строку жирным шрифтом; Вставьте жирный текст в Word, используя VBA также

 Set oFootnote = oDoc.Footnotes.Add(Range:=Selection.Range, Text:="Some text") 

Я стажер, поэтому, пожалуйста, не судите меня слишком строго

'Convert comments to footnotes with Author name in bold
Dim i As Long
Dim oDoc As Document
dim oComment as Comments
Dim oFootnote As Footnotes

'Document is the ActiveDocument
Set oDoc = Application.ActiveDocument

'the author's name needs to be bold (the last two words in each footnote)
Set oFootnote = oDoc.Footnotes

    With oFootnote
      Selection.Range.Words.Last.Words (2)
        'Make the last two words bold'
        With Selection.Find
        .Text = ""
        .Replacement.Text = ""
        .Font.bold = True
        End With
    End With
    Selection.Find.Execute
    'Set oFootnote = Nothing
  Next

Я пытался

 Set oFootnote = oDoc.Footnotes Range:=Selection.Words.Last.Words(2) 

но ему не нравится "Range: = onwards", поэтому я сделал

 Selection.Range.Words.Last.Words (2)                invalid use of a property

Ответы [ 2 ]

1 голос
/ 10 июля 2019

Обычно существует несколько способов достижения чего-то подобного, но ключ, как правило, заключается в работе с выделенным Range объектом.

В приведенном ниже коде, который основан на коде в вопросе, объект Range назначается каждому отдельному объекту Footnote в цикле Footnotes. Затем он сворачивается до конечной точки, и начало расширяется назад на два слова. (Чтобы лучше понять, как это работает, подумайте о том, чтобы выбрать сноску, нажав стрелку вправо, а затем дважды нажав Ctrl + Shift + стрелка влево, чтобы выбрать два последних слова.)

Dim oDoc As Document
Dim oFootnotes As Footnotes
Dim Ftnote As Footnote
Dim rngFootnote As Word.Range

'Document is the ActiveDocument
Set oDoc = Application.ActiveDocument

'the author's name needs to be bold (the last two words in each footnote)
Set oFootnotes = oDoc.Footnotes
For Each Ftnote In oFootnotes
    Set rngFootnote = Ftnote.Range
    rngFootnote.Collapse wdCollapseEnd
    rngFootnote.MoveStart wdWord, -2
    rngFootnote.Font.Bold = True
Next

Обратите внимание, что причина одной из ошибок в вопросе заключается в том, что Words.Last возвращает объект Range, содержащий последнее слово. Поскольку он содержит только одно слово - последнее - Words(2) не может найти ничего, с чем он может работать.

Причина другой ошибки в том, что невозможно присвоить Range объекту Footnote или Footnotes. Это разные вещи, совершенно ...

0 голосов
/ 10 июля 2019

Не очень знаком с объектами слов, но попробуйте это.Работал на пару моих тестов.

В основном он проходит через все ноты.И использует индекс слова, чтобы установить для свойства bold этого слова значение true.

Sub Test()

    Dim oFootNote As Footnote
    Dim oLastIndex As Long

    For Each oFootNote In ActiveDocument.Footnotes

        oLastIndex = oFootNote.Range.Words.Count

        If oLastIndex > 2 Then
            oFootNote.Range.Words(oLastIndex).Bold = True
            oFootNote.Range.Words(oLastIndex - 1).Bold = True
        End If
    Next

End Sub
...