VB6下,一个定时器,定时器中的代码如下
Dim OBJ As ObjectOn Error Resume NextSet OBJ = GetObject(, "excel.Application")debug.Print err.Description
很奇怪的问题如果程序运行前,就已经打开EXCEL,,那么显示是OK(理论也如此)如果程序运行后,再打开EXCEL,那么还是显示着运行错误(ACTIVEX不能创建之类)但程,如何EXCEL程序失去了焦点,也就随便点击了其它窗体,那么又显示了正常,,,不明白为什么现在就是程序运行后,再打开EXCEL,打开EXCEL之后,如果没有没有让EXCEL失去激活状态,那么一直都是显示错误。。按照理论,此时EXCEL已经打开,那么GetObject应该是可以捕捉得到EXCEL了啊,,为什么还是显示错误呢。。而且奇怪的是,打开EXCEL后重新点一下其它窗体又可以正常了。。不明白啊,,搞了一天,,都没有弄明白

解决方案 »

  1.   

    getobject用于获取已经打开的文件对象,必须指明文件名全路径(第一个参数),如果没有使用文件名参数,效果和createobject相同
      

  2.   

    谢谢你的回答,可是我还是不大懂可能我之前说明的不好,我再说一下该程序只有在timer中有以下代码Dim OBJ As Object
    On Error Resume Next
    Set OBJ = GetObject(, "excel.Application")
    debug.Print err.Description
    1.当执行程序时,如果在执行这个程序之前就已经打开了EXCEL,那么 err.Description是为空的,也就是没有错误值
    2.如果执行了这个程序(还没有打开EXCEL),那么 err.Description的描述是ActiveX 部件不能创建对象第1,2都好理解,,问题在于以下3.
    A.执行程序(还没有打开EXCEL )  错误信息为 ActiveX 部件不能创建对象B.双击桌面EXCEL,打开EXCEL程序   错误信息还是为 ActiveX 部件不能创建对象 (为什么,此时已经打开了EXCEL,应该GetObject不会再返回一个错误了啊)----问题点C.打开了EXCEL,此时EXCEL程序是激活状态,随便点击一下其它窗体(让EXCEL程序不是激活状态),程序不再出现错误信息。此点不明白,为什么呢,当EXCEL失去了焦点就不错了呢-----为什么
    上面就只有4行代码,请大家试一下(VB 6 + OFFICE 2003+WIN7或WINXP)值得说的是,,如果不是EXCEL,,而是其它的软件,如金山的WPS,那么同是上面的代码写法,均不会出现这种问题。。
      

  3.   

    就是什么时候写入 ROT 的问题。
    Excel 喜欢在失去焦点时写入,WPS 喜欢在启动时写入,这个时机纯属开发者的个人喜好,没有硬性规定的。