CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

如何在DELPHI中用代码为WORD添加宏

楼主gxyc826(猎物)2002-09-09 10:46:28 在 Delphi / VCL组件开发及应用 提问

如何在DELPHI中用代码为WORD添加宏 问题点数:100、回复次数:2Top

1 楼gxyc76(dd)回复于 2002-09-09 10:58:40 得分 100

WordApp   :=   CreateOleObject('Word.Application');  
      WordApp.Documents.Add;  
      WordApp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(1,   'Sub   FileExit()');  
      WordApp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(2,   '         Selection.InlineShapes.AddPicture   FileName:=   _   ');  
      WordApp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(3,   '               "C:\Program   Files\Common   Files\Microsoft   Shared\Clipart\cagcat50\AN02097_.wmf"   _');  
      WordApp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(4,   '               ,   LinkToFile:=False,   SaveWithDocument:=True');  
      WordApp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(5,   'End   Sub');  
      WordApp.Visible   :=   True;  
  Top

2 楼u2m(醉到天亮说晚安(poople.blogcn.com) )回复于 2002-09-09 11:32:01 得分 0

只能给你提供一个别人总结的资料,这个我也没用过  
  使用CreateOleObject方式调用Word相比Service控件的最大缺点就是不支持代码的自动生成,  
  但是我们充分的利用VBA代码就可以弥补这个功能。  
  Word作为一个功能强大的Com,可以很容易被编程工具调用,成为办公自动化系统中处理文档  
  的强有力的嵌套工具,尤其是充分Word本身的录制宏的功能,更进一步减轻了编程的负担。  
  下面就如何在Delphi里面利用Word的VBA代码进行一些总结。  
  1、 生成VBA代码。Word本身具有很强的可扩展性,尤其是支持用户自定义功能,其实现  
  的主要方式就是通过VBA代码来实现的。在“工具->宏->Visual   Basic编辑器”里面就可以看  
  到具体的宏代码,可以直接进行编辑。而且还可以使用录制宏的功能自动生成宏代码。方法是  
  选择“工具->宏->录制新宏”,然后执行自己想通过程序实现的功能,如存盘、打印等功能,  
  此时Word一边执行你要实现功能,一边将你的操作生成了一个宏,在实现功能后,可以选择  
  “工具->宏->VisualBasic编辑器”,查看生成的宏代码。  
   
  例如:我们要将文档中的“讨论”全部替换成“研讨”。  
  a. 点击“工具->宏->录制新宏”,直接点击确定,默认的宏保存到了Normal.dot系统公  
  用模板里面。  
  b. 点击“编辑->查找”,出现弹出对话框,输入查找和替换的字,点确定。进行替换。  
  c. 结束宏的录制,点击结束按钮。  
  d. 按F11或者“工具->宏->Visual   Basic   编辑器”,查看宏代码。缺省查看Normal里面  
  的模块里面的NewMacros模块。  
  以下是生成的宏代码:  
  Sub   Macro1()  
  '  
  '   Macro1   Macro  
  '   宏在   2002-2-1   由   yzhshi   录制  
  '  
          Selection.Find.ClearFormatting  
          Selection.Find.Replacement.ClearFormatting  
          With   Selection.Find  
                  .Text   =   "讨论"  
                  .Replacement.Text   =   "研讨"  
                  .Forward   =   True  
                  .Wrap   =   wdFindContinue  
                  .Format   =   False  
                  .MatchCase   =   False  
                  .MatchWholeWord   =   False  
                  .MatchByte   =   True  
                  .MatchWildcards   =   False  
                  .MatchSoundsLike   =   False  
                  .MatchAllWordForms   =   False  
          End   With  
          Selection.Find.Execute   Replace:=wdReplaceAll  
  End   Sub  
  2、 精简宏代码。通常,生成的宏代码有很多语句对你要实现的功能来说都是多余的。我们要  
  做的就是如何找到我们需要的代码。此时我们查看具体的代码,剔除明显没有用途的代码,然后光  
  标停留在宏上面,按F5执行,看是否实现功能,逐步精简,得到最小代码。此步骤可参考Word的  
  VBA帮助来判断代码是否有用。  
   
  如上例,精简下来,剩下以下代码。  
  Sub   Macro1()  
          Selection.Find.ClearFormatting  
          Selection.Find.Replacement.ClearFormatting  
          With   Selection.Find  
                  .Text   =   "讨论"  
                  .Replacement.Text   =   "研讨"  
          End   With  
          Selection.Find.Execute   Replace:=wdReplaceAll  
  End   Sub  
   
  3、 转换成Delphi代码。这一步其实很简单,对于VBA代码,只需要在前面添加Word的句柄或者  
  文档的句柄或者文档的句柄.Application就可以直接操作了。  
  例:逐句翻译:(Word_Handle是Word的句柄)  
  (VB)           Selection.Find.ClearFormatting  
  (Delphi)     Word_Handle.Selection.Find.ClearFormatting;  
   
  (VB)           Selection.Find.Replacement.ClearFormatting  
  (Delphi)     Word_Handle.Selection.Find.Replacement.ClearFormatting;  
  以上两句简单添加上Word的句柄就可以了。  
   
  (VB)           With   Selection.Find  
                              Text   =   "讨论"  
                              Replacement.Text   =   "研讨"  
  End   With  
  (Delphi)     Word_Handle.Selection.Find.Text   :=   '讨论';  
      Word_Handle.Selection.Find.Replacement.Text   :=   '研讨';  
  以上几句因为Delphi不支持Variant的With结构,所以分开写。同时转换成Delphi语法。  
   
  (VB)         Selection.Find.Execute   Replace:=wdReplaceAll  
  (Delphi)   Word_Handle.Selection.Find.Execute(Replace:=2);  
  上面一句存在一个小技巧,如何找到常量wdReplaceAll的数值为2?  
  这里有几个办法,  
  一:直接use   Word2000或者word97单元,那么直接使用常量wdReplaceAll就可以了;  
  二:到Word2000.pas或者Word97.pas里面查找wdReplaceAll的数值;  
  三:直接使用VBA代码见wdReplaceAll的数值显示出来。办法是写一个小过程,然后执行,如下:  
  Sub   ShowValue()  
      MsgBox   wdReplaceAll  
  End   Sub  
  Top

相关问题

  • VF代码转Delphi中宏问题,急
  • 如何将word宏转换为delphi代码?总是报"类型不匹配"的错误
  • ###############.......vba代码——>delphi......#############
  • ★★★C代码<<=====>>Delphi代码?★★★
  • 请问大虾们这句WORD宏代码怎么翻译成BCB的代码
  • bcb代码转delphi
  • VB代码转Delphi
  • VC代码转Delphi?
  • 在WORD中录制了宏,请问如何看到VB代码?
  • vb代码转换Delphi代码

关键词

  • 代码
  • delphi
  • word
  • 文档
  • vba
  • 宏代码
  • 宏
  • clearformatting
  • wordapp
  • insertlines

得分解答快速导航

  • 帖主:gxyc826
  • gxyc76

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo