QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 3729|回复: 5
收起左侧

[讨论] 如何在LSP中调用VBA作出的对话框?

[复制链接]
发表于 2008-8-19 08:53:14 | 显示全部楼层 |阅读模式 来自: 中国辽宁鞍山

马上注册,结识高手,享用更多资源,轻松玩转三维网社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
如何在LSP中调用VBA作出的对话框?% U$ w! Y& J, h- a4 z8 u, I
LSP程序在对话框的编写方面依赖于DCL语言, 非常繁琐且不方便, 不如VBA来的快——所见即所得, 能不能在LSP中将VBA编辑好的对话框调用, 并返回每个控件的参数呢?
发表于 2008-8-20 08:34:26 | 显示全部楼层 来自: 中国浙江宁波
lisp调用VBA的对话框容易,VBA中创建sub模块,模块中包含对对话框的调用,然后用lisp函数调用vba的sub既可,但返回参数就困难了,如果可以这样就可以用lisp和VBA联合开发了!

评分

参与人数 1三维币 +3 收起 理由
2005llnn + 3 技术讨论

查看全部评分

发表于 2008-8-20 11:20:33 | 显示全部楼层 来自: 中国辽宁营口

这样算不算?

lsp程序中代码如下:* i8 v) r' |5 l  D/ w! D
-------------------
' b) o- T+ j3 S* u2 ^3 |4 W/ l! Q(defun c:aaa()4 X5 ]( w# m4 ], ]( l# t4 l  B
(command "-vbarun" "a")7 j; z9 {, K. k& E' E
)
. m+ K$ E% @, J8 g(defun c:-aaa()
7 L" j3 J- \* a+ Q* H( ?% n& r(command "-text" (getstring) "" "" (getstring))
, B4 O, _3 ^" \)) z3 Q! F: E9 E. I3 |; ]
-------------------
: j9 L. h5 r+ D' \$ Z0 kVBA程序中代码如下:/ D* U' l4 Q: m6 h4 ?. X1 ^  X
-------------------
  V1 \2 B; q: ^# D2 Z; @1 zSub A()
# S9 g' D9 C( q    UserForm1.Show7 f* n, l3 [/ k& ^- J
End Sub
! X) T+ \+ h7 ~; G+ v-------------------9 Y- g5 j% {  m  @0 u$ f# q
用户窗体名为UserForm1。其中三个文本框由左至右、由上至下分别名为textbox1、textbox2、textbox3,按钮名为CommandButton1。见图
7 s, [( u' q5 k, G: z! Z 1.gif 1 u& O8 h( u+ g! b! K1 o/ p0 F, M
$ K. ], X& N: H% [4 @
代码如下:
& z5 b" t2 B  S+ l; t+ O9 [( b-------------------& M' Q9 ?2 x& t* z; g0 D% v
Private Sub CommandButton1_Click()9 [% Q9 c, m/ }6 m7 V: _* K
    SendKeys "-aaa " & TextBox1.Text & "," & TextBox2.Text & " " & TextBox3.Text & " ", [9 G$ k7 u' x: x- Y. h- ]
    Me.Hide
4 F8 q% ~" h# f6 g+ k, z( w" [8 C' nEnd Sub
9 n2 C" M; t: N) g. Y% [' `% Q-------------------7 \9 W: p7 k" I! Y( ^& v" Z
附件为dwg文件2004格式,内嵌VBA程序。% L! y2 @6 h6 C- _! }

, N1 ^3 h' _0 |[ 本帖最后由 woaishuijia 于 2008-8-20 11:34 编辑 ]

Drawing1.dwg

74.12 KB, 下载次数: 11

评分

参与人数 1三维币 +5 收起 理由
2005llnn + 5 技术讨论

查看全部评分

发表于 2008-8-21 08:08:16 | 显示全部楼层 来自: 中国浙江宁波
反过来有办法吗?例如lisp函数去控制窗体控件的动作,反向可以的话意义就大了!
发表于 2008-8-21 08:35:36 | 显示全部楼层 来自: 中国辽宁营口
也可以用发送键盘命令的方式传递参数( Z0 y' ?, a+ [0 |$ U; \1 Y' ]
比如LSP程序:) \- y* ?4 r8 X
---------------------------------------
4 b: d% t. o  p( K2 c. `' p(defun c:aaa()
: b4 o# u2 j2 k. }3 J7 y(command "-vbarun" "a" "AAA" )
- n4 W+ i3 L+ j9 V)3 h1 v. z9 o) Q) t, c8 E5 U/ L9 j
---------------------------------------, B: E) l7 d  p3 Q+ O' Q7 y! D0 d
  ]5 g3 {, x" I; h% M5 G, W
VBA模块代码:
: i% i( D  r/ r6 b9 O! }---------------------------------------
6 ~5 ~+ z, w& q* r) ?! ^Sub A()" D% ?% @5 v1 P% z) C  `- v
    If ThisDrawing.Utility.GetString(0) = "AAA" Then UserForm1.Show3 F( b0 p$ u7 C1 k) I/ ~, r
End Sub3 r  }" N3 r- \: n% t. a7 c% H
---------------------------------------. q+ ~7 ?; P2 B8 G6 ]

3 P5 Y# c2 r! j/ V' t另外我想,用读写文本文件的方式也应该可以传递参数。我对LISP了解不多,不知可否使用注册表?如果可以应该也是一种方法。( K0 g3 O& @; V1 I+ k
  b# k5 T& F9 @! o7 @( N$ _
[ 本帖最后由 woaishuijia 于 2008-8-21 08:46 编辑 ]

评分

参与人数 1三维币 +3 收起 理由
2005llnn + 3 技术讨论

查看全部评分

发表于 2008-8-21 09:26:50 | 显示全部楼层 来自: 中国辽宁营口
把3楼的代码扩充一下,应该算是双向传递吧?
$ T3 W5 H" n6 U$ `lsp程序中代码如下:
$ A" F/ ?, I2 l, c+ ]7 y8 R-------------------# s" `4 |2 c/ o& G
(defun c:aaa()
; m1 L4 A% h' K! v7 ^6 ]* q0 f(command "-vbarun" "a" "4" "5" "AAAAAAAAAAAAAAAA" )# t/ _. R, J. y
)$ b. h; ^# J0 ~9 L1 s# d
(defun c:-aaa()$ h! J/ K# F! o/ I( U3 p1 R
(command "-text" (getstring) "" "" (getstring)): z$ v5 _8 \# M: E: K
)
0 n$ _8 Y9 g6 Z8 J7 A6 A3 E-------------------0 [0 \0 N1 }, g& R, k9 O

. ?- ~( f4 }& o4 Q. f4 y( lVBA程序中模块代码如下:
5 V$ O* E# i5 D+ N. P) R-------------------* E6 B' f0 S4 \' ^$ y
Sub A()
( ?, Q( `; _" {) m/ e    UserForm1.Show3 |5 q& g. `% ~6 k. g2 x% E( Y: N
    With ThisDrawing.Utility  K; p* F1 f* ~% K" ~
        UserForm1.TextBox1.Text = .GetString(0)/ G+ l. }& b# {" F3 t& b
        UserForm1.TextBox2.Text = .GetString(0)9 L9 z( m/ M# s) C, S
        UserForm1.TextBox3.Text = .GetString(0)
. _/ F- J0 p9 V. h9 e! ~7 u# B    End With
1 k- s7 e# Z# d5 p  [1 EEnd Sub8 {. @: |( V" O
-------------------$ }. V3 H8 _- v& u5 r7 |# z
. E' m* a9 Z2 A' J' e6 M: N
用户窗体代码如下:
* b+ `. J3 \" c7 w; \3 q--------------------7 S+ G7 Q  O3 e, J$ j  P, f5 l
Private Sub CommandButton1_Click()
6 y7 [8 q2 c, J" N, U4 D+ _; m    SendKeys "-aaa " & TextBox1.Text & "," & TextBox2.Text & " " & TextBox3.Text & " "
7 Y) I& Y& H+ k( _0 m* ]3 R8 p    Me.Hide1 m5 W' g/ z' C
End Sub- E7 o8 L) y9 ~" G0 a
--------------------
9 f$ P# g. d. n2 ?4 |0 C. m
" \0 R9 l. Q  I- U7 A7 U" y" l[ 本帖最后由 woaishuijia 于 2008-8-21 09:37 编辑 ]
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


Licensed Copyright © 2016-2020 http://www.3dportal.cn/ All Rights Reserved 京 ICP备13008828号

小黑屋|手机版|Archiver|三维网 ( 京ICP备2023026364号-1 )

快速回复 返回顶部 返回列表