在打开word一直到打开文档,这个过程中,各个发生的时间顺序会稍有不同,我们举一个常用的代码段进行解析:
dim wordApp as object
dim wordDoc as object
set wordApp=CreateObject("word.Application")
wordApp.visible=true
set wordDoc=wordApp.Documents.Open("kk.doc")
那么,时间顺序如下:
1、Application的WindowActivate事件:这个比较好理解,首先word.Application的窗口获得了焦点;不过不是很清楚到底是.Visible=true带来的,还是CreateObject带来的(按照我们跟踪的结果,应该是.Visible=True造成的);
2、Application的DocumentOpen事件:在采用代码打开文档的时候,相应的就发生了DocumentOpen事件,这个事件针对Document发生,所有如果需要对文档进行什么检查的话,放在这个DocumentOpen事件里,是最恰当不过的了;
3、Application的DocumentChange事件:这个事件不针对Document发生,所以它也比较特殊,即使是在没有文档的窗口里,只要你切换了word窗口,它就会发生,但是他的发生条件是:
3.1.从一个文档切换成另外一个文档;
3.2.没有文档的窗口被激活的时候(这点比较特殊,当具备文档的窗口重新获得焦点的时候,发生的事件居然是WindowActivate,而不是DocumentChange事件);
其他的事件,就不需要罗嗦了,这些事件中,DocumentOpen事件发生一次,而WindowActivate事件和DocumentChange事件经常发生;
补充:在word.Application中有文档的时候,将焦点切换到其他窗口,再次回到这个word文档窗口的时候,DocumentChange事件不会发生;但是在word.Application中没有文档的时候,每次切换回到word窗口,都会发生DocumentChange事件;
补充1:编写的COMAddIns接口中,通过wordApp.COMAddIns.Item(ProgId).Object=Me,可以将AddIns编写成从外部调用的一种类型,也就是说:可以从程序外部调用AddIns中的公用函数。不过需要特别注意的是,如果想从JS、VC里面进行调用的话,这个函数的名称最好全部用小写,否则转换上会出麻烦。