用VBA操作Word_第1頁(yè)
用VBA操作Word_第2頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余6頁(yè)可下載查看

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、用VBA操作Word(轉(zhuǎn))在所有 Office 應(yīng)用程序中,Microsoft Word 可能是應(yīng)用最廣泛的應(yīng)用程序,它還經(jīng)常在自定 義 Office 解決方案中扮演重要的角色。開發(fā)人員用各種不同的方式使用Word,有一些方式很簡(jiǎn)單,而另一些極其復(fù)雜。無(wú)論涉及何種自定義解決方案,用Visual Basic for Applicatio ns (VBA) 處理 Word 文檔的基本方法都是一樣的。在本欄目中,我將概括地介紹如何使用Word,并提供一些關(guān)于如何運(yùn)用Range 對(duì)象處理 Word 文檔內(nèi)容的詳細(xì)資料。理解基本方法在 Word 中,幾乎所有的操作都要調(diào)用Document 對(duì)象本身或其內(nèi)

2、容。當(dāng)您用 VBA 操作Word 時(shí),Document 對(duì)象表示一個(gè)打開的文檔,而且所有的Document 對(duì)象都是 Application 對(duì)象的 Documents 集合的成員。文檔是一個(gè)由字符、單詞、句子和段落組成的集合,字符組成單詞,單詞組成句子,句子組成段落,等等。因此,每一個(gè)Document 對(duì)象都具有 Characters、Words、Sentences 和 Paragraghs 四個(gè)集合。此外,每個(gè)文檔具有一個(gè)包含一個(gè)或多個(gè)節(jié)的Sections 集合,每一個(gè)節(jié)都有一個(gè)包含該節(jié)頁(yè)眉和頁(yè)腳的 HeadersFooters 集合。注意: 您可以在 Microsoft Office 2

3、000 開發(fā)人員對(duì)象模型指南(英文)中查閱完整的Word對(duì)象模型。另外,您也可以使用對(duì)象瀏覽器和Microsoft Word Visual Basic 參考幫助來(lái)學(xué)習(xí)有關(guān)具體某個(gè)對(duì)象、屬性、方法和事件的詳細(xì)內(nèi)容。通過(guò) VBA 使用 Word 時(shí),Document 對(duì)象處于中心位置。如果您要打開文檔或創(chuàng)建新文檔, 就要?jiǎng)?chuàng)建新的Document 對(duì)象。每個(gè)打開或新創(chuàng)建的文檔均被添加至Documents 集合。具有焦點(diǎn)的文檔稱為活動(dòng)文檔,由ActiveDocument 屬性表示。Document 對(duì)象作為 Documents 集合中的一個(gè)成員,您可以通過(guò)使用Document 對(duì)象的索引值(Docum

4、ent 對(duì)象在 Documents 集合中的位置,1 是集合中的第一個(gè)文檔)或名稱來(lái)引用它。另 外,您也可以使用 ActiveDocument 屬性來(lái)引用當(dāng)前具有焦點(diǎn)的文檔。例如,如果名為Policies.doc的文檔是唯一打開的文檔,則以下三個(gè)對(duì)象變量將全部指向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 集合中的索引值來(lái)引用文檔,因?yàn)楫?dāng)其它文檔打開或關(guān)閉時(shí),某個(gè)特定文檔的索引值可能會(huì)隨之改變。通常,您可以通過(guò)使用ActiveDocument 屬性或使用Documents 集合的 Add 方法或 Open 方法創(chuàng)建的 Document 對(duì)象變量。以下示例顯示了如何使用 ActiveDocument 屬性把一個(gè)地址添加到當(dāng)前具有焦點(diǎn)的文檔中: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下面的示例說(shuō)明如何通過(guò)使用Documents 集合的 Open 方法,實(shí)例化 Document 對(duì)象變量。Dim docPolicy As Word.Docume ntSet docPolicy = Docume nts.Ope n(c:my docume ntspolicies.doc)最后一個(gè)示例顯示如何通過(guò)使用Add 方

7、法,為新的空文檔創(chuàng)建Document 對(duì)象的實(shí)例。Dim docPolicy As Word.Docume ntSet docPolicy = Docume nts.Add通過(guò)使用 Open 方法打開的文檔,或者通過(guò)使用Add 方法創(chuàng)建的文檔,都將成為用ActiveDocument 屬性表示的當(dāng)前活動(dòng)文檔。如果您想使Documents 集合里的其它文檔成為活動(dòng)文檔,可使用 Document 對(duì)象的 Active 方法。一旦您獲取了要操作的Document 對(duì)象,絕大部分您想通過(guò)VBA 進(jìn)行的工作將涉及文本的操作。首先要指定文檔的一個(gè)部分,然后對(duì)它進(jìn)行某些操作。例如,添加或刪除文本,或者設(shè)置單詞

8、 或字符的格式。您可以使用Range 或 Selection 這兩個(gè)對(duì)象來(lái)完成很多工作。在本月的專欄中,我將只討論 Ran ge 對(duì)象。下個(gè)月我們將進(jìn)一步討論Selecti on 對(duì)象的具體內(nèi)容。理解Word的段落標(biāo)記當(dāng)您通過(guò)程序處理文本時(shí),必須理解Word 如何處理段落標(biāo)記。從根本上來(lái)看,Word 文檔不過(guò)是一個(gè)巨大的字符流。人們傾向于認(rèn)為文檔是單詞、句子和段落的集合。但實(shí)際上,文檔就是一 些字符。每個(gè)字符都有一定的作用。某些字符是字母、空格或制表符,另一些字符是段落標(biāo)記或分 頁(yè)符。段落標(biāo)記在 Word 文檔中扮演獨(dú)特的角色,有時(shí)這種角色容易被誤解。段落包含一個(gè)段落標(biāo)記 以及所有位于此段落標(biāo)

9、記和前一個(gè)段落標(biāo)記之間的文本(不包括前一個(gè)段落標(biāo)記)。另外,重要的 是,段落標(biāo)記本包含該段落的所有格式信息。當(dāng)復(fù)制單詞、句子和段落時(shí),如果包含段落標(biāo)記,則所有包含在段落標(biāo)記中的格式信息也被復(fù) 制,并在它們被粘貼到其它位置時(shí)應(yīng)用于所屬段落。如果您想從段落中復(fù)制文本并將其粘貼到另一個(gè)段落中,但不想同時(shí)復(fù)制段落格式,復(fù)制時(shí)請(qǐng) 不要包括您要復(fù)制的文本旁邊的段落標(biāo)記。每個(gè)空白的 Word 文檔僅有一個(gè)段落標(biāo)記,其中同時(shí)包含Character 對(duì)象、Word 對(duì)象、Sentenee 對(duì)象和 Paragragh 對(duì)象各一個(gè)。但是,屬性對(duì)話框(文件菜單)中的 統(tǒng)計(jì)信息選項(xiàng)卡將報(bào)告空白文檔中沒(méi)有字符、單詞、句子

10、和段落。這種差異突出顯示了Word 的一個(gè)重要側(cè)面,當(dāng)編程操作這些對(duì)象時(shí),您需要特別注意這一點(diǎn)。Range 對(duì)象Ran ge 對(duì)象表示文檔中的一個(gè)連續(xù)范圍,由一個(gè)起始字符位置和一個(gè)終止字符位置定義。這個(gè) 連續(xù)范圍可以小到一個(gè)插入點(diǎn),大到整個(gè)文檔。它也可能是(而非必須是)由當(dāng)前節(jié)表示的范圍。 您也可以定義一個(gè)Range 對(duì)象,表示和當(dāng)前節(jié)不同的范圍。也可以在同一個(gè)文檔中定義多個(gè)Range對(duì)象。Range 對(duì)象中的字符包含非打印字符,例如,空格、回車符和段落標(biāo)記。使用Range對(duì)象創(chuàng)建 Range 對(duì)象的典型方法為:聲明一個(gè)Range 類型的對(duì)象變量,然后用 Document 對(duì)象的Range 方

11、法或另一個(gè)對(duì)象(例如 Character、Word、Sentence 或 Selection 對(duì)象)的 Range 屬性來(lái) 實(shí)例化該變量。例如,以下代碼創(chuàng)建了兩個(gè)Range 對(duì)象,均表示活動(dòng)文檔中的第二個(gè)句子。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 方法來(lái)指定文檔的特定范圍時(shí),您必須使用此方法的 Start 參數(shù)指定這個(gè)范圍 開始的位置,使用 End 參數(shù)指定結(jié)束的位置。文檔的第一個(gè)字符的字符位置為0。最后一個(gè)字符的位置和文檔的字符總數(shù)相等。您可以通過(guò)使用Characters 集合的 Count 屬性確定文檔中的字符數(shù)。如前面的示例所示,您也可以使用Bookmark、Selection 或 Range 對(duì)象的 Start 和 End 屬性來(lái)指定 Range 方法的 Start 和 End 參數(shù)。您可以將St

13、art 和 End 參數(shù)設(shè)置為同一個(gè)數(shù)字,這將創(chuàng)建一個(gè)不包含任何字符的范圍。您可以使用對(duì)象的 SetRa nge 方法設(shè)置或重新定義 Range 對(duì)象的內(nèi)容。您也可以通過(guò)使用 Range 對(duì)象的Start 屬性或 MoveStart 方法指定或重新定義范圍開始的位置。同樣地,您也可以通 過(guò)使用 Range 對(duì)象的 End 屬性或它的 MoveEnd 方法指定或重新定義范圍結(jié)束的位置。以下示例先用ContentRagne 對(duì)象,該對(duì)象包含了文檔的所有內(nèi)容。接著,改變EndSetRange方法重新定義范圍,使之包含文檔的第一個(gè)段落。最后,使用MoveEnd 方法將范圍的結(jié)束位置擴(kuò)展至文檔的第二個(gè)段

14、落末尾。此示例中的每一步都將當(dāng)前范圍中包含的字符的數(shù)量打印到立即窗口”。Sub Ran geExample()Dim rngSample As RangeSet rn gSample = ActiveDocume nt.C ontentWith rngSampleDebug .Print 范圍現(xiàn)在包含” & .Characters.Count _& ”個(gè)字符?!?End = ActiveDocume nt.Se nten ces(1).E ndDebug .Print 范圍現(xiàn)在包含” & .Characters.Count _& ”個(gè)字符?!?SetRa nge Start:=0, En d:

15、=ActiveDocume nt._Paragraphs(1).Ra nge.E ndDebug .Print 范圍現(xiàn)在包含 ” & .Characters.Count _& ”個(gè)字符。”.MoveE nd Un it:=wdParagraph, Coun t:=1Debug .Print 范圍現(xiàn)在包含 ” & .Characters.Count _& ”個(gè)字符。”End WithEnd Sub您也可以通過(guò)使用對(duì)象的Find 屬性返回 Find 對(duì)象,重新定義Range 對(duì)象。以下示例演示用Find 屬性在活動(dòng)文檔中確定文本的位置。如果找到了文本,Range 對(duì)象將自動(dòng)重新定義以包含符合搜索條

16、件的文本。With rn gRa ngeText. Find.ClearFormatt ingIf .Execute(FindText:=Find Me!) ThenrngRangeText 被重新定義。End IfEnd With許多 Word 對(duì)象具有可返回Range 對(duì)象的 Range 屬性。在您需要使用Range 對(duì)象的屬性和方法進(jìn)行操作,而對(duì)象本身又不提供這些屬性和方法的情況下,您可以使用對(duì)象的Range 屬性返回Range 對(duì)象。例如,以下代碼使用Paragragh 對(duì)象的 Ra nge 屬性返回 Range 對(duì)象,從而設(shè)置文檔第一個(gè)段落中文本的格式: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 對(duì)象后,您可以應(yīng)用此對(duì)象的方法和屬性修改所指定范圍的內(nèi)容或獲取有關(guān)信 息。例如,您可以使用Range 對(duì)象的 StoryType 屬性來(lái)確定 Range 在文檔中的位置。處理Range對(duì)象中的文本可以使用 Range 對(duì)象的 Text 屬性來(lái)指定或確定該范圍

18、包含的文本。例如,以下代碼首先顯示 了 Range對(duì)象中的文本,然后更改文本并顯示新文本,最后還原為原始文本。此示例說(shuō)明了如何使 用 Range 對(duì)象的 Range屬性將文本復(fù)制和粘貼到文檔中并同時(shí)保持原段落結(jié)構(gòu)不變。請(qǐng)注意在 strNewText 變量中包含段落標(biāo)記(vbCrLf)的新文本如何替換在選定原段落時(shí)包含的段落標(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 對(duì)象的 StoryType 屬性確定范圍在文檔中的位置。文檔構(gòu)成部分是指文檔 中包含文本的特定范圍。在一個(gè)文檔中最多可以有11 種文檔構(gòu)成部分,表示正文、頁(yè)眉、頁(yè)腳、批注等不同范圍。您可以使用StoryRanges 屬性返回 StoryRange

21、s 集合。StoryRanges 集合包含Ran ge 對(duì)象,表示文檔中的每一個(gè)文檔構(gòu)成部分。新 Word 文檔只包含一個(gè)文檔構(gòu)成部分,稱為“Main Text,表示文檔主體部分的文本。即使一個(gè)空白文檔也包含字符、單詞、句子和段落各一個(gè)。您不需要專門將新文檔構(gòu)成部分添加至文檔。當(dāng)您把文本添加至文檔的某個(gè)部分(11 種文檔構(gòu)成部分之一)時(shí), Word 會(huì)自動(dòng)添加它們。例如,如果您要添加頁(yè)腳,Word 將添加 Foot notes 文檔構(gòu)成部分。如果您要添加批注,Word 將把 Comments 文檔構(gòu)成部分添加到文檔的StoryRanges集合中。您可以使用 Ra nge 屬性返回 Ra nge

22、 對(duì)象來(lái)表示文檔中的每一個(gè)文檔構(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 對(duì)象的 InsertBefore 或 InsertAfter 方法,可將文本添加至現(xiàn)有Range 對(duì)象。事實(shí)上,有一整類方法,名稱以“ In sert 開頭,可以用于操作Range 對(duì)象。如果有一個(gè)過(guò)程,能夠把 Range 對(duì)象的 InsertBefore 和 InsertAfter 方法與 Text 屬性結(jié)合, 那么它將非常有用。在編程處理文本時(shí),就可以使用這個(gè)過(guò)程在同一個(gè)地方處理大量工作。以下所示的 InsertTextInRange 正是這樣一個(gè)過(guò)程。無(wú)論何時(shí)您需要將文本添加到Range 對(duì)象,都可以調(diào)用 Inse

24、rtTextInRange 過(guò)程。換句話說(shuō),無(wú)論何時(shí)您需要在Word 文檔中編程更改現(xiàn)有的文本,這一過(guò)程都將非常有用。InsertTextInRange 過(guò)程使用兩個(gè)必要的變量和一個(gè)可選的變量。strNewText 變量包含您想要添加至 Range 對(duì)象的文本,此對(duì)象在rngRange 變量中指定。intlnsertMode 可選變量指定將新文本添加至范圍的方式。變量的值是三個(gè)自定義枚舉常數(shù)中的一個(gè),指定是否使用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此過(guò)程將 strNewText 參數(shù)指定文本插入rngRa nge 指定的 Range 對(duì)象中。它調(diào)用TsLastCharParagraph 過(guò)程從 rngRange對(duì)象清除后續(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請(qǐng)注意,在范圍中插入文本之前,使用了 IsLastCharParagraph 過(guò)程來(lái)刪除最后一個(gè)段落的段落 標(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本過(guò)程接受字符、單詞、句子或段落Range作為第一個(gè)參數(shù)。如果范圍中的最后一個(gè)字符是段落標(biāo)記,則返回True;否則返回 False。本過(guò)程還接受一個(gè)Boolean 參數(shù),用于指定當(dāng)文本最后存在段落標(biāo)記時(shí),是否將其刪除。當(dāng) blnTrimParaMark 參數(shù)為 True 時(shí),本過(guò)程調(diào)用本身來(lái)刪除所有后續(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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論