怎么调用word中定义的宏给你段可用的代码好吗,谢谢

解决方案 »

  1.   

    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 Sub3、 转换成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 files\Microsoft Office\Office10\2052(XP)下,VBAWD10.CHM,其他版本路径基本类似。
      

  2.   

    我想要的是调用word中写好的宏,而不是改写
    如果是改写能实现下面的问题吗?我想设置word到顶的边距为8.11cm
    但delphi中只认象数,CM到象数的转换又没有标准所以只能在word中写好宏,用delphi调用