Delphi中控制VBA 宏

来源:互联网 发布:php转盘抽奖源码 编辑:程序博客网 时间:2024/04/28 18:44
如何在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 files\Microsoft Office\Office10\2052(XP)下,VBAWD10.CHM,其他版本路径基本类似。
0 0
原创粉丝点击