首发于 VBA初学
Word文档空行类型和批量删除空行的方法

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

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

一、空行的类型

先来看看空行的类型。

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

手动换行符为向下的灰色箭头,如下图所示。可以使用查找替换功能,批量删除。

查找:^l{1,}

替换:留空

光标置于文首,勾选使用通配符,点击全部替换

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

段落标志为左拐的灰色箭头,如下图所示。

查找:^13{2,}

替换:^p

光标置于文首,勾选使用通配符,点击全部替换


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

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



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

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


5. 分节符空行

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


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

代码1:

代码来源于书本《word排版技术大全》(宋翔 著)

以段落为基本单元,判断段落字符长度为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