Word VBA.docx
- 文档编号:6686850
- 上传时间:2023-01-09
- 格式:DOCX
- 页数:26
- 大小:30.98KB
Word VBA.docx
《Word VBA.docx》由会员分享,可在线阅读,更多相关《Word VBA.docx(26页珍藏版)》请在冰豆网上搜索。
WordVBA
VisualBasic支持一个对象集合,该集合中的对象直接对应于MicrosoftWord97中的元素,并且通过用户界面,用户熟悉这些元素中的绝大多数。
例如,Document对象代表了一个打开的文档,Bookmark对象代表了一个文档中的书签,而Selection对象则代表了在一个文档窗口窗格中的选定内容。
在Word中,每一类元素-文档、表格、段落、书签、域等等-都可以用VisualBasic的对象来表示。
要在Word中自动执行任务,可以使用这些对象的方法和属性。
关于理解和使用MicrosoftOffice97对象模型的一般性内容,请参阅本书的第二章“理解对象模型”。
在MicrosoftOffice97中的对象模型相当丰富,其中包含了大约180个对象。
要查看Word对象模型的层次关系图,请参阅“帮助”中的“MicrosoftWord对象”。
要获得对某种特定对象的详细描述,可以在此图中单击该对象的名字,或是在“帮助”的索引中对特定对象进行搜索。
怎样显示WordVisualBasic帮助
要使用WordVisualBasic帮助,必须在安装过程中选择“自定义”的安装方式,并且为Word选中“VisualBasic在线帮助”复选框。
否则,安装程序不会安装VisualBasic帮助。
如果用户已经安装好了Word,那么可以再次运行Setup程序来安装VisualBasic帮助。
要查看WordVisualBasic帮助,可以在“VisualBasic编辑器里的“帮助”菜单中点击“目录和索引”一项。
在“帮助主题”对话框的“目录”一表中,双击“MicrosoftWordVisualBasic参考”,然后再双击“VisualBasic参考”。
“帮助主题”对话框会重新出现,显示出MicrosoftWordVisualBasic的目录和索引。
运用Application对象
在用户启动一个Word时段的同时,也创建了一个Application对象。
用户可以使用Application对象的属性或方法来控制或返回应用程序范围内的特性、控制应用程序窗口的外观或者调整Word对象模型的其他方面。
可以使用Application属性来返回WordApplication对象。
以下的示例从视图状态切换到打印预览状态。
Application.PrintPreview=True
Application对象的一些属性控制着应用程序的外观。
例如,如果DisplayStatusBar属性为True(真),那么状态栏是可见的,如果WindowState属性值为wdWindowStateMaximize,那么应用程序窗口处于最大化状态。
以下的示例设置了屏幕上应用程序窗口的大小。
WithApplication
.WindowState=wdWindowStateNormal
.Height=450
.Width=600
EndWith
Application对象的属性也可以访问处于对象层次中较低级的对象,比如Windows集合(代表了当前所有打开的窗口)和Documents集合(代表了当前所有打开的文档)。
用户可以使用属性,有时候也叫做访问者,从对象层次中最高一级的Application对象向下访问到较低级的对象(Document对象、Window对象、Selection对象等等)。
可以使用以下两个示例之一来打开MyDoc.doc。
Application.Documents.OpenFileName:
="C:
\DOCS\MYDOC.DOC"
Documents.OpenFileName:
="C:
\DOCS\MYDOC.DOC"
因为Document属性是共用的,所以Application属性是可选的。
共用属性和方法无需Application对象限定符。
要在“对象浏览器”中浏览共用属性和方法的列表,可以在“类别”栏中单击“<共用>”。
共用项就会列在“成员”栏中。
注释Option对象包含了控制Word共用行为的一些属性。
许多Option对象的属性对应于Option对话框中的各项(Tools菜单)。
使用Application对象的Option属性可以返回Option对象。
以下的示例设置了三个应用程序范围内的选项(因为Option属性是共用的,所以在本示例中无需Application属性)。
WithApplication.Options
.AllowDragAndDrop=True
.ConfirmConversions=False
.MeasurementUnit=wdPoints
EndWith
运用Document对象
当用户在Word中打开或创建一个文件的同时,也创建了一个Document对象。
用户可以使用Document对象或Documents集合的属性或方法来打开、创建、保存、激活或者关闭文件。
返回Document对象
用户可以使用语法Documents(index)来返回作为一个Document对象的任何打开的文档,在这里index是该文档的名字或索引号。
在以下的示例中,变量myDoc包含一个Document对象,该对象代表名为“Report.doc”的打开的文档。
SetmyDoc=Documents("Report.doc")
索引号代表了文档在Documents集合中的位置。
在以下的示例中,变量myDoc包含了一个Document对象,该对象代表Documents集合中的第一个文档。
SetmyDoc=Documents
(1)
注释因为当用户添加或关闭多个文档时,某个特定文档的索引号会发生改变,所以最好使用文档的名字来对Documents集合中的Document对象进行索引。
除了通过文档的名字或索引号来引用文档,还可以使用ActiveDocument属性来返回一个引用活动文档(当前着眼的文档)的Document对象。
以下的示例显示产活动文档的名字;如果没有打开的文档,则该示例显示一条消息。
IfDocuments.Count>=1Then
MsgBoxActiveDocument.Name
Else
MsgBox"Nodocumentsareopen"
EndIf
打开文档
要打开一个已经存在的文档,可以使用Open方法。
Open方法应用于通过Document属性返回的Documents集合。
以下的示例打开了文件Test.doc(从当前文件夹)并且启动了更改跟踪。
SetmyDoc=Documents.Open(FileName:
="TEST.DOC")
myDoc.TrackRevisions=True
注意到在上例中Open方法的返回值是一个Document对象,该对象表示刚被打开的文档。
在此示例中的文件名不包含路径;因此,是假定了该文件在当前的文件夹中。
但这会导致出现一个运行时错误,因为一旦用户创建了与当前文件夹不同的文件夹,VisualBasic就再也找不到该文件了。
但是,用户可以通过指明完整的路径,就如同下表所示的那样,来确保打开正确的文件。
操作系统
FileName参数
Windows
FileName:
="C:
\Documents\TemporaryFile.doc"
Macintosh
FileName:
="HardDrive:
Documents:
TemporaryFile"
如果用户的宏只用于一种文件系统,那么可以在FileName参数中指定路径分隔符(“\”或者“:
”),就如同上表所示的那样。
以下示例显示了与文件系统无关的代码,可以用来打开Sales.doc,并且假定Sales.doc已经保存在Word的程序文件夹中。
programPath=Options.DefaultFilePath(wdProgramPath)
Documents.OpenFileName:
=programPath&Application.PathSeparator&"SALES.DOC"
PathSeparator属性返回当前文件系统(例如,“\”用于MS-DOS/Windows的文件分配表,或者“:
”用于Macintosh)的正确的文件分隔符。
DefaultFilePath属性返回文件的位置,比如文档所在文件夹的路径、程序文件夹或者当前文件夹。
如果所指定的文件名既没有在当前文件夹(如果没有指定路径)出现也没有在指定的文件夹(如果指定了路径)中出现,那么就会发生错误。
以下的示例使用FileSearch对象的属性和方法来判断名为“Test.doc”的文件是否存在于用户的默认文档文件夹中。
如果找到了该文件(FoundFiles.Count=1),那么就打开它;否则,显示一条消息。
defaultDir=Options.DefaultFilePath(wdDocumentsPath)
WithApplication.FileSearch
.FileName="Test.doc"
.LookIn=defaultDir
.Execute
If.FoundFiles.Count=1Then
Documents.OpenFileName:
=defaultDir&Application.PathSeparator&"TEST.DOC"
Else
MsgBox"Test.docfilewasnotfound"
EndIf
EndWith
也可以允许用户选择要打开的文件,而不是定死Open方法的FileName参数值。
如同以下示例所示的那样,可以使用带有wdDialogFileOpen常量的Dialogs属性来返回一个Dialog对象,该对象表示“打开”对话框(在“文件”菜单中)。
Show方法可以显示并且执行在“打开”对话框中完成的动作。
Dialogs(wdDialogFileOpen).Show
Display方法只是用来显示特定的对话框而不作任何更多的操作。
以下的示例检查Display方法的返回值。
如果用户单击“确定”来关闭对话框,返回值-1并且打开所选择的文件,该文件的名字保存在变量fSelected中。
Setdlg=Dialogs(wdDialogFileOpen)
aButton=dlg.Display
fSelected=dlg.Name
IfaButton=-1Then
Documents.OpenFileName:
=fSelected
EndIf
要对如何显示Word对话框作进一步了解,请参阅“帮助”中的“显示内置Word对话框”一节的内容。
要判断某个特殊的文档是否打开,可以使用一条ForEach…Next语句来对Documents集合进行列举。
如果名为“Sample.doc”的文档已经被打开了,以下的示例就激活它;如果它尚未被打开,则该示例会打开它。
docFound=True
ForEachaDocInDocuments
IfInStr(1,aDoc.Name,"sample.doc",1)Then
aDoc.Activate
ExitFor
Else
docFound=False
EndIf
NextaDoc
IfdocFound=FalseThenDocuments.Open_
FileName:
="C:
\Documents\Sample.doc"
可以使用Count属性来确定当前打开文档的数目。
Count属性应用于Documents集合,可以使用Document属性返回该集合。
如果没有已打开的文档,以下的示例会显示一条消息。
IfDocuments.Count=0ThenMsgBox"Nodocumentsareopen"
创建和保存文档
要创建一个新文档,可以对Documents集合应用Add方法。
以下的示例创建了一个新文档。
Documents.Add
Add方法返回了仅作为一个Document对象而创建的文档。
当用户添加一个文档时,可以设置Add方法的返回值是一个对象变量,以便用户可以在自己的代码中引用该新文档。
以下的示例创建了一个新文档,并且设置它的上边距为1.25英寸。
DimmyDocAsDocument
SetmyDoc=Documents.Add
myDoc.PageSetup.TopMargin=InchesToPoints(1.25)
第一次保存新文档时,可以随Document对象使用SaveAs方法。
以下的示例将名为“Temp.doc”的活动文档保存在当前文件夹中。
ActiveDocument.SaveAsFileName:
="Temp.doc"
在文档被保存之后,用户可以使用它的文档名来调整Document对象。
以下的示例创建了一个新文档并且立刻把它保存为“1996Sales.doc”。
然后,该示例使用新名字来作Documents集合中的该文档的索引,并且向该文档添加一张表格。
Documents.Add.SaveAsFileName:
="1996Sales.doc"
Documents("1996Sales.doc").Tables.Add_
Range:
=Selection.Range,NumRows:
=2,NumColumns:
=4
要保存对一个已经存在的文档所进行的更改,可以随同Document对象使用Save方法。
以下的指令保存了名为“Sales.doc”的文档。
Documents("Sales.doc").Save
如果用户随同一个尚未保存的文档或模板使用Save方法,将会显示“另存为”对话框来提示用户为该文件取名。
要保存所有打开的文档,可以对Documents集合应用Save方法。
以下的示例保存了所有打开的文档,但没有提示用户为文件取名。
Documents.SaveNoPrompt:
=True
激活一个文档
要使另一个文档成为活动文档,可以对Document对象应用Activate方法。
以下的示例激活了打开的文档(MyDocument.doc)。
Documents("MyDocument.doc").Activate
以下的示例打开了两个文档,然后激活其中的第一个文档(Sample.doc)。
SetDoc1=Documents.Open(FileName:
="C:
\Documents\Sample.doc")
SetDoc2=Documents.Open(FileName:
="C:
\Documents\Other.doc")
Doc1.Activate
打印一个文档
要打印一个文档,可以对Document对象应用PrintOut方法,如以下示例所示。
ActiveDocument.PrintOut
要通过程序来设置那些也可以在“打印”对话框(在“文件”菜单中)里进行设置的打印选项,可以使用PrintOut方法的参数来实现。
用户可以使用Options对象的属性来设置打印选项,这些选项也可以在“选项”对话框(在“工具”菜单中)“打印”一表里进行设置。
以下示例设置活动文档打印隐藏的文字,并且只打印出前三页。
Options.PrintHiddenText=True
ActiveDocument.PrintOutRange:
=wdPrintFromTo,From:
="1",To:
="3"
关闭文档
要关闭一个文档,可以对Document对象应用Close方法。
以下的示例关闭了名为“Sales.doc”的文档。
Documents("Sales.doc").Close
如果对文档进行过修改,Word会显示出一条消息来询问用户是否要保存所进行的修改。
用户可以随SaveChanges参数使用wdDoNotSaveChanges或wdSaveChanges常量来使该提示不再出现。
以下的示例保存并且关闭了Sales.doc。
Documents("Sales.doc").CloseSaveChanges:
=wdSaveChanges
要关闭所有已打开的文档,可以对Documents集合应用Close方法。
以下的示例没有保存修改就关闭了所有的文档。
Documents.CloseSaveChanges:
=wdDoNotSaveChanges
访问文档中的对象
用户可以从Document对象来访问返回对象的一系列属性和方法。
要查看在Document对象中所能使用的对象的层次关系图,可以参阅“帮助”中的“MicrosoftWord对象(Documents)”。
例如,Table属性,它能够返回一个Table对象的集合,可以在Document对象中使用。
随着一个集合对象使用的Count属性能够判断在该集合中所包含的项数。
以下的示例显示一条消息来指出在活动文档中有多少表格。
MsgBoxActiveDocument.Tables.Count&"table(s)inthisdocument"
使用Table(index)可以返回一个单张表格对象,这里的index是索引号。
在以下的示例中,myTable代表“Sales.doc”文档里的第一张表格。
SetmyTable=Documents("Sales.doc").Tables
(1)
关于返回一个特殊对象的信息可以从“帮助”中的对象主题本身(例如,“Table对象”)和相应的集合对象主题(例如,“Table集合对象”)中获得。
向文档添加对象
可以使用随着能在Document对象中访问的集合对象的Add方法来向文档添加诸如脚注、备注或表格这样的对象。
例如,以下命令在myRange变量(myRange是一个包含了一个Range对象的对象变量)所指定的位置上添加了一张3x3的表格。
ActiveDocument.Tables.AddRange:
=myRange,NumRows:
=3,NumColumns:
=3
以下的示例在myRange变量所指定的位置上添加了一个脚注。
ActiveDocument.Footnotes.AddRange:
=myRange,Text:
="TheWillowTree"A
要获得支持Add方法的集合对象列表,请参阅“帮助”中的“Add方法”。
运用Range对象
当使用VisualBasic时一个常见的任务就是在文档中指定一块区域,然后对它进行处理,比如插入文字或应用格式等。
例如,用户可能想编写一个宏,来对文档中某个部分里的某个单词或短语进行定位。
那就可以使用一个Range对象来表示想在其中搜索特定单词或短语的部分文档。
在确定Range对象后,用户能够应用该对象的方法和属性来修改相应范围中的内容。
一个Range对象代表了文档中的一块连续的区域。
每一个Range对象都由一个起始字符位置和一个终止字符位置来定义。
与用户在文档中使用书签的方法类似,可以在VisualBasic中使用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.HomeKeyUnit:
=wdStory
Selection.MoveRightUnit:
=wdWord,Count:
=2,Extend:
=wdExtend
Selection.Font.Bold=wdToggle
以下的示例没有使用Selection对象而完成了相同的任务。
ActiveDocument.Range(Start:
=0,End:
=ActiveDocument.Words
(2).End).Bold=True
以下的示例对文档中的前两个单词进行加粗,然后插入一个新的段落。
Selection.HomeKeyUnit:
=wdStory
Selection.MoveRightUnit:
=wdWord,Count:
=2,Extend:
=wdExtend
Selection.Font.Bold=wdToggle
Selection.MoveRightUnit:
=wdCharacter,Count:
=1
Selection.TypeParagraph
以下的示例没有使用Selection对象就完成了上述示例中的同样任务。
SetmyRange=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变量。
SetmyRange=ActiveDocument.Range(Start:
=0,End:
=10)
在上述示例中,myRange表示活动文档中的前十个字符。
当对保存在myRange变量中的Range对象应用一种属性或方法时,就可以看到已经创建的Range对象。
以下的示例对活动文档中的前十个字符进行加粗。
SetmyRange=ActiveDocument.Range(Start:
=0,End:
=10)
myRange
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Word VBA
![提示](https://static.bdocx.com/images/bang_tan.gif)