Удалить метку абзаца с последней строки в маркированном списке с нумерацией, не разбивая последний маркер / номер - PullRequest
2 голосов
/ 22 мая 2019

У меня есть нумерованный список в Word, и после каждой записи есть знак абзаца.В конце после знака абзаца стоит кавычка .Я хочу удалить последний знак абзаца из нумерованного списка, чтобы поставить кавычку рядом с последней строкой нумерованного списка.Однако использование Find and Replace для "^p" & ChrW(8220) удаляет абзац, но также удаляет нумерацию для последней записи.

Мне удалось обойти эту проблему, выбрав кавычку, переместившись влево на один символ, а затем удалив один символ.Тем не менее, это противоречиво, и я не верю, что это будет надежным.

  Selection.Find.ClearFormatting
    With Selection.Find
        .Text = ChrW(8220)
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute
    Selection.MoveLeft Unit:=wdCharacter, Count:=1
    Selection.TypeBackspace

enter image description here

Есть ли другой способ поставить цитату рядом споследняя запись без разбивки нумерации?

Ответы [ 2 ]

1 голос
/ 23 мая 2019

Есть разные способы сделать это; в основном это вопрос личных предпочтений, какой подход используется. Вот два. Один использует поиск по шаблону с заменой; другой манипулирует объектами Range. Первое, вероятно, выполняется быстрее (хотя это не было бы заметно в этом контексте) и оставляет только один «след» в списке отмен Word.

Примечание: я предпочитаю работать с Range, а не Selection. Первый вариант можно сделать с помощью Selection; второй лучше с Range.

  1. Выполняет ли поиск по шаблону знак абзаца плюс кавычку Обратите внимание, что каждый термин находится в скобках: они позволяют работать с термином в Замене - в скобках определяется выражений .

Это позволяет изменить информацию как замену: кавычка предшествует метке абзаца - метка абзаца остается неизменной (маркеры не теряются).

Sub TestFindParaAndQuote()
    Dim rngFind As Word.Range

    Set rngFind = ActiveDocument.content
    rngFind.Find.ClearFormatting
    With rngFind.Find
        .Text = "(^13)(" & ChrW(8220) & ")"
        .Replacement.Text = "\2\1"
        .Forward = True
        .wrap = wdFindStop
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = True
        .MatchSoundsLike = False
        .MatchAllWordForms = False
        .Execute Replace:=wdReplaceOne
    End With

End Sub
  1. Если Find.Execute успешен, Range (или Selection) перемещается к найденному члену. Здесь, если bFound = True, то: 1) кавычка вставляется перед Range; 2) Range свернуто до конечной точки (после оригинальной цитаты); 3) затем продлен назад, чтобы включить эту цитату; 4) и весь Range удален. (Следующая строка, которая закомментирована, может быть включена, если также следует удалить абзац после оригинальной цитаты.)

Этот пример полезен для понимания того, как работать с Find, когда стандартный Find / Replace по какой-то причине не может выполнить работу.

Sub TestFindParaAndQuote()
    Dim rngFind As Word.Range
    Dim bFound As Boolean

    Set rngFind = ActiveDocument.content
    rngFind.Find.ClearFormatting
    With rngFind.Find
        .Text = "^p" & ChrW(8220)
        .Forward = True
        .wrap = wdFindStop
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
        bFound = .Execute
        If bFound Then
            rngFind.InsertBefore ChrW(8220)
            rngFind.Collapse wdCollapseEnd
            rngFind.MoveStart wdCharacter, -1
            'rngFind.MoveEnd wdCharacter, 1 'use this, too, if the paragraph mark should be removed
            'rngFind.Select                 'for testing purposes
            rngFind.Delete
        End If
    End With

End Sub
0 голосов
/ 22 мая 2019

Если вы удалите метку абзаца до закрывающей кавычки, последний абзац списка унаследует форматирование абзаца, следующего за ним.

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

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

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