利用VBA 编程,可以使许多日常的任务自动完成,使用户的工作
更有效率。

1、在启动时显示打开对话框

一般情况下启动Word,Word 会认为是创建一个新文档。如果只
是想打开一个旧文档进行编辑,在Word 启动时显示【打开】对话框
可以节省许多时间。为此,可以创建生成一个宏。

Public Sub openfile()

'建立一个宏,使在Word 启动时运行该宏

Dialogs(wdDialogFileOpen).Show

End Sub

将此代码加入模板中。为了使Word 每次启动时自动执行该宏,
用鼠标右键单击桌面上Word 的快捷方式图标,显示其快捷方式属性,
将“/m OpenFile”加入到“开始”路径中。这里运用了一个小技巧:
用“/m”加入“开始”路径以防止其他宏在启动时运行。当怀疑被
Word 宏病毒感染时,也可以利用加“/m”的方法来进行。

2、为文字设置格式

下面的代码使用 Selection 属性来为选定的文字应用字符和段
落格式。使用 Font 属性可获得字体格式属性和方法,使用
Microsoft Word 对象属性可访问段落格式属性和 方法。

With Selection.Font

.Name = "Times New Roman"

.Size = 14

.AllCaps = True

End With

With Selection.ParagraphFormat

.LeftIndent = InchesToPoints(0.5)

.Space1

End With

3、将格式应用于某一范围

下面的代码定义一个 Range 对象MyRange,该对象引用活动文档
的前三个段落。通过使用 Font 属性和 ParagraphFormat 对象可以
编排Range(myRange)的格式。

Set myRange = ActiveDocument.Range

( Start:=ActiveDocument.Paragraphs ( 1 ) .Range.Start, _

End:=ActiveDocument.Paragraphs(3).Range.End)

With myRange

.Font.Name = "Arial"

.ParagraphFormat.Alignment = wdAlignParagraphJustify

End With

4、插入文字并应用字符和段落格式

下面的代码在当前文档的顶部添加单词【标题】。第一段居中对
齐,在该段落之后添加了半英寸的间距。【标题】设为 24 磅的【宋
体】字体。

Set oRange = ActiveDocument.Range(Start:=0, End:=0)

With oRange

.InsertAfter Text:="标题"

.InsertParagraphAfter

.Font.Name = "宋体"

.Font.Size = 24

End With

With ActiveDocument.Paragraphs(1)

.Alignment = wdAlignParagraphCenter

.SpaceAfter = InchesToPoints(.5)

End With

下面的代码切换所选内容第一段的段前间距。该宏检索当前的段
前间距值,如果该值是 12 磅,则删除段前间距(将SpaceBefore
属性设置为0)。如果段前间距不是 12,则将 SpaceBefore 属性设
置为 12 磅。

Set oParagraph = Selection.Paragraphs(1)

If oParagraph.SpaceBefore = 12 Then

oParagraph.SpaceBefore = 0

Else

oParagraph.SpaceBefore = 12

End If

下面的代码切换选定文字的加粗格式。

Selection.Font.Bold = wdToggle

下面的代码将左边距增加 0.5 英寸。PageSetup 对象包含文档
的所有页面设置属性(左边距、下边距、纸张大小,等等)。LeftMargin
属性用来返回并设置左边距。

iMargin = ActiveDocument.PageSetup.LeftMargin

iMargin = iMargin + InchesToPoints(0.5)

ActiveDocument.PageSetup.LeftMargin = iMargin

5、编辑文字

日常工作中,处理文字是最经常用到的事情,本节介绍如何利用
VBA 编程实现编辑文字的自动化。当然,用户最好是利用录制宏的办
法把代码转换为VBA 代码后再修改,这样效率高,又不容易出错。

6、从文档返回文本

使用Text 属性可以返回Range 或 Selection 对象中的文本。下
面的代码选定下一个格式设为【标题1】样式的段落。然后通过
MsgBox 函数显示 Text 属性的内容。

With Selection.Find

.ClearFormatting

.Style = wdStyleHeading1

.Execute FindText:="", Format:=True, Forward:=True,

Wrap:=wdFindStop

If .Found = True Then MsgBox Selection.Text

End With

下面的指令返回选定文本:

strText = Selection.Text

下面的代码返回活动文档的第一个单词。Words 集合中的每一项
是一个 Range 对象,该对象代表一个单词。

aFirst = ActiveDocument.Words(1).Text
MsgBox aFirst

下面的代码返回活动文档第一个书签的相关文本。

If ActiveDocument.Bookmarks.Count >= 1 Then

bookText = ActiveDocument.Bookmarks(1).Range.Text

MsgBox bookText

End If

7、选定文档中的文本

使用 Select 方法可以选定文档中的一项。Select 方法对许多对象都是有效的,例如 Bookmark、Field、Range 和 Table 对象。
下面的代码选定活动文档中的第一张表格。

ActiveDocument.Tables(1).Select

下面的代码选定活动文档中的第一个域。

ActiveDocument.Fields(1).Select

下面的代码选定活动文档中的前四个段落。Range 方法用来创建
一个 Range 对象,该对象引用前四个段落。然后将 Select 方法应
用于 Range 对象。

Set myRange = ActiveDocument.Range

( Start:=ActiveDocument.Paragraphs ( 1 ) .Range.Start, _

End:=ActiveDocument.Paragraphs(4).Range.End)

myRange.Select

8、在文档中插入文本

使用InsertBefore 方法可以在 Selection 或 Range 对象前后
插入文字。下面的代码在活动文档结尾处插入文字。

ActiveDocument.Content.InsertAfter Text:= the end.
下面的代码在所选内容前插入文字:

Selection.InsertBefore Text:=new text

在使用了InsertBefore 或 InsertAfter 方法之后,Range 或
Selection 会扩展并包含新的文本。使用 Collapse 方法可以将
Selection 或 Range 折叠到开始或结束位置。

利用InsertAfter 方法可将指定文本插入某一区域或所选内容的
后面。应用本方法可以扩展原区域或所选内容,使其包含新文本。

如果应用本方法的区域或所选内容是一个完整的段落,则在段落
结束标记之后插入文本,插入文本将出现在下一段开头。如要在段
尾插入文本,可先确定结束点,再从该位置减去 1(因段落标记是
一个字符),如下面的代码所示:

Set Doc = ActiveDocument

Set myRange = Doc.Range ( Start:=Doc.Paragraphs

(1).Range.End - 1, _

End:=Doc.Paragraphs(1).Range.End - 1)

myRange.InsertAfter " the end."

9、修改文档的某一部分

Visual Basic 包含一些对象,可用这些对象修改下面的文档元
素:字符、单词、句子、段落和节。表11-4 包含了与这些文档元素
对应的属性和这些属性返回的对象。

使用这些属性时不带索引序号,会返回一个相同名称的集合对
象。例如,Paragraphs 属性返回 Paragraphs 集合对象。但如果通
过索引序号识别集合中的一项,就只会返回上表中第二列中的对象。
例如,Words(1) 返回一个 Range 对象。在有了一个 Range 对象
之后,可以使用这个区域的任何属性或方法修改该 Range 对象。例
如,下面的代码将所选内容的第一个单词复制到剪贴板上。

Selection.Words(1).Copy

Paragraphs 和 Sections 集合中的项是该集合的单个成员,而
Range 对象却不是如此。但 Range 属性(返回 Range 对象)对
Paragraph 和 Section 对象都是有效的。例如,下面的代码将活动
文档的第一个段落复制到剪贴板上。

ActiveDocument.Paragraphs(1).Range.Copy

在表11-4 中所有文档元素属性对 Document、Selection 和
Range 对象都是有效的。下面的代码表明了如何按照顺序引用
Document、Selection 和 Range 对象的这些属性。

下面的代码设置活动文档第一个单词的大小写。

ActiveDocument.Words(1).Case = wdUpperCase

下面的代码将当前节的下边距设置为 0.5 英寸。

Selection.Sections ( 1 ) .PageSetup.BottomMargin =

InchesToPoints(0.5)

下面的代码将活动文档的字符间距设为两倍(Content 属性返回一个 Range 对象)。

Set Doc = ActiveDocument

Set myRange = Doc.Range(Start:=Doc.Words(1).Start,

_

End:=Doc.Words(3).End)

Set Doc = ActiveDocument

Set myRange = Doc.Range ( Start:=Doc.Paragraphs

(2).Range.Start, _

End:=Doc.Paragraphs(3).Range.End)

ActiveDocument.Content.ParagraphFormat.Space2

修改一组文档元素:

要修改由一组文档元素(字符、单词、句子、段落或节)组成一
定区域的文字,就需要创建一个 Range 对象。Range 方法根据开始
和结束位置可创建 Range 对象。例如,下面的指令创建一个 Range
对象,该对象引用活动文档的前十个字符。

Set myRange = ActiveDocument.Range(Start:=0, End:=10)
使用 Range 对象的 Start 和 End 属性,可以创建一个新的Range 对象,该对象引用一组文档元素。例如,下面的指令创建一
个 Range 对象(myRange),该对象引用活动文档的前三个单词。

下面的代码创建一个 Range 对象(aRange),该对象从第二段
的开头开始,到第三段之后结束。

Set Doc = ActiveDocument

Set myRange = Doc.Range ( Start:=Doc.Paragraphs

(2).Range.Start, _

End:=Doc.Paragraphs(3).Range.End)

10、判定是否选定某一文本

Selection 对象的 Type 属性返回有关所选内容的信息。如果所
选内容是插入点,则下面的代码显示一条信息。

If Selection.Type = wdSelectionIP Then MsgBox Nothing
is selected

11、折迭所选内容或范围

使用 Collapse 方法可以将 Selection 或 Range 对象折迭到开
始或结束位置。下面的代码在所选内容的开头将所选内容折叠为一
个插入点。

Selection.Collapse Direction:=wdCollapseStart

下面的代码将 myRange 对象折叠到结束位置(在第一个单词之
后)。

Set myRange = ActiveDocument.Words(1)

myRange.Collapse Direction:=wdCollapseEnd

12、扩展所选内容或范围

下面的代码使用 MoveEnd 方法将所选内容的结尾向前扩展以多
包含三个单词。MoveLeft、MoveRight、MoveUp 和 MoveDown 方法
也可以用来扩展 Selection 对象。

Selection.MoveEnd Unit:=wdWord, Count:=3

下面的代码使用 MoveEnd 方法扩展 oRange,以包含活动文档的
前三个段落。

Set oRange = ActiveDocument.Paragraphs(1).Range

oRange.MoveEnd Unit:=wdParagraph, Count:=2

13、修改文字

通过更改某一范围中的内容可更改现有的文字。下面的指令通过
将 Text 属性设置为good ,修改活动文档的第一个单词。

ActiveDocument.Words(1).Text = good

也可以使用 Delete 方法删除现有文字,然后使用 InsertAfter
或 InsertBefore 方法插入新文字。下面的代码删除活动文档的第
一段,并插入新文字。

Set myRange = ActiveDocument.Paragraphs(1).Range

With myRange

.Delete

.InsertAfter Text:="New text"

.InsertParagraphAfter

End With

14、查找并替换文字或格式

Find 和 Replacement 对象具有查找和替换功能。Find 对象对
Selection 和 Range 对象有效。是否从 Selection 或 Range 对象
访问 Find 对象,会使查找操作略有不同。

1.查找并选定文字

如果是从Selection 对象访问Find 对象,当找到搜索条件时,
就会更改所选内容。下面的代码选定下一次出现的“你好”。如果
到达文档结尾还没有找到“你好”,则停止搜索。

With Selection.Find

.Forward = True

.Wrap = wdFindStop

.Text = "你好"

.Execute

End With

Find 对象包含各种属性,这些属性对应于【编辑】菜单【查找命令的【查找并替换】对话框中的选项。可以设置 Find 对象的单个属性,或者使用 Execute 方法及参数,如下例所示。

Selection.Find.Execute FindText:= 你好,
Forward:=True, Wrap:=wdFindStop

'查找文字,但并不更改所选内容

如果是从 Range 对象访问 Find 对象,则当找到搜索条件时,
不更改所选内容,但是会重新定义 Range。下面的代码在活动文档中定位第一次出现的【粗体】。如果找到了,则重新定义该范围,
并将加粗格式应用于【粗体】。

With ActiveDocument.Content.Find

.Text = "粗体"

.Forward = True

.Execute

If .Found = True Then .Parent.Bold = True

End With

下面的代码使用带有参数的 Execute 方法,进行的操作与上例
相同。

Set myRange = ActiveDocument.Content

myRange.Find.Execute FindText:="粗体", Forward:=True

If myRange.Find.Found = True Then myRange.Bold = True

15、使用 Replacement 对象

Replacement 对象代表查找和替换操作的替换条件。Replacement
对象的属性和方法对应于【编辑】菜单【查找和替换】对话框中的
选项。

Replacement 对象对 Find 对象是有效的。下面的代码将所有的hi替换为【你好】。由于 Find 对象是通过 Selection 对象访问
的,所以当找到搜索条件时,会更改所选内容。

With Selection.Find

.ClearFormatting

.Text = "hi"

.Replacement.ClearFormatting

.Replacement.Text = "你好"

.Execute Replace:=wdReplaceAll, Forward:=True,

Wrap:=wdFindContinue

End With

下面的代码从活动文档中删除加粗格式。Find 对象的 Bold 属
性为 True,而Replacement 对象的 Bold 属性为 False。为了查找
并替换格式,需将查找并替换的文字替换为空字符(),并将
Execute 方法的 Format 参数设置为 True。由于 Find 对象是通过
Range 对象访问的,所以不更改所选内容(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

16、处理其他各种杂务

1.更改视图

View 对象包含窗口或窗格的视图特性的属性和方法(全部显示、
显示域底纹、显示表格虚框等)。下面的代码将视图更改为页面视
图。

ActiveWindow.View.Type = wdPageView

2.设置页眉或页脚中的文字

HeaderFooter 对象是由 Headers、Footers 和 HeaderFooter 属
性返回的。下面的代码更改当前页面的页脚的文字。

ActiveWindow.View.SeekView = wdSeekCurrentPageHeader

Selection.HeaderFooter.Range.Text = "页眉文字"

本代码创建一个 Range 对象(oRange),该对象引用活动文档
第一节的基本页脚。设置了 Range 对象之后,删除现有的页脚文字。
向该页脚添加 FILENAME 域,后接两个制表位和 AUTHOR 域。

Set oRange = ActiveDocument.Sections ( 1 ) .Footers

(wdHeaderFooterPrimary).Range

With oRange

.Delete

.Fields.Add Range:=oRange, Type:=wdFieldFileName,

Text:="\p"

.InsertAfter Text:=vbTab & vbTab

.Collapse Direction:=wdCollapseStart

.Fields.Add Range:=oRange, Type:=wdFieldAuthor

End With

17、设置选项 

Options 对象包含的属性对应于【工具】菜单【选项】对话框中
各项。下面的代码设置 Word 应用程序的三个选项。

With Options

.AllowDragAndDrop = True

.ConfirmConversions = False

.MeasurementUnit = wdPoints

End With

18、更改文档版面

PageSetup 包含文档的所有页面设置属性(左边距、下边距、纸
张大小等等)。下面的代码设置活动文档的页边距。

With ActiveDocument.PageSetup

.LeftMargin = InchesToPoints(0.75)

.RightMargin = InchesToPoints(0.75)

.TopMargin = InchesToPoints(1.5)

.BottomMargin = InchesToPoints(1)

End With

19、循环遍历文档各段

本代码循环遍历活动文档的所有段落。如果某个段落的段前间距
为 12 磅,则本代码将段前间距改为 24 磅。

For Each aPara In ActiveDocument.Paragraphs

If aPara.SpaceBefore = 12 Then oPara.SpaceBefore =

24

Next aPara

20、自定义菜单和工具栏

CommandBar 对象同时代表菜单和工具栏。使用一个菜单或工具
栏名称的 CommandBars 属性可以返回单个的 CommandBar 对象。
Controls 属性返回一个 CommandBarControls 对象,该对象引用指
定工具栏上的项。下面的代码向【工具】菜单添加【字数统计】命
令。

CustomizationContext = NormalTemplate

CommandBars ( "Tools" ) .Controls.Add

Type:=msoControlButton, ID:=792, _

Before:=6

下面的代码向【格式】工具添加【双下划线】命令。

CustomizationContext = NormalTemplate

CommandBars ( "Formatting" ) .Controls.Add

Type:=msoControlButton, ID:=60, _

Before:=7

Delphi对Word一些进阶操作的更多相关文章

  1. Delphi 统计Word文档中的字数

    急待解决的问题就是如何用delphi实现word中的统计字数 另外想多了解一些关于操作word的相关内容 比如用ole动态创建的和TWordApplication的偏重点在哪里,有什么不同等等…… 用 ...

  2. Delphi关于记录文件的操作

    http://www.cnblogs.com/railgunman/archive/2010/08/16/1801004.html Delphi关于记录文件的操作   本例子几个变量的说明TFileR ...

  3. [原创]Scala学习:数组的基本操作,数组进阶操作,多维数组

    1.Scala中提供了一种数据结构-数组,其中存储相同类型的元素的固定大小的连续集合.数组用于存储数据的集合,但它往往是更加有用认为数组作为相同类型的变量的集合 2 声明数组变量: 要使用的程序的数组 ...

  4. Delphi读取Word

    Delphi读取Word现在关于往Word中写入数据的方法比较多,现在专门开个贴子,希望大家把自己读取Word内容的心得体会说一下,包括读取word文档中,有几个段落,如何读取第几个段落,读取有拼音的 ...

  5. Django中的ORM进阶操作

    Django中的ORM进阶操作 Django中是通过ORM来操作数据库的,通过ORM可以很easy的实现与数据库的交互.但是仍然有几种操作是非常绕也特别容易混淆的.于是,针对这一块,来一个分类总结吧. ...

  6. OpenXml操作Word的一些操作总结.

    OpenXml操作Word的一些操作总结. OpenXml相对于用MS提供的COM组件来生成WORD,有如下优势: 1.相对于MS 的COM组件,因为版本带来的不兼容问题,及各种会生成WORD半途会崩 ...

  7. Django之Models进阶操作(字段属性)

    字段属性详细介绍 一.字段 AutoField(Field) - int自增列,必须填入参数 primary_key=True BigAutoField(AutoField) - bigint自增列, ...

  8. delphi控制 word的几种方法--转

    对几种方法的难易程度的判别 a.通过Delphi的控件TOleContainer 将Word嵌入 这是最简单的Ole嵌入,能够直接将Word文档调用,只需要使用ToleContainer.Run就可以 ...

  9. 第11章:sed进阶操作

    第11章:sed进阶操作 sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作,下面先了解一下sed的用法 sed命令行格式为 ...

随机推荐

  1. C#与Java对比学习:数据类型、集合类、栈与队列、迭达、可变参数、枚举

    数据类型: C#:String与StringBuilder Java:String与StringBuffer 第一个不习惯是string的第一个字母必须大写了. 第二个不习惯是int得写成Intege ...

  2. robotframework接口测试初探2

    python这个requests模块常被用来测试接口.使用RequestLibrary库测试之前,先来看下这个模块是怎样使用的 最简单的调用是 r=requests.get("http:// ...

  3. jQuery静态方法type使用和源码分析

    jQuery.type方法是检测数据类型的工具方法,在分析其用法之前先总结下js给我们提供了那些监测数据类型的方法: 一.typeof 操作符 下面是测试代码 var data=[],a='123', ...

  4. Magento后台订单显示产品图片的修改方法

    Magento后台订单原来是没有显示产品图片,客服业务还得到网站前台查找这个产品的图片提供给发货部,这样是很不方便的.为提高工作效率,应客服业务要求,现对Magento后台订单进行修改,使订单页面就显 ...

  5. php薪资

    2千的php程序员就是可以用cms,做一个小企业的门户网站. 3千的php程序员,可以自己写代码开发php软件,但是这样程序员写的代码非常混乱,通常只能写数千行代码的小软件,并且痛苦的完工. 4K的p ...

  6. sql 触发器,看完后对CHK有更深的理解

    触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程.触发器主要是通过事件进行触发被自动调用执行的.而存储过程可以通过存储过程的名称被调用. 什么是触发器? 触发器对表进行插入.更新.删除 ...

  7. ●CodeForces 698C LRU

    题链: http://codeforces.com/problemset/problem/698/C题解.1: 概率dp,状压dp 棒棒哒题解:https://www.cnblogs.com/liu- ...

  8. springboot +redis配置

    springboot +redis配置 pom依赖 <dependency> <groupId>org.springframework.boot</groupId> ...

  9. JDK8.0接口中的默认方法和静态方法

    我们在接口中通常定义的方法是抽象方法,即没有方法体,只有返回值类型和方法名:(public abstract) void Method(); 类在实现接口的时候必须重写抽象方法才可以 jdk8中新加的 ...

  10. Python性能分析

    Python性能分析 https://www.cnblogs.com/lrysjtu/p/5651816.html https://www.cnblogs.com/cbscan/articles/33 ...