• Delphi中控制VBA 宏


    如何在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 


    最后补充一下,很多关于Word的东西可以从Word的VBA帮助里面获得。具体文件在 
    ?:Program filesMicrosoft OfficeOffice102052(XP)下,VBAWD10.CHM,其他版本路径基本类似。
  • 相关阅读:
    request
    href="#"
    可展开收起的客服导航。
    JS添加父节点的方法。
    精简漂亮的导航浮动菜单显示特效演示
    竖排导航
    仿新浪微博
    鼠标滑过改变文字
    滚动函数
    一些常用的兼容函数。
  • 原文地址:https://www.cnblogs.com/xieyunc/p/9126524.html
Copyright © 2020-2023  润新知