同事前來求助,希望為各級標題添加自動編號,例如一級標題的編號分別是一、二、三,二級標題的編號分別是1、2、3,依次類推。除了滑鼠點擊逐一手工編號之外,可否更高效的自動編號呢?
如果文檔的標題級別不是太多,我們可以通過「相似文本」的功能解決這一問題,將光標放在某一級別的標題中間,在「編輯」功能組依次選擇「選擇→選擇格式相似的文本」,可以看到所有的一級標題都已經被選中,接下來的操作就簡單多了,在「段落」功能組的「標題」下拉列表選擇相應的編號樣式就可以了,效果如圖1所示,其他級別的標題可以按照類似的步驟進行操作。
如果文檔中的標題級別比較多,建議採取VBA代碼實現,按入「Alt+F11」組合鍵,打開Microsoft Visual Basic for Applications編輯器窗口,依次選擇「插入→模塊」,在右側空格插入一個空白模塊(如圖2所示),在這裡手工輸入或粘貼如下代碼:
Sub 多級列表樣式運用()
Dim p As Range, doc As Document, s As Range, sr$, r1$, r2$, r3$, r4$, a, j&, x&, ksr$
Set doc=ActiveDocument
Set p=IIf(Selection.Type=wdSelectionIP, doc.Content, Selection.Range)
sr$="一二三四五六七八九十百零千〇"
r1$="[" & sr & "]@、": r2$="[((][" & sr & "]@[))]": r3$="[0-9]@[、..]": r4$="[((][0-9]@[))]"
a=Array(r1, r2, r3, r4)
Call ListTitles(doc)
For j=0 To UBound(a)
Set s=p.Duplicate
With s.Find
Do While .Execute(a(j), , , 1)
If Not s.InRange(p) Then Exit Do
With .Parent
If Not .Information(wdWithInTable) Then
x=Len(.Text): ksr=.Text
.Expand 4: .Collapse
If .MoveWhile(ksr, x)=x Then
.MoveStart , -x: .Text=Empty
.Style=ActiveDocument.Styles("標題 " & j + 2)
Else
.Move 4, 1
End If
End If
End With
Loop
End With
Next
p.ListFormat.ConvertNumbersToText
End Sub
Sub ListTitles(doc As Document)
Dim LtTemp As ListTemplate, i%, a
Set LtTemp=doc.ListTemplates.Add(True)
On Error Resume Next
a=Array(6, 5, 11, 12)
For i=2 To 5
With LtTemp.ListLevels(i)
If i=2 Then .NumberFormat="%2、": .NumberStyle=37
If i=3 Then .NumberFormat="(%3)": .NumberStyle=37
If i=4 Then .NumberFormat="%4.": .NumberStyle=0
If i=5 Then .NumberFormat="(%5)": .NumberStyle=0
.TrailingCharacter=2: .StartAt=1: .ResetOnHigher=True
.LinkedStyle="標題 " & i
doc.Styles("標題 " & i).Font.ColorIndex=a(i - 2)
End With
Next
End Sub
代碼檢查無誤之後,依次選擇「文件→關閉並返回到Microsoft Word」命令,返回Word主界面,按下「Alt+F8」組合鍵,打開「宏」對話框,選擇並運行宏,很快就可以看到相應的編號效果。
◇江蘇 王志軍