Word文檔空行類型和vba批量刪除空行的方法

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代碼後,放到前面兩個代碼中。


推薦閱讀:

TAG:VBA | MicrosoftWord | Office文檔 |