利用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. 设计模式12: Proxy 代理模式(结构型模式)

    Proxy 代理模式(结构型模式) 直接与间接 人们对于复杂的软件系统常常有一种处理手法,即增加一层间接层,从而对系统获得一种更为灵活.满足特定需求的解决方案.如下图,开始时,A需要和B进行3次通信, ...

  2. cortex m0启动代码详解

    转自:http://www.cnblogs.com/mddblog/p/4920063.html 阅读目录 概述 1.堆栈空间定义 2.存放中断向量表 3. 复位中断函数(Reset_Handler) ...

  3. CodeForces 834D The Bakery(线段树优化DP)

    Some time ago Slastyona the Sweetmaid decided to open her own bakery! She bought required ingredient ...

  4. mysql 循环插入

    在mysql添加测试数据,想和mssql一样用循环实现,发现不管怎么样都执行失败 经查询发现mysql不支持匿名块,只能先创建出一个存储过程,执行,然后删除 CREATE PROCEDURE test ...

  5. C#线程和异步

    C#Thread学习 C#ThreadPool学习 C#Task学习 C#backgroundWorker c# 锁的使用 C#前台线程和后台线程区别 C#Async,await异步简单介绍 C#委托 ...

  6. Mysql链接字符串问题

    <add key="ConnstringMySql" value="server=xxx.xxx.xxx.xxx;database=YourDatabase;uid ...

  7. springboot pom 详解

    Starter POMs是可以包含到应用中的一个方便的依赖关系描述符集合.可以获取所有spring及相关技术的一站式服务,不需要翻阅示例代码,拷贝粘贴大量的依赖描述符. Starter名字的含义: 所 ...

  8. centos6和7的防火墙开关

    CentOS6.5查看防火墙的状态: 1 [linuxidc@localhost ~]$service iptable status 显示结果: 1 2 3 4 5 [linuxidc@localho ...

  9. 题解 UVA11300 【Spreading the Wealth】

    环形均分纸牌问题应该不少人都很熟悉了,而且题解区写的也比较全了...... 我这篇题解主要是介绍一个新的STL--nth_element 以及解答几个其他题解里面有应用但是没有注释的问题.(比如说我第 ...

  10. 清北学堂2019NOIP提高储备营DAY3

    今天是钟神讲课,讲台上照旧摆满了冰红茶 目录时间到: $1. 动态规划 $2. 数位dp $3. 树形dp $4. 区间dp $5. 状压dp $6. 其它dp $1. 动态规划: ·以斐波那契数列为 ...