MS Office Word宏應用——批處理

2021-02-15 遠星Longaster
MS Office Word 宏應用——批處理引言

有些時候,我們需要對大量的 word 文檔進行相同的操作,我們肯定不會願意花上一整天進行這些重複的勞動。所有純文本文件(如.c, .txt, .tex, .py, .xml等)都能使用任意一種高級程式語言進行批量處理,但不幸的是,doc 類(.doc, .docx, .dot等)的文件並不是簡單的純文本文件(.doc文件為 Office 專用格式,.docx為 OpenXML 格式),因此,我們無法直接使用高級程式語言處理 doc 類文件(但仍然可以處理,如 python 使用python-docx模塊)。

但是,MS Office Word 內置的宏(VBA)為我們進行批處理提供了一種簡易的渠道(事實上,MS Office 套件都有相應的宏功能)。

VBA,Visual Basic for Application,是用來擴展應用程式功能的宏語言,MS Office VBA 具備了面向對象程式語言應有的特徵。在本文中,我們將簡要介紹其在批處理中的應用。

Word 宏簡介

首先引入面向對象編程中的兩個概念:類和對象。

類是現實世界或思維世界中的實體在計算機中的反映(表現為一段代碼)。對象是具有類類型的變量(表現為一個具體的東西)。類是抽象的,對象是具體的。

舉例來說,我們打開一個名為Doc1.docx的文檔,那麼,這個打開的文檔就是一個Document對象(具體的),而在 Word 中,就有一個抽象的描述這個文檔的類(抽象的):

class Document
    properties    '描述一個Document的所有屬性
    methods       '描述一個Document具有的方法
    events        '描述一個Document具有的事件

這個名為Document的類中,有眾多屬性,類的屬性被賦予一定的值(實例化),就成為了一個對象。如,Doc1.docx文檔的所有段落,就是這個文檔的Paragraphs屬性;文檔中的所有表格,就是它的Tables屬性;文檔的名字,就是它的Name屬性,等等。這些屬性也可以是對象。

了解了這些概念,我們就可以開始用 VBA 來操作 Word 文檔了。

一般情況下,宏的編輯是隱藏的,用戶可以在:文件>選項>自定義功能區 的右側將「開發工具」勾上,就可以在菜單欄中看到它了。

用宏操作文檔

在這一部分及下一部分,我們假定讀者有一定的編程基礎,沒有編程基礎的讀者也不必退出,下面的內容沒有引入更多的概念。

我們在 Word 的任何操作,都可以使用宏來完成,並且,宏可以實現一些常規操作無法實現的內容。

在批處理中,比較常見的是設置文檔的格式。我們嘗試使用宏來修改段落的樣式。

我們先錄製一個宏,看看我們的一個操作到底設置了些什麼吧。

在開發工具菜單中,單擊 Visual Basic,我們可以看到編輯器中有如下代碼:

Sub 宏1()
'
' 宏1 宏
'
'
    Selection.Style = ActiveDocument.Styles("標題")
End Sub

這說明我們剛剛設置樣式的操作可以編寫上述宏來完成。它的含義是將我們選擇的文本的樣式設置為當前文檔的樣式列表中的「標題」。

編寫如下代碼:

Sub 設置標題()
Selection.Style = wdStyleTitle
End Sub

並運行之,看看效果是不是和剛才的操作一致呢!wdStyleTitle這個枚舉變量值就是「標題」這個樣式。具體可以參考WdBuildinStyle 枚舉[1]。

上述代碼的含義應該十分明顯:把Selection對象的Style屬性設置為wdStyleTitle。

但是,上面這一步驟仍然有局限性,因為我們必須手動選擇要改動的文字,才能使用這個宏。但在批處理的時候我們肯定不能去選擇文字,我們動手的地方應該越少越好。

在Document對象中有一個Paragraphs屬性,改屬性是文檔中所有段落的集合,我們剛才的操作相當於是把第一段的樣式設置為wdStyleTitle,因此,編寫以下宏:

Sub 設置標題2()
ActiveDocument.Paragraphs(1).Style = wdStyleTitle
End Sub

運行一下,可以看到,我們並沒有選擇任何文本,但是它同樣達到了剛才的效果!

解釋一下上述宏:ActiveDocument的全稱是Application.ActiveDocument,它表示當前的Document對象,然後,獲取Document對象的Paragraphs屬性,我們給了它一個參數1,這樣它返回一個Paragraph對象,然後將它的樣式設置為wdStyleTitle。

我們並不滿足於 Word 內置的樣式。以下代碼將設置一個新的樣式:

Sub 創建樣式()
ActiveDocument.Styles.Add "樣式1", wdStyleTypeParagraph
With ActiveDocument.Styles("樣式1")
With .Font
.Bold = True
.Size = 30
.ColorIndex = wdAuto
.NameFarEast = "黑體"
.NameAscii = "Times New Roman"
End With
With .ParagraphFormat
.Alignment = wdAlignParagraphCenter
End With
End With
End Sub

運行之,在樣式列表中可以看到多出一個「樣式 1」,這就是我們剛才設置的樣式。第 2 行,我們創建了一個新的樣式,名為「樣式 1」,它的樣式類型為wdStyleTypeParagraph(段落),第 3-14 行,修改樣式的字體和段落格式。我們想把第一段的樣式設置為這個新的樣式,該怎麼寫呢?讀者可以先想想,用到的知識都是上面講過的。讀者也可以錄製宏試試看。

Sub 設置樣式()
ActiveDocument.Paragraphs(1).Style = ActiveDocument.Styles("樣式1")
End Sub

它的思路是:把當前文檔的第一段的樣式設置為當前文檔樣式列表中的「樣式 1」。

我們想要把文檔中所有內容的樣式全都設置為「樣式 1」該怎麼辦呢。

一種方法是全選,再將選擇的內容的樣式設置為「樣式 1」:

Sub 設置所有段落樣式()
Selection.WholeStory
Selection.Style = ActiveDocument.Styles("樣式1")
End Sub

WholeStory方法將Selection擴選至整個文章。至於第 3 行,讀者已經十分熟悉了。

第二種方法是,循環遍歷文章的所有段落,將這些段落的樣式全都設為「樣式 1」。

Sub 設置所有段落樣式2()
Dim para As Paragraph '定義para為段落對象
'For Each ... In ... Next 語句將遍歷Paragraphs中所有Paragraph對象
For Each para In ActiveDocument.Paragraphs
para.Style = ActiveDocument.Styles("樣式1")
Next
End Sub

這兩種方法都能實現相同的效果。

但是,這兩種方法都有一個問題:如果我們的文章中有圖表,那麼表格中的文字和圖片的樣式也將變成「樣式 1」。我們顯然不希望出現這種情況。

我們只要在para.Style = ActiveDocument.Styles("樣式1")前加上一個判斷語句

If Not para.Range.Information(wdWithInTable) Then
para.Style = ActiveDocument.Styles("樣式1")
End If

這樣,表格內文字的樣式就不是「樣式 1」了。

批處理

一個批處理程序應該要能調用其它宏。直接在這個批處理程序中調用這個宏即可:

Sub 批處理()
...某些功能...
宏1 '調用 宏1
End Sub

Sub 宏1()
...宏1的功能...
End Sub

一個批處理程序大致的功能應該有:

首先創建一個文件選取器:

Sub 批處理()
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFilePicker)
End Sub

運行之,我們能看到它創建了一個文件選取器對話框,我們能選擇一個或多個文件,但選擇之後似乎什麼也沒發生。這是因為我們沒有編寫相應的功能。

接下來我們把所選的文件的路徑全都展示出來:

Sub 批處理()
Dim fd As FileDialog
Dim selected As Variant
Dim selitem As String

selitem = ""
Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
If .Show = -1 Then
For Each selected In .SelectedItems
selitem = selitem & selected & vbCr
Next
End If
MsgBox "選擇了以下文件:" & vbCr & selitem
End With
End Sub

再次運行這個宏,選擇幾個文件,我們發現它將所有文件的路徑全都輸出到屏幕上了。

我們的目的並不是輸出文件名。我們嘗試將選擇的 doc 類文件的第一段的樣式設置為「樣式 1」。

Sub 批處理()
Dim fd As FileDialog
Dim dcm As Document
Dim selected As Variant

Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
If .Show = -1 Then
For Each selected In .SelectedItems
Set dcm = Documents.Open(selected) '打開文檔
dcm.Activate '將文檔設置為當前文檔
設置樣式 '注意不要加括號
dcm.Close (wdSaveChanges) '關閉並保存更改
Next
End If
End With
End Sub

Sub 設置樣式()
ActiveDocument.Paragraphs(1).Style = ActiveDocument.Styles("樣式1")
End Sub

運行,發現出現一個錯誤:提示不存在「樣式 1」。這是因為在其它文檔中並不一定有「樣式 1」這個樣式。因此我們需要先創建樣式:

...
For Each selected In .SelectedItems
Set dcm = Documents.Open(selected)
dcm.Activate
創建樣式
設置樣式
dcm.Close (wdSaveChanges)
Next
...

Sub 創建樣式()
ActiveDocument.Styles.Add "樣式1", wdStyleTypeParagraph
With ActiveDocument.Styles("樣式1")
With .Font
.Bold = True
.Size = 30
.ColorIndex = wdAuto
.NameFarEast = "黑體"
.NameAscii = "Times New Roman"
End With
With .ParagraphFormat
.Alignment = wdAlignParagraphCenter
End With
End With
End Sub

批處理有可能會出現誤操作,因此我們不能在原文檔上更改,這時可以將原文檔另存為,再在這個文檔上更改。並且,我們希望在所有文件修改完之後,有相應的提示信息。最終的成果如下:

Sub 批處理()
Dim fd As FileDialog
Dim dcm As Document
Dim selected As Variant
Dim changedpath As String

Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.Filters.Add "Word文檔", "*.doc; *.docx; *.docm", 1
If .Show = -1 Then
MkDir("+changed") '創建修改後的文件的存放位置
changedpath = "+changed"
For Each selected In .SelectedItems
Set dcm = Documents.Open(selected) '打開文檔
dcm.SaveAs2 (changedpath & "\" & dcm.Name) '把文件另存到+changed文件夾中
dcm.Activate '將文檔設置為當前文檔
創建樣式 '注意不要加括號
設置樣式
dcm.Close (wdSaveChanges) '關閉並保存更改
Next
MsgBox "已修改" & .SelectedItems.Count & "個文件,修改的文件保存在" _
& changedpath & "文件夾中"
Else
MsgBox "沒有選擇文件"
End If
End With
End Sub

Sub 設置樣式()
ActiveDocument.Paragraphs(1).Style = ActiveDocument.Styles("樣式1")
End Sub

Sub 創建樣式()
ActiveDocument.Styles.Add "樣式1", wdStyleTypeParagraph
With ActiveDocument.Styles("樣式1")
With .Font
.Bold = True
.Size = 30
.ColorIndex = wdAuto
.NameFarEast = "黑體"
.NameAscii = "Times New Roman"
End With
With .ParagraphFormat
.Alignment = wdAlignParagraphCenter
End With
End With
End Sub

本文簡要地講解了用 Word 宏的一點內容,更加詳細的說明可以參考MS Office Word VBA[2],這是微軟官方的說明文檔,其中詳細介紹了 Word VBA 的所有內容,有興趣的讀者可以進行學習。

參考資料[1]

WdBuildinStyle枚舉: https://docs.microsoft.com/office/vba/api/word.wdbuiltinstyle

[2]

MS Office Word VBA: https://docs.microsoft.com/office/vba/api/overview/word

相關焦點

  • 二級MS Office高級應用 Word選擇題
    當用戶在修訂狀態下修改文檔時,word應用程式將跟蹤文檔中所有內容的變化狀況,同時會把用戶在當前文檔中修改、刪除、插入的每一項內容標記下來。故本題答案為C。5、小華利用Word編輯一份書稿,出版社要求目錄和正文的頁碼分別採用不同的格式,且均從第1頁開始,最優的操作方法是______。
  • 計算機一級ms office.這樣學比較容易通過
    全國計算機等級考試一級裡面有個科目是ms office,儘管這個科目沒有二級msoffice難度大,但是仍然有很多同學沒有考過!今天我們就來分享下一級ms office怎麼備考才能順利通過!今天分享的內容主要根據一級ms office的考試題型,介紹其知識內容特點與高效學習方法。我們都知道,一級ms office科目考試和二級ms office.考試題型相差不大,主幹都是選擇題和操作題,所以我們就圍繞選擇題和操作題來分享下學習方法!
  • 一級ms office考什麼?
    計算機一級證書ms office是大學生必拿證書,此證書代表著基本的辦公能力,那麼一級ms office考試內容有哪些呢?3,office word操作題,25分考察內容:會編輯文字,插入表格,調整段落之間間距,藝術字的使用,分隔符的使用,頁眉頁腳的設置,文檔的創建、打開和基本編輯操作,文本的查找與替換,多窗口和多文檔的編輯,文檔的保存、保護、複製、刪除和插入。
  • office辦公軟體2019專業增強版一鍵破解方法
    首先需要致敬一下office tool plus,這個安裝程序裡集成了我們常見的所有office版本,是國內目前最完整綠色且免費的office集成程序,由國人開發且開源。1,下載完壓縮包後進行解壓,雙擊打開安裝程序,點擊部署2,添加產品 – 找到office 專業增強版2019 -批量版3,應用程式-找到我們需要的應用程式進行勾選,一般是excel,word,powerpoint,或者直接默認全部安裝。4,安裝面板右側通道一定要選擇企業長期版,然後點擊最下方開始部署即可進行office2019專業版的安裝。
  • 2018 MS-OFFICE 高級應用考試大綱
    掌握多媒體技術基本概念和基本應用。 4. 了解計算機網絡的基本概念和基本原理,掌握網際網路網絡服務和應用。5. 正確採集信息並能在文字處理軟體 word、電子表格軟體 Excel、演示文稿製作軟體 PowerPoint中熟練應用。 6. 掌握word 的操作技能,並熟練應用編制文檔。7. 掌握Excel的操作技能,並熟練應用進行數據計算及分析。
  • 一級ms office考什麼
    計算機等級考試分為四級,到目前為止,有四個可以報考的項目,其中一級ms office最好考,考的是最基礎的計算機文檔、表格以及電子郵件和基礎常識。下面,小編給大家介紹下一級ms office考什麼?以及我們考一級ms office的時候一些注意事項。
  • 二級MS office高級應用 VS 二級Access
    二級MS office高級應用 VS 二級Access二級考試科目中的這兩個科目,分別在咱校學生在大一上下兩個學期學習的兩門課程中都有學習。
  • 惡意代碼分析之Office宏代碼分析
    在本節中,筆者將詳細介紹關於office宏類的非PE樣本的分析方法。該部分的主要內容來源於19年年底我看到的一個英文論文,原文連結暫時找不到了,後續如果找到了我會貼在評論中。基於宏的攻擊活動目前利用office宏進行攻擊應該是一個比較主流的攻擊方式了,但是通常情況下,宏代碼並不能很好地實現所有的功能,更多的時候,宏代碼都是作為一個加載器或者下載器載攻擊中發揮作用的。
  • 手機如何打開word文檔編輯?手機如何打開Excel查看office文檔?
    奇點來臨小編了解到的情況,由於現在移動端的使用越來越多,很多朋友都有一種需求,那就是經常需要用手機,平板燈移動端來處理office文檔。比如如何用手機打開word,如何用手機編輯word,excel文檔等。
  • 乾貨 | 惡意代碼分析之Office宏代碼分析
    在本節中,筆者將詳細介紹關於office宏類的非PE樣本的分析方法。該部分的主要內容來源於19年年底我看到的一個英文論文,原文連結暫時找不到了,後續如果找到了我會貼在評論中。基於宏的攻擊活動目前利用office宏進行攻擊應該是一個比較主流的攻擊方式了,但是通常情況下,宏代碼並不能很好地實現所有的功能,更多的時候,宏代碼都是作為一個加載器或者下載器載攻擊中發揮作用的。
  • 學習二級MS Office有什麼用?
    日常寫個總結、方案等等需要用到word,開個會議、做個報告就需要用到PPT,如果你做的工作和數據、分析有關,Excel是逃不掉了。在hr的眼裡,就算你花大價錢掌握了office技能,如果沒有有利憑證,也只能變得一文不值。
  • 全國計算機二級MS office到底是啥?
    後面會給大家持續推送歷年真題,今天先帶大家看看官方公布的考綱「全國計算機等級考試二級MS office高級應用考試大綱(2013年版)」1. 掌握計算機基礎知識及計算機系統組成。2. 了解信息安全的基本知識,掌握計算機病毒及防治的基本概念。3. 掌握多媒體技術基本概念和基本應用。 4.
  • 史上最全office插件,讓你的辦公效率提升百倍
    Hello大家好,今天小編給大家帶來18款office插件,也就是我們常用的word 、Excel 、PPT上面的常用插件, 很多人可能並不清楚插件到底有什麼用 ,其實插件主要用來提供官方軟體沒有,但是用戶卻非常需要的一些便捷小功能 ,或者是在官方的功能基礎上,進行整合簡化,可以大大提高你的工作效率 。
  • Word 宏
    打開Word -> 點擊【視圖】 -> 點擊【宏】 -> 輸入【宏名】點【創建】,即可進入開發環境,當然,還有別的方式。Public doc As DocumentSub 批量修改文件()'' 批量修改文件 宏'' Dim file_index As Integer Dim file_count As Integer Dim file_path As String Dim file_name As String Dim file_name_current
  • 學遍Excel+Word+PPT全部應用,office三合一速成班(1期)招生開始了
    在實際工作中,Excel、word和ppt是辦公人員必會三大office組件,想學會這三個軟體你需要分別報三個學習班,耗時又浪費Money
  • 【新增考點】Word控制項、宏功能的簡單運用
    在二級office考試中,2021版考綱新增了Word控制項與宏功能的簡單運用的考點,很多小夥伴對此功能並不了解,下面,考無憂小編在本文帶大家分別了解Word控制項和宏功能的含義以及應用,希望能夠加深小夥伴們對這兩個功能的了解。
  • Word中的錄製宏怎麼添加到工具欄
    Word中的錄製宏怎麼添加到工具欄>有的時候要批量處理文件比如批量添加水印,逐個添加的話耗時耗力,所以希望錄製添加水印的宏並進行修改,但是代碼找到了,可是「錄製宏」的按鈕怎麼一直找不到。第二步:彈出【word
  • word高效操作技巧:自動重複操作技巧-錄製宏
    若文檔太長、內容太多,會看得眼花繚亂,給我們增添了不少困擾,今天將帶大家解鎖幾個word文檔審閱的高效操作技巧,解放你的眼睛和雙手。學習更多技巧,。現在越來越多的軟體都在逐步往更便捷、更簡單的操作自我革新,只需要簡單操作,就能夠實現批量處理,讓辦公效率提高n次方。
  • 巧用Word的宏製作試卷
    如果我們利用Word 2000中提供的「宏」功能,指定鍵盤上的一個組合鍵對應一段空格線,就可以在以後的輸入填空題的空格線中輕鬆地使用快捷鍵來畫線了。   單擊「工具→宏→錄製新宏」,打開「錄製宏」對話框,輸入宏名,如「空格線」,並在 「將宏指定到」欄中單擊「鍵盤」,打開「自定義鍵盤」對話框。
  • 二級MS office考試知識點匯集(Word方向)
    複製樣式:文件-選項-加載項-word加載項-管理器-找到相應的文檔。打開文檔以後,找到工具欄中的「編輯」按鈕,點擊「編輯」按鈕,接著在彈出的命令菜單中找到」查找「命令。例如,指定了大綱級別後,就可在大綱視圖或文檔結構圖中處理文檔。單擊開始選項卡裡的多級列表按鈕,在下拉列表中選擇定義新的多級列表,多級列表的每一級和樣式必須是一一對應,但是呢不是固定的。先設置第一級編號,選擇阿拉伯數字1,2,3,...