網路城邦
上一篇 回創作列表 下一篇   字體:
[Word VBA]尋找\取代的應用--編號之前換頁
2009/03/11 16:02:53瀏覽3950|回應1|推薦3

有位朋友說,他有個Word文件檔案裡有 001~150 的編號,他想在每個編號前面就換個新頁,但要如何利用VBA將這個動作自動化呢?

我們知道Word尋找\取代功能的 "指定方式" 選單裡,提供了一些表示方法來代表檔案裡的特殊記號,讓我們在 "尋找目標" 和 "取代為" 的欄位裡可以使用,例如:^p 代表段落標記、^t 代表定位字元、......諸如此類還有很多,其中 "^m" 就是手動分頁符號。

這位朋友說他的檔案裡除了編號就沒有其他的數字,因此,我們可以利用前一篇 ("如何用findeplace做大量不同字串的取代?") 裡的那個 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版)?

 

( 興趣嗜好電腦3C )
回應 推薦文章 列印 加入我的文摘
上一篇 回創作列表 下一篇

引用
引用網址:https://classic-blog.udn.com/article/trackback.jsp?uid=WayCheng&aid=2733080

 回應文章

michael
你好
2010/12/01 22:27
不錯看謝謝
ThisIsTheWay(WayCheng) 於 2011-06-21 12:23 回覆:
謝謝!