Word文档空行类型和vba批量删除空行的方法

有一些word文档会存在大量空行,特别是一些从网路上下载的,或是其他软体转换而来的文档。需要批量删除这些空行以方便排版。

空行的类型

先来看看空行的类型。

1. 多余手动换行符产生的空行

如下图所示。可以使用查找替换功能,批量删除。

先执行:

查找:^l{1,}^13

替换:^p

勾选使用通配符,点击全部替换

再执行:

查找:^l{2,}

替换:^l

勾选使用通配符,点击全部替换

2. 多余段落标志产生的空行

如下图所示。可以使用查找替换功能,批量删除。

查找:^13{2,}

替换:^p

勾选使用通配符,点击全部替换

3. 表格间多余段落标志空行

如下图所示。若表格间只有一个空行,且混杂在一个大文档中,则难以使用查找替换功能,批量删除。

4. 表格单元格内多余段落标志空行

如下图所示,若单元格内第一段就是空行时,且该表格混杂在一个大文档中,则该空行难以用查找替换功能删除。另外,单元格至少都有一个段落标志,所以空单元格的段落标志无法删除。其他空行可以用查找替换功能删除。

5. 分节符空行

一个段落可以以段落标志结束,也可以以分节符结束。如下图所示,一个段落标志跟著一个分节符,其实这里算是两个空行。这种空行很可能是不应该被删除的。

vba批量删除文档空行的方法

代码1:

代码来源于书本《WORD排版之道》(宋翔 著)283页。

以段落为基本单元,判断段落字元长度为1,则删除。所以也会把分节符删除。除了手动换行符的空行和空单元格空行外,都会删除。

Sub 删除文档内的所有空行()
Dim oPara As Paragraph, I As Long
Application.ScreenUpdating = False
For Each oPara In ActiveDocument.Paragraphs
If Len(oPara.Range) = 1 Then
oPara.Range.Delete
i = i + 1
End If
Next oPara
MsgBox "已删除" & i & "个空行"
Application.ScreenUpdating = True
End Sub

代码2:

在代码1的基础上加了一句And Right(oPara.Range, 1) = Chr(13),删除文档内的所有带段落标志空行,而不删除分节符空行

除了手动换行符的空行和空单元格空行外,都会删除。

Sub 删除文档内的所有带段落标志空行()
Dim oPara As Paragraph, I As Long
Application.ScreenUpdating = False
For Each oPara In ActiveDocument.Paragraphs
If Len(oPara.Range) = 1 And Right(oPara.Range, 1) = Chr(13) Then
oPara.Range.Delete
I = I + 1
End If
Next oPara
MsgBox "已删除" & I & "个带段落标志空行"
Application.ScreenUpdating = True
End Sub

手动换行符的空行,可以使用查找替换的办法,事先处理。也可以通过录制宏的方式,录制查找替换的过程,得到vba代码后,放到前面两个代码中。


推荐阅读:
相关文章