mcguirepm 发表于 2022-7-6 17:18:32

从lisp运行VBA程序

我有一个lisp例程,需要调用VBA程序并传递参数。这就是我所拥有的。

(vl-vbarun (strcat "Gptoolbox.BlnEdit(" gron:lastent ")"))

它不会出错,但也不会做任何事情。思想?

ASMI 发表于 2022-7-6 17:36:00

Visual LISP和VBA具有不兼容的数据类型,不能使用LISP参数调用VBA函数。您可以通过自定义词典来组织数据交换,因此这是一种漫长而困难的方法。可以使用一种编程语言Visual LISP或VBA吗?

swestbrook60 发表于 2022-7-6 18:00:48

 
如果发送VBA例程所需的数据量相对较小,则有一种快速解决方法,即使用USERS1到USERS5系统变量。这些是由AutoCAD定义的字符串变量,可通过LISP或VBA使用。
 
在LISP中,您可以执行以下操作:
 
(setvar“USERS1”sometext1)
(setvar“USERS2”sometext2)
(命令“-vbaload”“项目”)
(命令“-vbarun”“BlnEdit”)
(命令“vbaunload”“Project”)
 
然后在VBA中执行以下操作:
 
Dim var1,var2作为字符串
var1=此图纸。GetVariable(“USERS1”)
var2=此图纸。GetVariable(“USERS2”)
 
通过对数据类型的一些操作,您将惊讶于可以来回发送多少信息。希望这有帮助。

ASMI 发表于 2022-7-6 18:04:30

>swestbrook60
 
这家伙似乎想从这个ViasualLISP代码中调用VBA程序:http://www.cadtutor.net/forum/showthread.php?t=27872 . 但是没有必要,因为他可以在VBA中实现同样的功能。
 
P、 USERXN变量的使用是不好的,因为它对任何未经授权的更改都是开放的。字典是数据传输的最佳方式。

swestbrook60 发表于 2022-7-6 18:29:20

 
你在这两个方面都是正确的,但是只要将用户变量视为一个整体,那么用户变量中的数据被破坏的风险是非常小的。它们是由AutoDesk出于这个特殊原因提供的,如果您将数据放在那里,然后立即使用该数据,您将是安全的。
页: [1]
查看完整版本: 从lisp运行VBA程序