本文的对象是:有一定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.Application") '新建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 对象表示文档中的一个连续范围,由一个起始字符位置和一个终止字符位置定义。这个连续范围可以小到