QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
如何在LSP中调用VBA作出的对话框?
7 ]* c- n9 R; A# P; CLSP程序在对话框的编写方面依赖于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程序中代码如下:6 R$ b" k; m4 [" k
-------------------% e! B. b% f! Z
(defun c:aaa()/ A7 D; {; k! K! w
(command "-vbarun" "a")
3 s- K3 o  J& P! O1 S( Q)
/ F7 W( S9 m+ @% }- w, Y(defun c:-aaa()
0 X7 q: X$ j* `) A(command "-text" (getstring) "" "" (getstring)). O& `9 g+ n6 A* Z' R9 `! s' n, k0 z
)
0 J1 G" d  }0 [-------------------
+ h) `3 v$ P2 f  ]4 D( c* u* zVBA程序中代码如下:
- J5 [3 b3 a7 w2 I+ r-------------------
2 |  ?7 C4 v# _/ b  L, E4 q2 DSub A()
4 h7 y) }# ?2 c* R7 j: Q: S    UserForm1.Show
* }7 o0 f' I( V3 j9 kEnd Sub
- x+ f+ O) D3 }0 U. F1 p2 a-------------------
! n7 y+ l% s( t& j- H+ B  @% D用户窗体名为UserForm1。其中三个文本框由左至右、由上至下分别名为textbox1、textbox2、textbox3,按钮名为CommandButton1。见图
! {; V, ?/ {* ?0 S, I 1.gif 5 I6 t% _6 T0 [- H8 Y3 B9 `
5 s6 u8 y, c7 }0 l
代码如下:
, ~# Z0 z5 f3 }0 d-------------------1 R5 E1 R" w3 G1 b  q) ~$ g! x  y: R
Private Sub CommandButton1_Click()
* b) c! L6 P# Q- u* ]* y    SendKeys "-aaa " & TextBox1.Text & "," & TextBox2.Text & " " & TextBox3.Text & " "% u0 [+ l/ G" o" Z. r' n
    Me.Hide# K+ I. |  c, ~$ m" e
End Sub1 P5 d1 O9 m4 K1 ?6 C1 C
-------------------
! M# `; c6 l" e附件为dwg文件2004格式,内嵌VBA程序。
4 m) w7 F; s6 e/ v2 ~4 Y/ _& R) K
[ 本帖最后由 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 | 显示全部楼层 来自: 中国辽宁营口
也可以用发送键盘命令的方式传递参数
+ `; c( Q/ c* g/ H! |& H0 r比如LSP程序:' N8 k5 ~3 a9 h3 p6 {# i! k
---------------------------------------& V+ V. n3 ?/ X2 b, S, @& q8 x
(defun c:aaa()2 u' Q* ^7 L5 I5 F/ _" ]$ W
(command "-vbarun" "a" "AAA" )
( [) W( W1 f! s4 k" v6 q5 g)9 A+ c- s  m7 y# |" ?
---------------------------------------6 g' o7 O3 n/ P1 ^, D) {; A1 R
- t9 g! o# M' y5 ~$ ]
VBA模块代码:
5 B* h: h- q/ L& u---------------------------------------
& b' W5 a/ o" n6 y8 w  K& XSub A()" b9 z" S1 \$ M5 z' M! e4 E
    If ThisDrawing.Utility.GetString(0) = "AAA" Then UserForm1.Show
/ J# I7 p4 b0 V* \  OEnd Sub
) J$ M: M! Z: l2 b* b2 q---------------------------------------' u1 k: L. s- w

2 J% X  j! X3 v& Z& h# G8 r另外我想,用读写文本文件的方式也应该可以传递参数。我对LISP了解不多,不知可否使用注册表?如果可以应该也是一种方法。
& k7 \" E3 D) r* u7 @4 F& S6 d* \" M. B, s$ z) y- u9 P. z
[ 本帖最后由 woaishuijia 于 2008-8-21 08:46 编辑 ]

评分

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

查看全部评分

发表于 2008-8-21 09:26:50 | 显示全部楼层 来自: 中国辽宁营口
把3楼的代码扩充一下,应该算是双向传递吧?
) J, J1 f3 N- P5 ~lsp程序中代码如下:$ e: [- B/ e; |# l8 F
-------------------
% ]6 r0 L2 T2 C! b6 G(defun c:aaa()
; n) s/ m. t( p(command "-vbarun" "a" "4" "5" "AAAAAAAAAAAAAAAA" )" u9 ]% K+ G% w4 T, O9 }6 r
)) y; T3 b8 \& L# j! ~7 Z& X; x
(defun c:-aaa()" j3 z, t# s3 Y7 `& l$ c1 o
(command "-text" (getstring) "" "" (getstring))
: j% z/ f. c* `$ z3 X' E)  m5 ?/ ^* x5 ~+ `8 k" k
-------------------
* n7 d' m. O# H" r  a+ f0 d5 F5 `; m! R2 c: a& l
VBA程序中模块代码如下:
9 I/ J- e* r) o-------------------
$ n: n7 F2 M7 ^  M+ s$ HSub A()+ r. d7 i2 ~% O
    UserForm1.Show
# l* j  L3 ~, |* `/ m& R9 y* `    With ThisDrawing.Utility
# o; ^  x8 Q4 `        UserForm1.TextBox1.Text = .GetString(0)
, W* f+ n, w. h2 O9 G  ?        UserForm1.TextBox2.Text = .GetString(0)! z! h, u  X- J7 \- G' W
        UserForm1.TextBox3.Text = .GetString(0)
4 H+ z$ o$ I/ M+ A+ i    End With
/ D8 h& L' n, L1 LEnd Sub& A( `- L- ?8 J. A9 w1 }
-------------------. z! w4 N* u1 _1 w# l1 p
, T  S# c  U" j! R9 U9 o& C% q
用户窗体代码如下:
2 M( Z7 g( {- e- p; i4 U--------------------
( r! U4 T* r6 s. v% [9 C9 N2 G. LPrivate Sub CommandButton1_Click()
% W" s, b1 g' H9 o" R8 S/ }( I    SendKeys "-aaa " & TextBox1.Text & "," & TextBox2.Text & " " & TextBox3.Text & " "
' T5 i$ E& Y" {- s: q0 `. |0 B8 |8 N    Me.Hide
* O- y: p! n3 A# qEnd Sub
' f& l3 p9 ~. X$ j0 R4 ~( r* w+ d+ b--------------------+ a) N5 N$ k6 R" ~* ]( q
0 z7 z  i* }- L& ]1 k8 w# }
[ 本帖最后由 woaishuijia 于 2008-8-21 09:37 编辑 ]
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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