【VBA】在段落标题前后新增文字

发布时间 2023-06-24 17:46:03作者: nntzhc

要想将文章中所有的:

1.1.1.1    110kV#1主变
1.1.1.1.1    RPA_分隔

替换为

RPA_分隔
1.1
.1.1 110kV#1主变 RPA_分隔 RPA_节点内容 500kV广南巡维中心【RPA_节点】220kV谷围站【RPA_节点】主变区域【RPA_节点】#1主变间隔 一次 RPA_节点内容 1.1.1.1.1 #RPA_分隔

可以使用VBA来进行操作。

  1. 保存一份源文档的副本。VBA的修改是难以撤销的。也可以先复制一部分出来到新文档进行试验。
  2. 打开 Word 文档。

  3. 按下 "Alt" + "F11" 打开 Visual Basic for Applications (VBA) 编辑器。

  4. 在 VBA 编辑器中,点击"插入(Insert)",然后选择"模块(Module)"。

  5. 添加对 Microsoft VBScript Regular Expressions 的引用。在 VBA 编辑器中,选择 "工具" 菜单,然后选择 "引用"。在弹出的对话框中找到并勾选 "Microsoft VBScript Regular Expressions",点击 "确定"。(重要!没有这一步可能运行正则表达式会出错)
  6. 在新建的模块中粘贴以下宏代码:

Function GetTextWithoutNumberPrefix(paragraphText As String) As String
    Dim regex As Object
    Set regex = CreateObject("VBScript.RegExp")
    
    ' 定义匹配模式,匹配目录层级数字(一般为 1.、2.、3.)和空格
    regex.Pattern = "^\d+\.\s"
    
    ' 将匹配到的部分替换为空字符串
    GetTextWithoutNumberPrefix = regex.Replace(paragraphText, "")
End Function
Function GetTextWithoutNumberPrefix1(paragraphText As String) As String
    Dim regex As Object
    Set regex = CreateObject("VBScript.RegExp")
    
    ' 定义匹配模式,匹配目录层级数字(一般为 1.、2.、3.)和空格
    regex.Pattern = "^\d+\)\s"
    
    ' 将匹配到的部分替换为空字符串
    GetTextWithoutNumberPrefix1 = regex.Replace(paragraphText, "")
End Function

Sub AddTextAfterHeadings()
    Dim rng As Range
    
    Set rng = ActiveDocument.Content
    
    For Each para In rng.Paragraphs
        If para.Style = "操作票样式4" Then
            With para.Range
                ' 段落前
                
                
                para.Range.InsertBefore "RPA_分隔" & vbCr
                ' 获取新插入的段落行
                Dim newParagraphRange As Range
                Set newParagraphRange = para.Range.Previous
                ' 将新插入的段落行的格式设置为与目标段落相同
                newParagraphRange.Style = wdStyleNormal ' 设置新段落为正文格式
               
                
                ' 段落后
                para.Range.InsertAfter "RPA_节点内容" & vbCr
                ' 获取新插入的段落行
                Set newParagraphRange = para.Range.Next
                ' 将新插入的段落行的格式设置为与目标段落相同
                newParagraphRange.Style = wdStyleNormal ' 设置新段落为正文格式
                
                para.Range.InsertAfter "一次" & vbCr
                ' 获取新插入的段落行
                Set newParagraphRange = para.Range.Next
                ' 将新插入的段落行的格式设置为与目标段落相同
                newParagraphRange.Style = wdStyleNormal ' 设置新段落为正文格式
                
                para.Range.InsertAfter "500kV广南巡维中心【RPA_节点】220kV谷围站【RPA_节点】主变区域【RPA_节点】#1主变间隔" & vbCr
                ' 获取新插入的段落行
                Set newParagraphRange = para.Range.Next
                ' 将新插入的段落行的格式设置为与目标段落相同
                newParagraphRange.Style = wdStyleNormal ' 设置新段落为正文格式
                
                para.Range.InsertAfter "RPA_节点内容" & vbCr
                ' 获取新插入的段落行
                Set newParagraphRange = para.Range.Next
                ' 将新插入的段落行的格式设置为与目标段落相同
                newParagraphRange.Style = wdStyleNormal ' 设置新段落为正文格式
                
                para.Range.InsertAfter "RPA_分隔" & vbCr
                ' 获取新插入的段落行
                Set newParagraphRange = para.Range.Next
                ' 将新插入的段落行的格式设置为与目标段落相同
                newParagraphRange.Style = wdStyleNormal ' 设置新段落为正文格式
                                
            End With
        End If
        
        If para.Style = "操作票样式5" Then
            para.Range.InsertBefore "#"
        End If
    Next para
End Sub
  1. 关闭 VBA 编辑器。

  2. 运行宏:按下 "Alt" + "F8" 打开宏对话框,在列表中选择 "AddTextAfterHeadings" 宏,然后点击 "运行(Run)" 按钮。

RPA_分隔