vb连接cad为什么老是报错“ActiveX控件不能创建对象”,cad工程已经引用了啊

时间:2022-12-19 21:05:06
想用vb连接cad自动画图,已经在工程中引用了cad对象,为什么还是报错“ActiveX控件不能创建对象”
这是我的代码
Private Sub Command1_Click()
Dim cad As AcadApplication
Set cad = GetObject(, "AutoCAD.Application")
If Err Then
    Err.Clear
    Set cad = CreateObject("AutoCAD.Application")
End If
cad.Visible = True
End Sub

我觉得没有错啊,一开始以为是cad版本的问题然后试了试具体版本号的代码(我的cad是2014)
Private Sub Command1_Click()
Dim cad As AcadApplication
Set cad = GetObject(, "AutoCAD.Application.19")
If Err Then
    Err.Clear
    Set cad = CreateObject("AutoCAD.Application.19")
End If
cad.Visible = True
End Sub

还是不能解决,抓狂!求大神帮忙,分数已经快没了,真心感谢1

15 个解决方案

#1


你装的是不是“绿色版”的CAD?
你在VB的引用里面能不能看到CAD?

#2


引用 1 楼 chewinggum 的回复:
你装的是不是“绿色版”的CAD?
你在VB的引用里面能不能看到CAD?

应该不是吧。
他已经“引用”了,肯定能“看到”啊。
要不然,在 Dim cad As AcadApplication 就提示“类型没有定义”(大概是这样的错误提示吧)之类的了。

#3


我在想,会不会是CAD软件本身的问题啊。
它的“COM接口”兼容性(或“适应性”)不好,某些环境中不能正常运作。
vb连接cad为什么老是报错“ActiveX控件不能创建对象”,cad工程已经引用了啊

#4


Dim cad As new AcadApplication
走起

#5


引用 4 楼 chewinggum 的回复:
Dim cad As new AcadApplication
走起

小心一点按钮,然后提示“OLE自动化错误”之类的(大概是这个意思的……)。
vb连接cad为什么老是报错“ActiveX控件不能创建对象”,cad工程已经引用了啊

#6


不要以为用了New、代码中不用写 CreateObject了,那么“Create”的过程就真的跳过了……

事实上只是“它帮你做了”而已。

#7


引用 3 楼 Chen8013 的回复:
我在想,会不会是CAD软件本身的问题啊。
它的“COM接口”兼容性(或“适应性”)不好,某些环境中不能正常运作。
vb连接cad为什么老是报错“ActiveX控件不能创建对象”,cad工程已经引用了啊

但是有个奇怪的问题,当我把Set MyCad = GetObject(, "AutoCad.application.19")去掉,直接在cad未打开的情况下用createobject,可以连接cad
然后再cad已打开的情况下用getobject,就可以get到cad。。。。,气炸了。。。。

#8


引用 5 楼 Chen8013 的回复:
Quote: 引用 4 楼 chewinggum 的回复:

Dim cad As new AcadApplication
走起

小心一点按钮,然后提示“OLE自动化错误”之类的(大概是这个意思的……)。
vb连接cad为什么老是报错“ActiveX控件不能创建对象”,cad工程已经引用了啊

但是我再代码最前面加上 on error resume next,然后去掉if 的判断语句,就可以运行代码,但是我不想用on erroe resume next,
怕后面的程序有错误,找不出来,其实用onerror和if err都是为了判断cad是否打开,为什么就是 if err语句每次都会出现无法创建
对象的错误呢,哎

#9


在64位Windows下:
64位exe和dll在目录c:\windows\sys tem32目录下;
32位exe和dll在目录c:\windows\sys wow64目录下;
所以要注意:
    在win64位系统下注册32位ocx或dll需要将32位ocx或dll拷贝到c:\windows\syswow64\目录下。
    且注册要用c:\windows\syswow64\regsvr32 xxxxxxx.ocx或dll
64 位 Windows 平台注意点之文件系统重定向  http://www.cnblogs.com/jiake/p/4981555.html
64 位 Windows 平台注意点之注册表重定向  http://www.cnblogs.com/jiake/p/4956218.html

#10


引用 8 楼 DQYDXT 的回复:
Quote: 引用 5 楼 Chen8013 的回复:

Quote: 引用 4 楼 chewinggum 的回复:

Dim cad As new AcadApplication
走起

小心一点按钮,然后提示“OLE自动化错误”之类的(大概是这个意思的……)。
vb连接cad为什么老是报错“ActiveX控件不能创建对象”,cad工程已经引用了啊

但是我再代码最前面加上 on error resume next,然后去掉if 的判断语句,就可以运行代码,但是我不想用on erroe resume next,
怕后面的程序有错误,找不出来,其实用onerror和if err都是为了判断cad是否打开,为什么就是 if err语句每次都会出现无法创建
对象的错误呢,哎

明明是“有错误的”,你用 on error resume next ,能“正确运行”才怪!!!
“可以运行”,跟“能正确运行”相比,是天壤之别!!!
vb连接cad为什么老是报错“ActiveX控件不能创建对象”,cad工程已经引用了啊

#11


引用 10 楼 Chen8013 的回复:
Quote: 引用 8 楼 DQYDXT 的回复:

Quote: 引用 5 楼 Chen8013 的回复:

Quote: 引用 4 楼 chewinggum 的回复:

Dim cad As new AcadApplication
走起

小心一点按钮,然后提示“OLE自动化错误”之类的(大概是这个意思的……)。
vb连接cad为什么老是报错“ActiveX控件不能创建对象”,cad工程已经引用了啊

但是我再代码最前面加上 on error resume next,然后去掉if 的判断语句,就可以运行代码,但是我不想用on erroe resume next,
怕后面的程序有错误,找不出来,其实用onerror和if err都是为了判断cad是否打开,为什么就是 if err语句每次都会出现无法创建
对象的错误呢,哎

明明是“有错误的”,你用 on error resume next ,能“正确运行”才怪!!!
“可以运行”,跟“能正确运行”相比,是天壤之别!!!
vb连接cad为什么老是报错“ActiveX控件不能创建对象”,cad工程已经引用了啊

不是这个意思,我大概知道原因了,比如这段代码
Private Sub Command2_Click()
Dim p1(2) As Double, p2(2) As Double, p3(2) As Double
Dim MyCad As AcadApplication 'mechaniacal 对象
Dim MyDoc As AcadDocument
Dim MyLine As AcadLine
Dim dima As AcadDimAligned
    On Error Resume Next
    Set MyCad = GetObject(, "AutoCad.application")
    If Err Then
    Err.Clear
    Set MyCad = CreateObject("AutoCad.application")
    End If

    MyCad.Visible = True
end sub

我不加 on error resume next,那么我再cad运行的时候,用    Set MyCad =  GetObject(, "AutoCad.application"),肯定会出错
然后出错了,程序自然也不会往下一行读取   If Err 语句,自然起不到判断cad是否在运行的作用,但是加上on on error resume next,出错后程序继续
往下执行,才能执行   
    If Err Then
   if err 
   Err.Clear
    Set MyCad = CreateObject("AutoCad.application")
    End If

您觉得是这样吗

#12


引用 10 楼 Chen8013 的回复:
Quote: 引用 8 楼 DQYDXT 的回复:

Quote: 引用 5 楼 Chen8013 的回复:

Quote: 引用 4 楼 chewinggum 的回复:

Dim cad As new AcadApplication
走起

小心一点按钮,然后提示“OLE自动化错误”之类的(大概是这个意思的……)。
vb连接cad为什么老是报错“ActiveX控件不能创建对象”,cad工程已经引用了啊

但是我再代码最前面加上 on error resume next,然后去掉if 的判断语句,就可以运行代码,但是我不想用on erroe resume next,
怕后面的程序有错误,找不出来,其实用onerror和if err都是为了判断cad是否打开,为什么就是 if err语句每次都会出现无法创建
对象的错误呢,哎

明明是“有错误的”,你用 on error resume next ,能“正确运行”才怪!!!
“可以运行”,跟“能正确运行”相比,是天壤之别!!!
vb连接cad为什么老是报错“ActiveX控件不能创建对象”,cad工程已经引用了啊

这个破论坛bug太多了,修改回复也不能修改了,是在cad未运行的时候执行 getobject自然会出错,修正一下上一个回复

#13


哎,我还以为你的代码就是以command1作为启动CAD的嘛,所以看你只有getobject没有createc才让你 dim as new。谁知道你还有别的地方启动了CAD对象。
你把这个 MyCad作为全局变量,一开始启动的时候获得到CAD对象,之后一直保持住,用完了再关掉不就得了。

#14


该回复于2018-02-05 16:33:16被管理员删除

#15


引用 13 楼 chewinggum 的回复:
哎,我还以为你的代码就是以command1作为启动CAD的嘛,所以看你只有getobject没有createc才让你 dim as new。谁知道你还有别的地方启动了CAD对象。
你把这个 MyCad作为全局变量,一开始启动的时候获得到CAD对象,之后一直保持住,用完了再关掉不就得了。

不是用来启动cad,是自动出cad图,如果有cad就get对象,如果没有启动cad就,启动cad啊

#1


你装的是不是“绿色版”的CAD?
你在VB的引用里面能不能看到CAD?

#2


引用 1 楼 chewinggum 的回复:
你装的是不是“绿色版”的CAD?
你在VB的引用里面能不能看到CAD?

应该不是吧。
他已经“引用”了,肯定能“看到”啊。
要不然,在 Dim cad As AcadApplication 就提示“类型没有定义”(大概是这样的错误提示吧)之类的了。

#3


我在想,会不会是CAD软件本身的问题啊。
它的“COM接口”兼容性(或“适应性”)不好,某些环境中不能正常运作。
vb连接cad为什么老是报错“ActiveX控件不能创建对象”,cad工程已经引用了啊

#4


Dim cad As new AcadApplication
走起

#5


引用 4 楼 chewinggum 的回复:
Dim cad As new AcadApplication
走起

小心一点按钮,然后提示“OLE自动化错误”之类的(大概是这个意思的……)。
vb连接cad为什么老是报错“ActiveX控件不能创建对象”,cad工程已经引用了啊

#6


不要以为用了New、代码中不用写 CreateObject了,那么“Create”的过程就真的跳过了……

事实上只是“它帮你做了”而已。

#7


引用 3 楼 Chen8013 的回复:
我在想,会不会是CAD软件本身的问题啊。
它的“COM接口”兼容性(或“适应性”)不好,某些环境中不能正常运作。
vb连接cad为什么老是报错“ActiveX控件不能创建对象”,cad工程已经引用了啊

但是有个奇怪的问题,当我把Set MyCad = GetObject(, "AutoCad.application.19")去掉,直接在cad未打开的情况下用createobject,可以连接cad
然后再cad已打开的情况下用getobject,就可以get到cad。。。。,气炸了。。。。

#8


引用 5 楼 Chen8013 的回复:
Quote: 引用 4 楼 chewinggum 的回复:

Dim cad As new AcadApplication
走起

小心一点按钮,然后提示“OLE自动化错误”之类的(大概是这个意思的……)。
vb连接cad为什么老是报错“ActiveX控件不能创建对象”,cad工程已经引用了啊

但是我再代码最前面加上 on error resume next,然后去掉if 的判断语句,就可以运行代码,但是我不想用on erroe resume next,
怕后面的程序有错误,找不出来,其实用onerror和if err都是为了判断cad是否打开,为什么就是 if err语句每次都会出现无法创建
对象的错误呢,哎

#9


在64位Windows下:
64位exe和dll在目录c:\windows\sys tem32目录下;
32位exe和dll在目录c:\windows\sys wow64目录下;
所以要注意:
    在win64位系统下注册32位ocx或dll需要将32位ocx或dll拷贝到c:\windows\syswow64\目录下。
    且注册要用c:\windows\syswow64\regsvr32 xxxxxxx.ocx或dll
64 位 Windows 平台注意点之文件系统重定向  http://www.cnblogs.com/jiake/p/4981555.html
64 位 Windows 平台注意点之注册表重定向  http://www.cnblogs.com/jiake/p/4956218.html

#10


引用 8 楼 DQYDXT 的回复:
Quote: 引用 5 楼 Chen8013 的回复:

Quote: 引用 4 楼 chewinggum 的回复:

Dim cad As new AcadApplication
走起

小心一点按钮,然后提示“OLE自动化错误”之类的(大概是这个意思的……)。
vb连接cad为什么老是报错“ActiveX控件不能创建对象”,cad工程已经引用了啊

但是我再代码最前面加上 on error resume next,然后去掉if 的判断语句,就可以运行代码,但是我不想用on erroe resume next,
怕后面的程序有错误,找不出来,其实用onerror和if err都是为了判断cad是否打开,为什么就是 if err语句每次都会出现无法创建
对象的错误呢,哎

明明是“有错误的”,你用 on error resume next ,能“正确运行”才怪!!!
“可以运行”,跟“能正确运行”相比,是天壤之别!!!
vb连接cad为什么老是报错“ActiveX控件不能创建对象”,cad工程已经引用了啊

#11


引用 10 楼 Chen8013 的回复:
Quote: 引用 8 楼 DQYDXT 的回复:

Quote: 引用 5 楼 Chen8013 的回复:

Quote: 引用 4 楼 chewinggum 的回复:

Dim cad As new AcadApplication
走起

小心一点按钮,然后提示“OLE自动化错误”之类的(大概是这个意思的……)。
vb连接cad为什么老是报错“ActiveX控件不能创建对象”,cad工程已经引用了啊

但是我再代码最前面加上 on error resume next,然后去掉if 的判断语句,就可以运行代码,但是我不想用on erroe resume next,
怕后面的程序有错误,找不出来,其实用onerror和if err都是为了判断cad是否打开,为什么就是 if err语句每次都会出现无法创建
对象的错误呢,哎

明明是“有错误的”,你用 on error resume next ,能“正确运行”才怪!!!
“可以运行”,跟“能正确运行”相比,是天壤之别!!!
vb连接cad为什么老是报错“ActiveX控件不能创建对象”,cad工程已经引用了啊

不是这个意思,我大概知道原因了,比如这段代码
Private Sub Command2_Click()
Dim p1(2) As Double, p2(2) As Double, p3(2) As Double
Dim MyCad As AcadApplication 'mechaniacal 对象
Dim MyDoc As AcadDocument
Dim MyLine As AcadLine
Dim dima As AcadDimAligned
    On Error Resume Next
    Set MyCad = GetObject(, "AutoCad.application")
    If Err Then
    Err.Clear
    Set MyCad = CreateObject("AutoCad.application")
    End If

    MyCad.Visible = True
end sub

我不加 on error resume next,那么我再cad运行的时候,用    Set MyCad =  GetObject(, "AutoCad.application"),肯定会出错
然后出错了,程序自然也不会往下一行读取   If Err 语句,自然起不到判断cad是否在运行的作用,但是加上on on error resume next,出错后程序继续
往下执行,才能执行   
    If Err Then
   if err 
   Err.Clear
    Set MyCad = CreateObject("AutoCad.application")
    End If

您觉得是这样吗

#12


引用 10 楼 Chen8013 的回复:
Quote: 引用 8 楼 DQYDXT 的回复:

Quote: 引用 5 楼 Chen8013 的回复:

Quote: 引用 4 楼 chewinggum 的回复:

Dim cad As new AcadApplication
走起

小心一点按钮,然后提示“OLE自动化错误”之类的(大概是这个意思的……)。
vb连接cad为什么老是报错“ActiveX控件不能创建对象”,cad工程已经引用了啊

但是我再代码最前面加上 on error resume next,然后去掉if 的判断语句,就可以运行代码,但是我不想用on erroe resume next,
怕后面的程序有错误,找不出来,其实用onerror和if err都是为了判断cad是否打开,为什么就是 if err语句每次都会出现无法创建
对象的错误呢,哎

明明是“有错误的”,你用 on error resume next ,能“正确运行”才怪!!!
“可以运行”,跟“能正确运行”相比,是天壤之别!!!
vb连接cad为什么老是报错“ActiveX控件不能创建对象”,cad工程已经引用了啊

这个破论坛bug太多了,修改回复也不能修改了,是在cad未运行的时候执行 getobject自然会出错,修正一下上一个回复

#13


哎,我还以为你的代码就是以command1作为启动CAD的嘛,所以看你只有getobject没有createc才让你 dim as new。谁知道你还有别的地方启动了CAD对象。
你把这个 MyCad作为全局变量,一开始启动的时候获得到CAD对象,之后一直保持住,用完了再关掉不就得了。

#14


该回复于2018-02-05 16:33:16被管理员删除

#15


引用 13 楼 chewinggum 的回复:
哎,我还以为你的代码就是以command1作为启动CAD的嘛,所以看你只有getobject没有createc才让你 dim as new。谁知道你还有别的地方启动了CAD对象。
你把这个 MyCad作为全局变量,一开始启动的时候获得到CAD对象,之后一直保持住,用完了再关掉不就得了。

不是用来启动cad,是自动出cad图,如果有cad就get对象,如果没有启动cad就,启动cad啊