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

DQYDXT 2018-02-03 08:26:41
想用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
...全文
2579 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
DQYDXT 2018-02-06
  • 打赏
  • 举报
回复
引用 13 楼 chewinggum 的回复:
哎,我还以为你的代码就是以command1作为启动CAD的嘛,所以看你只有getobject没有createc才让你 dim as new。谁知道你还有别的地方启动了CAD对象。 你把这个 MyCad作为全局变量,一开始启动的时候获得到CAD对象,之后一直保持住,用完了再关掉不就得了。
不是用来启动cad,是自动出cad图,如果有cad就get对象,如果没有启动cad就,启动cad啊
舉杯邀明月 2018-02-05
  • 打赏
  • 举报
回复
引用 4 楼 chewinggum 的回复:
Dim cad As new AcadApplication 走起
小心一点按钮,然后提示“OLE自动化错误”之类的(大概是这个意思的……)。
脆皮大雪糕 2018-02-05
  • 打赏
  • 举报
回复
Dim cad As new AcadApplication 走起
舉杯邀明月 2018-02-05
  • 打赏
  • 举报
回复
我在想,会不会是CAD软件本身的问题啊。 它的“COM接口”兼容性(或“适应性”)不好,某些环境中不能正常运作。
舉杯邀明月 2018-02-05
  • 打赏
  • 举报
回复
引用 1 楼 chewinggum 的回复:
你装的是不是“绿色版”的CAD? 你在VB的引用里面能不能看到CAD?
应该不是吧。 他已经“引用”了,肯定能“看到”啊。 要不然,在 Dim cad As AcadApplication 就提示“类型没有定义”(大概是这样的错误提示吧)之类的了。
脆皮大雪糕 2018-02-05
  • 打赏
  • 举报
回复
你装的是不是“绿色版”的CAD? 你在VB的引用里面能不能看到CAD?
脆皮大雪糕 2018-02-05
  • 打赏
  • 举报
回复
哎,我还以为你的代码就是以command1作为启动CAD的嘛,所以看你只有getobject没有createc才让你 dim as new。谁知道你还有别的地方启动了CAD对象。 你把这个 MyCad作为全局变量,一开始启动的时候获得到CAD对象,之后一直保持住,用完了再关掉不就得了。
DQYDXT 2018-02-05
  • 打赏
  • 举报
回复
引用 10 楼 Chen8013 的回复:
[quote=引用 8 楼 DQYDXT 的回复:] [quote=引用 5 楼 Chen8013 的回复:] [quote=引用 4 楼 chewinggum 的回复:] Dim cad As new AcadApplication 走起
小心一点按钮,然后提示“OLE自动化错误”之类的(大概是这个意思的……)。 [/quote] 但是我再代码最前面加上 on error resume next,然后去掉if 的判断语句,就可以运行代码,但是我不想用on erroe resume next, 怕后面的程序有错误,找不出来,其实用onerror和if err都是为了判断cad是否打开,为什么就是 if err语句每次都会出现无法创建 对象的错误呢,哎[/quote] 明明是“有错误的”,你用 on error resume next ,能“正确运行”才怪!!! “可以运行”,跟“能正确运行”相比,是天壤之别!!! [/quote] 这个破论坛bug太多了,修改回复也不能修改了,是在cad未运行的时候执行 getobject自然会出错,修正一下上一个回复
DQYDXT 2018-02-05
  • 打赏
  • 举报
回复
引用 10 楼 Chen8013 的回复:
[quote=引用 8 楼 DQYDXT 的回复:] [quote=引用 5 楼 Chen8013 的回复:] [quote=引用 4 楼 chewinggum 的回复:] Dim cad As new AcadApplication 走起
小心一点按钮,然后提示“OLE自动化错误”之类的(大概是这个意思的……)。 [/quote] 但是我再代码最前面加上 on error resume next,然后去掉if 的判断语句,就可以运行代码,但是我不想用on erroe resume next, 怕后面的程序有错误,找不出来,其实用onerror和if err都是为了判断cad是否打开,为什么就是 if err语句每次都会出现无法创建 对象的错误呢,哎[/quote] 明明是“有错误的”,你用 on error resume next ,能“正确运行”才怪!!! “可以运行”,跟“能正确运行”相比,是天壤之别!!! [/quote] 不是这个意思,我大概知道原因了,比如这段代码
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
您觉得是这样吗
舉杯邀明月 2018-02-05
  • 打赏
  • 举报
回复
引用 8 楼 DQYDXT 的回复:
[quote=引用 5 楼 Chen8013 的回复:] [quote=引用 4 楼 chewinggum 的回复:] Dim cad As new AcadApplication 走起
小心一点按钮,然后提示“OLE自动化错误”之类的(大概是这个意思的……)。 [/quote] 但是我再代码最前面加上 on error resume next,然后去掉if 的判断语句,就可以运行代码,但是我不想用on erroe resume next, 怕后面的程序有错误,找不出来,其实用onerror和if err都是为了判断cad是否打开,为什么就是 if err语句每次都会出现无法创建 对象的错误呢,哎[/quote] 明明是“有错误的”,你用 on error resume next ,能“正确运行”才怪!!! “可以运行”,跟“能正确运行”相比,是天壤之别!!!
赵4老师 2018-02-05
  • 打赏
  • 举报
回复
在64位Windows下: 64位exe和dll在目录c:\windows\system32目录下; 32位exe和dll在目录c:\windows\syswow64目录下; 所以要注意: 在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
DQYDXT 2018-02-05
  • 打赏
  • 举报
回复
引用 5 楼 Chen8013 的回复:
[quote=引用 4 楼 chewinggum 的回复:] Dim cad As new AcadApplication 走起
小心一点按钮,然后提示“OLE自动化错误”之类的(大概是这个意思的……)。 [/quote] 但是我再代码最前面加上 on error resume next,然后去掉if 的判断语句,就可以运行代码,但是我不想用on erroe resume next, 怕后面的程序有错误,找不出来,其实用onerror和if err都是为了判断cad是否打开,为什么就是 if err语句每次都会出现无法创建 对象的错误呢,哎
DQYDXT 2018-02-05
  • 打赏
  • 举报
回复
引用 3 楼 Chen8013 的回复:
我在想,会不会是CAD软件本身的问题啊。 它的“COM接口”兼容性(或“适应性”)不好,某些环境中不能正常运作。
但是有个奇怪的问题,当我把Set MyCad = GetObject(, "AutoCad.application.19")去掉,直接在cad未打开的情况下用createobject,可以连接cad 然后再cad已打开的情况下用getobject,就可以get到cad。。。。,气炸了。。。。
舉杯邀明月 2018-02-05
  • 打赏
  • 举报
回复
不要以为用了New、代码中不用写 CreateObject了,那么“Create”的过程就真的跳过了…… 事实上只是“它帮你做了”而已。

2,462

社区成员

发帖
与我相关
我的任务
社区描述
VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。
社区管理员
  • VBA
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧