![用VBA操作Word_第1頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/27/adfced23-fb48-4276-83f3-7001f5d74529/adfced23-fb48-4276-83f3-7001f5d745291.gif)
![用VBA操作Word_第2頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/27/adfced23-fb48-4276-83f3-7001f5d74529/adfced23-fb48-4276-83f3-7001f5d745292.gif)
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、用VBA操作Word(轉(zhuǎn))在所有 Office 應(yīng)用程序中,Microsoft Word 可能是應(yīng)用最廣泛的應(yīng)用程序,它還經(jīng)常在自定 義 Office 解決方案中扮演重要的角色。開發(fā)人員用各種不同的方式使用Word,有一些方式很簡單,而另一些極其復(fù)雜。無論涉及何種自定義解決方案,用Visual Basic for Applicatio ns (VBA) 處理 Word 文檔的基本方法都是一樣的。在本欄目中,我將概括地介紹如何使用Word,并提供一些關(guān)于如何運用Range 對象處理 Word 文檔內(nèi)容的詳細資料。理解基本方法在 Word 中,幾乎所有的操作都要調(diào)用Document 對象本身或其內(nèi)
2、容。當(dāng)您用 VBA 操作Word 時,Document 對象表示一個打開的文檔,而且所有的Document 對象都是 Application 對象的 Documents 集合的成員。文檔是一個由字符、單詞、句子和段落組成的集合,字符組成單詞,單詞組成句子,句子組成段落,等等。因此,每一個Document 對象都具有 Characters、Words、Sentences 和 Paragraghs 四個集合。此外,每個文檔具有一個包含一個或多個節(jié)的Sections 集合,每一個節(jié)都有一個包含該節(jié)頁眉和頁腳的 HeadersFooters 集合。注意: 您可以在 Microsoft Office 2
3、000 開發(fā)人員對象模型指南(英文)中查閱完整的Word對象模型。另外,您也可以使用對象瀏覽器和Microsoft Word Visual Basic 參考幫助來學(xué)習(xí)有關(guān)具體某個對象、屬性、方法和事件的詳細內(nèi)容。通過 VBA 使用 Word 時,Document 對象處于中心位置。如果您要打開文檔或創(chuàng)建新文檔, 就要創(chuàng)建新的Document 對象。每個打開或新創(chuàng)建的文檔均被添加至Documents 集合。具有焦點的文檔稱為活動文檔,由ActiveDocument 屬性表示。Document 對象作為 Documents 集合中的一個成員,您可以通過使用Document 對象的索引值(Docum
4、ent 對象在 Documents 集合中的位置,1 是集合中的第一個文檔)或名稱來引用它。另 外,您也可以使用 ActiveDocument 屬性來引用當(dāng)前具有焦點的文檔。例如,如果名為Policies.doc的文檔是唯一打開的文檔,則以下三個對象變量將全部指向Policies.doc:Dim docO ne As Word.Docume ntDim docTwo As Word.Docume ntDim docThree As Word.Docume ntSet docO ne = Docume nts(1)Set docTwo = Docume nts(Policies.doc)Set
5、docThree = ActiveDocume nt一般情況下不要使用Documents 集合中的索引值來引用文檔,因為當(dāng)其它文檔打開或關(guān)閉時,某個特定文檔的索引值可能會隨之改變。通常,您可以通過使用ActiveDocument 屬性或使用Documents 集合的 Add 方法或 Open 方法創(chuàng)建的 Document 對象變量。以下示例顯示了如何使用 ActiveDocument 屬性把一個地址添加到當(dāng)前具有焦點的文檔中:With ActiveDocume nt.En velope .Insert Address:=Office Talk _& vbCrLf & One Microsoft
6、 Way & vbCrLf _& Redmo nd, WA 98052, ReturnAddress:= _David Sha nk & vbCrLf & _77 First Street & vbCrLf & _A ny Tow n, USA 12345End With下面的示例說明如何通過使用Documents 集合的 Open 方法,實例化 Document 對象變量。Dim docPolicy As Word.Docume ntSet docPolicy = Docume nts.Ope n(c:my docume ntspolicies.doc)最后一個示例顯示如何通過使用Add 方
7、法,為新的空文檔創(chuàng)建Document 對象的實例。Dim docPolicy As Word.Docume ntSet docPolicy = Docume nts.Add通過使用 Open 方法打開的文檔,或者通過使用Add 方法創(chuàng)建的文檔,都將成為用ActiveDocument 屬性表示的當(dāng)前活動文檔。如果您想使Documents 集合里的其它文檔成為活動文檔,可使用 Document 對象的 Active 方法。一旦您獲取了要操作的Document 對象,絕大部分您想通過VBA 進行的工作將涉及文本的操作。首先要指定文檔的一個部分,然后對它進行某些操作。例如,添加或刪除文本,或者設(shè)置單詞
8、 或字符的格式。您可以使用Range 或 Selection 這兩個對象來完成很多工作。在本月的專欄中,我將只討論 Ran ge 對象。下個月我們將進一步討論Selecti on 對象的具體內(nèi)容。理解Word的段落標(biāo)記當(dāng)您通過程序處理文本時,必須理解Word 如何處理段落標(biāo)記。從根本上來看,Word 文檔不過是一個巨大的字符流。人們傾向于認為文檔是單詞、句子和段落的集合。但實際上,文檔就是一 些字符。每個字符都有一定的作用。某些字符是字母、空格或制表符,另一些字符是段落標(biāo)記或分 頁符。段落標(biāo)記在 Word 文檔中扮演獨特的角色,有時這種角色容易被誤解。段落包含一個段落標(biāo)記 以及所有位于此段落標(biāo)
9、記和前一個段落標(biāo)記之間的文本(不包括前一個段落標(biāo)記)。另外,重要的 是,段落標(biāo)記本包含該段落的所有格式信息。當(dāng)復(fù)制單詞、句子和段落時,如果包含段落標(biāo)記,則所有包含在段落標(biāo)記中的格式信息也被復(fù) 制,并在它們被粘貼到其它位置時應(yīng)用于所屬段落。如果您想從段落中復(fù)制文本并將其粘貼到另一個段落中,但不想同時復(fù)制段落格式,復(fù)制時請 不要包括您要復(fù)制的文本旁邊的段落標(biāo)記。每個空白的 Word 文檔僅有一個段落標(biāo)記,其中同時包含Character 對象、Word 對象、Sentenee 對象和 Paragragh 對象各一個。但是,屬性對話框(文件菜單)中的 統(tǒng)計信息選項卡將報告空白文檔中沒有字符、單詞、句子
10、和段落。這種差異突出顯示了Word 的一個重要側(cè)面,當(dāng)編程操作這些對象時,您需要特別注意這一點。Range 對象Ran ge 對象表示文檔中的一個連續(xù)范圍,由一個起始字符位置和一個終止字符位置定義。這個 連續(xù)范圍可以小到一個插入點,大到整個文檔。它也可能是(而非必須是)由當(dāng)前節(jié)表示的范圍。 您也可以定義一個Range 對象,表示和當(dāng)前節(jié)不同的范圍。也可以在同一個文檔中定義多個Range對象。Range 對象中的字符包含非打印字符,例如,空格、回車符和段落標(biāo)記。使用Range對象創(chuàng)建 Range 對象的典型方法為:聲明一個Range 類型的對象變量,然后用 Document 對象的Range 方
11、法或另一個對象(例如 Character、Word、Sentence 或 Selection 對象)的 Range 屬性來 實例化該變量。例如,以下代碼創(chuàng)建了兩個Range 對象,均表示活動文檔中的第二個句子。Dim rngRa ngeMethod As Word.Ra ngeDim rn gRa ngeProperty As Word.Ra ngeWith ActiveDocume ntIf .Se nten ces.Co unt = 2 ThenSet rngRa ngeMethod = .Ran ge(.Se nten ces(2).Start, _.Se nten ces(2).E n
12、d)Set rn gRa ngeProperty = .Se nten ces(2)End IfEnd With當(dāng)您使用 Range 方法來指定文檔的特定范圍時,您必須使用此方法的 Start 參數(shù)指定這個范圍 開始的位置,使用 End 參數(shù)指定結(jié)束的位置。文檔的第一個字符的字符位置為0。最后一個字符的位置和文檔的字符總數(shù)相等。您可以通過使用Characters 集合的 Count 屬性確定文檔中的字符數(shù)。如前面的示例所示,您也可以使用Bookmark、Selection 或 Range 對象的 Start 和 End 屬性來指定 Range 方法的 Start 和 End 參數(shù)。您可以將St
13、art 和 End 參數(shù)設(shè)置為同一個數(shù)字,這將創(chuàng)建一個不包含任何字符的范圍。您可以使用對象的 SetRa nge 方法設(shè)置或重新定義 Range 對象的內(nèi)容。您也可以通過使用 Range 對象的Start 屬性或 MoveStart 方法指定或重新定義范圍開始的位置。同樣地,您也可以通 過使用 Range 對象的 End 屬性或它的 MoveEnd 方法指定或重新定義范圍結(jié)束的位置。以下示例先用ContentRagne 對象,該對象包含了文檔的所有內(nèi)容。接著,改變EndSetRange方法重新定義范圍,使之包含文檔的第一個段落。最后,使用MoveEnd 方法將范圍的結(jié)束位置擴展至文檔的第二個段
14、落末尾。此示例中的每一步都將當(dāng)前范圍中包含的字符的數(shù)量打印到立即窗口”。Sub Ran geExample()Dim rngSample As RangeSet rn gSample = ActiveDocume nt.C ontentWith rngSampleDebug .Print 范圍現(xiàn)在包含” & .Characters.Count _& ”個字符?!?End = ActiveDocume nt.Se nten ces(1).E ndDebug .Print 范圍現(xiàn)在包含” & .Characters.Count _& ”個字符?!?SetRa nge Start:=0, En d:
15、=ActiveDocume nt._Paragraphs(1).Ra nge.E ndDebug .Print 范圍現(xiàn)在包含 ” & .Characters.Count _& ”個字符?!?MoveE nd Un it:=wdParagraph, Coun t:=1Debug .Print 范圍現(xiàn)在包含 ” & .Characters.Count _& ”個字符?!盓nd WithEnd Sub您也可以通過使用對象的Find 屬性返回 Find 對象,重新定義Range 對象。以下示例演示用Find 屬性在活動文檔中確定文本的位置。如果找到了文本,Range 對象將自動重新定義以包含符合搜索條
16、件的文本。With rn gRa ngeText. Find.ClearFormatt ingIf .Execute(FindText:=Find Me!) ThenrngRangeText 被重新定義。End IfEnd With許多 Word 對象具有可返回Range 對象的 Range 屬性。在您需要使用Range 對象的屬性和方法進行操作,而對象本身又不提供這些屬性和方法的情況下,您可以使用對象的Range 屬性返回Range 對象。例如,以下代碼使用Paragragh 對象的 Ra nge 屬性返回 Range 對象,從而設(shè)置文檔第一個段落中文本的格式:Dim rn gPara As
17、 RangeSet rn gPara = ActiveDocume nt.Paragraphs(1).Ra ngeWith rngPara.Bold = True.ParagraphFormat.Alig nment = wdAlig nParagraphCe nter.Fo nt.Name = ArialEnd With定義 Range 對象后,您可以應(yīng)用此對象的方法和屬性修改所指定范圍的內(nèi)容或獲取有關(guān)信 息。例如,您可以使用Range 對象的 StoryType 屬性來確定 Range 在文檔中的位置。處理Range對象中的文本可以使用 Range 對象的 Text 屬性來指定或確定該范圍
18、包含的文本。例如,以下代碼首先顯示 了 Range對象中的文本,然后更改文本并顯示新文本,最后還原為原始文本。此示例說明了如何使 用 Range 對象的 Range屬性將文本復(fù)制和粘貼到文檔中并同時保持原段落結(jié)構(gòu)不變。請注意在 strNewText 變量中包含段落標(biāo)記(vbCrLf)的新文本如何替換在選定原段落時包含的段落標(biāo)記。Public Sub Cha ngeTextSample()Dim rn gText As RangeDim strOrigi nalText As Stri ngDim strNewText As Stri ngstrNewText = This text is re
19、placing the original _& text in the first paragraph of the active _& docume nt. This is all done using only the _& ” Text property of the Ra nge object! & vbCrLfSet rn gText = ActiveDocume nt.Paragraphs(1).Ra ngeWith rngTextMsgBox .Text, vbOKOnly, This is the original text.strOrigi nalText = .Text.T
20、ext = strNewTextMsgBox .Text, vbOKOnly, This is the new text _& in serted in paragraph 1.Text = strOrigi nalTextMsgBox The origi nal text is restored.End WithEnd Sub您可以使用 Range 對象的 StoryType 屬性確定范圍在文檔中的位置。文檔構(gòu)成部分是指文檔 中包含文本的特定范圍。在一個文檔中最多可以有11 種文檔構(gòu)成部分,表示正文、頁眉、頁腳、批注等不同范圍。您可以使用StoryRanges 屬性返回 StoryRange
21、s 集合。StoryRanges 集合包含Ran ge 對象,表示文檔中的每一個文檔構(gòu)成部分。新 Word 文檔只包含一個文檔構(gòu)成部分,稱為“Main Text,表示文檔主體部分的文本。即使一個空白文檔也包含字符、單詞、句子和段落各一個。您不需要專門將新文檔構(gòu)成部分添加至文檔。當(dāng)您把文本添加至文檔的某個部分(11 種文檔構(gòu)成部分之一)時, Word 會自動添加它們。例如,如果您要添加頁腳,Word 將添加 Foot notes 文檔構(gòu)成部分。如果您要添加批注,Word 將把 Comments 文檔構(gòu)成部分添加到文檔的StoryRanges集合中。您可以使用 Ra nge 屬性返回 Ra nge
22、 對象來表示文檔中的每一個文檔構(gòu)成部分。例如,以下代 碼打印與Main Text 和 Comments 文檔構(gòu)成部分相關(guān)的文本:Dim rngMa in Text As Word.Ra ngeDim rngComme ntsText As Word.Ra ngeSet rn gMa in Text = ActiveDocume nt.StoryRa nges(wdMa in TextStory)Set rn gComme nts = ActiveDocume nt.StoryRa nges(wdComme ntsStory)Debug.Pri nt rn gMa in Text.TextDeb
23、ug.Pri nt rn gComme nts.Text使用 Range 對象的 InsertBefore 或 InsertAfter 方法,可將文本添加至現(xiàn)有Range 對象。事實上,有一整類方法,名稱以“ In sert 開頭,可以用于操作Range 對象。如果有一個過程,能夠把 Range 對象的 InsertBefore 和 InsertAfter 方法與 Text 屬性結(jié)合, 那么它將非常有用。在編程處理文本時,就可以使用這個過程在同一個地方處理大量工作。以下所示的 InsertTextInRange 正是這樣一個過程。無論何時您需要將文本添加到Range 對象,都可以調(diào)用 Inse
24、rtTextInRange 過程。換句話說,無論何時您需要在Word 文檔中編程更改現(xiàn)有的文本,這一過程都將非常有用。InsertTextInRange 過程使用兩個必要的變量和一個可選的變量。strNewText 變量包含您想要添加至 Range 對象的文本,此對象在rngRange 變量中指定。intlnsertMode 可選變量指定將新文本添加至范圍的方式。變量的值是三個自定義枚舉常數(shù)中的一個,指定是否使用InsertBefore 方法、InsertAfter 方法或 Text 屬性替換現(xiàn)有的范圍文本。Public Enum opgText In sertModeBeforeAfterR
25、eplaceEnd EnumFunction In sertTextI nRan ge(strNewText As String, _Optio nal rn gRa nge As Word.Ra nge, _Opti onal intln sertMode As opgText In sertMode = _Replace) As Boolea n此過程將 strNewText 參數(shù)指定文本插入rngRa nge 指定的 Range 對象中。它調(diào)用TsLastCharParagraph 過程從 rngRange對象清除后續(xù)的段落標(biāo)記。Call lsLastCharParagraph(r ng
26、Ra nge, True)With rn gRa ngeSelect Case intln sertModeCase 0 在范圍之前插入文本。n sertBefore strNewTextCase 1 在范圍之后插入文本。n sertAfter strNewTextCase 2 替換范圍中的文本。.Text = strNewTextCase ElseEnd SelectIn sertText InRange = TrueEnd WithEnd Function請注意,在范圍中插入文本之前,使用了 IsLastCharParagraph 過程來刪除最后一個段落的段落 標(biāo)記。以下示例使用 Chr$
27、()函數(shù),以字符代碼13 表示段落標(biāo)記。Function lsLastCharParagraph(ByRef rn gTextRa nge As Word.Ra nge, _Opti onal bln TrimParaMark As Boolea n = False) As Boolea n本過程接受字符、單詞、句子或段落Range作為第一個參數(shù)。如果范圍中的最后一個字符是段落標(biāo)記,則返回True;否則返回 False。本過程還接受一個Boolean 參數(shù),用于指定當(dāng)文本最后存在段落標(biāo)記時,是否將其刪除。當(dāng) blnTrimParaMark 參數(shù)為 True 時,本過程調(diào)用本身來刪除所有后續(xù)的段落標(biāo)記。Dim strLastChar As Stri ngstrLastChar = Right$(rngTextRa nge.Text, 1)If In Str(strLastChar, Chr$(13) = 0 The nIsLastCharParagraph = FalseExit Fun cti onElseIsLastCharParagraph = TrueIf Not bl nTrimParaMark = True The nExit Fun cti onElseDorn gTextRa nge.SetRa nge rngTextR
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度給排水系統(tǒng)設(shè)備安裝與調(diào)試承包合同
- 2025年度健康醫(yī)療大數(shù)據(jù)分析與應(yīng)用服務(wù)合同范本
- 2025年度物流行業(yè)安全風(fēng)險評估合同范本
- 2025年二手商鋪買賣合同樣本(2篇)
- 2025年度廣州租賃市場租賃合同范本(含車位及家具)
- 2025年度杭州二手房買賣合同違約責(zé)任及賠償標(biāo)準(zhǔn)合同
- 2025年度綜合型倉儲庫房承包合同示范范本
- 2025年代理納稅申報合同(2篇)
- 2025年度國際信息技術(shù)咨詢服務(wù)合同規(guī)范
- 2025年度建筑工地勞務(wù)施工勞務(wù)分包合同(專業(yè)分包管理)
- 2025民政局離婚協(xié)議書范本(民政局官方)4篇
- 2024年03月四川農(nóng)村商業(yè)聯(lián)合銀行信息科技部2024年校園招考300名工作人員筆試歷年參考題庫附帶答案詳解
- 小學(xué)一年級數(shù)學(xué)上冊口算練習(xí)題總匯
- 睡眠專業(yè)知識培訓(xùn)課件
- 潤滑油知識-液壓油
- 2024年江蘇省中醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫頻考點附帶答案
- 臨床思維能力培養(yǎng)
- 人教版高中物理必修第三冊第十章靜電場中的能量10-1電勢能和電勢練習(xí)含答案
- 《工程勘察設(shè)計收費標(biāo)準(zhǔn)》(2002年修訂本)
- 中國宗教文化 中國古代宗教文化的特點及現(xiàn)代意義
- 2024年四川省巴中市級事業(yè)單位選聘15人歷年高頻難、易錯點練習(xí)500題附帶答案詳解
評論
0/150
提交評論