【20171124】- 使用宏處理Word段落(批量刪除段落空格)

最近SUT學習交流群QQ群:615356012)有位司法小夥伴,需要對其工作的庭審記錄進行批量處理,也就是從無格式狀態處理變為一定格式的狀態。因為每個人的處理標準不太一樣,所以最終成型的格式也不盡相同,但對Word段落的調整等都是相同的。

其實我一直擔任校友會的網路管理員,每次都會有校友編寫好的報到發給我,再由我發布到校友網站和公眾號上。其實接收到的報到各種類型的格式都有,雖然整理看下來還行,但細節方面很多需要再次處理,首行縮進是敲空格得到的,插圖有的是左對齊,有的是居中對齊等等。

其實為了解決首行縮進都是空格的問題,其實也非常容易,可以使用查找和替換,但替換的可能不只是段落前的空格。為了能夠精確去除段落前的空格,可以通過宏代碼來處理。

司法小夥伴諮詢的問題如下,他在嘗試解決使用宏代碼刪除段落前的空格,問題截圖如下:

上圖中,小夥伴的代碼運行結果如下圖所示:

當運行宏代碼的時候,提示如上所示的錯誤提示,點擊確定後會定位到Dim p As Paragraph, c As Character所在行。其實出現這個錯誤,可以使用兩個步驟加以解決,第一:先確定Paragraph和Character是否是VB支持的類型;第二:如果是VB支持的類型,可以查看是否需要從【工具】→【引用】選擇必要的組件。

經過排查,發現Character不是VB支持的類型,所以上面的代碼需要稍加修改。修改後的代碼如下:

Sub SUT刪除段前空格()n Dim p As Integern For p = 1 To ActiveDocument.Paragraphs.Countn Do While Left(ActiveDocument.Paragraphs(p).Range.Text, 1) = " "n ActiveDocument.Paragraphs(p).Range.Find.Execute findtext:=" ", replacewith:="", Replace:=wdReplaceOnen Loopn Next pnEnd Subn

其實上面的代碼也非常容易理解,就是對每一個Word段落進行循環處理,使用Do While循環判斷段落左側是否包含空格,有空格就替換為空。為了更加形象的展示代碼執行,可以觀看如下的動態圖展示:

如果一個段落前後都有很多多餘的空格,經常使用Excel的小夥伴一定能想到Trim函數,其實在Word中也是適用的哦。

直接使用循環結合Trim函數即可刪除段落前後的空格,司法小夥伴給出的代碼如下:

Sub SUT刪空格()n For a = 1 To ActiveDocument.Paragraphs.Countn ActiveDocument.Paragraphs(a).Range.Text = Trim(ActiveDocument.Paragraphs(a).Range.Text)n Next anEnd Subn

本以為上面的代碼能否正常工作,也就是能刪掉段落前後的空格,其實該代碼並沒有起到作用,通過調試發現,Word中有一個特殊的段落結尾,哪怕是空行,只要有一個回車,其實改段落的長度Len也是1,並非等於0,故修改為如下的代碼:

Sub SUT刪除段落前後空格()n For a = 1 To ActiveDocument.Paragraphs.Countn Set sutRng = ActiveDocument.Paragraphs(a).Rangen MsgBox Len(strTmp)n sutRng.MoveEnd wdCharacter, -1n sutRng.Text = Trim(sutRng.Text)n sutRng.MoveEnd wdCharacter, 1n ActiveDocument.Paragraphs(a).Range.Text = sutRng.Textn Next anEnd Subn

代碼演示如下動態圖所示:

其實更多的時候我們需要刪除一個段落中的所有空格,其實可以通過最前面說過的查找和替換功能,可以替換全部空格為空即可。可以通過如下代碼完成對段落空格的替換:

Sub SUT刪除段落空格()n For p = 1 To ActiveDocument.Paragraphs.Countn ActiveDocument.Paragraphs(p).Range.Find.Execute findtext:=" ", replacewith:="", _n Replace:=wdReplaceAlln Next pnEnd Subn

一般軟體都提供有替換和全部替換功能,Word也不例外,正如上面對面中的wdReplaceOne(替換)wdReplaceAll(全部替換)。

其實上面代碼的循環已經沒有了意義,直接按照章節來替換會更加方便快捷,具體代碼如下:

Sub SUT刪除文檔空格()n ActiveDocument.Sections(1).Range.Find.Execute findtext:=" ", replacewith:="", _n Replace:=wdReplaceAllnEnd Subn

具體代碼演示如下動態圖所示:

經過幾次Word宏代碼的編寫,發現Word處理也是非常方便快捷的,可以批量實現很多功能,對以後編寫插件有了很多的幫助。今天的介紹就到這裡了,大家如果有更好的解決辦法,歡迎留言哦。如果在今天介紹的代碼學習過程中遇到任何問題,歡迎加群(QQ群:615356012)進行交流~Written by Steven in 20171124^_^

微信公眾號:SaveUTime

SUT學習交流群:615356012,入群審核人:Steven

關注公眾號,提高效率,節約您的時間!


推薦閱讀:

TAG:Word文档处理 | 段落 | VBA |