VBA шрифт и жирный текст? - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь сделать так, чтобы «количество вхождений» было написано красным или жирным красным цветом.Может кто-нибудь, пожалуйста, укажите мне в правильном направлении.Я новичок в кодировании.Это счетчик слов, и когда найдено 2+ слова ... он отображает количество слов, найденных внизу слова документа.

Sub a3()

Dim Word As String
Dim wcount As Integer

Word = InputBox("Search for a word")
If (Word <= "") Then
    MsgBox ("Did not enter word")
End If

If (Word > "") Then
    wcount = 0
    With Selection
            .HomeKey Unit:=wdStory
            With ActiveDocument.Content.Find
                .Text = Word
                Do While .Execute
                    wcount = wcount + 1
                    Selection.MoveRight
                Loop
            End With
            MsgBox ("The word: '" & Word & "' shows up " & wcount & " times in the document")
        End With
    End If

If (wcount <= 2) Then
  ActiveDocument.Content.InsertAfter Text:=(vbCrLf & "Number occurrences: " & wcount)
  Selection.Font.ColorIndex = wdRed

ElseIf (wcount <= 3) Then
    ActiveDocument.Content.InsertAfter Text:=(vbCrLf & "Number occurrences: " & wcount)
    Selection.Font.ColorIndex = wdRed
    Selection.Font.Bold = True

Else
    ActiveDocument.Content.InsertAfter Text:=(vbCrLf & "Number occurrences: " & wcount)
    Selection.Font.ColorIndex = wdBlack
    Selection.Font.Bold = False

End If

    End Sub

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Есть много способов сделать это, некоторые из них основаны на предпочтении диапазонов или выборов, а также на структуре оператора Find.Вот мои предпочтения.

Sub a3()
    Dim wrd As String
    Dim wcount As Integer
    Dim rng As Word.Range
    wrd = InputBox("Search for a word")
    If wrd = vbNullString Then
        MsgBox ("Did not enter word")
        Exit Sub
    End If
    Set rng = ActiveDocument.Content
    wcount = 0
    With rng.Find
        .ClearFormatting
        .Format = False
        .Forward = True
        .MatchWholeWord = True
        .Text = wrd
        .Wrap = wdFindStop
        .Execute
        Do While .found
            wcount = wcount + 1
            rng.Collapse Word.WdCollapseDirection.wdCollapseEnd
            .Execute
        Loop
    End With
    MsgBox ("The word: " & "" & wrd & "" & " shows up " & wcount & " times in the document")

    ActiveDocument.Content.InsertParagraphAfter
    Set rng = ActiveDocument.Content
    rng.Collapse Word.WdCollapseDirection.wdCollapseEnd
    rng.Text = "Number occurrences: " & wcount
    If wcount < 3 Then
        rng.Font.ColorIndex = wdRed
    ElseIf wcount < 4 Then
        rng.Font.ColorIndex = wdRed
        rng.Font.Bold = True
    Else
        rng.Font.ColorIndex = wdAuto
        rng.Font.Bold = False
    End If
End Sub
0 голосов
/ 05 декабря 2018

Работа с объектами Word Range поможет в этом.Думайте о Range как о невидимом выделении, за исключением того, что код может работать с несколькими Range объектами, тогда как может быть только один Selection.

Назначьте содержимое документа для Range, затем выполните Find и расширение для него.Затем форматирование также можно применить к Range.Я изменил (но не проверял) код в вопросе для демонстрации.

В последней части, где текст пишется в конце документа, объект Range устанавливается на весь документ, а затем рухнул (думать об этом, как нажатие клавиши со стрелкой вправо с выбором).Затем новый текст назначается диапазону и применяемому форматированию.Поскольку диапазон будет содержать только новый текст, форматирование применяется только к этому.

(Дополнительные примечания. Я изменил имя переменной Word на sWord, поскольку слово «Word» может быть неправильно понято.чтобы означать приложение Word. Я также изменил сравнение, чтобы проверить, содержит ли sWord что-то на Len(sWord) > 0, потому что сравнение "больше, чем" "не гарантируется.)

Sub a3()

Dim sWord As String
Dim wcount As Integer
Dim rng as Word.Range

Set rng = ActiveDocument.Content
sWord = InputBox("Search for a word")
If (sWord <= "") Then
    MsgBox ("Did not enter word")
End If

If (Len(sWord) > 0) Then
    wcount = 0
    With Selection
            .HomeKey Unit:=wdStory
            With rng.Find
                .Text = sWord
                Do While .Execute
                    wcount = wcount + 1
                    rng.Collapse wdCollapseEnd
                Loop
            End With
            MsgBox ("The word: '" & sWord & "' shows up " & wcount & " times in the document")
        End With
    End If

Set rng = ActiveDocument.Content
rng.Collapse wdCollapseEnd
If (wcount <= 2) Then
  rng.Text = (vbCrLf & "Number occurrences: " & wcount)
  rng.Font.ColorIndex = wdRed

ElseIf (wcount <= 3) Then
    rng.Text = (vbCrLf & "Number occurrences: " & wcount)
    rng.Font.ColorIndex = wdRed
    rng.Font.Bold = True
Else
    rng.Text = (vbCrLf & "Number occurrences: " & wcount)
    rng.Font.ColorIndex = wdBlack
    rng.Font.Bold = False
End If

    End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...