Skip to Content

使用 VBA 處理 Word 文件

最近工作需要處理到 Word,要把 Word 文件轉成純文字,但要插入正確的頁碼。

我想到的方法是用 VBA 來處理,以前使用 VBA 比較多的情況是用在 Access 和 Excel 上,用 Word 情況還真的很少。

所幸工作的原理差不多,主要是要找出 Word 的物件模型,加上現在的說明檔資料很豐富,在二天的研究之後,終於做出來了。

底下記錄一個簡單的巨集,日後要研究才有線索可尋。

Dim objPage As Page
Dim PageText As String
 
pnc = ActiveDocument.ActiveWindow.Panes.Count
 
For m = 1 To pnc
 
    pc = ActiveDocument.ActiveWindow.Panes(m).Pages.Count
   
    For i = pc To 1 Step -1
    
        Set objPage = ActiveDocument.ActiveWindow.Panes(m).Pages.Item(i)
        
        rc = objPage.Rectangles.Count
       
        For j = 1 To rc
            
            rt = objPage.Rectangles.Item(j).RectangleType
                       
            If (rt <> wdSystem) Then
            
                rs = objPage.Rectangles.Item(j).Range.StoryType
                
                If (rt = wdTextRectangle And rs = wdMainTextStory) Then
                    
                    PageText = vbCrLf + "<p:" + Format(i, "00") + ">" + vbCrLf
                    objPage.Rectangles.Item(j).Range.InsertBefore PageText
                    
                    Exit For
                    
                End If
 
            End If
 
        Next j
   
    Next i
 
Next m
 
 

有幾個重點:

  • 我用到的物件模型層次為
    ActiveDocument / ActiveWindow / Panes / Pages / Rectangles / Range
  • 程式原理是逐一處理 Word 文件中的每一個物件,在每一頁第一個 Range 之前插入頁碼記號。
  • 其中 Panes 不知道是什麼?不過好像只有一個,就不理它了。
  • 一個 Page 會有好幾個 Rectangle,最初不知道如何處理,常有莫名奇妙的錯誤。後來用了二個屬性來判斷,才解決問題。
  • 一個是 RectangleType,一個是 Range.StoryType,只有在 RectangleType == wdTextRectangleRange.StoryType == wdMainTextStory 時,才是本文的 Range,其他可能是頁眉、註腳等位置。
  • 後來也發現,上述的條件下,同一頁也有好幾個符合的 Range,所以程式中才會在第一個符合的 Range 插入頁碼後,就離開迴圈,不繼續處理其他的 Range 了。
  • 因為插入頁碼,會破壞後面文字的位置,所以要從最後一頁做起。

回應

發表新回應

這個欄位的內容會保密,不會公開顯示。
  • 自動將網址與電子郵件地址轉變為連結。
  • 自動斷行和分段。
  • 可使用的 HTML 標籤:<a> <address> <b> <blockquote> <br> <caption> <center> <cite> <code> <dd> <del> <div> <dl> <dt> <em> <h1> <h2> <h3> <h4> <h5> <h6> <hr> <i> <img> <ins> <li> <ol> <p> <pre> <span> <strike> <strong> <sub> <sup> <table> <tbody> <td> <th> <tr> <u> <ul>
    Allowed Style properties: background, background-attachment, background-color, background-image, background-position, background-repeat, border, border-bottom, border-bottom-color, border-bottom-style, border-bottom-width, border-collapse, border-color, border-left, border-left-color, border-left-style, border-left-width, border-right, border-right-color, border-right-style, border-right-width, border-spacing, border-style, border-top, border-top-color, border-top-style, border-top-width, border-width, bottom, caption-side, clip, color, direction, empty-cells, font, font-family, font-size, font-size-adjust, font-stretch, font-style, font-variant, font-weight, height, left, letter-spacing, line-height, list-style, list-style-image, list-style-position, list-style-type, margin, margin-bottom, margin-left, margin-right, margin-top, max-height, max-width, min-height, min-width, overflow, padding, padding-bottom, padding-left, padding-right, padding-top, right, table-layout, text-align, text-decoration, text-indent, text-transform, top, unicode-bidi, vertical-align, white-space, width, word-spacing, z-index

更多關於格式選項的資訊

CAPTCHA
驗證碼只有阿拉伯數字, 這是躲廣告用的, 麻煩你輸入了.
Image CAPTCHA
Enter the characters shown in the image.


story | about seo