Microsoft Word 對象
目 錄
運用Application對象
運用Document對象
運用Range對象
運用Selection對象
運用Find和Replacement對象
運用Table, Column, Row,和 Cell對象
運用其他普通對象
判斷對象是否有效
修改Word 命令
運用事件
使用自動宏
使用自動化
Visual Basic支持一個對象集合,該集合中的對象直接對應於Microsoft Word 97中的元素,並且通過用戶界面,用戶熟悉這些元素中的絕大多數。例如,Document 對象代表了一個打開的文檔,Bookmark對象代表了一個文檔中的書籤,而Selection對象則代表了在一個文檔窗口窗格中的選定內容。在Word中,每一類元素-文檔、表格、段落、書籤、域等等-都可以用Visual Basic的對象來表示。要在Word中自動執行任務,可以使用這些對象的方法和屬性。
關於理解和使用Microsoft Office 97對象模型的一般性內容,請參閱本書的第二章“理解對象模型”。在Microsoft Office 97中的對象模型相當豐富,其中包含了大約180個對象。要查看Word對象模型的層次關係圖,請參閱“幫助”中的“Microsoft Word 對象”。要獲得對某種特定對象的詳細描述,可以在此圖中單擊該對象的名字,或是在“幫助”的索引中對特定對象進行搜索。
怎樣顯示Word Visual Basic幫助
要使用Word Visual Basic幫助,必須在安裝過程中選擇“自定義”的安裝方式,並且爲Word選中“Visual Basic在線幫助”複選框。否則,安裝程序不會安裝Visual Basic幫助。如果用戶已經安裝好了Word,那麼可以再次運行Setup程序來安裝Visual Basic幫助。
要查看Word Visual Basic 幫助,可以在“Visual Basic 編輯器裏的“幫助”菜單中點擊“目錄和索引”一項。在“幫助主題”對話框的“目錄”一表中,雙擊“Microsoft Word Visual Basic 參考”,然後再雙擊“Visual Basic 參考”。“幫助主題”對話框會重新出現,顯示出Microsoft Word Visual Basic的目錄和索引。
運用Application 對象
在用戶啓動一個Word 時段的同時,也創建了一個Application對象。用戶可以使用Application 對象的屬性或方法來控制或返回應用程序範圍內的特性、控制應用程序窗口的外觀或者調整Word 對象模型的其他方面。可以使用Application屬性來返回Word Application 對象。以下的示例從視圖狀態切換到打印預覽狀態。
Application. PrintPreview = True
Application對象的一些屬性控制着應用程序的外觀。例如,如果DisplayStatusBar屬性爲True(真),那麼狀態欄是可見的,如果WindowState屬性值爲wdWindowStateMaximize,那麼應用程序窗口處於最大化狀態。以下的示例設置了屏幕上應用程序窗口的大小。
With Application
.WindowState = wdWindowStateNormal
.Height = 450
.Width = 600
End With
Application對象的屬性也可以訪問處於對象層次中較低級的對象,比如Windows集合(代表了當前所有打開的窗口)和Documents集合(代表了當前所有打開的文檔)。用戶可以使用屬性,有時候也叫做訪問者,從對象層次中最高一級的Application對象向下訪問到較低級的對象(Document對象、Window對象、 Selection對象等等)。可以使用以下兩個示例之一來打開MyDoc.doc。
Application. Documents. Open FileName :="C:/DOCS/MYDOC.DOC"
Documents. Open FileName :="C:/DOCS/MYDOC.DOC"
因爲Document屬性是共用的,所以Application屬性是可選的。共用屬性和方法無需Application 對象限定符。要在“對象瀏覽器”中瀏覽共用屬性和方法的列表,可以在“類別”欄中單擊“<共用>”。共用項就會列在“成員”欄中。
註釋 Option對象包含了控制Word 共用行爲的一些屬性。許多Option對象的屬性對應於Option對話框中的各項(Tools 菜單)。使用Application 對象的Option屬性可以返回Option 對象。以下的示例設置了三個應用程序範圍內的選項(因爲Option屬性是共用的,所以在本示例中無需Application屬性)。
With Application.Options
.AllowDragAndDrop = True
.ConfirmConversions = False
.MeasurementUnit = wdPoints
End With
運用Document對象
當用戶在Word中打開或創建一個文件的同時,也創建了一個Document對象。用戶可以使用Document對象或Documents集合的屬性或方法來打開、創建、保存、激活或者關閉文件。
返回Document對象
用戶可以使用語法Documents (index)來返回作爲一個Document對象的任何打開的文檔,在這裏index是該文檔的名字或索引號。在以下的示例中,變量myDoc包含一個Document對象,該對象代表名爲“Report.doc”的打開的文檔。
Set myDoc = Documents ("Report.doc")
索引號代表了文檔在Documents集合中的位置。在以下的示例中,變量myDoc包含了一個Document對象,該對象代表Documents集合中的第一個文檔。
Set myDoc = Documents(1)
註釋 因爲當用戶添加或關閉多個文檔時,某個特定文檔的索引號會發生改變,所以最好使用文檔的名字來對Documents集合中的Document對象進行索引。
除了通過文檔的名字或索引號來引用文檔,還可以使用ActiveDocument屬性來返回一個引用活動文檔(當前着眼的文檔)的Document對象。以下的示例顯示產活動文檔的名字;如果沒有打開的文檔,則該示例顯示一條消息。
If Documents. Count >= 1 Then
MsgBox ActiveDocument. Name
Else
MsgBox "No documents are open"
End If
打開文檔
要打開一個已經存在的文檔,可以使用Open方法。Open方法應用於通過Document屬性返回的Documents集合。以下的示例打開了文件Test.doc(從當前文件夾)並且啓動了更改跟蹤。
Set myDoc = Documents. Open (FileName :="TEST.DOC")
myDoc. TrackRevisions = True
注意到在上例中Open方法的返回值是一個Document對象,該對象表示剛被打開的文檔。在此示例中的文件名不包含路徑;因此,是假定了該文件在當前的文件夾中。但這會導致出現一個運行時錯誤,因爲一旦用戶創建了與當前文件夾不同的文件夾,Visual Basic就再也找不到該文件了。但是,用戶可以通過指明完整的路徑,就如同下表所示的那樣,來確保打開正確的文件。
操作系統
FileName參數
Windows
FileName :="C:/Documents/Temporary File.doc"
Macintosh
FileName :="Hard Drive:Documents:Temporary File"
如果用戶的宏只用於一種文件系統,那麼可以在FileName參數中指定路徑分隔符(“/”或者“:”),就如同上表所示的那樣。以下示例顯示了與文件系統無關的代碼,可以用來打開Sales.doc,並且假定Sales.doc已經保存在Word 的程序文件夾中。
programPath = Options. DefaultFilePath (wdProgramPath)
Documents. Open FileName :=programPath & Application. PathSeparator & "SALES.DOC"
PathSeparator屬性返回當前文件系統(例如,“/”用於MS-DOS/Windows的文件分配表,或者“:”用於Macintosh)的正確的文件分隔符。DefaultFilePath屬性返回文件的位置,比如文檔所在文件夾的路徑、程序文件夾或者當前文件夾。
如果所指定的文件名既沒有在當前文件夾(如果沒有指定路徑)出現也沒有在指定的文件夾(如果指定了路徑)中出現,那麼就會發生錯誤。以下的示例使用FileSearch對象的屬性和方法來判斷名爲“Test.doc”的文件是否存在於用戶的默認文檔文件夾中。如果找到了該文件(FoundFiles. Count = 1),那麼就打開它;否則,顯示一條消息。
defaultDir = Options. DefaultFilePath (wdDocumentsPath)
With Application. FileSearch
.FileName = "Test.doc"
.LookIn = defaultDir
.Execute
If .FoundFiles. Count = 1 Then
Documents. Open FileName :=defaultDir & Application. PathSeparator & "TEST.DOC"
Else
MsgBox "Test.doc file was not found"
End If
End With
也可以允許用戶選擇要打開的文件,而不是定死Open方法的FileName參數值。如同以下示例所示的那樣,可以使用帶有wdDialogFileOpen常量的Dialogs屬性來返回一個Dialog 對象,該對象表示“打開”對話框(在“文件”菜單中)。Show方法可以顯示並且執行在“打開”對話框中完成的動作。
Dialogs (wdDialogFileOpen). Show
Display 方法只是用來顯示特定的對話框而不作任何更多的操作。以下的示例檢查Display方法的返回值。如果用戶單擊“確定”來關閉對話框,返回值-1並且打開所選擇的文件,該文件的名字保存在變量fSelected中。
Set dlg = Dialogs (wdDialogFileOpen)
aButton = dlg. Display
fSelected = dlg. Name
If aButton = -1 Then
Documents. Open FileName :=fSelected
End If
要對如何顯示Word對話框作進一步瞭解,請參閱“幫助”中的“顯示內置Word 對話框”一節的內容。
要判斷某個特殊的文檔是否打開,可以使用一條For Each…Next語句來對Documents集合進行列舉。如果名爲“Sample.doc”的文檔已經被打開了,以下的示例就激活它;如果它尚未被打開,則該示例會打開它。
docFound = True
For Each aDoc In Documents
If InStr (1, aDoc. Name, "sample.doc", 1) Then
aDoc. Activate
Exit For
Else
docFound = False
End If
Next aDoc
If docFound = False Then Documents. Open _
FileName :="C:/Documents/Sample.doc"
可以使用Count屬性來確定當前打開文檔的數目。Count屬性應用於Documents集合,可以使用Document屬性返回該集合。如果沒有已打開的文檔,以下的示例會顯示一條消息。
If Documents. Count = 0 Then MsgBox "No documents are open"
創建和保存文檔
要創建一個新文檔,可以對Documents集合應用Add 方法。以下的示例創建了一個新文檔。
Documents. Add
Add方法返回了僅作爲一個Document對象而創建的文檔。當用戶添加一個文檔時,可以設置Add 方法的返回值是一個對象變量,以便用戶可以在自己的代碼中引用該新文檔。以下的示例創建了一個新文檔,並且設置它的上邊距爲1.25英寸。
Dim myDoc As Document
Set myDoc = Documents. Add
myDoc. PageSetup. TopMargin = InchesToPoints(1.25)
第一次保存新文檔時,可以隨Document對象使用SaveAs方法。以下的示例將名爲“Temp.doc”的活動文檔保存在當前文件夾中。
ActiveDocument. SaveAs FileName :="Temp.doc"
在文檔被保存之後,用戶可以使用它的文檔名來調整Document對象。以下的示例創建了一個新文檔並且立刻把它保存爲“1996 Sales.doc”。然後,該示例使用新名字來作Documents集合中的該文檔的索引,並且向該文檔添加一張表格。
Documents. Add.SaveAs FileName :="1996 Sales.doc"
Documents ("1996 Sales.doc").Tables.Add _
Range :=Selection. Range, NumRows :=2, NumColumns :=4
要保存對一個已經存在的文檔所進行的更改,可以隨同Document對象使用Save方法。以下的指令保存了名爲“Sales.doc”的文檔。
Documents ("Sales.doc"). Save
如果用戶隨同一個尚未保存的文檔或模板使用Save方法,將會顯示“另存爲”對話框來提示用戶爲該文件取名。要保存所有打開的文檔,可以對Documents集合應用Save方法。以下的示例保存了所有打開的文檔,但沒有提示用戶爲文件取名。
Documents. Save NoPrompt :=True
激活一個文檔
要使另一個文檔成爲活動文檔,可以對Document對象應用Activate方法。以下的示例激活了打開的文檔(MyDocument.doc)。
Documents ("MyDocument.doc"). Activate
以下的示例打開了兩個文檔,然後激活其中的第一個文檔(Sample.doc)。
Set Doc1 = Documents. Open (FileName :="C:/Documents/Sample.doc")
Set Doc2 = Documents.Open (FileName :="C:/Documents/Other.doc")
Doc1. Activate
打印一個文檔
要打印一個文檔,可以對Document對象應用PrintOut 方法,如以下示例所示。
ActiveDocument. PrintOut
要通過程序來設置那些也可以在“打印”對話框(在“文件”菜單中)裏進行設置的打印選項,可以使用PrintOut 方法的參數來實現。用戶可以使用Options 對象的屬性來設置打印選項,這些選項也可以在“選項”對話框(在“工具”菜單中)“打印”一表裏進行設置。以下示例設置活動文檔打印隱藏的文字,並且只打印出前三頁。
Options. PrintHiddenText = True
ActiveDocument. PrintOut Range :=wdPrintFromTo, From :="1", To :="3"
關閉文檔
要關閉一個文檔,可以對Document對象應用Close方法。以下的示例關閉了名爲“Sales.doc”的文檔。
Documents ("Sales.doc"). Close
如果對文檔進行過修改,Word會顯示出一條消息來詢問用戶是否要保存所進行的修改。用戶可以隨SaveChanges參數使用wdDoNotSaveChanges或 wdSaveChanges常量來使該提示不再出現。以下的示例保存並且關閉了Sales.doc。
Documents ("Sales.doc"). Close SaveChanges :=wdSaveChanges
要關閉所有已打開的文檔,可以對Documents集合應用Close方法。以下的示例沒有保存修改就關閉了所有的文檔。
Documents. Close SaveChanges :=wdDoNotSaveChanges
訪問文檔中的對象
用戶可以從Document對象來訪問返回對象的一系列屬性和方法。要查看在Document對象中所能使用的對象的層次關係圖,可以參閱“幫助”中的“Microsoft Word對象(Documents)”。例如,Table屬性,它能夠返回一個Table對象的集合,可以在Document對象中使用。隨着一個集合對象使用的Count屬性能夠判斷在該集合中所包含的項數。以下的示例顯示一條消息來指出在活動文檔中有多少表格。
MsgBox ActiveDocument. Tables. Count & " table(s) in this document"
使用Table(index)可以返回一個單張表格對象,這裏的index是索引號。在以下的示例中,myTable代表“Sales.doc”文檔裏的第一張表格。
Set myTable = Documents ("Sales.doc"). Tables(1)
關於返回一個特殊對象的信息可以從“幫助”中的對象主題本身 (例如,“Table 對象”)和相應的集合對象主題(例如,“Table集合對象”)中獲得。
向文檔添加對象
可以使用隨着能在Document對象中訪問的集合對象的Add方法來向文檔添加諸如腳註、備註或表格這樣的對象。例如,以下命令在myRange變量(myRange是一個包含了一個Range對象的對象變量)所指定的位置上添加了一張3x3的表格。
ActiveDocument. Tables. Add Range :=myRange, NumRows :=3, NumColumns :=3
以下的示例在myRange變量所指定的位置上添加了一個腳註。
ActiveDocument. Footnotes. Add Range :=myRange, Text :="The Willow Tree"A
要獲得支持Add方法的集合對象列表,請參閱“幫助”中的“Add 方法”。
運用Range對象
當使用Visual Basic時一個常見的任務就是在文檔中指定一塊區域,然後對它進行處理,比如插入文字或應用格式等。例如,用戶可能想編寫一個宏,來對文檔中某個部分裏的某個單詞或短語進行定位。那就可以使用一個Range對象來表示想在其中搜索特定單詞或短語的部分文檔。在確定Range對象後,用戶能夠應用該對象的方法和屬性來修改相應範圍中的內容。
一個Range對象代表了文檔中的一塊連續的區域。每一個Range對象都由一個起始字符位置和一個終止字符位置來定義。與用戶在文檔中使用書籤的方法類似,可以在Visual Basic中使用Range對象來識別一個文檔的特定部分。一個Range對象既可以和插入點一樣小,也可以和整個文檔一樣大。但是,與書籤不同,Range對象僅僅在定義它的過程正在運行時才存在。
Range對象同選定內容相互獨立;也就是說,可以定義和修改範圍而不會改變選定內容。用戶也可以在文檔中定義多個範圍,而此時每個文檔窗格中僅有一個選定內容。
Start、End和StoryType屬性唯一地確定了一個Range對象。Start和End屬性分別返回或者設置Range對象的起始和結束字符的位置。每個文檔構成部分起始處的字符位置是0 (zero),而第一個字符之後的位置是1,依此類推。StoryType 屬性的WdStoryType常量可以表示十一種不同的文檔構成部分類型。例如,如果在註腳區域中有一個Range對象,那麼StoryType屬性返回wdFootnotesStory。要對文檔構成部分作進一步瞭解,請參閱本節後面的“運用文檔構成部分”一節的有關內容。
使用Range對象來代替Selection對象
宏錄製器會經常創建一個使用Selection屬性來控制操縱Selection對象的宏。但是,用戶通常可以用一個或幾個Range對象來以很少的命令完成相同的任務。以下的示例是用宏錄製器創建的。該宏對文檔中的前兩個單詞進行加粗。
Selection. HomeKey Unit :=wdStory
Selection. MoveRight Unit :=wdWord, Count:=2, Extend :=wdExtend
Selection. Font.Bold = wdToggle
以下的示例沒有使用Selection對象而完成了相同的任務。
ActiveDocument. Range (Start:=0, End :=ActiveDocument. Words(2). End) .Bold = True
以下的示例對文檔中的前兩個單詞進行加粗,然後插入一個新的段落。
Selection. HomeKey Unit :=wdStory
Selection. MoveRight Unit :=wdWord, Count :=2, Extend :=wdExtend
Selection. Font.Bold = wdToggle
Selection. MoveRight Unit :=wdCharacter, Count:=1
Selection. TypeParagraph
以下的示例沒有使用Selection對象就完成了上述示例中的同樣任務。
Set myRange = ActiveDocument. Range(Start:=0, End :=ActiveDocument. Words(2). End)
myRange. Bold = True
myRange. InsertParagraphAfter
前面的兩個示例改變了活動文檔中的格式但沒有改變選定內容。在大多數的場合下,Range對象比Selection對象更可取,原因如下:
用戶可以定義和使用多個Range對象,而在每個文檔窗口中只能有一個Selection對象。
控制管理Range對象不會改變所選擇的文字內容。
控制管理Range對象比運用Selection對象速度要快。
使用Range方法返回Range對象
可以使用Range方法在特定文檔中創建一個Range對象。Range方法(可以從Document對象使用)返回一個Range對象,該對象定位於主文檔構成部分中,有給定的起始點和結束點。以下示例創建了一個Range對象,並且賦給myRange變量。
Set myRange = ActiveDocument. Range (Start :=0, End :=10)
在上述示例中,myRange表示活動文檔中的前十個字符。當對保存在myRange變量中的Range對象應用一種屬性或方法時,就可以看到已經創建的Range對象。以下的示例對活動文檔中的前十個字符進行加粗。
Set myRange = ActiveDocument. Range(Start :=0, End :=10)
myRange. Bold = True
當用戶需要對一個Range對象進行多次引用時,可以使用Set語句來設置一個等價於Range對象的變量。但是,如果用戶需要在一個對象上執行一次操作,那麼就沒有必要將對象保存到變量中。用戶可以使用一條確定範圍並且改變Bold屬性的命令來取得同樣的結果;如以下示例所示。
ActiveDocument. Range(Start :=0, End :=10). Bold = True
和書籤類似,一個範圍能夠在文檔中橫跨一組字符,也可以標記其中的一個位置。在以下的示例中,Range對象的起始和終止點相同,並且該範圍內不包含任何文字。該示例在活動文檔的起始處插入文字。
ActiveDocument. Range(Start :=0, End :=0). InsertBefore Text :="Hello "
用戶可以通過使用如上述示例所示的字符位置數字,或者隨同Selection對象、Bookmark對象或Range對象使用Start屬性和End屬性,來定義一個範圍的起始和終止位置。以下示例創建了一個Range對象,來表示活動文檔中的第三和第四個句子。
Set myDoc = ActiveDocument
Set myRange = myDoc. Range (Start :=myDoc. Sentences(3). Start, _
End :=myDoc. Sentences (4). End)
技巧 Range對象在文檔中的表示不可見。但是,用戶可以使用Select方法來選定一個Range對象,以保證Range對象表示正確的文字範圍。在以下示例中的Range對象表示活動文檔中的前三個段落。在該宏運行完畢之後,選定內容是指包含在aRange變量中的文字範圍。
Set aRange = ActiveDocument.Range (Start :=0, _
End :=ActiveDocument. Paragraphs (3). Range. End)
aRange. Select
使用Range屬性來返回一個Range對象
在許多對象都可以使用Range屬性-例如,Paragraph對象、Bookmark對象、Endnote對象以及Cell對象-Range屬性用來返回一個Range對象。以下的示例返回了一個Range對象,該對象表示活動文檔的第一段。
Set myRange = ActiveDocument.Paragraphs (1). Range
在創建了對Range對象的引用之後,用戶可以使用它的任何屬性或方法來修改該範圍。以下的示例複製了活動文檔中的第一段。
Set myRange = ActiveDocument. Paragraphs (1). Range
myRange. Copy
以下的示例複製了活動文檔中表格一的第一行。
ActiveDocument. Tables(1). Rows(1). Range. Copy
以下的示例顯示了活動文檔中由第一個書籤標記的文字。Range屬性可以在Bookmark對象中使用。
MsgBox ActiveDocument. Bookmarks (1). Range. Text
如果用戶需要對同一個Range對象應用多種屬性或方法,那麼可以使用With…End With語句。以下的示例爲活動文檔的第一段設定了文字的格式。
Set myRange = ActiveDocument. Paragraphs (1). Range
With myRange
.Bold = True
.ParagraphFormat. Alignment = wdAlignParagraphCenter
.Font. Name = "Arial"
End With
要獲得關於返回Range對象的其他示例,請參閱“幫助”中的“Range屬性”。
修改文檔的一部分
Visual Basic包含了一些對象,可以使用它們來修改以下類型的文檔元素:字符、單詞、句子、段落以及節。下面的表格包含了對應於這些文檔元素的屬性和屬性所返回的對象。
表 達 式
返 回 的 對 象
Word (index)
Range對象
Characters (index)
Range對象
Sentences (index)
Range對象
Paragraphs (index)
Paragraph對象
Sections (index)
Section對象
當用戶不帶index來使用這些屬性時,就返回一個同名的集合-例如,Paragraphs屬性返回Paragraphs集合。但是,如果用戶使用index來確定在某個集合中的一項,就返回上述表格第二列中的對象-例如,Words(1)返回一個Range對象。用戶可以使用任何範圍屬性或方法來修改Range對象,如以下示例所示,該示例將選定內容中的第一個單詞複製到剪貼板中。
Selection. Words (1). Copy
在Paragraphs集合以及Sections集合中的集合項分別是Paragraph對象和Section對象,而不是Range對象。但是,在Paragraph對象和Section對象中都可以使用Range屬性(它返回一個Range對象)。以下的示例將獲得文檔中的第一段複製到剪貼板中。
ActiveDocument. Paragraphs(1). Range. Copy
上述表格中所有的文檔元素屬性都可以在Document對象、Selection對象以及Range對象中使用,如以下三個示例所示。
本例設置活動文檔中第一個單詞的大小寫。
ActiveDocument. Words(1). Case = wdUpperCase
本例設置選中的第一節的下邊距爲0.5英寸。
Selection.Sections(1). PageSetup. BottomMargin = InchesToPoints(0.5)
本例設置活動文檔中的文字爲兩倍行距(Content屬性返回一個Range對象,該對象表示主文檔構成部分)。
ActiveDocument. Content. ParagraphFormat. Space2
修改一組文檔元素
要修改由一組文本元素(字符、單詞、句子、段落或節)構成的範圍,可以創建一個包含文檔元素的Range對象。隨同Range對象使用Start和End屬性,用戶可以新建一個Range對象,該對象引用了一組文檔元素。以下的示例創建了一個Range對象(myRange),該對象引用了活動文檔中的前三個單詞,然後將這些單詞的字體改爲Arial。
Set Doc = ActiveDocument
Set myRange = Doc.Range (Start :=Doc. Words(1). Start, End :=Doc. Words(3). End)
myRange. Font. Name = "Arial"
以下的示例創建了一個Range對象,該對象起始於第二段的開頭,到第四段之後結束。
Set myDoc = ActiveDocument
Set myRange = myDoc. Range (Start :=myDoc. Paragraphs(2). Range. Start, _
End :=myDoc. Paragraphs(4). Range. End)
以下的示例創建了一個Range對象(aRange),該對象起始於第二段的開頭,到第三段之後結束。ParagraphFormat屬性用來訪問諸如SpaceBefore和SpaceAfter這樣的設置段落格式的屬性。
Set Doc = ActiveDocument
Set aRange = Doc. Range (Start :=Doc. Paragraphs(2). Range. Start, _
End :=Doc. Paragraphs(3). Range. End)
With aRange. ParagraphFormat
.Space1
.SpaceAfter = 6
.SpaceBefore = 6
End With
返回或設置範圍中的文字
可以使用Text屬性來返回或設置一個Range對象中的內容。以下的示例返回了活動文檔中的第一個單詞。
strText = ActiveDocument. Words(1). Text
以下示例將活動文檔中的第一個單詞改爲“Hello”。
ActiveDocument. Words(1). Text = "Hello"
可以使用InsertAfter 方法或者InsertBefore方法在一個範圍的前面或後面插入文字。以下的示例在活動文檔的第二段之前插入文字。
ActiveDocument. Paragraphs(2). Range. InsertBefore Text :="In the beginning "
在使用InsertAfter 方法或者InsertBefore方法之後,範圍隨之擴大,包含新的文字。但是,也可以使用Collapse方法將範圍摺疊到起始位置或終止位置。以下的示例在現有文檔之前插入單詞“Hello”,然後將範圍摺疊到它的起始位置(在單詞“Hello”之前)。
With ActiveDocument.Paragraphs(2).Range
.InsertBefore Text:="Hello "
.Collapse Direction:=wdCollapseStart
End With
設置範圍中文字的格式
可以使用Font屬性來取得設置字符格式的屬性和方法,而使用ParagraphFormat屬性來取得設置段落格式的屬性和方法。以下的示例設置了活動文檔中第一段的字符格式和段落格式。
With ActiveDocument. Paragraphs(1). Range. Font
.Name = "Times New Roman"
.Size = 14
.AllCaps = True
End With
With ActiveDocument. Paragraphs(1). Range. ParagraphFormat
.LeftIndent = InchesToPoints(0.5)
.Space1
End With
重新定義Range對象
可以使用SetRange方法來重新定義一個已經存在的Range對象。以下的示例定義myRange爲當前的選定內容。SetRange方法重新定義myRange,使它表示當前的選定內容加上隨後的十個字符。
Set myRange = Selection. Range
myRange. SetRange Start :=myRange. Start, End :=myRange. End + 10
要獲得重新定義Range對象的其他信息和示例,請參閱“幫助”中“SetRange方法”。
用戶也可以通過改變Start屬性和End屬性的值,或者使用MoveStart方法或MoveEnd方法來重新定義一個Range對象。以下的示例重新定義myRange對象,使它表示當前的選定內容加上隨後的十個字符。
Set myRange = Selection. Range
myRange. End = myRange. End + 10
以下的示例使用MoveEnd方法擴展了myRange,使它包含下一段。
Set myRange = ActiveDocument. Paragraphs(2)
myRange. MoveEnd Unit :=wdParagraph, Count :=1
在範圍內的段落中循環
可以通過幾種不同的方法在範圍內的段落中進行循環。本節包含使用For Each...Next語句和Next屬性及方法在範圍內的段落中進行循環的內容。也可以使用同樣的技術在範圍內的字符、單詞或句子中進行循環。
使用For Each...Next語句
建議在範圍內進行段落循環時使用For Each...Next語句,另外建議在集合內進行循環時也同樣使用該語句。以下的示例在獲得文檔的前五段中進行循環,在每段之前添加文字。
Set myDoc = ActiveDocument
Set myRange = myDoc.Range (Start:=myDoc. Paragraphs(1). Range. Start, _
End :=myDoc. Paragraphs(5). Range. End)
For Each para In myRange. Paragraphs
para.Range. InsertBefore "Question:" & vbTab
Next para
假定用戶想修改上述的代碼,在範圍內對用戶選定的段落進行循環。可以使用Selection屬性來表示選定內容中的各個段落。以下的示例在選定內容的段落中進行循環,去除加粗格式。
For Each para In Selection. Paragraphs
para.Range. Bold = False
Next para
使用Next屬性或方法
用戶也可以使用Next屬性和方法在範圍的段落中進行循環。以下的示例說明了怎樣在範圍的單詞中進行循環,將每個單詞增大一點字號。
Set myRange = ActiveDocument.Words(1)
For i = 1 To 5
myRange. Font. Size = myRange. Font. Size + i
Set myRange = myRange. Next(Unit :=wdWord, Count :=1)
Next i
以下的示例在範圍的段落中進行循環,將範圍的對齊方式由居中改爲左對齊。該示例也使用Next屬性重新定義了myRange,使它表示下一段。
Set myRange = ActiveDocument. Paragraphs(1). Range
For i = 1 To 5
If myRange. Paragraphs(1). Alignment = wdAlignParagraphCenter Then
myRange. Paragraphs(1). Alignment = wdAlignParagraphLeft
End If
Set myRange = myRange. Paragraphs(1). Next. Range
Next i
將Range對象賦值給變量
可以通過幾種途徑來把一個已經存在的Range對象賦給一個變量。在以下示例中,變量Range1和變量Range2都表示Range對象。在該示例中命令把活動文檔中第一和第二個單詞分別賦值給變量Range1和Range2。
Set Range1 = ActiveDocument. Words(1)
Set Range2 = ActiveDocument. Words(2)
設置一個Range對象變量等價於另一個Range對象變量
以下的示例創建變量Range2,並且與Range1相同。
Set Range2 = Range1
現在就有兩個變量表示着同樣的範圍。當用戶調整Range2的起始位置、終止位置或者文字時,所做的更改也同樣會影響到Range1,反之亦然。
以下的示例將Range1默認屬性 (Text屬性)的值賦給Range2的默認屬性。在此示例中的代碼等價於Range2. Text = Range1. Text,它沒有改變Range對象實際所表示的內容,它僅僅改變Range2的contents (text)。
Range2 = Range1
這兩個範圍(Range2和Range1)包含有相同的內容,但是它們可能指向文檔中的不同位置,或者乾脆是不同的文檔。
使用Duplicate屬性
以下的示例創建了一個新複製的Range對象,Range2,該對象有着和Range1一樣的起始位置、終止位置以及文字內容。
Set Range2 = Range1. Duplicate
如果改變了Range1的起始位置或是終止位置,這種改變並不會影響到Range2,反之亦然。但是,因爲這兩個範圍指向文檔的相同位置,改變一個範圍中的文字內容也會同時改變另一個範圍的文字內容。
運用文檔構成部分
一個文檔構成部分是文檔中的一個區域,該區域中的文字區別於文檔中的其他區域。例如,如果一個文檔包含了正文文字、腳註和頁眉,則該文檔就包含了文檔正文部分、腳註部分和頁眉部分。
可以使用StoryType屬性來返回指定範圍、選定內容或書籤的文檔構成部分。如果在腳註部分中包含了選定內容,那麼下例將關閉活動窗口中的腳註窗格。
ActiveWindow. View. Type = wdNormalView
If Selection. StoryType = wdFootnotesStory Then ActiveWindow. ActivePane. Close
StoryRanges集合包含了一個文檔中每種有效的文檔構成部分類型的第一個過程部分範圍。可以使用NextStoryRange方法來返回以後的文檔構成部分。以下的示例搜索活動文檔中的每個文檔過程部分來找出文字“Microsoft Word”。該示例也將它每次找到的文字全部設置爲斜體。
For Each myStoryRange In ActiveDocument. StoryRanges
myStoryRange. Find. Execute FindText :="Microsoft Word", Forward :=True
While myStoryRange. Find. Found
myStoryRange. Italic = True
myStoryRange. Find.Execute FindText :="Microsoft Word", _
Forward :=True, Format :=True
Wend
While Not (myStoryRange. NextStoryRange Is Nothing)
Set myStoryRange = myStoryRange. NextStoryRange
myStoryRange. Find.Execute FindText :="Microsoft Word", Forward :=True
While myStoryRange. Find. Found
myStoryRange. Italic = True
myStoryRange. Find.Execute FindText :="Microsoft Word", _
Forward :=True, Format :=True
Wend
Wend
Next myStoryRange
運用Selection對象
當用戶使用Word中的某個文檔時,通常會先選擇文字,然後再執行一項操作,比如設定以有文字的格式,或是鍵入新文字。在Visual Basic中,通常沒有必要在修改文字之前先選定該文字;而是創建一個表示文檔特定部分的Range對象並對其進行操作。但是,當用戶想要自己的代碼對選定內容作出響應或是改變選定內容,就可以通過Selection對象來完成任務。
可以使用Selection屬性來返回Selection對象。在文檔窗口的每個窗格中只能有一個Selection對象,在任何時刻,也只能有一個活動的Selection對象。選定內容可以包含文檔的一塊區域,也可以被摺疊到一個插入點。以下的示例改變了選定內容中各個段的段落格式。
Selection. Paragraphs. SpaceBefore = InchesToPoints (0.25)
Selection屬性可以在Application對象、Window對象和Pane對象中使用。如果隨同Application對象使用Selection屬性,則該Selection對象表示活動的選定內容。
Selection. InsertAfter Text :="Next Text"
也可以隨同一個Window對象或Pane對象使用Selection屬性來返回一個在特定窗口或窗口窗格中Selection對象。以下的示例隨同Window對象使用Selection屬性,在文檔窗口“Document2”中插入文字。
Windows ("Document2"). Selection.InsertAfter Text :="New Text"
以下的示例隨同Pane對象使用Selection屬性,在主頁眉窗格中插入文字。
With ActiveWindow
.View. Type = wdPageView
.View. SeekView = wdSeekPrimaryHeader
.ActivePane. Selection. InsertAfter Text :="Header"
End With
在使用InsertAfter方法或InsertBefore方法之後,選定內容隨之擴大,包括了新的文字。但是,用戶也可以使用Collapse方法將選定內容摺疊到它的起始或終止位置。以下的示例在選定內容的文字之後插入單詞“Hello”,任何將選定內容摺疊到單詞“Hello”之後的插入點。
Selection. InsertAfter Text :="Hello"
Selection. Collapse Direction :=wdCollapseEnd
移動和擴展選定內容
用戶可以通過幾種方法來移動或擴展由Selection對象所表示的選定內容(例如,Move和MoveEnd)。以下的示例將選定內容移動到下一段的開頭。
Selection. MoveDown Unit :=wdParagraph, Count :=1, Extend :=wdMove
用戶也可以通過改變Selection對象的Start屬性及End屬性的值,或者通過MoveStart和MoveEnd方法來移動或擴展選定內容。以下的示例通過把終止位置移動到段尾來對選定內容進行擴展。
Selection. MoveEnd Unit :=wdParagraph, Count :=1
因爲在一個文檔窗口或窗格中只能有一個選定內容,用戶也可以通過選定另一個對象來移動選定內容。可以使用Select方法,選擇文檔的一項。在使用Select方法之後,就可以使用Selection屬性返回一個Selection對象。以下的示例選定了活動文檔中的第一個單詞,然後把該單詞變爲“Hello”。
ActiveDocument. Words(1). Select
Selection. Text = "Hello "
用戶也可以通過GoToNext方法、GoToPrevious方法或GoTo方法來移動選定內容。以下的示例將選定內容移動到文檔中的第四行。
Selection. GoTo What :=wdGoToLine, Which :=wdGoToAbsolute, Count :=4
以下的示例將選定內容恰好移動到活動文檔中的下一個域之前。
Selection. GoToNext What :=wdGoToField
在Selection對象使用的對象
可以在Range對象和Document對象中使用的許多其他對象也能在Selection對象中使用,這使得用戶可以在一個選定內容中控制操縱對象。要獲得能在Selection對象使用的對象的完整列表,請參閱“幫助”中的“Microsoft Word 對象(Selection)”,或者“Selection對象”。
以下的示例更新了選定內容中各個域的結果。
If Selection. Fields. Count >= 1 Then Selection. Fields. Update
以下的示例將一節中的各個段落縮進了0.5英寸。
Selection. Paragraphs. LeftIndent = InchesToPoints (0.5)
用戶可以使用For Each...Next語句在選定內容中的單個對象上進行循環操作,來代替對選定內容中的所有對象逐個進行控制操縱。以下的示例在選定內容的每個段落上進行循環操作,將找到的任何居中的段落變爲左對齊。
For Each para In Selection. Paragraphs
If para. Alignment = wdAlignParagraphCenter Then para. Alignment = _
wdAlignParagraphLeft
Next para
以下的示例顯示出選定內容中每個書籤的名字。
For Each aBook In Selection. Bookmarks
MsgBox aBook. Name
Next aBook
Selection對象的屬性和方法
本節突出介紹Selection對象的一些常用屬性和方法。
返回或設置選定內容中的文字
可以使用Text屬性來返回或設置一個Selection對象的內容。以下的示例返回所選的文字。
strText = Selection. Text
以下的示例將所選文字改爲“Hello World”。
Selection. Text = "Hello World"
可以InsertBefore 方法或InsertBefore方法,在選定內容之前或之後插入文字。以下的示例在選定內容之前插入了文字。
Selection. InsertBefore Text :="And furthermore "
爲許多文字設定格式
可以使用Font屬性來訪問設置字符格式的屬性和方法,也可以使用ParagraphFormat屬性來訪問設置段落格式的屬性和方法。以下的示例設置了選定內容的字符和段落格式。
With Selection. Font
.Name = "Times New Roman"
.Size = 14
End With
Selection. ParagraphFormat. LeftIndent = InchesToPoints (0.5)
返回一個Range對象
如果一種方法或屬性是在Range對象而不是Selection對象中使用的(例如,CheckSpelling方法),那麼可以使用Range屬性來從Selection對象返回一個Range對象。以下的示例對所選單詞進行拼寫檢查。
Selection. Range. CheckSpelling
返回關於選定內容的信息
可以使用Information屬性來返回關於選定內容的信息。例如,用戶可以判斷當前頁的頁碼、文檔的總頁數,或是判斷選定內容是否在一個頁眉或註腳中。Information屬性可取三十五種不同的常量(wdActiveEndPageNumber, wdNumberOfPagesInDocument 和 wdInHeaderFooter等等),用戶可以使用它們來返回關於選定內容的不同信息。舉個例子,如果選定內容處於一張表格中,那麼以下的示例將顯示錶格中的行號或列號。
If Selection. Information (wdWithInTable) = True Then
MsgBox "Columns = " & Selection. Information (wdMaximumNumberOfColumns) _
& vbCr & "Rows = " & Selection. Information (wdMaximumNumberOfRows)
End If
要獲得可以隨Information屬性一起使用的常量的完整列表和說明,請參閱“幫助”中的“Information屬性”。
判斷文字是否被選定
可以使用Type屬性來設置或返回選定內容在文檔中被指定的方式。例如,可以使用wdSelectionBlock常量來判斷一個文字塊是否被選定。如果選定內容是一個插入點,那麼以下的示例選定包含該插入點的段落。
If Selection. Type = wdSelectionIP Then
Selection. Paragraphs(1). Range. Select
End If
運用Find和Replacement對象
可以使用Find和Replacement對象來查找並且替換文檔中文字的特定範圍。Find對象可以在Selection對象或Range對象中使用(根據Find對象是從Selection對象還是從Range對象返回的,查找操作也略有不同)。
使用Selection.Find
如果是在Selection對象中使用Find對象,那麼當找到符合選擇條件的文本後選定內容將會改變。以下的示例選定下一次出現的單詞“Hello”。如果在找到單詞“Hello”之前已經到達了文檔的末尾,那麼停止搜索。
With Selection. Find
.Forward = True
.Wrap = wdFindStop
.Text = "Hello"
.Execute
End With
Find對象包含與“查找”和“替換”對話框(在“編輯”菜單中)裏的選項有關的屬性。用戶既可對Find對象的屬性逐一進行設置,也可以隨同Execute方法使用參數來進行設置,如果以下示例所示。
Selection. Find. Execute FindText :="Hello", Forward :=True, Wrap :=wdFindStop
使用Range.Find
如果是在Range對象中使用Find對象,選定內容不會改變,但是當找到符合選擇條件的文本時範圍會被重新定義。以下的示例確定活動文檔中第一次出現的單詞“blue”的位置。如果查找操作成功,將重新定義範圍並且設置單詞“blue”的格式爲粗體。
With ActiveDocument. Content. Find
.Text = "blue"
.Forward = True
.Execute
If .Found = True Then .Parent.Bold = True
End With
以下的示例執行了和上述示例相同的操作,只是使用了Execute方法的參數。
Set myRange = ActiveDocument. Content
myRange. Find. Execute FindText :="blue", Forward :=True
If myRange. Find. Found = True Then myRange. Bold = True
使用Replacement對象
Replacement對象表示查找-替換操作的替換條件。Replacement對象的屬性和方法對應於“查找”和“替換”對話框(在“編輯”菜單中)裏的選項。
可以在Find對象中使用Replacement對象。以下的示例將所有出現單詞“hi”的地方替換爲“hello”。當找到符合選擇條件的文本時,選定內容將會改變,因爲代碼從Selection對象返回Find對象。
With Selection. Find
.ClearFormatting
.Text = "hi"
.Replacement. ClearFormatting
.Replacement. Text = "hello"
.Execute Replace :=wdReplaceAll, Forward :=True, Wrap :=wdFindContinue
End With
以下的示例去除了活動文檔中所有的粗體格式。Bold屬性對Find對象爲True(真),對Replacement屬性爲False(假)。要查找和替換格式,需設置查找和替換文本爲空字符串(“”),並且設置Execute方法的Format參數爲True(真)。選定內容保持不變,因爲代碼在Range對象中返回Find對象(Content屬性返回一個Range對象)。
With ActiveDocument. Content. Find
.ClearFormatting
.Font. Bold = True
With .Replacement
.ClearFormatting
.Font. Bold = False
End With
.Execute FindText :="", ReplaceWith :="", Format :=True, Replace :=wdReplaceAll
End With
運用Table、Column、Row和Cell對象
Word對象模型包含了表格對象,也包含了表格中各種不同元素的對象。可以隨同Document對象、Range對象、Selection對象使用Table屬性來返回Table集合。Table(index)返回了一個單獨的Table對象,在這裏index是表格的索引號。索引號代表在選定內容、範圍或文檔中表格的位置。以下的示例將選定內容中的第一個表格轉換爲文本。
If Selection. Tables. Count >= 1 Then
Selection. Tables(1). ConvertToText Separator :=wdSeparateByTabs
End If
可以隨同Column對象、 Range 對象、Row對象或 Selection對象使用Cells屬性來返回Cells集合。用戶可以通過使用Table對象的Cell方法或是索引Cells集合來獲得一個Cell對象。以下的兩條語句都能夠設置myCell爲一個Cell 對象,該Cell對象代表活動文檔中表格一的第一個單元格。
Set myCell = ActiveDocument. Tables(1). Cell(Row :=1, Column :=1)
Set myCell = ActiveDocument. Tables(1). Columns(1). Cells(1)
註釋 要在一個表格的一個單元格中插入文字,可以使用Text屬性、InsertAfter方法或者隨Range對象使用InsertBefore方法。可以隨Cell對象使用Range屬性來返回一個Range對象。以下的示例在表格一的每一個單元格中插入連續的單元格序號。
i = 1
For Each c In ActiveDocument. Tables(1). Range. Cells
c. Range. InsertBefore Text :="Cell " & i
i = i + 1
Next c
可以隨同Table對象、Range對象或Selection對象使用Column屬性來返回Columns集合。Columns(index)返回了一個單獨的Column對象,在這裏index是索引號。以下的示例選擇了表格一的第一列。
ActiveDocument. Tables(1). Columns(1). Select
可以隨同Table對象、Range對象或Selection對象使用Row屬性來返回Rows集合。Rows(index)返回了一個單獨的Row對象,在這裏index是索引號。以下的示例給表格一的第一行加底紋。
ActiveDocument. Tables(1). Rows(1). Shading. Texture = wdTexture10Percent
修改圖形表格的行與列
當用戶試圖使用在一個圖形表格(或者任何表格,其中有兩個以上相鄰的單元格被合併,但是行與列沒有統一)中某一單獨的行或列時,就可能出現一個運行時錯誤。如果活動文檔中的第一個表格的每列含有不一致的行號,以下的示例就會出錯。
ActiveDocument. Tables(1). Rows(1). Borders.Enable = False
用戶可以首先使用SelectColumn或SelectRow方法來選定某個特定行或列的單元格,以此避免這樣的錯誤。當用戶選好了行或列,再隨Selection對象使用Cells屬性。以下的示例選定了活動文檔中表格一的第一行。該示例使用Cells屬性返回所選的單元格(在第一行中所有單元格),以便可以刪除邊框。
If ActiveDocument. Tables(1). Uniform = False
ActiveDocument. Tables(1). Cell(1, 1). Select
With Selection
.SelectRow
.Cells. Borders. Enable = False
End With
End If
以下的示例選定了表格一的第一列。該示例使用了一個For Each...Next循環來向選定內容(第一列的所有單元格)中的每個單元格添加文字。
If ActiveDocument. Tables(1). Uniform = False
ActiveDocument. Tables(1). Cell(1, 1). Select
Selection. SelectColumn
i = 1
For Each oCell In Selection. Cells
oCell.Range. Text = "Cell " & i
i = i + 1
Next oCell
End If
運用其他普通對象
本節提供了關於運用一些普通Word對象的信息和技巧。
使用HeaderFooter對象
HeaderFooter對象既可以表示一個頁眉也可以表示一個註腳。HeaderFooter對象是HeaderFooter集合的一個成員,它可以在Section對象中使用。Headers(index)或Footer(index)屬性返回了一個單獨的HeaderFooter對象,在這裏index是WdHeaderFooterIndex常量的一個值。
以下的示例創建了一個Range對象(aRange),該對象表示活動文檔第一節的主要註腳。在該示例設置Range對象之後,它刪除了已有的註腳文本。它還向註腳添加了AUTHOR域以及兩個表和FILENAME域。
Set oRange = ActiveDocument. Sections(1). Footers (wdHeaderFooterPrimary). Range
With oRange
.Delete
.Fields. Add Range :=oRange, Type :=wdFieldFileName, Text :="/p"
.InsertAfter Text :=vbTab
.InsertAfter Text :=vbTab
.Collapse Direction :=wdCollapseStart
.Fields.Add Range :=oRange, Type :=wdFieldAuthor
End With
註釋 PageNumbers集合僅僅能在HeaderFooter對象中使用。可以對PageNumbers集合應用Add方法來向一個頁眉或註腳添加頁碼。
使用Styles集合
Styles集合可以在Document對象中使用。以下的示例改變了活動文檔中“標題1”樣式的格式。
ActiveDocument. Styles (wdStyleHeading1). Font. Name = "Arial"
Styles集合不能在Template對象中使用。如果想修改一個模板中的樣式,可以使用OpenAsDocument方法按文檔來打開模板,這樣用戶就可以對樣式進行修改。以下的示例改變了活動文檔所附的模板中“標題1”樣式的格式。
Set aDoc = ActiveDocument. AttachedTemplate. OpenAsDocument
With aDoc
.Styles(wdStyleHeading1). Font. Name = "Arial"
.Close SaveChanges :=wdSaveChanges
End With
指定CommandBars
在使用CommandBars集合(表示菜單欄和工具欄)之前,可以使用CustomizationContext屬性來設置保存着對菜單欄和工具欄的更改的Template或Document對象。以下的示例給“格式”工具欄添加了“雙下劃線”命令。因爲自定義更改保存在Normal模板中,所有的文檔都會受到影響。
CustomizationContext = NormalTemplate
CommandBars ("Formatting"). Controls. Add Type :=msoControlButton, _
ID :=60, Before :=7
要了解關於菜單欄和工具欄的更改範圍的更多信息,請參閱第八章,“菜單欄和工具欄”。
使用Dialogs集合
可以使用Dialogs屬性返回Dialogs集合,該集合表示內置Word對話框(例如,“打開”和“保存”對話框等)。用戶不能新建內置對話框,也不能向Dialogs集合添加內置對話框。要了解關於創建用ActiveX控件創建自定義對話框的內容,請參閱第十二章,“ActiveX 控件和對話框”。
返回MailMerge和MailMerge對象
可以使用Document對象的MailMerge屬性來返回一個MailMerge對象。無論所指定的文檔是否是一個郵件合併文檔,都可以使用MailMerge屬性。在用戶使用Execute方法執行合併之前,可以使用State屬性來確定郵件合併操作的狀態。如果活動文檔是附加了數據源的主文檔,那麼以下的示例將執行郵件合併。
Set myMerge = ActiveDocument.MailMerge
If myMerge. State = wdMainAndDataSource Then myMerge. Execute
使用Document對象的Envelope屬性可以返回一個Envelope對象。無論用戶是否向所指定的文檔添加了一個信封,都可以使用Envelope對象。但是,如果用戶使用以下屬性而沒有向文檔添加信封,那麼會出現錯誤:Address屬性, AddressFromLeft屬性, AddressFromTop屬性,FeedSource屬性, ReturnAddress屬性,ReturnAddressFromLeft屬性, ReturnAddressFromTop屬性或 UpdateDocument屬性。
以下的示例使用On Error GoTo語句來捕獲用戶沒有向活動文檔添加信封的錯誤。但是,如果用戶已經向文檔添加了信封,將顯示收件人地址。
On Error GoTo ErrorHandler
MsgBox ActiveDocument. Envelope. Address
ErrorHandler:
If Err = 5852 Then MsgBox "Envelope is not in the specified document"
在文檔中添加和編輯域
用戶可以通過對Field集合應用Add方法來給文檔添加域。以下的示例添加了一個DATE域來替換選定內容。
ActiveDocument. Fields. Add Range:=Selection. Range, Type :=wdFieldDate
在添加一個域之後,用戶可以通過使用Result或Code屬性來返回或設置域結果和域代碼,這兩種屬性都可以返回一個Range對象。以下的示例更改選定內容的第一個域代碼,更新該域,然後顯示域結果。
If Selection. Fields. Count >= 1 Then
With Selection. Fields (1)
.Code. Text = "CREATEDATE /*MERGEFORMAT"
.Update
MsgBox . Result. Text
End With
End If
InlineShape對象同Shape對象的對比
一個Shape對象代表圖形層的一個對象,諸如自選圖形、任意多邊形、OLE對象、ActiveX控件、圖片等。Shape對象鎖定於文本範圍內,但是能夠任意移動,使用戶可以將它們定位於頁面的任何位置。要了解運用Shape對象的信息,請參閱第十章,“形狀和圖形層”,也可以參閱“幫助”中的“Shape對象”。
一個InlineShape對象代表文檔文字層的一個對象。一個嵌入式形狀可能是圖片、OLE對象或ActiveX控件。可以將InlineShape對象視爲字符,並將其象字符一樣放在一行文本中。要了解關於InlineShape對象的信息,請參閱“幫助”中的“InlineShape集合對象”或“InlineShape對象”。
在Word窗體中使用FormField對象
用戶可以創建一個Word在線窗體,該窗體包含複選框、文本文本框和下拉式列表框。使用“窗體”工具欄可以插入這些窗體元素。對應的Visual Basic對象是CheckBox, TextInput, 和DropDown。所有這些對象都可以在FormFields集合的任何一個FormField對象中使用;但是,用戶應當使用按照窗體域的類型使用相應的對象。例如,以下命令從活動文檔的“Check1”域中選擇複選框。
ActiveDocument. FormFields ("Check1").CheckBox. Value = True
除了“窗體”工具欄中的窗體元素之外,用戶還可以向一個在線窗體添加ActiveX控件。使用“控件工具箱”可以插入ActiveX控件。用戶可以把控件插入文字層或圖形層;控件將分別由一個InlineShape 對象或一個Shape對象來表示。要了解關於運用ActiveX控件的更多內容,請參閱第十二章,“ActiveX控件和對話框”。
判斷對象是否有效
可以通過在用戶代碼中包含判斷語句來判斷由一個表達式返回的特定對象或者一個變量所引用的對象是否有效,以此避免代碼在運行時的錯誤。本節討論了一些檢查表達式返回值或變量保存值有效性的技術。
用戶可以隨同一個變量或表達式使用TypeName函數來確定對象的類型。如果Selection. NextField返回了一個Field對象,那麼以下的示例將在狀態欄中顯示一條消息。
If TypeName (Selection. NextField) = "Field" Then StatusBar = "A field was found"
以下示例的功能等價於上述示例;不同之處僅在於它使用一個對象變量(myField)來保存NextField方法的返回值。
Set myField = Selection. NextField
If TypeName (myField) = "Field" Then StatusBar = "A field was found"
如果指定的變量或表達式不代表一個對象,它對Nothing求值。如果NextField方法沒有返回Nothing(也就是說,如果NextField方法返回了一個Field對象,它只是其他的可能返回值),那麼以下的示例將對myField應用Update方法。
Set myField = Selection. NextField
If Not (myField Is Nothing) Then myField. Update
Word包含共用的IsObjectValid屬性。可以使用該屬性來判斷一個被某個變量所引用的對象是否有效。如果變量所引用的對象已經被刪除了,那麼該屬性返回False。以下的示例向活動文檔添加一個表格,並且把它賦值給變量aTable。該示例從文檔中刪除了第一個表格。如果aTable引用的表格不是文檔中的第一個表格(也就是說,如果aTable仍然是一個有效的對象),那麼該示例刪除表格的邊框。
Set aTable = ActiveDocument. Tables. Add(Range :=Selection. Range, NumRows :=2, _
NumColumns:=3)
ActiveDocument. Tables(1).Delete
If IsObjectValid (aTable) = True Then aTable. Borders. Enable = False
修改Word命令
用戶可以通過把命令轉變爲宏來對絕大多數Word命令進行修改。例如,可以“文件”菜單中的“打開”命令,使Word顯示當前文件夾中的每一個文件,而不是隻顯示Word文檔文件列表(在Windows中,控制名爲.doc的文件)。
要在“宏”對話框(在“工具”菜單中)裏顯示內置Word命令的列表,可以在該對話框中“宏的位置”一欄裏選中“Word 命令”。在該對話框中就會列出每一個可用的菜單、工具欄或快捷鍵命令。每個菜單命令用與該命令關聯的菜單名開頭。例如,在“文件”菜單中的“保存”命令顯示爲“FileSave”。
用戶可以通過給宏取和Word命令相同的名字來用一個宏替換一條Word命令。例如,如果用戶創建了一個名爲“FileSave”的宏,當用戶:在“文件”菜單中單擊“保存”、在“常用”工具欄中單擊“保存”按鈕或按下給FileSave指定的快捷鍵時,Word將運行該宏。
修改Word命令
在“工具”菜單中,用鼠標指向“宏”,然後單擊“宏的位置”。
在“宏的位置”一欄中,單擊“Word 命令”。
在“宏名”一欄中,選中要修改的Word命令(例如,FileSave)。
在“宏的位置”一欄中,選擇要保存宏的模板或文檔的位置。例如,單擊Normal.dot(共用模板)來創建一個共用宏(FileSave命令將會自動地對所有文檔進行修改)。
單擊“創建”。
Visual Basic編輯器被打開,其中顯示出一個模塊,該模塊包含有一個與剛纔被選中的命令同名的新過程。如果選中了FileSave命令,那麼就出現FileSave宏,如以下示例所示。
Sub FileSave()
FileSave Macro
Saves the active document or template
保存活動文檔或模板
ActiveDocument.Save
End Sub
用戶可以添加附加的命令或刪除已有的ActiveDocument. Save命令。FileSave命令每次運行時,FileSave宏都將Word命令來執行。要恢復原來的FileSave命令,需要更改FileSave宏的名字或刪除它。
註釋 用戶還可以通過創建與Word命令(例如,FileSave)同名的代碼模塊來用一個名爲“Main”的子例程替換一條Word命令。
運用事件
一個事件既可以是一個被對象識別的操作(比如,打開一個文檔或者從應用程序退出),也可以是一個能夠編寫代碼來響應的操作。一個用戶的操作或一段程序代碼都可以導致事件的發生,事件也可以由系統引起。Word所支持的事件均列在下表中,該表還列出了ActiveX控件事件,它們將在第十二章“ActiveX控件和對話框”中進行討論。
要了解關於運用Word事件的信息,請參閱下列“幫助”主題:“使用Document對象的事件”、“使用ActiveX控件的事件”以及“使用Application對象的事件”。
Document事件
當用戶打開或關閉一個已經存在的文檔時,或者用戶在新建一個文檔時,就發生了文檔事件,如以下示例所示。
事件描述
當關閉一個文檔時發生Close事件。
當創建一個基於模板的新文檔時發生New事件。
當打開一個文檔時發生Open事件。
一個文檔事件過程的範圍取決於它保存的位置。如果在一個文檔中保存Open或Close事件過程,那麼該過程僅當用戶關閉或打開該文檔時才發生;如果在一個模板中保存Open或Close事件,那麼當打開或關閉基於該模板的文檔或該模板本身時,該過程才發生。一個新事件過程必須保存在模板中;一個保存在文檔中新事件過程決不會運行,因爲文檔只能基於模板來創建。
以下的示例在打開文檔時將Word應用程序的窗口擴至最大狀態。
Private Sub Document_Open()
Application. WindowState = wdWindowStateMaximize
End Sub
ActiveX控件事件
Word爲Word文檔中的ActiveX控件執行LostFocus 和 GotFocus事件。
事件描述
在焦點移開嵌入式 ActiveX 控制時發生LostFocus事件。
當焦點移至內嵌式 ActiveX 控制時發生GotFocus事件。
以下的示例保持CommandButton1處於禁用狀態,直到用戶在TextBox1中鍵入一個值。
Private Sub TextBox1_LostFocus()
If TextBox1. Value = "" Then
CommandButton1. Enabled = False
Else
CommandButton1. Enabled = True
End If
End Sub
其他ActiveX控件事件的文檔在“Microsoft 窗體幫助”中。有關在自定義對話框和文檔中使用ActiveX控件的內容,請參閱第十二章“ActiveX控件和對話框”。
Application事件
當用戶退出應用程序或焦點移至另一個文檔時發生Application事件。但是,與Document和ActiveX控件事件不同,Application事件默認事件處於禁用狀態。在用戶隨同Application對象使用事件之前,必須新建一個類模塊並聲明一個包含事件的 Application 類型對象。用戶可以在Visual Basic編輯器中使用類模塊命令(插入菜單)的形式來新建一個類模塊。
啓用Application對象的事件,最好向類模塊中添加以下聲明。
Public WithEvents App As Application
定義了包含事件的新對象後,它將出現在類模塊的“對象”下拉列表框中,然後可爲新對象編寫事件過程。(在“對象”框中選定新對象後,其有效事件將出現在“過程”下拉列表框中。)
但是在過程運行之前,必須將類模塊中的已聲名對象和 Application 對象相連接。要完成上述任務,可以在任何模塊中使用下列聲明(在這裏“EventClass”是用戶創建的用來啓用事件的類模塊的名字)。
Public X As New EventClass
當用戶已經創建了X對象變量後(EventClass類的一個實例),可以設置EnventClass類的App對象於Word Application對象等價。
Sub InitializeApp()
Set X. App = Application
End Sub
在用戶運行InitializeApp過程之後,EventClass類模塊中的App對象指向了Word Application對象,而且只要事件發生,類模塊中的事件過程也將會運行。
在用戶禁用Application對象的事件之後,可以爲下表中的事件創建事件過程。
事件描述
當新建一個文檔、打開一個已有文檔或使另一個文檔成爲活動文檔時DocumentChange事件發生。
當用戶退出Word時Quit事件發生。
以下的實例確保了在用戶退出Word之前,“常用”工具欄和“格式”工具欄均爲可見。結果,當重新啓動Word時,這些工具欄將不會出現。
Private Sub App_Quit()
CommandBars ("Standard"). Visible = True
CommandBars ("Formatting"). Visible = True
End Sub
使用自動宏
通過給一個宏賦予一個特殊的名字,用戶可以在執行諸如啓動Word或打開一個文檔這樣的操作時自動運行它。Word將下列名稱識別爲自動宏,或者“自動”宏。
宏 名
運 行 時 刻
AutoExec
每次啓動Word或裝載一個全局模板時
AutoNew
每次新建一個文檔時
AutoOpen
每次打開一個已有文檔時
AutoClose
每次關閉一個文檔時
AutoExit
每次退出Word或卸載一個全局模板時
關於使用自動宏的詳細信息,請參閱“幫助”中的“自動宏”。
使用自動化
在運用Word數據之外,用戶還可能想讓自己的應用程序同其他的應用程序,比如Microsoft Excel, Microsoft PowerPoint, 或Microsoft Access交換數據。用戶可以通過使用自動化(以前的OLE自動化)來同其他應用程序進行通信。
從另一個應用程序中對Word進行自動化
自動化運行用戶通過引用另一個應用程序的對象、屬性和方法來返回、編輯和輸出數據。用戶能夠在另一個應用程序中進行引用的Application對象稱爲自動化對象。使Word能夠被另一個應用程序所使用的第一步,就是創建對Word類型庫的一個引用。要創建對Word類型庫的引用,可以在“Visual Basic編輯器”裏,單擊 “工具”菜單中的“引用”,然後在“Microsoft Word 8.0 Object Library”旁邊的複選框內打上鉤。
下一步,聲明一個引用Word Application對象的對象變量,如下例所示。
Dim appWD As Word. Application. 8
使用帶有Word OLE程序標識符的Visual Basic CreateObject函數或GetObject函數,如下例所示。如果想看到Word時段,設置Visible屬性爲True(真)。
Dim appWD As Word. Application. 8
Set appWD = CreateObject ("Word. Application.8")
appWd. Visible = True
CreateObject函數返回一個Word Application對象,並且將它賦給appWD。通過使用Word Application對象的對象、屬性和方法,用戶可以用該變量對Word進行控制。以下的實例新建一個Word文檔。
appWd. Documents. Add
CreateObject函數啓動一個Word時段,當引用Application對象的對象變量失效時,該時段內的自動化不會關閉。設置該對象引用Nothing關鍵字也不會關閉Word。而是使用Quit方法來關閉Word。以下的Microsoft Excel示例把“工作表1”中A1:B10單元格里的數據插入到一個Word新文檔中,然後調整表格中的數據。如果使用了CreateObject函數,則該示例使用Quit方法來關閉Word的新實例。如果GetObject函數返回錯誤429,那麼該示例使用CreateObject來啓動一個Word新實例。
Dim appWD As Word. Application
Err.Number = 0
On Error GoTo notloaded
Set appWD = GetObject (, "Word. Application.8")
notloaded:
If Err. Number = 429 Then
Set appWD = CreateObject ("Word. Application.8")
theError = Err. Number
End If
appWD. Visible = True
With appWD
Set myDoc = .Documents. Add
With .Selection
For Each c In Worksheets ("Sheet1"). Range ("A1:B10")
.InsertAfter Text :=c.Value
Count = Count + 1
If Count Mod 2 = 0 Then
.InsertAfter Text :=vbCr
Else
.InsertAfter Text :=vbTab
End If
Next c
.Range. ConvertToTable Separator :=wdSeparateByTabs
.Tables(1). AutoFormat Format :=wdTableFormatClassic1
End With
myDoc. SaveAs FileName :="C:/Temp.doc"
End With
If theError = 429 Then appWD. Quit
Set appWD = Nothing
從Word對另一個應用程序進行自動化
要通過從Word使用自動化來和另一個應用程序交換數據,必須首先在“引用”對話框(在“工具”菜單中)裏設置對另一個應用程序的類類型庫的一個引用。在這之後,另一個應用程序的對象、屬性和方法都將出現在“對象瀏覽器”中,並且會在編譯時自動對語法進行檢查。用戶也可以獲得這些對象、屬性和方法的內容敏感型幫助。
下一步,聲明一個引用另一個應用程序中的特定類型對象的對象變量。以下示例聲明瞭一個變量,該變量指向Microsoft Excel Application對象。
Dim xlObj As Excel.Application.8
用戶可以通過使用CreateObject 或 GetObject函數來獲得Automation對象。然後,通過使用另一個應用程序的對象、屬性和方法,用戶可以添加、更改或刪除信息。當用戶完成更改後,關閉應用程序。以下Word的示例判斷Microsoft Excel是否正在運行。如果指定的Microsoft Excel任務存在,該示例使用GetObject函數;否則,它使用CreateObject函數。然後該示例將選定的文字傳送給活動的Microsoft Excel工作簿裏“工作表1”的A1單元格中。在任務完成以後,使用帶有Nothing關鍵字的Set語句來清除Automation對象變量。
Dim xlObj As Excel. Application. 8
If Tasks.Exists ("Microsoft Excel") = True Then
Set xlObj = GetObject (, "Excel. Application. 8")
Else
Set xlObj = CreateObject ("Excel. Application. 8")
End If
xlObj. Visible = True
If xlobj. Workbooks. Count = 0 Then xlobj. Workbooks. Add
xlObj. Worksheets ("Sheet1").Range("A1").Value = Selection. Text
Set xlObj = Nothing
以下Word的示例判斷PowerPoint是否正在運行。如果存在PowerPoint任務,那麼該示例使用GetObject函數;否則,它使用CreateObject函數。然後該示例創建一個新演示文稿,文稿的第一個文本框包含活動Word文檔的名稱,第二個文本框包含活動文檔第一段的文字。在任務完成後,使用帶有Nothing關鍵字的Set語句來清除Automation對象變量。
Dim pptObj As PowerPoint. Application.8
If Tasks. Exists ("Microsoft PowerPoint") = True Then
Set pptObj = GetObject (, "PowerPoint. Application.8")
Else
Set pptObj = CreateObject ("PowerPoint. Application.8")
End If
pptObj. Visible = True
Set pptPres = pptObj. presentations. Add
Set aSlide = pptPres. Slides. Add(Index :=1, Layout :=ppLayoutText)
aSlide. Shapes(1). TextFrame. TextRange. Text = ActiveDocument.Name
aSlide. Shapes(2). TextFrame. TextRange. Text = ActiveDocument.Paragraphs(1). Range. Text
Set pptObj = Nothing
要了解關於對Microsoft Access進行自動化的信息,請參閱第三章“Microsoft Access對象”。要了解關於Word中Data Access 對象(DAO)的使用,請參閱“幫助”中的“在Microsoft Word中使用DAO”。
同內嵌Word對象進行通信
以後可以使用任何Word對象的Application屬性來返回Word Application 對象。這有助於從內嵌在另一個應用程序中的Word文檔裏方法Word Application對象。以下的在Microsoft Excel中運行的示例,將一個對象變量設置爲Word Application對象。(爲了使該示例能夠運行,在活動工作表中的形狀一必須是一個內嵌Word文檔。)該示例中最後一條命令在內嵌Word文檔的開頭添加文字。
Dim appWRD As Word. Application
Set embeddedDoc = ActiveSheet. Shapes(1)
Set appWRD = embeddedDoc. OLEFormat. Object. Object. Application
appWRD. ActiveDocument. Range(Start :=0, End :=0). InsertBefore Text :="New text "
以下在PowerPoint中運行的示例,將一個對象變量設置爲Word Application對象。(爲了使該示例能夠運行,在演示文稿中的幻燈片一必須是一個內嵌Word文檔。)該示例的最後一條命令顯示了在內嵌Word文檔中的文字。
Dim appWRD As Word. Application
Set embeddedDoc = Presentations(1). Slides(1). Shapes(1)
embeddedDoc. OLEFormat. Activate
Set appWRD = embeddedDoc.OLEFormat. Object. Application
MsgBox appWRD. ActiveDocument. Content.Text
個人信息中心
©2006 Microsoft Corporation. 版權所有. 保留所有權利 |商標 |隱私權聲明