【问题标题】:How to remove paragraph marks with different format in MS-Word如何在 MS-Word 中删除不同格式的段落标记
【发布时间】:2019-06-24 22:19:26
【问题描述】:

我有一些由段落标记分隔的行,但实际上它们属于同一段落。

问题是文本是 Arial 15 斜体,但有些单词不是斜体(显示为红色),段落标记是 Arial 15 斜体,而不是斜体,甚至 Calibri 11。这意味着,并非所有段落标记都有相同的格式。

我想用空格“”替换段落标记,以便仅在单个段落中加入 Arial、15 斜体的连续行组 即使它们没有斜体。

到目前为止我尝试过:

查找内容:^p(格式:Arial 15,斜体) 替换为:“”

但是这样做只会找到以绿色显示的段落标记。

在输入格式的图像和我想要作为输出的图像下方。另外我附上了一个示例文件Sample.docx

感谢您的帮助

【问题讨论】:

    标签: vba ms-word


    【解决方案1】:

    试试

    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
    

    示例文件的结果:

    【讨论】:

    • 嗨,艾哈迈德,感谢您的帮助。您的解决方案几乎输出了我正在寻找的输出。它为 Header 1 和 Header 2 之间的第一组行生成正确的输出(那些是斜体),但正在从 Header 2 下面的行中删除段落标记(那些不是斜体)。我只想从 Arial 15 和斜体的行组中删除 Para 标记,如果斜体组中间的某些单词不是斜体(就像我用红色显示的那样),那么不要更改它们的格式.我希望有意义。
    • 我的理解(可能是错误的)然后希望用And 替换PrvChrItalicNextChrItalic 之前的Or 会做。请反馈,然后只有我会编辑答案。
    • 艾哈迈德,它似乎在您所说的示例文件中工作,将“或”更改为“和”。我了解您的代码逐字符分析,因为在我的真实文件中卡住了近 10 分钟,我不得不停止它。该文件大约 2.2 MB,有 2.1K 页、871K 字、4.6M 字符(包括空格)。所以,我不知道它是否卡住了,或者是否需要超过 10 分钟才能完成呵呵
    • @Ger Cas 希望您已经通过拆分文档完成了任务。抱歉迟到了,但请提出一些可行的解决方案。请检查链接到代码审查的解决方案。
    • 如果您有多个不同字体大小的文件等。可以在tm=Timer 之前添加此代码。添加Dim FntName As String, FntSize As Integer, FntItalic As Boolean With Selection.Font FntName = .Name FntSize = .Size FntItalic = .Italic End With If MsgBox(FntName &amp; vbCrLf &amp; FntSize &amp; vbCrLf &amp; FntItalic &amp; vbCrLf, vbYesNo) = vbNo Then Exit Sub 并在条件语句中使用这些变量。在所需段落中至少选择一个字母并运行代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-24
    相关资源
    最近更新 更多