[Word VBA]尋找\取代的應用--編號之前換頁 - 返回 最初的純真性情 - udn部落格
返回 最初的純真性情
作家:ThisIsTheWay
文章分類
    Top
    [Word VBA]尋找\取代的應用--編號之前換頁
    2009/03/11 16:02:53
    瀏覽:4270
    迴響:1
    推薦:3
    引用0
    有位朋友說,他有個Word文件檔案裡有 001~150 的編號,他想在每個編號前面就換個新頁,但要如何利用VBA將這個動作自動化呢?

    我們知道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版)?

     

    回應
    迴響(1) :
    1樓. michael
    2010/12/01 22:27
    你好
    不錯看謝謝
    謝謝! ThisIsTheWay2011/06/21 12:23回覆
    發表迴響

    會員登入