VBA对象引用的前期绑定与后期绑定.doc_第1页
VBA对象引用的前期绑定与后期绑定.doc_第2页
VBA对象引用的前期绑定与后期绑定.doc_第3页
VBA对象引用的前期绑定与后期绑定.doc_第4页
VBA对象引用的前期绑定与后期绑定.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

VBA在EXCEL中操作WORD表格之一 第 10 页 共 10 页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.Name = 黑体 字体 .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.Name = 黑体 字体 .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= ThisWorkbook.Name 当前工作簿名称 With wordAppl .Documents.Add 创建一个新的Word文档 .Selection.TypeText Text:=创建一个WORD表格模型 写入第一个段落文本 With .ActiveDocument.Paragraphs(1).Range对第一个段落进行格式设置 .Font.Size = 18 字号 .Font.Name = 黑体 字体 .Font.Bold = wdToggle 字型加粗 .ParagraphFormat.Alignment = wdAlignParagraphCenter 水平居中(问题代码)End With.ActiveDocument.SaveAs ThisWorkbook.Path & & Left(dqM, Len(dqM) - 4) & .doc 保存新建Word文档与当前工作簿相同名称和位置.Documents.Close 关闭新建文档.Quit 关闭新建文档窗口 End With Set 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 要打开的WORD文件及路径Set wdWORD = CreateObject(Word.Application)创建WORD对象变量Set wdDOC = wdWORD.Documents.Open(dqM) 创建文档对象变量With wdDOC.Paragraphs(1).Range .Font.Size = 18 字号 .Font.Name = 黑体 字体 .Font.Bold = wdToggle 字型加粗 .ParagraphFormat.Alignment = wdAlignParagraphCenter 水平居中 End With wdDOC.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.docdoc.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.docdoc.CloseApp.QuitSet doc = NothingSet App = NothingEnd Sub2后期绑定后期绑定是指在运行代码的过程中创建对象,指定对象类型,不需要先声明。对于后绑定来说,优点是不需要设置引用对话框,缺点是编码时不会有提示,推荐用前绑定,下面是一个后期绑定运行的示例把当前工作表单元格ActiveSheet.Cells(4,3)的数据导入到新建WORD文档“111.doc”,并保存到当前操作的工作簿保存位置。Sub 后期绑定导出Exc到Doc()On Error Resume NextSet wordapp = GetObject(, Word.Application) 看看word软件是否已经开着,开着就不用生成新对象If Err 0 ThenSet wordapp = CreateObject(Word.Application)End IfSet doc = wordapp.Documents.Adddoc.Content.InsertAfter ActiveSheet.Cells(4, 3).Valuedoc.SaveAs Filename:=ThisWorkbook.Path & 111.docdoc.Closewordapp.QuitSet doc = NothingSet wordapp = NothingEnd Sub3示例分析在EXCEL中操作非EXCEL文档,常用函数CreateObject来创建相应的程序应用对象,而不是直接通过对象库直接引用所需要的对象。前期绑定的好处在于,由该绑定类库所引申出来的常数、对象、属性和方法,都可以被直接应用。前期绑定的特点是使用关键字New。对于前面一中讨论问题的示例中wdAlignParagraphCenter常量,如果在前期绑定时(也就是在编辑代码窗口中,执行菜单命令“工具/引用”,在列表中选定Microsoft Word 11.0 Object Library对象,代码中创建WORD对象wordAppl = New Word.Application),那么上述常数就和其对应的值一一对应了,因为在类库的内部,已经对这些常数进行了定义和赋值,那么程序应用就可以根据所设置达到其真实目的。通过后期绑定Set wordAppl = CreateObject(Word.Application)这种方法引用的word对象,仅仅wordAppl这个实例才拥有各种属性和方法。然而Microsoft Word 11.0 Object Library这个类库所包含的word.application仅仅只是其中的一个对象,常数 wdAlignParagraphCenter在这个类库中,但并不一定在word.application这个对象中,所以虽然程序设置了段落居中的对齐格式wdAlignParagraphCenter常量,但并没有达到真实居中效果。所以在EXCEL中用后期绑定的Microsoft Word 11.0 Object Library对象,计算机就不能识别常量 wdAlignParagraphCenter,于是达不到预期目的居中。4解决办法打开一个Word文档,然后在Word中运

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论