Как убрать метки абзаца в другом формате в MS-Word - PullRequest
2 голосов
/ 25 июня 2019

У меня есть несколько строк, которые разделены знаками абзаца, но на самом деле они принадлежат одному и тому же абзацу.

Проблема в том, что текст написан курсивом Arial 15, но некоторые слова не выделены курсивом (показано накрасный), а метки абзаца обозначены курсивом Arial 15, а не курсивом и даже калибром 11. Это означает, что не все метки абзаца имеют одинаковый формат.

Я хочу заменить метки абзаца пробелом "", чтобыобъединить строки в один абзац только для тех групп непрерывных строк, которые являются Arial, 15 курсивом, даже если в них нет курсива.

Я пробовал до сих пор:

Найти что:^ p (с форматом: Arial 15, курсив) Заменить на: ""

Но при этом можно найти только метку абзаца, показанную зеленым.

Ниже изображения формата ввода и того, что я 'Я пытаюсь получить как выходной.Дополнительно прилагаю файл образца Sample.docx .

Sample Image Спасибо за любую помощь

1 Ответ

2 голосов
/ 25 июня 2019

Попробуйте

Option Explicit
Sub ReplacePara()
Dim Para As Paragraph, Xstr As String, Rng As Range
Dim i As Long, ln As Long
Dim PrvChrSize As Integer, NextChrSize  As Integer
Dim PrvChrFont As String, NextChrFont  As String
Dim PrvChrItalic As Boolean, NextChrItalic As Boolean

    With ActiveDocument
    For i = .Paragraphs.Count To 1 Step -1
    Set Para = .Paragraphs(i)
    ln = Para.Range.Characters.Count

        If ln > 1 Then
            With Para.Range.Characters(ln - 1).Font
            PrvChrSize = .Size
            PrvChrFont = .Name
            PrvChrItalic = .Italic
            End With

            If i < .Paragraphs.Count Then
                With .Paragraphs(i + 1).Range.Characters(1).Font
                NextChrSize = .Size
                NextChrFont = .Name
                NextChrItalic = .Italic
                End With
            Else
            NextChrSize = 0
            NextChrFont = ""
            NextChrItalic = False
            End If
        End If

        Debug.Print i, PrvChrSize, PrvChrFont, NextChrSize, NextChrFont
        If (PrvChrSize = 15 And (PrvChrFont = "Arial" Or PrvChrItalic = True)) _
        And (NextChrSize = 15 And (NextChrFont = "Arial" Or NextChrItalic)) Then
        Para.Range.Characters(ln).Text = " "
        End If
    Next
  End With

End Sub

Результат из файла примера:

enter image description here

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