QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
如何在LSP中调用VBA作出的对话框?
9 C  h( o& [# Q2 z3 @/ `$ ~7 VLSP程序在对话框的编写方面依赖于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程序中代码如下:/ {7 `9 d6 J" X, Z; P+ `8 n0 F, X
-------------------
6 ^: l) I* }+ j! q# G" T(defun c:aaa()( {+ D1 o' `+ G
(command "-vbarun" "a"), S: w8 o6 P2 C
)
; _& ^4 C. a& V/ Y(defun c:-aaa()! u8 ^3 t0 e6 H' ^" z8 N6 `
(command "-text" (getstring) "" "" (getstring))
8 C* D3 T0 g7 y) Y)
/ k' S+ H1 p& [0 f( J; c  a: r& v-------------------( x0 t% J! w' I! b2 D' K6 V2 l# }
VBA程序中代码如下:
  i; h3 t4 `8 z-------------------  a7 x  ~$ T3 W
Sub A()
5 q/ [& J5 C' j" Y0 `    UserForm1.Show
* u( m( o/ q; B% WEnd Sub
4 B! `! S* ~, v) @" g-------------------
3 H! @5 ]$ o3 _6 h* T用户窗体名为UserForm1。其中三个文本框由左至右、由上至下分别名为textbox1、textbox2、textbox3,按钮名为CommandButton1。见图
: m2 V& Y! H3 J9 k3 L 1.gif
. g& @" a4 w! O
  g/ h8 L: e7 K6 k) |代码如下:
6 M) |8 p9 V* D: C! P-------------------
! @* |* P9 a. e  u. c- K( X8 p8 pPrivate Sub CommandButton1_Click()8 G9 T: ?5 J4 P4 v; J
    SendKeys "-aaa " & TextBox1.Text & "," & TextBox2.Text & " " & TextBox3.Text & " "5 K& p9 c2 I2 ~7 I/ j7 R; O4 p
    Me.Hide
  O- |& r6 G, C- mEnd Sub4 ]: J/ c3 p4 ?( e& X
-------------------8 y* R$ D. w* ^% j# O
附件为dwg文件2004格式,内嵌VBA程序。
1 t  N& {* H' ?# K4 Q* C- G- ^" B
7 K' W  q' n) ~' i# i6 G* ~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 | 显示全部楼层 来自: 中国辽宁营口
也可以用发送键盘命令的方式传递参数
; D4 Z  n. v4 H4 Q) ^比如LSP程序:
2 D% z  X' O' k' j' b9 v---------------------------------------" M% s+ |. r9 N1 P/ d& \( `( }& Z
(defun c:aaa()
7 F, k! P: t1 \2 F- U$ N$ J(command "-vbarun" "a" "AAA" )
$ i+ \+ _( D9 l7 G3 f! _$ e) y" A)
  P6 `3 _0 O# x6 t. I---------------------------------------, I) C  p& S- W8 a# k+ h
# V: e* i, W+ e( d/ Z
VBA模块代码:
$ \: k% @5 `  f---------------------------------------$ w, E- }6 E3 e8 F) M  n
Sub A()# v, c5 J0 u1 r* U* F  A
    If ThisDrawing.Utility.GetString(0) = "AAA" Then UserForm1.Show
8 E* p; Y4 k: k& G& e7 [4 }End Sub
, m2 O- F( ]/ t% t+ _3 C" A---------------------------------------
1 }" ]6 X. I' B- @
! v3 M. C0 a& e4 h' p另外我想,用读写文本文件的方式也应该可以传递参数。我对LISP了解不多,不知可否使用注册表?如果可以应该也是一种方法。+ J8 {" X0 F: F7 Z+ p6 {
7 F3 E/ i) }/ a
[ 本帖最后由 woaishuijia 于 2008-8-21 08:46 编辑 ]

评分

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

查看全部评分

发表于 2008-8-21 09:26:50 | 显示全部楼层 来自: 中国辽宁营口
把3楼的代码扩充一下,应该算是双向传递吧?
- ~+ _2 r& k, t( a3 _0 a. qlsp程序中代码如下:
  t, L4 E/ _* p  `-------------------5 ~% j/ p3 W0 n9 W+ g, x0 ^
(defun c:aaa()
1 d( o: g# Y4 I(command "-vbarun" "a" "4" "5" "AAAAAAAAAAAAAAAA" )
9 B5 }. V. A8 I4 ~)5 @- z: P7 n) k! U& Z5 g: ~$ ~7 }# }6 Q
(defun c:-aaa()# q4 x: m- a( [/ y
(command "-text" (getstring) "" "" (getstring)). r, i& \  A) ?. _- t
)" n- k# X, E) B% }- U' j! |( V$ u
-------------------
( H$ D! b, P, h$ K+ v9 l1 F3 K9 e) m
7 \1 Q! x! W6 I# `% z' {VBA程序中模块代码如下:) S0 }, `( X. ~( K; B6 @
-------------------
( [0 @7 D7 l$ E9 @7 z! A* ?Sub A()
6 o! W. w, s6 ?    UserForm1.Show# z$ A( \6 I6 e, i. U
    With ThisDrawing.Utility
! l0 y+ F$ G5 r& {$ B' K0 g* W        UserForm1.TextBox1.Text = .GetString(0)
0 ^0 y: Q& A* ~% ?7 ?7 w" m        UserForm1.TextBox2.Text = .GetString(0)
4 ^9 o# ?! ]: m8 t6 N! f$ G% {        UserForm1.TextBox3.Text = .GetString(0)0 l/ Q2 c7 I  ?& _7 [
    End With  Y$ T, M9 e# Q7 L7 D! d5 j6 y
End Sub, L8 L, y9 @* J4 n) U: w
-------------------
3 R4 w7 m! u2 Q( W, A+ z8 z
1 X" C/ `5 |3 F' a% B: O用户窗体代码如下:
/ d7 U# K5 {' g( T' Z1 N. @6 z--------------------* [! Z8 J3 {+ @# F7 V
Private Sub CommandButton1_Click()
: I9 u# g5 Y: y' `! E  }# {3 F) S9 o    SendKeys "-aaa " & TextBox1.Text & "," & TextBox2.Text & " " & TextBox3.Text & " "/ ~, t0 v2 l  b( s! n
    Me.Hide
% K# L& g- P* I1 ZEnd Sub7 c% s$ H0 f6 @6 ?: `
--------------------  S7 U! D2 t! |

& y' c3 y) L( O+ g[ 本帖最后由 woaishuijia 于 2008-8-21 09:37 编辑 ]
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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