本文的对象是:有一定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                    '可见
请输入长度介于05之间的字符串    '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 对象表示文档中的一个连续范围,由一个起始字符位置和一个终止字符位置定义。这个连续范围可以小到一个插入点,大到整个文档。
    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里可能没有,遇到这样的情况,也可能出错。
例:
WordD.Paragraphs(1).Range.ParagraphFormat.FirstLineIndent = CentimetersToPoints(0.35)
Selection.ParagraphFormat.FirstLineIndent = CentimetersToPoints(0.35)是“首行缩进2字符”
操作录制的,嫁接后,运行出错,按方法2检查:.ParagraphFormat.FirstLineIndent能用在Range之后,那么就是CentimetersToPoints(0.35)出问题了?这显然是一个函数,字面意思是“厘米转换成点数”,(录制时我明明输入的是“2字符”,录下来咋成了厘米为单位呢?)那是否是Excel VBA里没有这个函数呢?(我不知道),将=后面直接改为数字运行通过,最后试下来=20大约相当于5号字的“首行缩进2字符”。(这个20,就是20Points?0.35cm=20 Points?)
(有人可能会说这样的办法太笨,有什么好办法请告知。先谢过!)
四、Word vba常用语句100句
1、系统参数
(01) Application.ActivePrinter      ‘获取当前打印机
(02) Application.Height           '当前应用程序文档的高度 
(03) Application.Width          ‘当前应用程序文档的宽度 
(04) Application.Build          ‘获取Word版本号和编译序号 
(05) Application.Caption         ‘当前应用程序名 
(06) Application.DefaultSaveFormat     '返回空字符串,表示Word文档 

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。