Найти строку в слове и выделение жирным шрифтом - PullRequest
0 голосов
/ 08 ноября 2018

КОНТЕКСТ

У меня есть документ Word, который я хотел бы проверить, чтобы убедиться, что он соответствует стандартизированному формату. Документ заполнен пунктами в 1 строку. Я хочу проанализировать каждую строку и проверить каждое слово, которое соответствует слову «Тестирование», чтобы убедиться, что оно выделено жирным шрифтом.

ПРОБЛЕМА

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

ТЕКУЩИЙ КОД

Sub checkWords()

Dim singleLine As Paragraph      'bullet point document so just went by each paragraph
Dim lineText As String
Dim pos As Integer

  For Each singleLine In ActiveDocument.Paragraphs
    pos = InStr(singleLine, "Testing")

    If pos <> 0 Then
        MsgBox ("Testing InStr")
    End If


'PSEUDOCODE
'If singleLine.Range.Font.Bold <> True Then
'   Do This
'End If

Next singleLine

End Sub

Ответы [ 3 ]

0 голосов
/ 09 ноября 2018

Попробуйте этот код:

Sub checkWords()
   Dim singleLine As Paragraph
   Dim rng As Range
   Dim pos As Integer

   For Each singleLine In ActiveDocument.Paragraphs
      Set rng = singleLine.Range
      pos = InStr(1, rng.Text, "Testing")

      If pos <> 0 Then
         rng.Start = pos
         rng.End = pos + Len("Testing")

         If rng.Font.Bold Then
            MsgBox "This is bold"
         End If
      End If
   Next
End Sub
0 голосов
/ 09 ноября 2018

В исходном вопросе говорилось, что вы хотите "проанализировать каждую строку и проверить каждое слово, которое соответствует слову" Тестирование ", чтобы убедиться, что оно выделено жирным шрифтом". Это не означает, что необходимо принимать какие-либо решения. Предоставление пользователю возможности выбора является более сложным:

Sub Demo()
With ActiveDocument.Range
  With .Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = "Testing"
    .Replacement.Text = ""
    .Forward = True
    .Format = False
    .Wrap = wdFindStop
    .MatchWildcards = True
    .Execute
  End With
  Do While .Find.Found
    .Select
    Select Case MsgBox("Bold this instance?", vbYesNoCancel)
      Case vbCancel: Exit Sub
      Case vbNo: .Font.Bold = False
      Case vbYes: .Font.Bold = True
    End Select
    .Collapse wdCollapseEnd
    .Find.Execute
  Loop
End With
End Sub

Вышеизложенное позволяет выделять жирным шрифтом содержимое. Для обработки только не выделенного жирным шрифтом содержимого вы можете использовать:

Sub Demo()
With ActiveDocument.Range
  With .Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = "Testing"
    .Replacement.Text = ""
    .Forward = True
    .Format = True
    .Font.Bold = False
    .Wrap = wdFindStop
    .MatchWildcards = True
    .Execute
  End With
  Do While .Find.Found
    .Select
    Select Case MsgBox("Bold this instance?", vbYesNoCancel)
      Case vbCancel: Exit Sub
      Case vbYes: .Font.Bold = True
    End Select
    .Collapse wdCollapseEnd
    .Find.Execute
  Loop
End With
End Sub
0 голосов
/ 09 ноября 2018

Вы делаете это намного сложнее, чем нужно; простое Find / Replace сделало бы работу, как и макрос Find / Replace:

Sub Demo()
Application.ScreenUpdating = False
With ActiveDocument.Range
  With .Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Replacement.Font.Bold = True
    .Text = "Testing"
    .Replacement.Text = "^&"
    .Forward = True
    .Format = True
    .Wrap = wdFindContinue
    .MatchWildcards = True
    .Execute Replace:=wdReplaceAll
  End With
End With
Application.ScreenUpdating = True
End Sub
...