我們知道Word尋找\取代功能的 "指定方式" 選單裡,提供了一些表示方法來代表檔案裡的特殊記號,讓我們在 "尋找目標" 和 "取代為" 的欄位裡可以使用,例如:^p 代表段落標記、^t 代表定位字元、......諸如此類還有很多,其中 "^m" 就是手動分頁符號。
這位朋友說他的檔案裡除了編號就沒有其他的數字,因此,我們可以利用前一篇 ("如何用find\replace做大量不同字串的取代?") 裡的那個 ReplaceText() function 執行尋找\取代功能,用 "^m001" 取代 "001"、用 "^m002" 取代 "002"......依此類推,把每個編號前面加上一個手動分頁符號,就達成目標了。
底下的程式碼原理很簡單,就是用迴圈的遞增值 i = 1~150 製出 001~150 的字串,然後再做出前面加 ^m 換頁符號的 "^m001" 這樣的字串,然後傳送給 ReplaceText() (參見程式註解)。
Option Explicit
Sub AutoNewPage()
Dim i As Integer
Dim srcStr As String, rplStr As String
For i = 1 To 150
srcStr = Format(i, "000") '產生 001、002......當做要尋找的字串
rplStr = "^m" & srcStr '字串前面加 ^m 換頁符號,當做要取代為的字串
Application.ScreenUpdating = False '畫面暫停更新
Call ReplaceText(srcStr, rplStr) '用 ^m001 取代 001......
Application.ScreenUpdating = True '畫面恢復更新
Next i
End Sub
Function ReplaceText(Src As String, Rpl As String)
'這個函式會在整個檔案裡搜尋 Src 字串, 將它取代為 Rpl 字串
Selection.HomeKey Unit:=wdStory, Extend:=wdMove
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = Src
.Replacement.Text = Rpl
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchByte = True
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = False
.MatchFuzzy = False
.Execute Replace:=wdReplaceAll '全部取代
End With
End Function
在這個程式裡,原本我想用 srcStr = Right("00" & i, 3) 的方式來製出 001~150 的字串,例如 i=14,在左邊加兩個 0 就成了 "0014",然後取其最右的三個字元就是 "014" 了。沒想到 Word的 VBA 編譯器在 Right() 和 Left() 的參數檢查方面似乎有問題 (雖然看 help 裡的說明是和 Excel 用法一樣),試了很久,決定改用 Format() 的做法。不知 Word 新版是否仍舊有此現象 (我用的是2003版)?