注册 登录
编程论坛 VB6论坛

GetObject 搞了一天都没有搞明白

happylcg 发布于 2013-09-11 17:08, 4804 次点击
VB6下,一个定时器,定时器中的代码如下
Dim OBJ As Object

On Error Resume Next

Set OBJ = GetObject(, "excel.Application")

debug.Print err.Description


很奇怪的问题

如果程序运行前,就已经打开EXCEL,,那么显示是OK(理论也如此)

如果程序运行后,再打开EXCEL,那么还是显示着运行错误(ACTIVEX不能创建之类)

但程,如何EXCEL程序失去了焦点,也就随便点击了其它窗体,那么又显示了正常,,,不明白为什么

现在就是程序运行后,再打开EXCEL,打开EXCEL之后,如果没有没有让EXCEL失去激活状态,那么一直都是显示错误。。按照理论,此时EXCEL已经打开,那么GetObject应该是可以捕捉得到EXCEL了啊,,为什么还是显示错误呢。。而且奇怪的是,打开EXCEL后重新点一下其它窗体又可以正常了。。

不明白啊,,搞了一天,,都没有弄明白

[ 本帖最后由 happylcg 于 2013-9-11 20:26 编辑 ]
2 回复
#2
happylcg2013-09-12 08:28
可能我之前说明的不好,我再说一下

该程序只有在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  (Set OBJ = GetObject(, "ET.Application") ),那么同是上面的代码写法,均不会出现这种问题。。
#3
九连阳2013-10-05 15:22
Dim OBJ As Object

On Error Resume Next

Set OBJ = GetObject(, "excel.Application")

if err then
    Set OBJ = CreateObject("excel.Application")
    ... ...
end if
1