VBA对象引用的前期绑定与后期绑定编辑:madmlwt前言系列问题涉及:1.操作环境是:Ofeice 2003完整版,Win XP操作系统。
2.探讨主方向:在EXCEL中用VBA操作WORD表格,进行EXCEL数据与WORD数据的相互读写及相应格式设置。
3.引用WORD程序的方法:后期绑定。
不需要在对象库中去勾选Microsoft Word 11.0 Object Library对象。
4.资料收集整理:网络查询、Ofeice 2003相关程序自身的VBA帮助、个人理解,本人是个编辑者。
5.相关实例:网络搜索引用、个人原创,在EXCEL中实际操作通过。
综上,在后续的系列文章中的诸多说法、实例中,不再一一重复阐述说明。
编辑此系列问题,可能已经滞后,仅供有此需要的朋友参考借鉴!如有雷同,敬请见谅、免责!一、问题的提出试图在EXCEL中用VBA操作WORD文档,结果在WORD中能够正常使用的一些方法或属性,在EXCEL中不能使用或使用后没有达到应该有的效果。
【例子】在EXCEL中用VBA操作。
首先创建一个空白的新WORD文档,再写入2句话(作为2个段落),然后分别对这二个段落进行字体、字号和居中设置。
【要求】在EXCEL中用VBA操作WORD文档时,VBA代码编辑过程中,不直接引用Microsoft Word 11.0 Object Library对象,采用后期绑定Set wordAppl = CreateObject("Word.Application") 定义一个Word对象变量。
【操作】1.直接在WORD文档中运行代码⑴在已经存在的操作假定上面要求的WORD文档已经创建,打开该文档。
在键盘上按组合键Alt+F11,打开WORD代码编辑窗口。
在左边的“工程-Normal”下面窗格中双击“Project(当前打开的WORD文档名称)”下面的“引用Normal”图标,右边显示当前WORD文档的代码编辑窗口,复制并粘贴下面的代码。
Sub 设置()With ActiveDocument.Paragraphs(1).Range.Font.Size = 18 '字号 = "黑体" '字体.Font.Bold = wdToggle '字型加粗.ParagraphFormat.Alignment = wdAlignParagraphCenter '水平居中End WithEnd Sub单击代码编辑窗口上方工具栏上的绿色三角形按钮(或按键盘上的F5),运行上述代码,可以看到你打开的WORD文档中的第一段文本,按要求进行了字体设置和水平居中。
可见,代码正常运行且达到预期目标!⑵创建一个新的WORD文档打开一个任意已经存在的WORD文档,在键盘上按组合键Alt+F11,打开WORD代码编辑窗口。
在左边的“工程-Normal”下面窗格中双击“Project(当前打开的WORD文档名称)”下面的“引用Normal”图标,右边显示当前WORD 文档的代码编辑窗口,复制并粘贴下面的代码。
Sub 设置()Application.ScreenUpdating = False '关闭屏幕刷新Documents.Add '创建一个新的Word文档Selection.TypeText Text:="创建WORD表格模型"'写入第一段文字…………With ActiveDocument.Paragraphs(1).Range'对第一个段落进行格式设置.Font.Size = 18 '字号 = "黑体" '字体.Font.Bold = wdToggle '字型加粗.ParagraphFormat.Alignment = wdAlignParagraphCenter '水平居中(问题代码)End WithActiveDocument.SaveAs FileName:=ThisDocument.Path & "\新建WORD文档.doc" '保存新建Word文档与当前WORD文件相同位置ActiveWindow.Close '关闭新建文档Application.ScreenUpdating = False '关闭屏幕刷新End Sub2.在EXCEL中运行代码打开一个EXCEL工作簿,任指定一个名字保存打开的工作簿于任意位置(为便于操作最后就保存到桌面)。
在键盘上按组合键Alt+F11,打开EXCEL代码编辑窗口。
在菜单命令中单击“插入”打开列表命令后再单击“模块”,显示当前EXCEL文档的代码编辑窗口,复制并粘贴下面的代码。
⑴创建一个新的WORD文档Sub 设置()Application.ScreenUpdating = False '关闭屏幕刷新Set wordAppl = CreateObject("Word.Application") '定义一个Word对象变量dqM= '当前工作簿名称With wordAppl.Documents.Add '创建一个新的Word文档.Selection.TypeText Text:="创建一个WORD表格模型" '写入第一个段落文本…………With .ActiveDocument.Paragraphs(1).Range'对第一个段落进行格式设置.Font.Size = 18 '字号 = "黑体" '字体.Font.Bold = wdToggle '字型加粗.ParagraphFormat.Alignment = wdAlignParagraphCenter '水平居中(问题代码)End With.ActiveDocument.SaveAs ThisWorkbook.Path & "\" & Left(dqM, Len(dqM) - 4) & ".doc" '保存新建Word文档与当前工作簿相同名称和位置.Documents.Close '关闭新建文档.Quit '关闭新建文档窗口End WithSet wordAppl = Nothing '释放存储空间Application.ScreenUpdating = False '关闭屏幕刷新End Sub单击代码编辑窗口上方工具栏上的绿色三角形按钮(或按键盘上的F5),运行上述代码。
最小化当前工作簿窗口,在当前工作簿保存的桌面上,找到以当前工作簿名称命名的WORD文件,双击打开这个WORD文档。
效果一目了然,第一段落仅设置了字体格式,但并没有水平居中!换句话说,代码.ParagraphFormat.Alignment = wdAlignParagraphCenter 虽然运行通过,但没有产生本质的属性功能。
⑵打开一个已经存在的WORD文档Sub 设置()Application.ScreenUpdating = False '关闭屏幕刷新dqM = ThisWorkbook.Path & "\" & Cells(2, 1) & ".doc" '要打开的W ORD文件及路径Set wdWORD = CreateObject("Word.Application")'创建WORD对象变量Set wdDOC = wdWORD.Documents.Open(dqM) '创建文档对象变量With wdDOC.Paragraphs(1).Range.Font.Size = 18 '字号 = "黑体" '字体.Font.Bold = wdToggle '字型加粗.ParagraphFormat.Alignment = wdAlignParagraphCenter '水平居中End WithwdDOC.Close '关闭文档wdWORD.Quit '关闭窗口Set wdDOC = Nothing '释放存储空间Set wdWORD = Nothing '释放存储空间Application.ScreenUpdating = False '关闭屏幕刷新End Sub说明:代码运行通过,但是水平居中没有达到预期目的。
二、前期绑定与后期绑定在VBA中经常需要进行office软件互访问,比如将excel中的数据导出到word中,这时需要涉及到在excel中通过OLE技术引用word软件,在这过程中VBA提供了两种绑定方式,前绑定和后绑定。
1.前期绑定前绑定需要在工具菜单的引用对话框下首先引用对象库,在编译期完成绑定,这样的优点是在编码过程中可以实时看到word对象引用的方法属性等提示。
下面是一个前绑定导出excel单元格数据到新建word文件的例程。
把当前工作表单元格ActiveSheet.Cells(2, 3)数据导入新建WORD文档“123.doc”,并保存到当前操作的工作簿保存位置。
Sub Exc导出到Doc()Dim App As Word.ApplicationDim doc As Word.DocumentSet App = New Word.ApplicationSet doc = App.Documents.Adddoc.Content.InsertAfter ActiveSheet.Cells(2, 3).Valuedoc.SaveAs Filename:=ThisWorkbook.Path & "\123.doc"doc.CloseApp.QuitSet doc = NothingSet App = NothingEnd Sub前绑定还可以使用一种即时实例化变量,即声明时候就实例化,不需要set 语句,代码如下:Sub Exc导出到Doc_1()Dim App As New Word.Application'这是即时实例化Dim doc As Word.DocumentSet doc = App.Documents.Adddoc.Content.InsertAfter ActiveSheet.Cells(2, 3).Valuedoc.SaveAs Filename:=ThisWorkbook.Path & "\1234.doc"doc.CloseApp.QuitSet doc = NothingSet App = NothingEnd Sub2.后期绑定后期绑定是指在运行代码的过程中创建对象,指定对象类型,不需要先声明。