word(2010)使用VBA完成批處理操作-批量清除表格某單元格內容

X學者發表於2020-09-23

VBA是什麼?

VBA(Visual Basic for Applications)是Visual Basic的一種巨集語言,是在其桌面應用程式中執行通用的自動化(OLE)任務的程式語言。主要能用來擴充套件Windows的應用程式功能,特別是Microsoft Office軟體。它也可說是一種應用程式視覺化的 Basic 指令碼。
1993年由微軟公司開發的應用程式共享一種通用的自動化語言--------即Visual Basic for Application(VBA),實際上VBA是寄生於VB應用程式的版本。1994年發行的Excel 5.0版本中,即具備了VBA的巨集功能。(以上為百度百科上的解釋,百度百科地址

為什麼要使用VBA?

上篇文章(文章地址)Word巨集的運用,其中也說明了Word巨集缺點比較明顯,“通過錄製得到的往往沒有手動編寫程式碼得到的更加精緻和靈活”,在實際運用中,我們想對文字進行批處理時,往往存在其它的變化因素,單純的通過手動錄製巨集,沒有辦法實現最終目的,此時就需要靈活的編寫VBA程式碼來達到預期的結果。

VBA的運用例項—批量清除表格某單元格內容

工作中經常遇到對word的批量操作,如果重複的操作達到上百甚至更多後,也是不小的工作量,若手動處理很容易出現因為疲勞導致的處理錯誤、遺漏等問題。而此時只會簡單的錄製巨集,就會發現有時使用錄製的巨集去處理,並不能很好的解決我們的問題,下面跟著我一起分析一個案例,我會詳細說明如何根據需求先對文件進行分析,再設計解決方案,最後進行程式碼的實現。(有程式設計基礎的,建議直接看程式碼)
如圖所示:
目的:將設計單中的"測試結果"和"問題標識"列內容清空。
在這裡插入圖片描述

文件其它部分展示

在這裡插入圖片描述

文件分析:

  1. 若要清除設計單9的"測試結果"和"問題標識"列,我們只需要將8~11行的4、5列內容替換為空即可,程式碼實現為ActiveDocument.Tables(1).Cell(8, 4).Range.Text = "",表示將第1個表格的8行4列內容寫成空,後面再更改行數和列數,就能實現將8~11行的4、5列內容替換為空。
  2. 我們繼續往下看設計單10,發現了一個嚴重的問題,設計單9的步驟有4步,而設計單10的步驟有2步,每個測試用例設計單內的步驟是不固定的! 若要清除設計單9的"測試結果"和"問題標識"列,需要將8~9行的4、5列內容替換為空,如果此時使用清除設計單9的程式碼去執行設計單10,就會將設計單10內容打亂。同理,若設計單11的步驟數為5,那就會出現遺漏一列沒有清除掉。可以形象的理解為一把鑰匙只能開啟一扇門,此時使用固定的行數已經無法達到目的,我們就需要琢磨下怎麼製作一把萬能鑰匙呢?

建議先思考分析下問題再往下看,相對於得到魚,我更希望大家得到漁!

設計解決方案:
下面為我個人的分析思路和設計解決方案:通過對設計單9、10的分析,每次清除的單元格的行數是不固定的,列數是固定的4、5,所以我只需要確定每次清除的行數是正確的,就能夠達到最終目的。我先對比了設計單9、10,發現表格的前7行和後4行為固定模板,因此可以確定我要清理的行數一定是從第8行開始,結束的行數一定是倒數第5行(暫定為LastR行),此時就得到了要清理的行數:8行~LastR行,這就得到每次要清理的單元格座標(行數和列數)。現在只需要將8~LastR行的4、5列內容替換為空即可。

程式碼的實現

Sub 批量清除表格某單元格內容()
For t = 1 To ActiveDocument.Tables.Count
    LastR = ActiveDocument.Tables(t).Rows.Count - 4
    For r = 8 To LastR
	    ActiveDocument.Tables(t).Cell(r, 4).Range.Text = ""
	    ActiveDocument.Tables(t).Cell(r, 5).Range.Text = ""
    Next r
Next t
End Sub

註釋

Sub 批量清除表格某單元格內容()
For t = 1 To ActiveDocument.Tables.Count
'這裡迴圈是為了清除所有表格,ActiveDocument.Tables.Count為統計文件的表格數
    LastR = ActiveDocument.Tables(t).Rows.Count - 4
    '這裡LastR計算結果為倒數第5行,Tables(t).Rows.Count為統計表格的行數
    For r = 8 To LastR
    '這裡迴圈是為了清除8行~LastR行的4、5列單元格
        ActiveDocument.Tables(t).Cell(r, 4).Range.Text = ""
        '單純的文字替換,將表格t的r行,4列的文字替換為空
        ActiveDocument.Tables(t).Cell(r, 5).Range.Text = ""
    Next r
Next t
End Sub

若不知道程式碼寫哪?怎麼執行?可以先閱讀我的上篇文章(文章地址)Word巨集的運用,先從巨集的錄製開始學習。

結語

以上舉例只是VBA運用的一個案例-批量清除表格某單元格內容,至於其他的具體運用,有興趣的可以自行了解。師傅領進門,修行靠個人!主要是對文件的分析,並不是所有情況都適合用VBA進行批處理,不要為了用VBA而去用VBA,不然只會適得其反!至於程式碼的實現並不複雜,可以去網上查閱API手冊(Word Visual Basic for Applications (VBA) 參考 | Microsoft Docs)。解決問題的思路才是重要的!
本文僅個人總結,存在不合理處,希望大家及時指出更正。下篇將舉例說明Word怎麼進行編號替換。編寫不易,轉載引用請說明出處。希望大家多多支援,在此表示感謝!

相關文章