从ACAD得到VBA的一个变量
嗨,我在这里尝试一些东西;从理论上讲,这应该有效,但我认为我做错了什么
使用LISP(在菜单宏中)我设置了我的变量
(setq imgname (getfiled "Select Image File" (getvar "dwgprefix") "tif" 8))
现在,在VBA中我想使用它。
这可能吗? 如果是这样,我将如何编写语法?
这是我的尝试
Imgname = ThisDrawing.GetVariable("!Imgname")
在ACAD中,如果我只是这样做!命令行中的Imgname,它返回我分配给变量的正确文件名,
但VBA没有运气
谢谢!
马克
**** Hidden Message ***** 这里有一个解决方案:
这应该也可以。
十二月..
这很酷,但是我得到了一个未定义的用户定义类型。
我尝试设置对Visual Lisp Active X模块的引用,但没有帮助
我错过了什么?
标记 AutoCAD什么版本?
提示...虚拟应用. ##...
/猜
MP
R16.2
所以,你是说:
Dim vlax As New vlax
Set New vlax to vl.application. 16.2 ?
马克 差一点。
在vlax.cls定义(我没有)中,有一个对vl.application的引用。确保它引用“vl.application.16”。
PS:可能不是问题,我从你的描述中盲目射击。
AutoCAD
和 VBA 中的 AutoLISP 解释器从未设计用于通信。在更高版本的 AutoLISP(读取 VisualLISP)中,您可以访问系统上的 ActiveX 组件,但您仍然无法在两个环境之间传递变量(很容易)。您可以按照“Matt W”的建议执行操作,并将生成的变量“停放”在 AutoCAD 内部的“USERX”系统中,以增强变量,但它们无法容纳复杂类型。
你可以沿着丑陋的(IMO)VLAX类路线走下去,这是几年前开发的,通过挂接到AutoCAD VisualLisp ActiveX进程并自动化它,但我强烈建议不要这样做。
必须同意。我会重新审视这个解决方案——是什么在“强制”vb lisp交换? 嘿,伙计们,已经到了。
我拿到了整个long VLAX类模块
我不太喜欢;仅仅给VBA传递一个糟糕的变量似乎就太多了。
将VLAX类模块插入到项目中后,您可以这样做:
Sub VBAToLisp()
Dim Obj As VLAX
Dim strText As String
Set Obj = New VLAX
strText = "Hello!"
Obj.SetLispSymbol "Test", strText
Debug.Print strText
然后在ACAD,键入!测试
它应该返回Hello!
如果是这样,那么变量测试刚刚从VBA传递到ACAD或LISP,这是非常酷的
-
在另一方面;我正在尝试读入一个变量,但是目前为止还没有成功
下面是我所知道的:
Dim Obj As VLAX
Dim strText As String
strText = "M" 'M was set to Mark in ACAD (setq M "Mark")
Set Obj = New VLAX
Obj.GetLispSymbol , strText
Debug.Print strText
看看这个:
实际上,我更感兴趣的是让这种方法发挥作用,但仍然没有运气。
Sub VBAToLisp()
Dim VL As Object
Dim strText As String
Set VL = CreateObject("VL.Application.16")
strText = "Hello!"
VL.SetLispSymbol "Test", strText
Debug.Print strText
End Sub
我没有VL的方法。Application对象,所以我甚至不知道GetLispSymbol和SetLispSymbol方法在VLISP中是否可用。错误是说对象不支持这个方法,所以我想这就是我的答案。
有人吗?有什么想法吗?谢谢马克
页:
[1]
2