版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、用V精選操作Word用VBA操作Word(轉(zhuǎn))在所有Office應(yīng)用程序中,Microsoft Word可能是應(yīng)用最廣泛的應(yīng)用程 序,它還經(jīng)常在自定義Office解決方案中扮演重要的角色。開發(fā)人員用各種不 同的方式使用Word,有一些方式很簡單,而另一些極其復雜。無論涉及何種H 定義解決方案,用Visual Basic for Applications (VBA)處理Word文檔的 基本方法都是一樣的。在本欄目中,我將概括地介紹如何使用Word,并提供一 些關(guān)于如何運用Range對象處理Word文檔內(nèi)容的詳細資料。理解基本方法在Word中,兒乎所有的操作都要調(diào)用Document對象本身或其內(nèi)容
2、。當您 用VBA操作Word時,Document對象表不一個打開的文檔,而且所有的Document對象都是Application對象的Documents集合的成員。文檔是一個由字符、單詞.句子和段落組成的集合,字符組成單詞,單詞組 成句子,句子組成段落,等等。因此,每一個Document對象都具有Characters Words % Sentences 和 Paragraghs 四個集合。此外,每個文檔具 有一個包含一個或多個節(jié)的Sections集合,每一個節(jié)都有一個包含該節(jié)頁眉和 頁腳的HeadersFooterS集合。注意:您可以在Microsoft Office 2000開發(fā)人員對象模型
3、指南(英文) 中查閱完整的Word對象模型。另外,您也可以使用對象瀏覽器和MicrosoftWord Visual Basic參考幫助來學習有關(guān)具體某個對象、屬性.方法和事件的詳 細內(nèi)容。通過VBA使用Word時,Document對象處于中心位置。如果您要打開文檔 或創(chuàng)建新文檔,就要創(chuàng)建新的Document對象。每個打開或新創(chuàng)建的文檔均被添 加至Documents集合。具有焦點的文檔稱為活動文檔,由ActiveDocument屬 性表示。Document對象作為Documents集合中的一個成員,您可以通過使用Document對象的索引值(Document對象在Documents集合中的位置,
4、1是集 合中的第一個文檔)或名稱來引用它。另外,您也可以使用ActiveDocument屬 性來引用當前具有焦點的文檔。例如,如果名為的文檔是唯一打開的文檔,則以下三個對象變量將全部指向:DimdocOne AsDimdocTwo AsDimdocThreeAsSetdocOne =Documents (1)SetdocTwo =Documents ("")SetdocThree= ActiveDocument一般情況下不要使用Documents集合中的索引值來引用文檔,因為當其它 文檔打開或關(guān)閉時,某個特定文檔的索引值可能會隨之改變。通常,您可以通過 使用ActiveDo
5、cument屬性或使用Documents集合的Add方法或Open方法創(chuàng) 建的Document對象變量。以下示例顯75了如何使用ActiveDocument屬性把一 個地址添加到當前具有焦點的文檔中:With ActiveDocument Address :='Office Talk" _& vbCrLf & "One Microsoft Way" & vbCrLf _& "Redmond, WA 98052", ReturnAddress:= _"David Shank" &
6、 vbCrLf & _"77 First Street" & vbCrLf"Any Town, USA 12345"End With下而的示例說明如何通過使用Documents集合的Open方法,實例化Document對象變量。Dim docPolicy AsSet docPolicy = Cc:my documents'")最后一個示例顯示如何通過使用Add方法,為新的空文檔創(chuàng)建Document對象的實例。Dim docPolicyAsSet docPolicy通過使用Open方法打開的文檔,或者通過使用Add方法創(chuàng)建
7、的文檔,都將成為用ActiveDocument屬性表不的當前活動文檔。如果您想使Documents 集合里的其它文檔成為活動文檔,可使用Document對象的Active方法。一旦您獲取了要操作的Document對象,絕大部分您想通過VBA進行的工 作將涉及文本的操作.首先要指定文檔的一個部分,然后對它進行某些操作。例 如,添加或刪除文本,或者設(shè)置單詞或字符的格式。您可以使用Range或Selection這兩個對象來完成很多工作。在本月的專欄中,我將只討論Range 對象。下個月我們將進一步討論Selection對象的具體內(nèi)容。理解Word的段落標記當您通過程序處理文本時,必須理解Word如何
8、處理段落標記。從根本上來 看,Word文檔不過是一個巨大的字符流。人們傾向于認為文檔是單詞、句子和 段落的集合。但實際上,文檔就是一些字符。每個字符都有一定的作用。某些字 符是字母、空格或制表符,另一些字符是段落標記或分頁符。段落標記在Word文檔中扮演獨特的角色,有時這種角色容易被誤解。段落 包含一個段落標記以及所有位于此段落標記和前一個段落標記之間的文本(不包 括前一個段落標記)。另外,重要的是,段落標記本包含該段落的所有格式信當復制單詞、句子和段落時,如果包含段落標記,則所有包含在段落標記中 的格式信息也被復制,并在它們被粘貼到其它位置時應(yīng)用于所屬段落。如果您想從段落中復制文本并將其粘貼
9、到另一個段落中,但不想同時復制段 落格式,復制時請不要包括您要復制的文本旁邊的段落標記。每個空白的Word文檔僅有一個段落標記,其中同時包含Character對 象、Word對象、Sentence對象和Paragragh對象各一個。但是,"屬性"對 話框(“文件”菜單)中的“統(tǒng)計信息”選項卡將報告空白文檔中沒有字符.單 詞.句子和段落。這種差異突出顯示了 Word的一個重要側(cè)面,當編程操作這些 對象時,您需要特別注意這一點。Range對象Range對象表示文檔中的一個連續(xù)范|韋|,由一個起始字符位置和一個終止字 符位置定義。這個連續(xù)范圍可以小到一個插入點,大到整個文檔。它也
10、可能是(而非必須是)由當前節(jié)表示的范圍。您也可以定義一個Range對象,表示和當前節(jié)不同的范W。也可以在同一個文檔中定義多個Range對象。Range對象 中的字符包含非打印字符,例如,空格.回車符和段落標記。使用Rang©對象創(chuàng)建Range對象的典型方法為:聲明一個Range類型的對象變量,然后用Document 對象的 Range 方法或另一個對象(例如 CharacterWord、Sentence 或Selection對象)的Range屬性來實例化該變量。例如,以下代碼創(chuàng)建了兩 個Range對象,均表示活動文檔中的第二個句子。Dim rngRangeMethod AsDim r
11、ngRangeProperty AsWith ActiveDocumentIf . >= 2 ThenSet rngRangeMethod = . Range (. Sentences(2). Start, _ Sentences(2). End)Set rngRangeProperty = . Sentences (2)End IfEnd With當您使用Range方法來指定文檔的特定范ffl時,您必須使用此方法的Start參數(shù)指定這個范I韋1開始的位置,使用End參數(shù)指定結(jié)朿的位置。文檔的第一個字符的字符位置為Oo最后一個字符的位置和文檔的字符總數(shù)相等。您可 以通過使用Charact
12、ers集合的Count屬性確定文檔中的字符數(shù)。如前面的示 例所不,您也可以使用Bookmarks Selection或Range對象的Start和End 屬性來指定Range方法的Start和End參數(shù)。您可以將Start和End參數(shù)設(shè) 置為同一個數(shù)字,這將創(chuàng)建一個不包含任何字符的范您可以使用對象的SetRange方法設(shè)置或重新定義Range對象的內(nèi)容。您 也可以通過使用Range對象的Start屬性或MoveStart方法指定或重新定義 范圍開始的位置。同樣地,您也可以通過使用Range對象的End屬性或它的MoveEnd方法指定或重新定義范圍結(jié)束的位置。以下示例先用ContentRagne
13、對象,該對象包含了文檔的所有內(nèi)容。接著, 改變EndSetRange方法重新定義范使之包含文檔的第一個段落。最后,使 用MoveEnd方法將范圍的結(jié)束位置擴展至文檔的第二個段落末尾。此示例中的 每一步都將當前范ffl中包含的字符的數(shù)量打印到“立即窗口”。Sub RangeExaraple ()Dim rngSaraple As RangeSet rngSample =With rngSample范圍現(xiàn)在包含范圍現(xiàn)在包含.End = (l).End.SetRange Start:=0, End: =Paragraphs(1).范圍現(xiàn)在包含 & _ MoVeEnd Unit: =wdPar
14、agraph, Count: =1范圍現(xiàn)在包含_End WithEnd Sub您也可以通過使用對象的Find屬性返回Find對象,重新定義Range對 象。以下示例演示用Find屬性在活動文檔中確定文本的位置。如果找到了文 本,Range對象將自動重新定義以包含符合搜索條件的文本。WithClearForraattingIf Execute(FindText:二"Find Me!") Then'rngRangeText被重新定義。End IfEnd With許多Word對象具有可返回Range對象的Range屬性。在您需要使用Range對象的屬性和方法進行操作,而對
15、象本身又不提供這些屬性和方法的情況 下,您可以使用對象的Range屬性返回Range對象。例如,以下代碼使用Paragragh對象的Range屬性返回Range對象,從而設(shè)置文檔第一個段落中文 本的格式:Dim rngPara As RangeSet rngPara = (1). RangeWith rngPara Bold = True = wdAlignParagraphCenter"Arial"End With定義Range對象后,您可以應(yīng)用此對象的方法和屬性修改所指定范圍的內(nèi) 容或獲取有關(guān)信息。例如,您可以使用Range對象的StoryType屬性來確定Range在
16、文檔中的位置。處理Range對象中的文本可以使用Range對象的Text屬性來指定或確定該范圍包含的文本。例 如,以下代碼首先顯示了 Range對象中的文本,然后更改文本并顯示新文本, 最后還原為原始文本。此示例說明了如何使用Range對象的Range屬性將文本 復制和粘貼到文檔中并同時保持原段落結(jié)構(gòu)不變。請注意在strNewText變量中 包含段落標記(vbCrLf)的新文本如何替換在選定原段落時包含的段落標記。Public Sub ChangeTextSample()Dim rngText As RangeDim strOriginalText As StringDim strNewTex
17、t As StringStrNewText = "This text is replacing the original _text in the first paragraph of the active" _ document. This is all done using only the" _Text property of the Range object!" & vbCrLfSetrngText = (1). RangeWith rngTextMsgBox . Text, vbOKOnly, "This is the ori
18、ginal text."StrOriginalText = . Text Text = StrNewTextMsgBox . Text, vbOKOnly, "This is the new text" _& " inserted in paragraph 1." Text = StrOriginalTextMsgBox "The original text is restored."您可以使用Range對象的StoryType屬性確定范圍在文檔中的位置。文檔 構(gòu)成部分是指文檔中包含文本的特定范鬧。在一個文檔中最多可
19、以有11種文檔 構(gòu)成部分,表示正文、頁眉、頁腳、批注等不同范圍。您可以使用StoryRanges 屬性返回StoryRanges集合。StoryRanges集合包含Range對象,表示文檔中 的每一個文檔構(gòu)成部分。新Word文檔只包含一個文檔構(gòu)成部分,稱為"Main Text",表示文檔主 體部分的文本。即使一個空白文檔也包含字符、單詞.句子和段落各一個。您不需要專門將新文檔構(gòu)成部分添加至文檔。當您把文本添加至文檔的某個 部分(11種文檔構(gòu)成部分之一)時,Word會目動添加它們。例如,如果您要添 加頁腳,Word將添加Footnotes文檔構(gòu)成部分。如果您要添加批注,Wor
20、d將 把Comments文檔構(gòu)成部分添加到文檔的StoryRanges集合中。您可以使用Range屬性返回Range對象來表示文檔中的每一個文檔構(gòu)成部 分。例如,以下代碼打印與Main Text和Comments文檔構(gòu)成部分相關(guān)的文 本:Dim rngMainText AsDim rngCommentsText AsSet rngMainText = (wdMainTextStory)Set rngComments = (wdComment sStory)使用Range對象的InsertBefore或InsertAfter方法,可將文本添加至 現(xiàn)有Range對象。事實上,有一整類方法,名稱以“
21、Insert"開頭,可以用于 操作Range對象o如果有1個過程,能夠把Range對象的InsertBefore和InsertAfter方 法與Text屬性結(jié)合,那么它將非常有用。在編程處理文本時,就可以使用這個 過程在同一個地方處理大量工作。以下所示的InsertTextlnRange正是這樣一 個過程。無論何時您需要將文本添加到Range對象,都可以調(diào)用InsertTextInRange過程©換句話說,無論何時您需要在Word文檔中編程更改 現(xiàn)有的文本,這一過程都將非常有用。InsertTextInRange過程使用兩個必要的變量和一個可選的變量。strNewText變
22、量包含您想要添加至Range對象的文本,此對象在rngRange變 量中指定。intInsertMode可選變量指定將新文本添加至范圍的方式。變量的值 是三個自定義枚舉常數(shù)中的一個,指定是否使用InsertBefore方法、InsertAfter方法或Text屬性替換現(xiàn)有的范圍文本。Public Enum opgTextInsertModeBeforeAfterReplaceFunction InsertTextInRange(strNewText As String, _Optional rngRange As , _End EnumOptional intInsertMode As opg
23、TextInsertModeReplace) As Boolean'此過程將strNewText參數(shù)指定文本插入'rngRange指定的Range對象中。它調(diào)用' I sLas t Char Paragraph 過程從 rngRange'對象清除后續(xù)的段落標記。Call IsLastCharParagraph(rngRange, True)With rngRangeSelect Case intInsertModeCase 0 '在范M之前插入文本。 InsertBefore strNewTextCase 1 '在范圍之后插入文本。 Insert
24、After strNewTextCase 2 '替換范圉中的文本。 Text = StrNewTextCase ElseInsertTextInRange = TrueEnd WithEnd SelectEnd Function請注意,在范圍中插入文本之前,使用了 IsLastCharParagraph過程來刪除最后一個段落的段落標記。以下示例使用Chr$ 0函數(shù),以字符代碼13表示段落標記。Function IsLastCharParagraph(ByRef rngTextRange As , _Optional blnTrimParaMark As Boolean = False)
25、 As Boolean'本過程接受字符、單詞、句子或段落Range'作為第一個參數(shù)。如果范圍中的最后一個字符'是段落標記,則返回True;否則返回Falseo'本過程還接受一個Boolean參數(shù),用于指定'當文本最后存在段落標記時,是否將其刪除。'當blnTrimParaMark參數(shù)為True時,本過'程調(diào)用本身來刪除所有后續(xù)的段落標記。Dim strLastChar As StringstrLastChar = Right$, 1)If InStr (strLastChar, Chr$(13) = 0 ThenIsLastCharParagraph = FalseExit FunctionElseIsLastCharParagraph = TrueIf Not b1nTrimParaMark = True ThenExit
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度金融行業(yè)兼職財務(wù)人員勞務(wù)合同協(xié)議2篇
- 2025年人教版拓展型課程化學下冊階段測試試卷含答案
- 二零二五年度個人住宅買賣合同書模板9篇
- 二零二五年度房地產(chǎn)經(jīng)紀人傭金結(jié)算方法合同3篇
- 2025年度出租車行業(yè)安全責任管理與保障合同3篇
- 二零二五年建筑勞務(wù)派遣人員管理服務(wù)合同3篇
- 2025年冀教版選修4化學上冊階段測試試卷
- 2025年外研版五年級英語下冊階段測試試卷
- 2025年人教版高一數(shù)學上冊階段測試試卷
- 2025年新科版必修3物理下冊階段測試試卷
- 2024年新教材七年級上冊道德與法治2.1《認識自己》教學設(shè)計
- 【人教版】二年級數(shù)學上冊說課稿-第2課時 直角的認識
- 人員密集場所消防安全標準化管理規(guī)定
- 2024年印尼認知評估和培訓解決方案市場競爭態(tài)勢與及未來趨勢預測報告
- JTG F40-2004 公路瀝青路面施工技術(shù)規(guī)范
- 成都市2022級(2025屆)高中畢業(yè)班摸底測試(零診)英語試卷(含答案)
- 光伏發(fā)電技術(shù)在建筑中的應(yīng)用
- NB∕T 10805-2021 水電工程潰壩洪水與非恒定流計算規(guī)范
- (高清版)JTGT 3331-04-2023 多年凍土地區(qū)公路設(shè)計與施工技術(shù)規(guī)范
- 江蘇省南京市玄武區(qū)2022-2023學年七年級下學期期末語文試題
- 《金屬非金屬地下礦山監(jiān)測監(jiān)控系統(tǒng)建設(shè)規(guī)范》
評論
0/150
提交評論