sy100
发表于 2009-8-3 21:43:00
学习中,谢谢!
NetBee
发表于 2009-8-3 22:27:00
本帖最后由 作者 于 2009-8-11 18:57:56 编辑
只有想不到呀。。。。你厉害!!
说明白就简单了。。
就是一个使用VLISP动态访问VBA及动态创建VBA模块函数的过程
(defun c:vbetest()
(setq acadObject (vlax-get-acad-object))
(setq acadVbe (vla-get-vbe acadObject))
(setq acadVbeProjects (vlax-get-property acadVbe 'VBProjects))
(setq cProjects(vla-Item acadVbeProjects 1))
(setq cVBComponents(vlax-get-property cProjects 'VBComponents))
;;(setq vbdmodule(vlax-invoke-method cVBComponents 'ADD "1"));_1 模块 2类模块 3窗体
(setq vbdmodules(vla-Item cVBComponents 1))
(setq vbCodeModule(vlax-get-property vbdmodules 'CodeModule))
(vlax-invoke-method vbCodeModule 'InsertLines 1 "sub vbetest()")
(vlax-invoke-method vbCodeModule 'InsertLines 2 "MsgBox \"Hello Word,there is vlisp add\", , \"vbetest\"")
(vlax-invoke-method vbCodeModule 'InsertLines 3 "END SUB")
(command "_-vbarun" "vbetest")
)
nonsmall
发表于 2009-8-8 01:06:00
<p>这段代码前面可以加上一句</p><p>(command "vbaide")</p><p>凡是问题都应该留给大家思考的空间,</p><p>要坚决打击不劳而获的犯罪行为。</p>
jxphklibin
发表于 2009-8-21 11:10:00
呵呵,加了(command "vbaide"),跳出来vba编程对话框,且运行程序还是不行!
狂刀无痕
发表于 2009-8-22 19:12:00
nonsmall发表于2009-4-6 1:08:00static/image/common/back.gif一楼公布了答案具体的部分大家自己研究下可惜卸载的部分依然不完美实在是遗憾
<p>请说说,卸载如何不完美?是vbaide没有关闭么?</p>
不死猫
发表于 2009-8-22 20:14:00
<p>VBAIDE 不需要打开的</p><p>那句话是为了初始化VBAIDE 可以用其他的语句代替.</p><p>关键是在退出CAD的时候</p>
无痕
发表于 2009-8-23 23:22:00
试了一下,看来不剪掉这条狐狸尾巴是挺闹心的。呵呵
NetBee
发表于 2009-8-24 00:14:00
<p>是不是在LSP中可以这样处理呢?</p><p>1、动态生成VBA程序代码</p><p>2、调用运行刚才生成的VBA程序</p><p>3、VBA调用完成后,再将生成的代码全部删除</p><p>只是不知对速度影响上是否过大,但只添加API的声明及简单调用SUB应该没有问题吧?</p>
无痕
发表于 2009-8-24 01:01:00
<p>即便删除生成的代码,退出cad时候还是会跳出提示</p>
liu_kunlun
发表于 2009-8-24 14:09:00
<p>VBA中调用api的例子:</p><p>Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long<br/>Sub sss()<br/> SetCursorPos 100, 200<br/> MsgBox "Hello Word,there is vlisp add", , "vbetest"<br/> SetCursorPos 100, 200<br/>End Sub</p><p>按运行,光标首先移到100, 200,点击对话框后,光标又移到100, 200<br/></p>在autolisp中可用(command "_-vbarun" "sss")调用
页:
1
2
3
4
5
[6]
7
8
9
10