大家再来讨论一下vb与vba的结合?使得不用依赖vba?
www.dimcax.com
大家再来讨论一下vb与vba的结合?使得不用依赖vba?
之前我提出这个猜想....
所来经过一段时间的学习,发觉这方案或许可行......
不过首先要解决,vb如何像vba那样能识别特殊的对象命令(如 addline 这一类的命令,这是vb的没有也不能识别的)如果大家看过“对象游览器->所有库”中,就会发觉vba多了几项“acadproject”“autocad”“stdole”东东,如果vb也有这几项,应该也有vba的功能了(如果我没有想错的话应该是添加“模块”吧?问题是如何找到这个模块.....)
而且加上vb上的“部件”里的“可插入对象”应该是可独立于cad而实现我想要的功能了....
————————————————————————
后来还看到了这位朋友的贴子
发觉这也是可行的办法,不过由于资历有限,对一些地方也还是不明。我所理解的是,就是通过vb召唤出cad里的特殊vba,然后再由这个vba做应做的事.......
但我问题是,如何召唤出vba后,实现vba的功能呢?(通过vb写的话不知vb本身认不认出这样的命令....)然后就是还有如何搞好一切后,那个命令是关闭vba呢?
用了vb干吗还要vba,vba能做的,vb也能
问题是vb没有现在cad上vba的对象库,所以我想问一下大家如何添加??
dim acadapp as acadapplication
dim acaddoc as acaddocument
sub connecttoacad()
on error resume next
set acadapp = getobject(, "autocad.application")
if err then
err.clear
setacadapp = createobject("autocad.application")
if err then end
end if
acadapp.visible = true
set acaddoc = acadapp.activedocument
end sub
private sub command1_click()
dim start1(2) as double
dim end1(2) as double
end1(0) = 100
end1(1) = 100
dim line as acadline
call connecttoacad
set line = acaddoc.modelspace.addline(start1, end1)
end sub
成功解决了一部份问题......原来是acaddoc,不是thisdrawing,不知为什么代码会换成这个....
可惜还不能用....“工程”->“部件”->“可插入对象”里“插入autocad图形”(name叫做drawing1)
但好象不能用这个ole......
难道楼主不知道引用autocad类型库,引用以后在对象浏览器可以查看这些对象
已经引用了,否则也不会出现3楼那段代码......
问题是,这样只能在autocad那个软件上画,不能用“工程”->“部件”->“可插入对象”里“插入autocad图形”(name叫做drawing1)这个ole上来画?
vb和vba本质上并无区别
先引用cad的类型库,进行以下定义
dim acadapp as acadapplication
dim acaddoc as acaddocument
等将程序写好后再将引用去掉,然后再将定义改成以下方式
dim acadapp as object
dim acaddoc as object
这样就不依赖cad的版本了
也可以声明cad内的对象所触发的事件
哦~??真的!?那就要试试了~!先谢谢楼上的解答.
最近在学习vb对autocad进行二次开发
请教下楼主
在开发过程中发现2个问题
1.利用vb打开autocad后,改变图层、图形界限等,并绘制了一些图形,当利用set acaddoc=acadapp.documents.add 想再打开一空白cad文档时,会出现“输入要加载的自定义文件的名称:”,按esc键后,会正常绘图,否则,将会出现“程序忙”的错误
2.我将镜像命令mirror编了一个小程序
public sub hmirror(byval mirrorvp as variant,byval mirrorobj as object)
'mirrorvp为镜像点,mirrorobj为需镜像的图形
dim mirrorvp1(0 to 2) as double
dim mirrorvp2(0 to 2) as double
mirrorvp1(0)=mirrorvp(0)
mirrorvp1(1)=mirrorvp(1)
mirrorvp1(2)=0
mirrorvp2(0)=mirrorvp(0)
mirrorvp2(1)=mirrorvp(1)+5
mirrorvp2(2)=0
mirrorobj.mirror mirrorvp1,mirrorvp2
end sub
调用此小模块时,比如:call hmirror(mirrorvp,lineobj)想对一条直线进行镜像时,会出“对象变量或with块变量未设置”的错误提示。
dim lineobj as acadline
或 dim lineobj as object 均无效
热切盼望楼主或其他高深人士指导迷津啊。
楼主,能否加你的qq呢,盼望与你的交流。我的qq号:117672764
谢谢啊。