最近一直研究,Excel和Word数据交互读取的东西市面上Word VBA的教程比较少,我学习这个基本是各种百度和遇到实例的摸索总结,可以说是学习和实践的结晶我尽可能详细的写我把我整理的干货分享给大家,希望各取所需。
一、实际案例引入在实际中还是有很多的应用的,只是大多数人不知道有VBA这种东西,以至于做无谓的重复性工作。比如下面这种情况:把Excel题库导入Word
Excel题库
导入Word后的效果这东西如果手动去做,费时费力,生无可恋还好有VBA这东西我们用Excel代码操作Word,直接把Excel中的数据写入Word(附件后台回复:"试题"获取)Sub 导出题库()Set
doc = CreateObject("word.application") 创建Word对象Set wd = doc.Documents.AddWith ThisWorkbook.Worksheets(
2) rrow = .Range("a65536").End(3).RowFor i = 2To rrow arr = Split(.Cells(i, 3), "|"
)IfUBound(arr) > 1Then strr = .Cells(i, 1) & "、" & .Cells(i, 2).Value & vbCrLf & _"A."
& arr(1) & "B." & arr(2) & "C." & arr(3) & "D." & arr(4) & vbCrLf & "标准答案:" & .Cells(i, 4)With doc.Selection
.TypeText strr .TypeParagraphEndWithElseEndIfNext wd.SaveAs ThisWorkbook.Path &
"\例子.docx"EndWithEndSub实现代码看代码,其实很简单操作Word,最重要的就是要知道Word VBA的对象、属性以及方法有Excel VBA基础,学习Word VBA很快二、分析上面的代码。
■知识点一:创建Word程序,新建Word程序对象Excel程序与Word程序交互,首先要引用Word对象,可以前期绑定,也可以后期除了和正则、字典对象的前期绑定后期绑定的区别以外,excel操作word,后期绑定还有一点需要。
特别注意:一些属性的应该直接写他的值,而不是写成Word VBA中可以直接用的常量比如,让段落格式居中,下面这句在Word VBA中运行没问题,但是移植到Excel就出问题了提示:“无效的过程调用或参数”。
ParagraphFormat.Alignment=wdAlignParagraphCenter像这种,我们需要把这些常量换成Word程序内部定义的数值ParagraphFormat.Alignment = 1 。
而这种常量的值,直接在Word VBA,msgbox wdAlignParagraphCenter即可•后期绑定:(我用的)Set doc = CreateObject("word.application"。
) 创建Word对象Set wd = doc.documents.Add•前期绑定:前期绑定需要根据电脑中的Word版本勾选:Microsoft Excel XX.0 Object Library
前期绑定示意前期绑定,调用Word程序的代码写法:Dim doc As Word.ApplicationDim wd As DocumentSet doc = New Word.Application
将word程序对象赋给变量docSet wd = doc.Documents.Add 新建■知识点二:Word程序的对象Excel VBA有基础以后,Word VBA可以类比来学习,主要是搞清楚对象、属性、方法。
然后看帮助文件、具体例子不清楚再百度即可Word2010 VBA 离线帮助文件,后台回复“word”获取Excel有:Excel.Application ’Excel程序对象。
Excel.Application. Workbooks ’工作簿Excel.Application. Workbooks.Sheets(1) ’工作表工作表下是Range,区域;Cells(row,col),单元格
Word有:Word.Application ’Word程序对象Word.Application.Documents ’文档文档下有节、段落、句子、单词、字符对象。
具体特征见下面表格。
前三个返回Range对象,能直接使用任何区域属性或方法修改该Range 对象Paragraphs、Sections、Tables返回该集合的单个成员,而不是 Range 对象,不能直接使用区域属性或方法。
如:Words(1)后面直接.Copy,而段落要写成Paragraphs(1).Range.Copy之间多了一个Range■知识点三:向Word中分段写入数据Withdoc.Selection doc是前面声明的Word程序对象。
.TypeTextstrr strr是需要写入的储存数据变量.TypeParagraph 插入一个新的空段落EndWith•TypeText方法:是在当前光标所在的位置入插要添加的文本内容•TypeParagraph方法:。
是在当前光标所在的位置插入一个新的空白的段落,相当于ENTER 键要在空白的word文档中逐段落的添加文本内容,可以先用TypeText方法插入文本,然后再用TypeParagraph方法插入下一个段落,如此循环即可。
(这里只讲本段代码用到的,具体更详细的用法,可看帮助文件这里不再累赘) 三、Word数据导入ExcelWord数据导入Excel就是一个反过程,创建Word对象、对Word文档的具体内容进行循环提取即可。
下面说个反向的例子,从Word取题目数据到Excel。这里我们只取题目,答案不取。
通过分析发现,用正则表达式再好不过Sub test()Set doc = CreateObject("word.application") 创建Word对象 doc.Documents.Open ThisWorkbook.Path & 。
"\计算题.docx"With doc c = .Documents(1).Range 这里直接引用Word程序打开的第一个文档的所有内容Set regx = CreateObject("vbscript.regexp"
) 引用正则表达式对象With regx .Global = True .Pattern = "\d+、\S+"题目部分的正则表达式Set Mat = .Execute(c)。
ForEach m In Mat 循环所有符合条件的匹配值 n = n + 1 Cells(n, 1) = m.Value 提取所有符合条件的段落到excel中
NextEndWithEndWith doc.Quit 退出word程序EndSub四、个人总结还是前面说的,有了VBA基础,学习Word VBA很快,着重熟悉Word VBA的属性对象和方法代码不会的可在Word中录制宏解决,再移植到Excel中。
这样就可以以Excel为遥控器,操控Word进行各种数据交互下篇文章说下Word 中的表格Table对象,来总结下如何操控Word的表格数据。
= 推荐阅读 =你的小黄鸭来了~| 操作Txt| VBA学习经验| 合并拆分| 字符串函数|循环知识| 封装Dll| 进度条| 生成二维码| 联想输入| 批量打印| Target详解|
Find方法精讲加入VBA学习交流群,与众多VBA爱好者互动答疑
亲爱的读者们,感谢您花时间阅读本文。如果您对本文有任何疑问或建议,请随时联系我。我非常乐意与您交流。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。