VBA實(shí)現(xiàn)合并具有文本框的Word文檔
本文介紹基于VBA語言,對大量含有圖片、文本框與表格的Word文檔加以批量自動(dòng)合并,并在每一次合并時(shí)添加分頁符的方法。
在我們之前的文章中,介紹過基于Python語言的python-docx
(docx
)模塊與docxcompose
模塊,對大量Word文檔加以合并的方法;但是,基于這種方法,我們無法對具有非明確大小的文本框的Word加以合并,因?yàn)?code>python-docx無法處理含有這種元素的Word文件。最近,一位老哥提出了合并含有文本框的Word的需求,所以就嘗試用VBA來實(shí)現(xiàn)這一操作,這里就介紹一下具體的方法。
其中,VBA是Visual Basic for Applications的縮寫,其是基于Visual Basic語言的一種擴(kuò)展,主要應(yīng)用于微軟Office套件中各種應(yīng)用程序,例如Word、Excel與PowerPoint等;其允許用戶創(chuàng)建自定義的宏和應(yīng)用程序來自動(dòng)執(zhí)行各種任務(wù),從而提高工作效率。目前,VBA主要就是應(yīng)用于需要批量操作Office文件的各類場景中。
本文的需求如下?,F(xiàn)在有一個(gè)文件夾,其中包含大量文檔文件,如下圖所示;其中,每一個(gè)文檔中,都包含圖片、表格、文本框等較為復(fù)雜的元素。
我們現(xiàn)在希望,可以批量將文件夾中大量文檔文件加以合并;并且在合并時(shí),每次都需要在新的1
頁中合并下一個(gè)文件(也就是,不同文件的內(nèi)容不要出現(xiàn)在1
頁中)。
明確了需求,即可開始代碼撰寫。本文所需代碼如下。
Sub merge_word() Dim time_start As Single: time_start = Timer Dim word_result As Document Dim word_temp As Document Dim file_dialog As FileDialog Dim str As String Dim file Dim num As Long Set word_result = ActiveDocument Set file_dialog = Application.FileDialog(msoFileDialogFilePicker) With file_dialog .AllowMultiSelect = True .Title = "請選擇【一個(gè)或多個(gè)】需要與當(dāng)前文檔合并的文件" With .Filters .Clear .Add "Word文件", "*.doc*;*.dot*;*.wps" .Add "所有文件", "*.*" End With If .Show Then Application.ScreenUpdating = False num = .SelectedItems.count For Each file In .SelectedItems Set word_temp = Documents.Open(file) word_temp.Range.Copy word_result.Range(word_result.Range.End - 1, word_result.Range.End).Select DoEvents Selection.Paste Selection.InsertBreak word_temp.Close wdDoNotSaveChanges Next Application.ScreenUpdating = True End If End With Set word_result = Nothing Set word_temp = Nothing Set file_dialog = Nothing str = Format(Timer - time_start, "均已成功合并;共用時(shí)0秒!") str = Format(num, "您選擇合并0個(gè)文件,") & str MsgBox str, vbInformation, "文件合并結(jié)果" End Sub
上述代碼中,我們首先進(jìn)行變量聲明。time_start
是一個(gè)Single
類型的變量,用以記錄代碼開始執(zhí)行的時(shí)間;Timer
函數(shù)返回一個(gè)單精度浮點(diǎn)數(shù),表示從計(jì)算機(jī)啟動(dòng)到現(xiàn)在經(jīng)過的秒數(shù)。word_result
是一個(gè)Document
類型的變量,用以存儲當(dāng)前打開的Word文檔。word_temp
是另一個(gè)Document
類型的變量,用以臨時(shí)存儲要合并的其他Word文檔。file_dialog
是一個(gè)FileDialog
類型的變量,用以存儲文件選擇對話框?qū)ο蟆?code>str是一個(gè)字符串類型的變量,用以存儲最終要顯示在消息框中的合并結(jié)果信息。file
用以在循環(huán)中存儲用戶選擇的每個(gè)文件路徑。num
是一個(gè)長整型變量,用以存儲用戶選擇的文件數(shù)量。
隨后,我們獲取當(dāng)前文檔。將當(dāng)前正在編輯的Word文檔賦值給word_result
變量,這個(gè)文檔就是要合并其他文檔內(nèi)容的結(jié)果文檔。
接下來,我們打開文件選擇對話框。創(chuàng)建一個(gè)文件選擇對話框?qū)ο螅⒅鹨辉O(shè)置對話框的屬性;其中,允許用戶選擇多個(gè)文件,自定義對話框標(biāo)題,并設(shè)置文件類型過濾器,其中第一個(gè)表示只顯示Word文檔文件,第二個(gè)則表示顯示所有類型的文件。
緊接著,通過If .Show Then
語句,判斷用戶在對話框中是否選擇了文件。如果是的話,執(zhí)行合并操作。其中,首先獲取用戶選擇的文件數(shù)量;隨后,循環(huán)遍歷每個(gè)選擇的文件——打開每個(gè)選擇的文件作為臨時(shí)文檔,將臨時(shí)文檔的全部內(nèi)容復(fù)制到剪貼板;將光標(biāo)定位到目標(biāo)文檔(也就是結(jié)果文件)的最后一個(gè)字符處,并將剪貼板中的內(nèi)容粘貼到目標(biāo)文檔的末尾,同時(shí)在粘貼的內(nèi)容后插入一個(gè)分頁符;最后,關(guān)閉臨時(shí)文檔而不保存更改。接下來,進(jìn)行下一次遍歷。其中需要注意,這里如果我們不添加DoEvents
這句代碼,會導(dǎo)致其下方的Selection.Paste
這句代碼報(bào)錯(cuò)(雖然會報(bào)錯(cuò),但其實(shí)選擇調(diào)試后繼續(xù)按下F5
,程序也還是可以運(yùn)行)。
最后,即可清理變量引用,并計(jì)算合并操作的耗時(shí),將結(jié)果信息顯示在消息框中。
代碼的執(zhí)行方法如下。首先,在任意路徑創(chuàng)建一個(gè)空白的Word文檔,作為我們的結(jié)果文件。隨后,在這個(gè)文檔中,同時(shí)按下Alt
鍵與F11
鍵,進(jìn)入VBA宏界面,如下圖所示。
隨后,在左上角的Normal處右鍵,選擇“插入”→“模塊”,如下圖所示。
隨后,在彈出的窗口中,復(fù)制前述代碼,如下圖所示。
接下來,按下F5
鍵,即可開始運(yùn)行代碼。其中,首先彈出一個(gè)選擇文件的窗口,我們選擇待合并的文件即可;如下圖所示。
隨后,點(diǎn)擊“確定”,即可開始合并文件。稍等片刻,合并完成,并將彈出如下所示界面。
此時(shí),回到我們打開的Word文件中,即可看到文件已經(jīng)被合并在內(nèi)了。
其中,上圖中紫色框所示區(qū)域,就是我這里待合并文件的開頭部分(紫色框內(nèi)紅色的兩段線僅僅是為了遮擋文件中的部分信息,沒有別的含義,大家理解即可)——可以看到,每一次新的文件合并時(shí),都是在新的一頁操作的,符合我們的需求。
至此,大功告成。
到此這篇關(guān)于VBA實(shí)現(xiàn)合并具有文本框的Word文檔的文章就介紹到這了,更多相關(guān)VBA合并Word文檔內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
VBA處理數(shù)據(jù)與Python Pandas處理數(shù)據(jù)案例比較分析
這篇文章主要介紹了VBA處理數(shù)據(jù)與Python Pandas處理數(shù)據(jù)案例比較,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04關(guān)于vba代碼運(yùn)行時(shí)錯(cuò)誤1004?應(yīng)用程序定義或?qū)ο蠖x錯(cuò)誤問題
這篇文章主要介紹了vba代碼運(yùn)行時(shí)錯(cuò)誤1004?應(yīng)用程序定義或?qū)ο蠖x錯(cuò)誤,經(jīng)過一系列問題調(diào)查發(fā)現(xiàn)是工作表中數(shù)據(jù)存在異常,需要的朋友可以參考下2022-10-10VBA實(shí)現(xiàn)合并具有文本框的Word文檔
這篇文章主要為大家詳細(xì)介紹了如何基于VBA語言,對大量含有圖片、文本框與表格的Word文檔加以批量自動(dòng)合并,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-11-11當(dāng)編輯框內(nèi)容改變 對應(yīng)的單元格也隨著改變vba代碼
當(dāng)編輯框內(nèi)容改變 對應(yīng)的單元格也隨著改變vba代碼2009-07-07