内容发布更新时间 : 2025/3/16 2:30:09星期一 下面是文章的全部内容请认真阅读。
本文的对象是:有一定Excel VBA基础,对Word VBA还没有什么认识,想在Excel中通过VBA操作Word还有困难的人。
一、新建Word引用
需要首先创建一个对 Word Application 对象的引用。在VBA中,工具-引用,选取“MicroSoft Word 11.0 Object Library”。 方法一、New Word.Application Dim Wordapp As Word.Application
Set Wordapp = NewWord.Application
Wordapp.Visible = True '可见 'Wordapp.ScreenUpdating =False '屏幕刷新
Dim WordD As Word.Document '定义word类
Set WordD = Wordapp.Documents.Add '新建文档 ?Set WordD = Wordapp.Documents.open(filename) '打开文档 ……
WordD.Close '关闭文档 Set WordD = Nothing
WordApp.Quit '退出Word对象
方法二、CreateObject
Dim WordApp As Object
Set WordApp =CreateObject(\ '新建Word对象 ?后续操作及退出一样……
方法三、GetObject
文件已打开的情况下,使用:SetWordD=GetObject(filename),可建立对文档的引用,如果文件没有打开,则还需要先用方法一或二来操作。
至于方法一和方法二的区别,在网上询问了一下,大师们的回答是:
方法一:前期绑定,好处是在对象后输入句点可以给出快速提示,因为需要先引用对象,所以容易出现版本兼容问题。
方法二:后期绑定,没有提示,根据运行代码机器上对象的版本创建对象,兼容性好。
提示:有时二者有较大区别,可论坛搜索字典对象,建议编写代码时使用前期绑定,发布时使用后期绑定。
二、认识Word的结构 Excel有:
Excel.Application ?Excel引用 Excel.Application. Workbooks ?工作簿 Excel.Application. Workbooks.Sheets(1) ?工作表 工作表下是Range,区域;Cells(row,col),单元格 Word有:
Word.Application
Word.Application.Documents ?文档
文档下有字符、单词、句子、段落和节。字符组成单词,单词组成句子,句子组成段落。此外,每个文档具有一个包含一个或多个节的 Sections 集合,每一个节都有一个包含该节页眉和页脚的HeadersFooters 集合。 Characters(index) Words(index) Sentences(index) Paragraphs(index)
Sections(index)
前三个返回Range对象,能直接使用任何区域属性或方法修改该Range 对象。后面二个返回该集合的单个成员,而不是 Range 对象,不能直接使用区域属性或方法。如下使用例子:Words(1)后面直接.Copy,而.Paragraphs(1)和.Copy之间多了一个Range。
Selection.Words(1).Copy
ActiveDocument.Paragraphs(1).Range.Copy
Characters:字符,ActiveDocument.Sentences(1).Characters.Count,第一句的字符总数。
Words:单词,对于英文来说是二个空格之间的字母加空格,对于中文,一个标点符号,一个汉字,或一个词(按照微软的输入法中的词组定义?)。(感觉不是很可靠?)
Sentences:句子,以句号结束?感觉也不是一个很可靠的范围,感觉还是字符、段落、节,控制起来靠谱一些。
Range 对象表示文档中的一个连续范围,由一个起始字符位置和一个终止字符位置定义。这个连续范围可以小到一个插入点,大到整个文档。 Dim rngPa As Range
Set rngPa =ActiveDocument. Characters (1) ?第一个字符 Set rngPa = ActiveDocument.Range( _
Start:=ActiveDocument.Paragraphs(1).Range.Start, _
End:=ActiveDocument.Paragraphs(4).Range.End) ?第1段头到第4段尾
Set rngPa = ActiveDocument.Range(Start:=0,End:=10) ?当前文档前10个字符
rngPa.Select 选定,我觉得用处不大,原因就是为什么要选中呢?能操作就直接操作,不能的话,就选中吧(他可以说是没办法的办法)。
range对象的赋值:(包括任意的对象,Set是对对象赋值的标准语句) set a=b
和变量的赋值:a=1不一样
三、通过录制宏生成代码
有了对Word基本结构的认识,想操作这些对象应该使用什么方法、修改哪些属性?不知道就“录制宏”。录制宏是我们认识未知对象的很好方法之一,通过宏录制器将操作译成Word的 Visual Basic 代码,再根据需要修改代码。Word中录制与Excel不同的是,不能使用鼠标移动光标或选中一行,只能使用键盘来移动,或用Shift+方向键来选中。以下几句话就是键盘的:上、下、左、右、Home、End、Shift+左选中5个字符、Shift+右选中5个字符。
Selection.MoveUp Unit:=wdLine, Count:=1 Selection.MoveDown Unit:=wdLine, Count:=1 Selection.MoveLeft Unit:=wdCharacter, Count:=1 Selection.MoveRight Unit:=wdCharacter, Count:=1 Selection.HomeKey Unit:=wdLine Selection.EndKey Unit:=wdLine
Selection.MoveLeft Unit:=wdCharacter, Count:=5, Extend:=wdExtend Selection.MoveRight Unit:=wdCharacter, Count:=5, Extend:=wdExtend
录制的宏使用 Selection 属性返回 Selection 对象。即:录制的宏总是以Selection.开头的,如上。要想使用这个Selection.,有时候我们就不得不先对特定的对象.Select,选中。
当然,Selection是一个Range,Characters、Words、Sentences也是Range,Paragraphs(n). Range, Sections(2). Range也是Range,那我们就可以将Selection.后面的语句嫁接到前面这些Range之后,就不用先.Select了。
录制的宏,通过嫁接或者复制到EXCEL VBA之后,有的运行会出错,此时应检查以下几项:
1、第一项中要求的“引用”建立了没?
2、利用VBA提醒功能检查语句。VBA编辑过程中,通常在打下. 之后(需要前期绑定?),该对象所有的方法、属性都会显示出来,利用这个特点,可以检查录制的宏,能否嫁接到需要操作的对象之后。提示里有就能,没有就不能。
3、部分转换函数,Word VBA里有,Excel VBA里可能没有,遇到这样的情况,也