Word VBA 学习交流(五)2008-01-08 21:04:02| 分类: Office办公软件 |字号 订阅
Word VBA 学习交流资料之五Application 对象该对象代表 Microsoft Word 应用程序。Application 对象包含可返回最高级对象的属性和方法(VIP?^_^)。例如,ActiveDocument 属性可返回一个 Document 对象。 使用 Application 对象 使用 Application 属性可返回 Application 对象。下列示例(就是我们说的“例子”)显示 Word 用户名。 MsgBox Application.UserName 在使用许多可返回最普通的用户界面对象(例如 ActiveDocument 属性返回的活动文档对象)的属性和方法时,可以不用 Application 对象识别符。例如,可写为 ActiveDocument.PrintOut,而不必写为 Application.ActiveDocument.PrintOut。没有使用 Application 对象识别符的属性和方法被看作是“全局”的。若要在“对象浏览器”中查看全局属性和方法,请单击“类”框中列表顶端的“〈全局〉”(如图)。
说明 若要使用来自另一个应用程序的自动功能(以前称为 OLE 自动功能)来控制 Word,请使用 Visual Basic 的 CreateObject 或 GetObject 函数返回一个 Word Application 对象。下列 Microsoft Excel 示例启动 Word(如果 Word 尚未启动),并打开一篇现有的文档。 Set wrd = GetObject(, "Word.Application") wrd.Visible = True wrd.Documents.Open "C:\My Documents\Temp.doc" Set wrd = Nothing ActiveDocument 属性(我错了,我一直以为activedocuemnt是对象,直到写这个时,才发现他是属性,是application的属性,只不过application可以略罢了。羞啊,具然这个今天才明白。) 返回一个 Document 对象,该对象代表活动文档。如果没有打开的文档,就会导致出错。只读。 示例 本示例显示活动文档的名称,如果没有打开的文档,则显示一条消息。 If Application.Documents.Count >= 1 Then MsgBox ActiveDocument.Name Else MsgBox "No documents are open" End If 本示例将所选内容折叠为插入点,然后创建一个区域,包括选定内容的后面五个字符。 Dim rngTemp As Range Selection.Collapse Direction:=wdCollapseStart '折叠到开始 Set rngTemp = ActiveDocument.Range(Start:=Selection.Start, _ End:=Selection.Start + 5) MsgBox rngTemp 本示例在活动文档的开头插入文本,然后打印该文档。 Dim rngTemp As Range Set rngTemp = ActiveDocument.Range(Start:=0, End:=0) With rngTemp .InsertBefore "Company Report" .Font.Name = "Arial" .Font.Size = 24 .InsertParagraphAfter End With ActiveDocument.PrintOut Document 对象代表一篇文档。Document 对象是 Documents 集合中的一个元素。Documents 集合包含 Word 当前打开的所有 Document 对象。 使用 Document 对象 用 Documents(index) 可返回单个的 Document 对象,其中 index 是文档的名称或索引序号。下列示例关闭名为“Report.doc”的文档,并且不保存所做的修改。 Documents("Report.doc").Close SaveChanges:=wdDoNotSaveChanges '带参数 索引序号代表文档在 Documents 集合中的位置。下列示例激活 Documents 集合中的第一篇文档。 Documents(1).Activate 使用 ActiveDocument 可用 ActiveDocument 属性引用处于活动状态的文档。下列示例用 Activate 方法激活名为“Document 1”的文档,然后将页面方向设置为横向,并打印该文档。 Documents("Document1").Activate'激活这个文档,这个有时用,应该版本不同的原因 ActiveDocument.PageSetup.Orientation = wdOrientLandscape ActiveDocument.PrintOut Document 属性(应用于pane(代表一个窗格)对象、range对象、selection对象、window对象的属性)返回一个 Document 对象,该对象与指定窗格、窗口或选定部分相关。只读。 示例 本示例显示选定部分所在的文档名称和路径。 Msgbox Selection.Document.FullName 该示例将活动文档中的窗口设置为 myDoc。然后切换至下一个窗口,并加以拆分。再用 Activate 方法切换回原文档。 Set myDoc = Application.ActiveWindow.Document If Windows.Count >= 2 Then Application.ActiveWindow.Next.Activate Application.ActiveWindow.Split = True myDoc.Activate End If Window 对象代表一个窗口,诸如滚动条和标尺等文档特征事实上是窗口的属性。Window 对象是 Windows 集合的一个元素。Application 对象的 Windows 集合包含了应用程序中的所有窗口,而 Document 对象的 Windows 集合只包含显示指定文档的窗口。 使用 Window 对象 可用 Windows(index) 返回一个 Windows 对象,其中 index 为窗口名或索引序号。下列示例最大化 Document1 窗口。 Windows("Document1").WindowState = wdWindowStateMaximize 索引序号指“窗口”菜单中窗口名左侧的数字。下列示例显示 Windows 集合中第一个窗口的标题。 MsgBox Windows(1).Caption 可用 Add 方法或 NewWindow 方法在 Windows 集合中添加一个新窗口。下列每个语句在活动窗口的文档中生成一新窗口。 ActiveDocument.ActiveWindow.NewWindow NewWindow Windows.Add 说明 对同一文档打开多个窗口时,窗口标题将出现冒号 (:) 和一个数字。 当将视图转换成打印预览时,便创建了新的窗口。在关闭打印预览时,该窗口便从 Windows 集合中被删除。 以下主要来学习application对象的Activedocument属性的属性,因为他返回的是Document 对象,所以,即是学习document对象的属性。(仔细体会这句话,有题外话的)
Document对象的部分属性(不提及与XML有关的东东,因为我也不会。想了解的,自己看帮助吧。到时,记得带Konggs分享一下噢。)以上为Document对象的属性部分截图,很多吧?不过,没关系,我们就学常见的几个。 不常见的也会部分贴出,不做为重点,就是知道有这么回事,就OK。 ActiveWindow 属性(非重点)返回 Window 对象,该对象代表活动窗口(焦点所在的窗口)。如果没有打开的窗口,则会导致出错。只读。 示例 本示例显示活动窗口的标题文本。 Sub WindowCaption() MsgBox ActiveDocument.ActiveWindow.Caption End Sub 本示例为活动文档的活动窗口打开一个新窗口,然后平铺所有窗口。 Sub WindowTiled() Dim wndTileWindow As Window Set wndTileWindow = ActiveDocument.ActiveWindow.NewWindow Windows.Arrange ArrangeStyle:=wdTiled End Sub 本示例拆分第一个文档窗口。 Sub WindowSplit() Documents(1).ActiveWindow.Split = True End Sub Application 属性不使用对象识别符号时,此属性返回一个 Application 对象,该对象代表 Microsoft Word 应用程序;当使用对象识别符号时,此属性返回一个 Application 对象,该对象代表指定对象的创建者;当对 OLE 自动功能对象应用此属性时,返回该对象的应用程序。 expression.Application expression 必需。该表达式返回“应用于”列表中的一个对象。 说明 Visual Basic 的 CreateObject 和 GetObject 函数使您可以在 Visual Basic for Applications 工程中访问 OLE 自动功能对象。 示例 本示例使 Microsoft Word 显示滚动条、屏幕提示和状态栏。 With Application .DisplayScrollBars = True .DisplayScreenTips = True .DisplayStatusBar = True End With 如果正在运行的是 Excel,本示例将显示 Microsoft Excel 启动路径。 If Tasks.Exists(Name:="Microsoft Excel") = True Then Set myobject = GetObject("", "Excel.Application") MsgBox myobject.Application.StartupPath Set myobject = Nothing End If AttachedTemplate 属性 返回一个 Template 对象,该对象代表与活动文档相关联的模板。若要设置该属性,请指定模板名称或返回 Template 对象的表达式。Variant 类型,可读写。 示例 本示例显示与活动文档相关联的模板名称和路径。 Set myTemplate = ActiveDocument.AttachedTemplate MsgBox myTemplate.Path & Application.PathSeparator _ & myTemplate.Name 本示例在文档 1 的开始处插入图文场的内容(一个内置“自动图文集”词条)。 Set myRange = Documents(1).Range(0, 0) Documents(1).AttachedTemplate.AutoTextEntries("Spike") _ .Insert myRange 本示例为活动文档附加名为“Letter.dot”模板。 ActiveDocument.AttachedTemplate = "C:\Templates\Letter.dot" Background 属性返回一个 Shape 对象,该对象表示指定文档的背景图像。只读。 注释 只有在 Web 版式视图中才能看到背景。 示例 本示例将活动窗口的 Web 版式视图背景色设为浅灰色。 ActiveDocument.ActiveWindow.View.Type = wdWebView With ActiveDocument.Background.Fill .Visible = True .ForeColor.RGB = RGB(192, 192, 192) End With 本示例将 Web 版式视图的背景位图图像设为 Bubbles.bmp。 ActiveDocument.ActiveWindow.View.Type = wdWebView ActiveDocument.Background.Fill.UserPicture _ PictureFile:="C:\Windows\Bubbles.bmp" Bookmarks 属性(重要)返回一个 Bookmarks 集合。该集合代表某一文档、区域或选定部分中的所有书签。只读。 有关返回集合中单个成员的内容,请参阅返回集合中的对象。 示例 本示例将检索活动文档中第一个书签的首字符和尾字符的位置。 With ActiveDocument.Bookmarks(1) BookStart = .Start BookEnd = .End End With 本示例使用 aMarks() 数组存储活动文档包含的所有书签的名称. If ActiveDocument.Bookmarks.Count >= 1 Then ReDim aMarks(ActiveDocument.Bookmarks.Count - 1) '注意这个是减1,因为数组从0开始的 i = 0 For Each aBookmark In ActiveDocument.Bookmarks aMarks(i) = aBookmark.Name i = i + 1 Next aBookmark End If 本示例将所选内容中用第一个书签(不是文档的标签)标记的文本区域的格式设置为加粗。(作者注:document对象的属性大多数selection对象都有的。) If Selection.Bookmarks.Count >= 1 Then Selection.Bookmarks(1).Range.Bold = True End If BuiltInDocumentProperties 属性(比较重要)返回一个 DocumentProperties 集合,该集合代表了指定文档的所有内置的文档属性。 说明: 若要返回代表指定内置文档属性的单一 DocumentProperty 对象,请使用 BuiltinDocumentProperties(index),其中 index 是一个 WdBuiltInProperty 常量。如需获得有效常量的列表,请参考 Microsoft Visual Basic 对象浏览器。有关返回集合中单个成员的内容,请参阅返回集合中的对象。 如果 Microsoft Word 没有为一个内置的文档属性定义一个值,则读取这个文档属性的 Value 属性时会产生一个错误。 用 CustomDocumentProperties 属性返回自定义文档属性的集合。 示例 本示例在活动文档的末尾插入一个内置属性列表。 Sub ListProperties() Dim rngDoc As Range Dim proDoc As DocumentProperty Set rngDoc = ActiveDocument.Content rngDoc.Collapse Direction:=wdCollapseEnd For Each proDoc In ActiveDocument.BuiltInDocumentProperties With rngDoc .InsertParagraphAfter .InsertAfter proDoc.Name & "= " On Error Resume Next .InsertAfter proDoc.Value End With Next End Sub 本示例显示活动文档中的单词数。 Sub DisplayTotalWords() Dim intWords As Integer intWords = ActiveDocument.BuiltInDocumentProperties(wdPropertyWords) MsgBox "This document contains " & intWords & " words." End Sub CodeName 属性返回指定文档的代码名称。String 类型,只读。 说明 代码名称是保存文档的事件宏的模块名。该模块的默认名为“ThisDocument”,可在“工程”窗口中查看该模块。有关使用 Document 对象的事件的内容,请参阅使用 Document 对象的事件。(见下图)
示例 本示例返回活动文档的代码窗口名称。 Msgbox ActiveDocument.CodeName Characters 属性返回一个 Characters 集合,该集合代表文档、区域或所选内容中的字符。只读。 有关返回集合中单个成员的内容,请参阅返回集合中的对象。 示 例 本示例显示所选内容的第一个字符。如果没有选定任何内容,则显示插入点后的第一个字符。 char = Selection.Characters(1).Text MsgBox "The first character is... " & char 本示例返回活动文档首句中的字符数(包括空格)。 numchars = ActiveDocument.Sentences(1).Characters.Count CommandBars 属性该属性返回一个 CommandBars 集合,该集合代表 Microsoft Word 中的菜单栏和所有的工具栏。 expression.CommandBars expression 必需。该表达式返回“应用于”列表中的一个对象。 说明 在访问 CommandBars 集合之前,可用 CustomizationContext 属性设置模板或文档上下文。(返回或设置一个 Template 或 Document 对象,该对象代表保存着菜单栏、工具栏和组合键的改动的模板或文档。对应于“工具”菜单“自定义”对话框“命令”选项卡上“保存于”框中的值。可读写。)(即鼠标放到工具栏对应按钮时,对应下面的出现的文本,如果略,则与工具栏的文本一样) 有关返回集合中单独成员的内容,请参阅返回集合中的对象。 示例 本示例增大所有的命令栏按钮并激活工具提示。 With CommandBars .LargeButtons = True .DisplayTooltips = True End With 本示例在应用程序窗口底部显示“绘图”工具栏。 With CommandBars("Drawing") .Visible = True .Position = msoBarBottom End With 本示例将“版本”命令按钮添至“常用”工具栏。 CustomizationContext = NormalTemplate CommandBars("Standard").Controls.Add Type:=msoControlButton, _ ID:=2522, Before:=4 CommandBars 集合对象(与上面的属性相关的知识)一个代表容器应用程序中命令栏的 CommandBar 对象集合。 使用 CommandBars 集合 用 CommandBars 属性可返回 CommandBars 集合。以下示例在 Immediate(直接) 窗口显示每个菜单栏和工具栏的名称和本地名称,并显示一个数值以表明该菜单栏或工具栏是否出现在屏幕上。 For Each cbar in CommandBars Debug.Print cbar.Name, cbar.NameLocal, cbar.Visible '这个输出到立即窗口,即在VBE 下按CTRl+G就看到了。 Next 用 Add 方法可在集合中添加一个新的命令栏。以下示例创建一个自定义工具栏“Custom1”并将其作为浮动工具栏显示。 Set cbar1 = CommandBars.Add(Name:="Custom1", Position:=msoBarFloating) cbar1.Visible = True 用 CommandBars(index) 可返回一个 CommandBar 对象;此处 index 是该命令栏的名称或索引号。以下示例将工具栏“Custom1”固定在应用程序窗口的底部。 CommandBars("Custom1").Position = msoBarBottom 注释 您可使用名称或索引号指定容器应用程序中可用菜单栏和工具栏列表的菜单栏或工具栏,但必须使用名称指定菜单、快捷菜单或子菜单(所有这些内容均可由 CommandBar 对象表示)。 如果两个或两个以上的自定义菜单或子菜单具有相同的名称,那么 CommandBars(index) 返回第一个具有该名称的菜单。为确保返回正确的菜单或子菜单,可找到显示该菜单的弹出式控件,然后对该弹出式控件使用 CommandBar 属性以返回代表该菜单的命令栏。
例1: Sub 替换空行新方法() Dim a1 Dim b1, c1 Dim d1 As String, astring As String Dim atim As Long atim = Timer Application.ScreenUpdating = False a1 = ActiveDocument.Content b1 = Split(a1, Chr(13)) '变为数组 For Each c1 In b1 '在数组中循环 c1 = Trim(c1) '去掉前后的空格,选择性粘贴后,没有软回车 d1 = Replace(c1, Chr(9), "") '如果全部是制表符 If d1 = "" Then '不作处理 Else astring = astring + c1 + Chr(13) '累加 End If Next ActiveDocument.Content = astring Application.ScreenUpdating = True MsgBox Timer – atim ‘2006年5月11日补:缺点是有的“加密文字”(可能不是加密,只是字符集不在常用的范围里。)为显示为乱字符。 End Sub
例2:引http://club./dispbbs.asp?boardID=23&ID=165869&page=2&px=0 怎么满足如下的全部替换? 意思是Word文档中许多重复的字词是在一起的,比如I I I LOVE LOVE LOVE U U U U之类,要变成I LOVE U。 我的答案是: Sub 查找() Dim aword%, i% On Error Resume Next Application.ScreenUpdating = False aword = ActiveDocument.Words.Count i = 2 With ActiveDocument Do While i < aword If RTrim(.Words(i)) = RTrim(.Words(i - 1)) Then .Words(i - 1).Delete aword = aword - 1 Else i = i + 1 End If Loop End With Application.ScreenUpdating = True End Sub 法二: (老大的效率高) Option Compare Text '不区分大小写 Sub Example() Dim oWord As Range, myRange As Range On Error GoTo EndSub '忽略错误 Application.ScreenUpdating = False Set myRange = ActiveDocument.Content GN: For Each oWord In myRange.Words With oWord If Trim(.Text) = Trim(.Next(wdWord).Text) Then .Delete '删除 myRange.SetRange .Start, myRange.End GoTo GN End If End With Next EndSub: Application.ScreenUpdating = True End Sub
交流资料之五有不少属性。 资料之五介绍的有点杂,但是因为到了真正的某个对象时,往往就是这样。耐心一下,要相信:冬过已经来了,春天还会远吗? 只有认真的知道一个对象,其它的对象很多都是同理的。就像学习语言一样,但你对一门语言研究的比较深时,再学习另一种语言,会理解的很快的。―――――我认为。 从这一期开始,每个学习交流之后附上习题。下一期的开始来附上这一期的答案。如果你的不方便用文字介绍的话,我会考虑用gif动画,放到Word,到时,大家都可以看到带gif动画的Word文档,我不会考虑用flash等为辅助手段。第一,我不怎么会,第二,太华丽的外表只会把内容吞并。 本期习题(全部用VBA完成): 1.新建一个文档,在文档中输入“本程序的位置位于:”路径。(例如我程序的路径:C:\Program Files\Microsoft Office\OFFICE11) 2.为这个文档,加一个变量AA。并设变量的值为5。 变量就是:Variables 3.再添加一个内置属性。设名称为:KGS,值为0。 |
|
来自: shuaixinerwei > 《vba》