Как обнаружить нумерацию при простой замене строки vba - PullRequest
1 голос
/ 29 мая 2019

Я пытаюсь заменить нумерацию (Word 1., 2. и т. Д.). В простой строке и заменить поиск, но я не могу найти цифры.

Это для Word 365, и я использую там редактор VB.

Sub ayaya()
Documents.Open FileName:=ActiveDocument.Path + "\Doc1.docm"
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
    .Text = "SSS"
    .Replacement.Text = "PPP"
    .Forward = True
    .Wrap = wdFindContinue
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
End With
With Selection
    If .Find.Forward = True Then
        .Collapse Direction:=wdCollapseStart
    Else
        .Collapse Direction:=wdCollapseEnd
    End If
    .Find.Execute Replace:=wdReplaceAll
End With

End Sub

Мой документ Word выглядел так:

SSS
SSS
1.  SSS 

и повернулся к

PPP
PPP
1.  PPP

но когда я заменяю поиск на любой вариант

With Selection.Find
    .Text = "1. SSS"

Не находит текст.

Ответы [ 2 ]

3 голосов
/ 29 мая 2019

Вы не можете найти число, связанное с текстом абзаца, потому что это, скорее всего, ListLevelNumber, и они автоматически генерируются стилем ListFormat. Другими словами, они не являются частью физического текста, который можно найти с помощью поиска, по крайней мере так, как вы сейчас настроили его в своем коде.

Требуется отдельный Поиск, чтобы найти используемый стиль ListParagraph, а затем некоторый дополнительный код, который будет манипулировать ListLevelNumber, если вы пытаетесь это сделать.

Ниже приведен пример кода, который определяет значение ListLevelNumber для данного абзаца, а затем предпринимает некоторые действия в зависимости от уровня:

Sub IsSelectionListParagraph()
    Dim i As Integer
    If Selection.Range.ListParagraphs.Count > 0 Then
        For i = 1 To Selection.Range.ListParagraphs.Count
            Select Case Selection.Range.ListParagraphs(i).Range.ListFormat.ListLevelNumber
                Case Is = 1
                    Debug.Print Selection.Range.Text
                Case Is = 2
                    Debug.Print Selection.Range.Text
                Case Else
                    Debug.Print Selection.Range.Text
            End Select
        Next
    End If
End Sub
0 голосов
/ 29 мая 2019

Нумерация - это ListParagraphs Объект, который не может быть найден как обычный текст.

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