Microsoft Word 對象目 錄
Visual Basic支持一個對象集合,該集合中的對象直接對應于Microsoft Word 97中的元素,并且通過用戶界面,用戶熟悉這些元素中的絕大多數(shù)。例如,Document 對象代表了一個打開的文檔,Bookmark對象代表了一個文檔中的書簽,而Selection對象則代表了在一個文檔窗口窗格中的選定內容。在Word中,每一類元素-文檔、表格、段落、書簽、域等等-都可以用Visual Basic的對象來表示。要在Word中自動執(zhí)行任務,可以使用這些對象的方法和屬性。 關于理解和使用Microsoft Office 97對象模型的一般性內容,請參閱本書的第二章“理解對象模型”。在Microsoft Office 97中的對象模型相當豐富,其中包含了大約180個對象。要查看Word對象模型的層次關系圖,請參閱“幫助”中的“Microsoft Word 對象”。要獲得對某種特定對象的詳細描述,可以在此圖中單擊該對象的名字,或是在“幫助”的索引中對特定對象進行搜索。 怎樣顯示W(wǎng)ord Visual Basic幫助 要使用Word Visual Basic幫助,必須在安裝過程中選擇“自定義”的安裝方式,并且為Word選中“Visual Basic在線幫助”復選框。否則,安裝程序不會安裝Visual Basic幫助。如果用戶已經(jīng)安裝好了Word,那么可以再次運行Setup程序來安裝Visual Basic幫助。 要查看Word Visual Basic 幫助,可以在“Visual Basic 編輯器里的“幫助”菜單中點擊“目錄和索引”一項。在“幫助主題”對話框的“目錄”一表中,雙擊“Microsoft Word Visual Basic 參考”,然后再雙擊“Visual Basic 參考”。“幫助主題”對話框會重新出現(xiàn),顯示出Microsoft Word Visual Basic的目錄和索引。
在用戶啟動一個Word 時段的同時,也創(chuàng)建了一個Application對象。用戶可以使用Application 對象的屬性或方法來控制或返回應用程序范圍內的特性、控制應用程序窗口的外觀或者調整Word 對象模型的其他方面??梢允褂肁pplication屬性來返回Word Application 對象。以下的示例從視圖狀態(tài)切換到打印預覽狀態(tài)。
Application對象的一些屬性控制著應用程序的外觀。例如,如果DisplayStatusBar屬性為True(真),那么狀態(tài)欄是可見的,如果WindowState屬性值為wdWindowStateMaximize,那么應用程序窗口處于最大化狀態(tài)。以下的示例設置了屏幕上應用程序窗口的大小。
Application對象的屬性也可以訪問處于對象層次中較低級的對象,比如Windows集合(代表了當前所有打開的窗口)和Documents集合(代表了當前所有打開的文檔)。用戶可以使用屬性,有時候也叫做訪問者,從對象層次中最高一級的Application對象向下訪問到較低級的對象(Document對象、Window對象、 Selection對象等等)??梢允褂靡韵聝蓚€示例之一來打開MyDoc.doc。
因為Document屬性是共用的,所以Application屬性是可選的。共用屬性和方法無需Application 對象限定符。要在“對象瀏覽器”中瀏覽共用屬性和方法的列表,可以在“類別”欄中單擊“<共用>”。共用項就會列在“成員”欄中。 注釋 Option對象包含了控制Word 共用行為的一些屬性。許多Option對象的屬性對應于Option對話框中的各項(Tools 菜單)。使用Application 對象的Option屬性可以返回Option 對象。以下的示例設置了三個應用程序范圍內的選項(因為Option屬性是共用的,所以在本示例中無需Application屬性)。
當用戶在Word中打開或創(chuàng)建一個文件的同時,也創(chuàng)建了一個Document對象。用戶可以使用Document對象或Documents集合的屬性或方法來打開、創(chuàng)建、保存、激活或者關閉文件。 返回Document對象 用戶可以使用語法Documents (index)來返回作為一個Document對象的任何打開的文檔,在這里index是該文檔的名字或索引號。在以下的示例中,變量myDoc包含一個Document對象,該對象代表名為“Report.doc”的打開的文檔。
索引號代表了文檔在Documents集合中的位置。在以下的示例中,變量myDoc包含了一個Document對象,該對象代表Documents集合中的第一個文檔。
注釋 因為當用戶添加或關閉多個文檔時,某個特定文檔的索引號會發(fā)生改變,所以最好使用文檔的名字來對Documents集合中的Document對象進行索引。 除了通過文檔的名字或索引號來引用文檔,還可以使用ActiveDocument屬性來返回一個引用活動文檔(當前著眼的文檔)的Document對象。以下的示例顯示產活動文檔的名字;如果沒有打開的文檔,則該示例顯示一條消息。
打開文檔 要打開一個已經(jīng)存在的文檔,可以使用Open方法。Open方法應用于通過Document屬性返回的Documents集合。以下的示例打開了文件Test.doc(從當前文件夾)并且啟動了更改跟蹤。
注意到在上例中Open方法的返回值是一個Document對象,該對象表示剛被打開的文檔。在此示例中的文件名不包含路徑;因此,是假定了該文件在當前的文件夾中。但這會導致出現(xiàn)一個運行時錯誤,因為一旦用戶創(chuàng)建了與當前文件夾不同的文件夾,Visual Basic就再也找不到該文件了。但是,用戶可以通過指明完整的路徑,就如同下表所示的那樣,來確保打開正確的文件。
如果用戶的宏只用于一種文件系統(tǒng),那么可以在FileName參數(shù)中指定路徑分隔符(“\”或者“:”),就如同上表所示的那樣。以下示例顯示了與文件系統(tǒng)無關的代碼,可以用來打開Sales.doc,并且假定Sales.doc已經(jīng)保存在Word 的程序文件夾中。
PathSeparator屬性返回當前文件系統(tǒng)(例如,“\”用于MS-DOS/Windows的文件分配表,或者“:”用于Macintosh)的正確的文件分隔符。DefaultFilePath屬性返回文件的位置,比如文檔所在文件夾的路徑、程序文件夾或者當前文件夾。 如果所指定的文件名既沒有在當前文件夾(如果沒有指定路徑)出現(xiàn)也沒有在指定的文件夾(如果指定了路徑)中出現(xiàn),那么就會發(fā)生錯誤。以下的示例使用FileSearch對象的屬性和方法來判斷名為“Test.doc”的文件是否存在于用戶的默認文檔文件夾中。如果找到了該文件(FoundFiles. Count = 1),那么就打開它;否則,顯示一條消息。
也可以允許用戶選擇要打開的文件,而不是定死Open方法的FileName參數(shù)值。如同以下示例所示的那樣,可以使用帶有wdDialogFileOpen常量的Dialogs屬性來返回一個Dialog 對象,該對象表示“打開”對話框(在“文件”菜單中)。Show方法可以顯示并且執(zhí)行在“打開”對話框中完成的動作。
Display 方法只是用來顯示特定的對話框而不作任何更多的操作。以下的示例檢查Display方法的返回值。如果用戶單擊“確定”來關閉對話框,返回值-1并且打開所選擇的文件,該文件的名字保存在變量fSelected中。
要對如何顯示W(wǎng)ord對話框作進一步了解,請參閱“幫助”中的“顯示內置Word 對話框”一節(jié)的內容。 要判斷某個特殊的文檔是否打開,可以使用一條For Each…Next語句來對Documents集合進行列舉。如果名為“Sample.doc”的文檔已經(jīng)被打開了,以下的示例就激活它;如果它尚未被打開,則該示例會打開它。
可以使用Count屬性來確定當前打開文檔的數(shù)目。Count屬性應用于Documents集合,可以使用Document屬性返回該集合。如果沒有已打開的文檔,以下的示例會顯示一條消息。
創(chuàng)建和保存文檔 要創(chuàng)建一個新文檔,可以對Documents集合應用Add 方法。以下的示例創(chuàng)建了一個新文檔。
Add方法返回了僅作為一個Document對象而創(chuàng)建的文檔。當用戶添加一個文檔時,可以設置Add 方法的返回值是一個對象變量,以便用戶可以在自己的代碼中引用該新文檔。以下的示例創(chuàng)建了一個新文檔,并且設置它的上邊距為1.25英寸。
第一次保存新文檔時,可以隨Document對象使用SaveAs方法。以下的示例將名為“Temp.doc”的活動文檔保存在當前文件夾中。
在文檔被保存之后,用戶可以使用它的文檔名來調整Document對象。以下的示例創(chuàng)建了一個新文檔并且立刻把它保存為“1996 Sales.doc”。然后,該示例使用新名字來作Documents集合中的該文檔的索引,并且向該文檔添加一張表格。
要保存對一個已經(jīng)存在的文檔所進行的更改,可以隨同Document對象使用Save方法。以下的指令保存了名為“Sales.doc”的文檔。
如果用戶隨同一個尚未保存的文檔或模板使用Save方法,將會顯示“另存為”對話框來提示用戶為該文件取名。要保存所有打開的文檔,可以對Documents集合應用Save方法。以下的示例保存了所有打開的文檔,但沒有提示用戶為文件取名。
激活一個文檔 要使另一個文檔成為活動文檔,可以對Document對象應用Activate方法。以下的示例激活了打開的文檔(MyDocument.doc)。
以下的示例打開了兩個文檔,然后激活其中的第一個文檔(Sample.doc)。
打印一個文檔 要打印一個文檔,可以對Document對象應用PrintOut 方法,如以下示例所示。
要通過程序來設置那些也可以在“打印”對話框(在“文件”菜單中)里進行設置的打印選項,可以使用PrintOut 方法的參數(shù)來實現(xiàn)。用戶可以使用Options 對象的屬性來設置打印選項,這些選項也可以在“選項”對話框(在“工具”菜單中)“打印”一表里進行設置。以下示例設置活動文檔打印隱藏的文字,并且只打印出前三頁。
關閉文檔 要關閉一個文檔,可以對Document對象應用Close方法。以下的示例關閉了名為“Sales.doc”的文檔。
如果對文檔進行過修改,Word會顯示出一條消息來詢問用戶是否要保存所進行的修改。用戶可以隨SaveChanges參數(shù)使用wdDoNotSaveChanges或 wdSaveChanges常量來使該提示不再出現(xiàn)。以下的示例保存并且關閉了Sales.doc。
要關閉所有已打開的文檔,可以對Documents集合應用Close方法。以下的示例沒有保存修改就關閉了所有的文檔。
訪問文檔中的對象 用戶可以從Document對象來訪問返回對象的一系列屬性和方法。要查看在Document對象中所能使用的對象的層次關系圖,可以參閱“幫助”中的“Microsoft Word對象(Documents)”。例如,Table屬性,它能夠返回一個Table對象的集合,可以在Document對象中使用。隨著一個集合對象使用的Count屬性能夠判斷在該集合中所包含的項數(shù)。以下的示例顯示一條消息來指出在活動文檔中有多少表格。
使用Table(index)可以返回一個單張表格對象,這里的index是索引號。在以下的示例中,myTable代表“Sales.doc”文檔里的第一張表格。
關于返回一個特殊對象的信息可以從“幫助”中的對象主題本身 (例如,“Table 對象”)和相應的集合對象主題(例如,“Table集合對象”)中獲得。 向文檔添加對象 可以使用隨著能在Document對象中訪問的集合對象的Add方法來向文檔添加諸如腳注、備注或表格這樣的對象。例如,以下命令在myRange變量(myRange是一個包含了一個Range對象的對象變量)所指定的位置上添加了一張3x3的表格。
以下的示例在myRange變量所指定的位置上添加了一個腳注。
要獲得支持Add方法的集合對象列表,請參閱“幫助”中的“Add 方法”。
當使用Visual Basic時一個常見的任務就是在文檔中指定一塊區(qū)域,然后對它進行處理,比如插入文字或應用格式等。例如,用戶可能想編寫一個宏,來對文檔中某個部分里的某個單詞或短語進行定位。那就可以使用一個Range對象來表示想在其中搜索特定單詞或短語的部分文檔。在確定Range對象后,用戶能夠應用該對象的方法和屬性來修改相應范圍中的內容。 一個Range對象代表了文檔中的一塊連續(xù)的區(qū)域。每一個Range對象都由一個起始字符位置和一個終止字符位置來定義。與用戶在文檔中使用書簽的方法類似,可以在Visual Basic中使用Range對象來識別一個文檔的特定部分。一個Range對象既可以和插入點一樣小,也可以和整個文檔一樣大。但是,與書簽不同,Range對象僅僅在定義它的過程正在運行時才存在。 Range對象同選定內容相互獨立;也就是說,可以定義和修改范圍而不會改變選定內容。用戶也可以在文檔中定義多個范圍,而此時每個文檔窗格中僅有一個選定內容。 Start、End和StoryType屬性唯一地確定了一個Range對象。Start和End屬性分別返回或者設置Range對象的起始和結束字符的位置。每個文檔構成部分起始處的字符位置是0 (zero),而第一個字符之后的位置是1,依此類推。StoryType 屬性的WdStoryType常量可以表示十一種不同的文檔構成部分類型。例如,如果在注腳區(qū)域中有一個Range對象,那么StoryType屬性返回wdFootnotesStory。要對文檔構成部分作進一步了解,請參閱本節(jié)后面的“運用文檔構成部分”一節(jié)的有關內容。 使用Range對象來代替Selection對象 宏錄制器會經(jīng)常創(chuàng)建一個使用Selection屬性來控制操縱Selection對象的宏。但是,用戶通??梢杂靡粋€或幾個Range對象來以很少的命令完成相同的任務。以下的示例是用宏錄制器創(chuàng)建的。該宏對文檔中的前兩個單詞進行加粗。
以下的示例沒有使用Selection對象而完成了相同的任務。
以下的示例對文檔中的前兩個單詞進行加粗,然后插入一個新的段落。
以下的示例沒有使用Selection對象就完成了上述示例中的同樣任務。
前面的兩個示例改變了活動文檔中的格式但沒有改變選定內容。在大多數(shù)的場合下,Range對象比Selection對象更可取,原因如下:
使用Range方法返回Range對象 可以使用Range方法在特定文檔中創(chuàng)建一個Range對象。Range方法(可以從Document對象使用)返回一個Range對象,該對象定位于主文檔構成部分中,有給定的起始點和結束點。以下示例創(chuàng)建了一個Range對象,并且賦給myRange變量。
在上述示例中,myRange表示活動文檔中的前十個字符。當對保存在myRange變量中的Range對象應用一種屬性或方法時,就可以看到已經(jīng)創(chuàng)建的Range對象。以下的示例對活動文檔中的前十個字符進行加粗。
當用戶需要對一個Range對象進行多次引用時,可以使用Set語句來設置一個等價于Range對象的變量。但是,如果用戶需要在一個對象上執(zhí)行一次操作,那么就沒有必要將對象保存到變量中。用戶可以使用一條確定范圍并且改變Bold屬性的命令來取得同樣的結果;如以下示例所示。
和書簽類似,一個范圍能夠在文檔中橫跨一組字符,也可以標記其中的一個位置。在以下的示例中,Range對象的起始和終止點相同,并且該范圍內不包含任何文字。該示例在活動文檔的起始處插入文字。
用戶可以通過使用如上述示例所示的字符位置數(shù)字,或者隨同Selection對象、Bookmark對象或Range對象使用Start屬性和End屬性,來定義一個范圍的起始和終止位置。以下示例創(chuàng)建了一個Range對象,來表示活動文檔中的第三和第四個句子。
技巧 Range對象在文檔中的表示不可見。但是,用戶可以使用Select方法來選定一個Range對象,以保證Range對象表示正確的文字范圍。在以下示例中的Range對象表示活動文檔中的前三個段落。在該宏運行完畢之后,選定內容是指包含在aRange變量中的文字范圍。
使用Range屬性來返回一個Range對象 在許多對象都可以使用Range屬性-例如,Paragraph對象、Bookmark對象、Endnote對象以及Cell對象-Range屬性用來返回一個Range對象。以下的示例返回了一個Range對象,該對象表示活動文檔的第一段。
在創(chuàng)建了對Range對象的引用之后,用戶可以使用它的任何屬性或方法來修改該范圍。以下的示例復制了活動文檔中的第一段。
以下的示例顯示了活動文檔中由第一個書簽標記的文字。Range屬性可以在Bookmark對象中使用。
如果用戶需要對同一個Range對象應用多種屬性或方法,那么可以使用With…End With語句。以下的示例為活動文檔的第一段設定了文字的格式。
要獲得關于返回Range對象的其他示例,請參閱“幫助”中的“Range屬性”。 修改文檔的一部分 Visual Basic包含了一些對象,可以使用它們來修改以下類型的文檔元素:字符、單詞、句子、段落以及節(jié)。下面的表格包含了對應于這些文檔元素的屬性和屬性所返回的對象。
當用戶不帶index來使用這些屬性時,就返回一個同名的集合-例如,Paragraphs屬性返回Paragraphs集合。但是,如果用戶使用index來確定在某個集合中的一項,就返回上述表格第二列中的對象-例如,Words(1)返回一個Range對象。用戶可以使用任何范圍屬性或方法來修改Range對象,如以下示例所示,該示例將選定內容中的第一個單詞復制到剪貼板中。
在Paragraphs集合以及Sections集合中的集合項分別是Paragraph對象和Section對象,而不是Range對象。但是,在Paragraph對象和Section對象中都可以使用Range屬性(它返回一個Range對象)。以下的示例將獲得文檔中的第一段復制到剪貼板中。
上述表格中所有的文檔元素屬性都可以在Document對象、Selection對象以及Range對象中使用,如以下三個示例所示。
修改一組文檔元素 要修改由一組文本元素(字符、單詞、句子、段落或節(jié))構成的范圍,可以創(chuàng)建一個包含文檔元素的Range對象。隨同Range對象使用Start和End屬性,用戶可以新建一個Range對象,該對象引用了一組文檔元素。以下的示例創(chuàng)建了一個Range對象(myRange),該對象引用了活動文檔中的前三個單詞,然后將這些單詞的字體改為Arial。
以下的示例創(chuàng)建了一個Range對象,該對象起始于第二段的開頭,到第四段之后結束。
以下的示例創(chuàng)建了一個Range對象(aRange),該對象起始于第二段的開頭,到第三段之后結束。ParagraphFormat屬性用來訪問諸如SpaceBefore和SpaceAfter這樣的設置段落格式的屬性。
返回或設置范圍中的文字 可以使用Text屬性來返回或設置一個Range對象中的內容。以下的示例返回了活動文檔中的第一個單詞。
以下示例將活動文檔中的第一個單詞改為“Hello”。
可以使用InsertAfter 方法或者InsertBefore方法在一個范圍的前面或后面插入文字。以下的示例在活動文檔的第二段之前插入文字。
在使用InsertAfter 方法或者InsertBefore方法之后,范圍隨之擴大,包含新的文字。但是,也可以使用Collapse方法將范圍折疊到起始位置或終止位置。以下的示例在現(xiàn)有文檔之前插入單詞“Hello”,然后將范圍折疊到它的起始位置(在單詞“Hello”之前)。
設置范圍中文字的格式 可以使用Font屬性來取得設置字符格式的屬性和方法,而使用ParagraphFormat屬性來取得設置段落格式的屬性和方法。以下的示例設置了活動文檔中第一段的字符格式和段落格式。
重新定義Range對象 可以使用SetRange方法來重新定義一個已經(jīng)存在的Range對象。以下的示例定義myRange為當前的選定內容。SetRange方法重新定義myRange,使它表示當前的選定內容加上隨后的十個字符。
要獲得重新定義Range對象的其他信息和示例,請參閱“幫助”中“SetRange方法”。 用戶也可以通過改變Start屬性和End屬性的值,或者使用MoveStart方法或MoveEnd方法來重新定義一個Range對象。以下的示例重新定義myRange對象,使它表示當前的選定內容加上隨后的十個字符。
以下的示例使用MoveEnd方法擴展了myRange,使它包含下一段。
在范圍內的段落中循環(huán) 可以通過幾種不同的方法在范圍內的段落中進行循環(huán)。本節(jié)包含使用For Each...Next語句和Next屬性及方法在范圍內的段落中進行循環(huán)的內容。也可以使用同樣的技術在范圍內的字符、單詞或句子中進行循環(huán)。 使用For Each...Next語句 建議在范圍內進行段落循環(huán)時使用For Each...Next語句,另外建議在集合內進行循環(huán)時也同樣使用該語句。以下的示例在獲得文檔的前五段中進行循環(huán),在每段之前添加文字。
假定用戶想修改上述的代碼,在范圍內對用戶選定的段落進行循環(huán)??梢允褂肧election屬性來表示選定內容中的各個段落。以下的示例在選定內容的段落中進行循環(huán),去除加粗格式。
使用Next屬性或方法 用戶也可以使用Next屬性和方法在范圍的段落中進行循環(huán)。以下的示例說明了怎樣在范圍的單詞中進行循環(huán),將每個單詞增大一點字號。
以下的示例在范圍的段落中進行循環(huán),將范圍的對齊方式由居中改為左對齊。該示例也使用Next屬性重新定義了myRange,使它表示下一段。
將Range對象賦值給變量 可以通過幾種途徑來把一個已經(jīng)存在的Range對象賦給一個變量。在以下示例中,變量Range1和變量Range2都表示Range對象。在該示例中命令把活動文檔中第一和第二個單詞分別賦值給變量Range1和Range2。
設置一個Range對象變量等價于另一個Range對象變量 以下的示例創(chuàng)建變量Range2,并且與Range1相同。
現(xiàn)在就有兩個變量表示著同樣的范圍。當用戶調整Range2的起始位置、終止位置或者文字時,所做的更改也同樣會影響到Range1,反之亦然。 以下的示例將Range1默認屬性 (Text屬性)的值賦給Range2的默認屬性。在此示例中的代碼等價于Range2. Text = Range1. Text,它沒有改變Range對象實際所表示的內容,它僅僅改變Range2的contents (text)。
這兩個范圍(Range2和Range1)包含有相同的內容,但是它們可能指向文檔中的不同位置,或者干脆是不同的文檔。 使用Duplicate屬性 以下的示例創(chuàng)建了一個新復制的Range對象,Range2,該對象有著和Range1一樣的起始位置、終止位置以及文字內容。
如果改變了Range1的起始位置或是終止位置,這種改變并不會影響到Range2,反之亦然。但是,因為這兩個范圍指向文檔的相同位置,改變一個范圍中的文字內容也會同時改變另一個范圍的文字內容。 運用文檔構成部分 一個文檔構成部分是文檔中的一個區(qū)域,該區(qū)域中的文字區(qū)別于文檔中的其他區(qū)域。例如,如果一個文檔包含了正文文字、腳注和頁眉,則該文檔就包含了文檔正文部分、腳注部分和頁眉部分。 可以使用StoryType屬性來返回指定范圍、選定內容或書簽的文檔構成部分。如果在腳注部分中包含了選定內容,那么下例將關閉活動窗口中的腳注窗格。
StoryRanges集合包含了一個文檔中每種有效的文檔構成部分類型的第一個過程部分范圍??梢允褂肗extStoryRange方法來返回以后的文檔構成部分。以下的示例搜索活動文檔中的每個文檔過程部分來找出文字“Microsoft Word”。該示例也將它每次找到的文字全部設置為斜體。
當用戶使用Word中的某個文檔時,通常會先選擇文字,然后再執(zhí)行一項操作,比如設定以有文字的格式,或是鍵入新文字。在Visual Basic中,通常沒有必要在修改文字之前先選定該文字;而是創(chuàng)建一個表示文檔特定部分的Range對象并對其進行操作。但是,當用戶想要自己的代碼對選定內容作出響應或是改變選定內容,就可以通過Selection對象來完成任務。 可以使用Selection屬性來返回Selection對象。在文檔窗口的每個窗格中只能有一個Selection對象,在任何時刻,也只能有一個活動的Selection對象。選定內容可以包含文檔的一塊區(qū)域,也可以被折疊到一個插入點。以下的示例改變了選定內容中各個段的段落格式。
Selection屬性可以在Application對象、Window對象和Pane對象中使用。如果隨同Application對象使用Selection屬性,則該Selection對象表示活動的選定內容。
也可以隨同一個Window對象或Pane對象使用Selection屬性來返回一個在特定窗口或窗口窗格中Selection對象。以下的示例隨同Window對象使用Selection屬性,在文檔窗口“Document2”中插入文字。
在使用InsertAfter方法或InsertBefore方法之后,選定內容隨之擴大,包括了新的文字。但是,用戶也可以使用Collapse方法將選定內容折疊到它的起始或終止位置。以下的示例在選定內容的文字之后插入單詞“Hello”,任何將選定內容折疊到單詞“Hello”之后的插入點。
移動和擴展選定內容 用戶可以通過幾種方法來移動或擴展由Selection對象所表示的選定內容(例如,Move和MoveEnd)。以下的示例將選定內容移動到下一段的開頭。
用戶也可以通過改變Selection對象的Start屬性及End屬性的值,或者通過MoveStart和MoveEnd方法來移動或擴展選定內容。以下的示例通過把終止位置移動到段尾來對選定內容進行擴展。
因為在一個文檔窗口或窗格中只能有一個選定內容,用戶也可以通過選定另一個對象來移動選定內容??梢允褂肧elect方法,選擇文檔的一項。在使用Select方法之后,就可以使用Selection屬性返回一個Selection對象。以下的示例選定了活動文檔中的第一個單詞,然后把該單詞變?yōu)椤癏ello”。
用戶也可以通過GoToNext方法、GoToPrevious方法或GoTo方法來移動選定內容。以下的示例將選定內容移動到文檔中的第四行。
以下的示例將選定內容恰好移動到活動文檔中的下一個域之前。
在Selection對象使用的對象 可以在Range對象和Document對象中使用的許多其他對象也能在Selection對象中使用,這使得用戶可以在一個選定內容中控制操縱對象。要獲得能在Selection對象使用的對象的完整列表,請參閱“幫助”中的“Microsoft Word 對象(Selection)”,或者“Selection對象”。 以下的示例更新了選定內容中各個域的結果。
以下的示例將一節(jié)中的各個段落縮進了0.5英寸。
用戶可以使用For Each...Next語句在選定內容中的單個對象上進行循環(huán)操作,來代替對選定內容中的所有對象逐個進行控制操縱。以下的示例在選定內容的每個段落上進行循環(huán)操作,將找到的任何居中的段落變?yōu)樽髮R。
以下的示例顯示出選定內容中每個書簽的名字。
Selection對象的屬性和方法 本節(jié)突出介紹Selection對象的一些常用屬性和方法。 返回或設置選定內容中的文字 可以使用Text屬性來返回或設置一個Selection對象的內容。以下的示例返回所選的文字。
以下的示例將所選文字改為“Hello World”。
可以InsertBefore 方法或InsertBefore方法,在選定內容之前或之后插入文字。以下的示例在選定內容之前插入了文字。
為許多文字設定格式 可以使用Font屬性來訪問設置字符格式的屬性和方法,也可以使用ParagraphFormat屬性來訪問設置段落格式的屬性和方法。以下的示例設置了選定內容的字符和段落格式。
返回一個Range對象 如果一種方法或屬性是在Range對象而不是Selection對象中使用的(例如,CheckSpelling方法),那么可以使用Range屬性來從Selection對象返回一個Range對象。以下的示例對所選單詞進行拼寫檢查。
返回關于選定內容的信息 可以使用Information屬性來返回關于選定內容的信息。例如,用戶可以判斷當前頁的頁碼、文檔的總頁數(shù),或是判斷選定內容是否在一個頁眉或注腳中。Information屬性可取三十五種不同的常量(wdActiveEndPageNumber, wdNumberOfPagesInDocument 和 wdInHeaderFooter等等),用戶可以使用它們來返回關于選定內容的不同信息。舉個例子,如果選定內容處于一張表格中,那么以下的示例將顯示表格中的行號或列號。
要獲得可以隨Information屬性一起使用的常量的完整列表和說明,請參閱“幫助”中的“Information屬性”。 判斷文字是否被選定 可以使用Type屬性來設置或返回選定內容在文檔中被指定的方式。例如,可以使用wdSelectionBlock常量來判斷一個文字塊是否被選定。如果選定內容是一個插入點,那么以下的示例選定包含該插入點的段落。
可以使用Find和Replacement對象來查找并且替換文檔中文字的特定范圍。Find對象可以在Selection對象或Range對象中使用(根據(jù)Find對象是從Selection對象還是從Range對象返回的,查找操作也略有不同)。 使用Selection.Find 如果是在Selection對象中使用Find對象,那么當找到符合選擇條件的文本后選定內容將會改變。以下的示例選定下一次出現(xiàn)的單詞“Hello”。如果在找到單詞“Hello”之前已經(jīng)到達了文檔的末尾,那么停止搜索。
Find對象包含與“查找”和“替換”對話框(在“編輯”菜單中)里的選項有關的屬性。用戶既可對Find對象的屬性逐一進行設置,也可以隨同Execute方法使用參數(shù)來進行設置,如果以下示例所示。
如果是在Range對象中使用Find對象,選定內容不會改變,但是當找到符合選擇條件的文本時范圍會被重新定義。以下的示例確定活動文檔中第一次出現(xiàn)的單詞“blue”的位置。如果查找操作成功,將重新定義范圍并且設置單詞“blue”的格式為粗體。
以下的示例執(zhí)行了和上述示例相同的操作,只是使用了Execute方法的參數(shù)。
使用Replacement對象 Replacement對象表示查找-替換操作的替換條件。Replacement對象的屬性和方法對應于“查找”和“替換”對話框(在“編輯”菜單中)里的選項。 可以在Find對象中使用Replacement對象。以下的示例將所有出現(xiàn)單詞“hi”的地方替換為“hello”。當找到符合選擇條件的文本時,選定內容將會改變,因為代碼從Selection對象返回Find對象。
以下的示例去除了活動文檔中所有的粗體格式。Bold屬性對Find對象為True(真),對Replacement屬性為False(假)。要查找和替換格式,需設置查找和替換文本為空字符串(“”),并且設置Execute方法的Format參數(shù)為True(真)。選定內容保持不變,因為代碼在Range對象中返回Find對象(Content屬性返回一個Range對象)。
Word對象模型包含了表格對象,也包含了表格中各種不同元素的對象??梢噪S同Document對象、Range對象、Selection對象使用Table屬性來返回Table集合。Table(index)返回了一個單獨的Table對象,在這里index是表格的索引號。索引號代表在選定內容、范圍或文檔中表格的位置。以下的示例將選定內容中的第一個表格轉換為文本。
可以隨同Column對象、 Range 對象、Row對象或 Selection對象使用Cells屬性來返回Cells集合。用戶可以通過使用Table對象的Cell方法或是索引Cells集合來獲得一個Cell對象。以下的兩條語句都能夠設置myCell為一個Cell 對象,該Cell對象代表活動文檔中表格一的第一個單元格。
注釋 要在一個表格的一個單元格中插入文字,可以使用Text屬性、InsertAfter方法或者隨Range對象使用InsertBefore方法??梢噪SCell對象使用Range屬性來返回一個Range對象。以下的示例在表格一的每一個單元格中插入連續(xù)的單元格序號。
可以隨同Table對象、Range對象或Selection對象使用Column屬性來返回Columns集合。Columns(index)返回了一個單獨的Column對象,在這里index是索引號。以下的示例選擇了表格一的第一列。
可以隨同Table對象、Range對象或Selection對象使用Row屬性來返回Rows集合。Rows(index)返回了一個單獨的Row對象,在這里index是索引號。以下的示例給表格一的第一行加底紋。
修改圖形表格的行與列 當用戶試圖使用在一個圖形表格(或者任何表格,其中有兩個以上相鄰的單元格被合并,但是行與列沒有統(tǒng)一)中某一單獨的行或列時,就可能出現(xiàn)一個運行時錯誤。如果活動文檔中的第一個表格的每列含有不一致的行號,以下的示例就會出錯。
用戶可以首先使用SelectColumn或SelectRow方法來選定某個特定行或列的單元格,以此避免這樣的錯誤。當用戶選好了行或列,再隨Selection對象使用Cells屬性。以下的示例選定了活動文檔中表格一的第一行。該示例使用Cells屬性返回所選的單元格(在第一行中所有單元格),以便可以刪除邊框。
以下的示例選定了表格一的第一列。該示例使用了一個For Each...Next循環(huán)來向選定內容(第一列的所有單元格)中的每個單元格添加文字。
本節(jié)提供了關于運用一些普通Word對象的信息和技巧。 使用HeaderFooter對象 HeaderFooter對象既可以表示一個頁眉也可以表示一個注腳。HeaderFooter對象是HeaderFooter集合的一個成員,它可以在Section對象中使用。Headers(index)或Footer(index)屬性返回了一個單獨的HeaderFooter對象,在這里index是WdHeaderFooterIndex常量的一個值。 以下的示例創(chuàng)建了一個Range對象(aRange),該對象表示活動文檔第一節(jié)的主要注腳。在該示例設置Range對象之后,它刪除了已有的注腳文本。它還向注腳添加了AUTHOR域以及兩個表和FILENAME域。
注釋 PageNumbers集合僅僅能在HeaderFooter對象中使用??梢詫ageNumbers集合應用Add方法來向一個頁眉或注腳添加頁碼。 使用Styles集合 Styles集合可以在Document對象中使用。以下的示例改變了活動文檔中“標題1”樣式的格式。
Styles集合不能在Template對象中使用。如果想修改一個模板中的樣式,可以使用OpenAsDocument方法按文檔來打開模板,這樣用戶就可以對樣式進行修改。以下的示例改變了活動文檔所附的模板中“標題1”樣式的格式。
指定CommandBars 在使用CommandBars集合(表示菜單欄和工具欄)之前,可以使用CustomizationContext屬性來設置保存著對菜單欄和工具欄的更改的Template或Document對象。以下的示例給“格式”工具欄添加了“雙下劃線”命令。因為自定義更改保存在Normal模板中,所有的文檔都會受到影響。
要了解關于菜單欄和工具欄的更改范圍的更多信息,請參閱第八章,“菜單欄和工具欄”。 使用Dialogs集合 可以使用Dialogs屬性返回Dialogs集合,該集合表示內置Word對話框(例如,“打開”和“保存”對話框等)。用戶不能新建內置對話框,也不能向Dialogs集合添加內置對話框。要了解關于創(chuàng)建用ActiveX控件創(chuàng)建自定義對話框的內容,請參閱第十二章,“ActiveX 控件和對話框”。 返回MailMerge和MailMerge對象 可以使用Document對象的MailMerge屬性來返回一個MailMerge對象。無論所指定的文檔是否是一個郵件合并文檔,都可以使用MailMerge屬性。在用戶使用Execute方法執(zhí)行合并之前,可以使用State屬性來確定郵件合并操作的狀態(tài)。如果活動文檔是附加了數(shù)據(jù)源的主文檔,那么以下的示例將執(zhí)行郵件合并。
使用Document對象的Envelope屬性可以返回一個Envelope對象。無論用戶是否向所指定的文檔添加了一個信封,都可以使用Envelope對象。但是,如果用戶使用以下屬性而沒有向文檔添加信封,那么會出現(xiàn)錯誤:Address屬性, AddressFromLeft屬性, AddressFromTop屬性,F(xiàn)eedSource屬性, ReturnAddress屬性,ReturnAddressFromLeft屬性, ReturnAddressFromTop屬性或 UpdateDocument屬性。 以下的示例使用On Error GoTo語句來捕獲用戶沒有向活動文檔添加信封的錯誤。但是,如果用戶已經(jīng)向文檔添加了信封,將顯示收件人地址。
在文檔中添加和編輯域 用戶可以通過對Field集合應用Add方法來給文檔添加域。以下的示例添加了一個DATE域來替換選定內容。
在添加一個域之后,用戶可以通過使用Result或Code屬性來返回或設置域結果和域代碼,這兩種屬性都可以返回一個Range對象。以下的示例更改選定內容的第一個域代碼,更新該域,然后顯示域結果。
一個Shape對象代表圖形層的一個對象,諸如自選圖形、任意多邊形、OLE對象、ActiveX控件、圖片等。Shape對象鎖定于文本范圍內,但是能夠任意移動,使用戶可以將它們定位于頁面的任何位置。要了解運用Shape對象的信息,請參閱第十章,“形狀和圖形層”,也可以參閱“幫助”中的“Shape對象”。 一個InlineShape對象代表文檔文字層的一個對象。一個嵌入式形狀可能是圖片、OLE對象或ActiveX控件??梢詫nlineShape對象視為字符,并將其象字符一樣放在一行文本中。要了解關于InlineShape對象的信息,請參閱“幫助”中的“InlineShape集合對象”或“InlineShape對象”。 在Word窗體中使用FormField對象 用戶可以創(chuàng)建一個Word在線窗體,該窗體包含復選框、文本文本框和下拉式列表框。使用“窗體”工具欄可以插入這些窗體元素。對應的Visual Basic對象是CheckBox, TextInput, 和DropDown。所有這些對象都可以在FormFields集合的任何一個FormField對象中使用;但是,用戶應當使用按照窗體域的類型使用相應的對象。例如,以下命令從活動文檔的“Check1”域中選擇復選框。
除了“窗體”工具欄中的窗體元素之外,用戶還可以向一個在線窗體添加ActiveX控件。使用“控件工具箱”可以插入ActiveX控件。用戶可以把控件插入文字層或圖形層;控件將分別由一個InlineShape 對象或一個Shape對象來表示。要了解關于運用ActiveX控件的更多內容,請參閱第十二章,“ActiveX控件和對話框”。
可以通過在用戶代碼中包含判斷語句來判斷由一個表達式返回的特定對象或者一個變量所引用的對象是否有效,以此避免代碼在運行時的錯誤。本節(jié)討論了一些檢查表達式返回值或變量保存值有效性的技術。 用戶可以隨同一個變量或表達式使用TypeName函數(shù)來確定對象的類型。如果Selection. NextField返回了一個Field對象,那么以下的示例將在狀態(tài)欄中顯示一條消息。 |
|
|
來自: zhanglei1371 > 《VBA學習》