乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 201|回复: 12

从ACAD得到VBA的一个变量

[复制链接]

26

主题

275

帖子

6

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
379
发表于 2007-12-14 14:48:24 | 显示全部楼层 |阅读模式
嗨,
我在这里尝试一些东西;从理论上讲,这应该有效,但我认为我做错了什么
使用LISP(在菜单宏中)我设置了我的变量
  1. (setq imgname (getfiled "Select Image File" (getvar "dwgprefix") "tif" 8))

现在,在VBA中我想使用它。
这可能吗? 如果是这样,我将如何编写语法?
这是我的尝试
  1. Imgname = ThisDrawing.GetVariable("!Imgname")

在ACAD中,如果我只是这样做!命令行中的Imgname,它返回我分配给变量的正确文件名,
但VBA没有运气
谢谢!
马克

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

3

主题

88

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2007-12-14 14:53:51 | 显示全部楼层
这里有一个解决方案:
回复

使用道具 举报

3

主题

88

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2007-12-14 14:55:36 | 显示全部楼层
这应该也可以。
回复

使用道具 举报

3

主题

88

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2007-12-14 16:15:41 | 显示全部楼层

十二月..
这很酷,但是我得到了一个未定义的用户定义类型。
我尝试设置对Visual Lisp Active X模块的引用,但没有帮助
我错过了什么?
标记
回复

使用道具 举报

3

主题

88

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2007-12-14 16:33:20 | 显示全部楼层
AutoCAD什么版本?
提示...虚拟应用. ##...
/猜
回复

使用道具 举报

3

主题

88

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2007-12-14 16:40:52 | 显示全部楼层

MP
R16.2
所以,你是说:
Dim vlax As New vlax
Set New vlax to vl.application. 16.2 ?
马克
回复

使用道具 举报

3

主题

88

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2007-12-14 16:43:22 | 显示全部楼层
差一点。
在vlax.cls定义(我没有)中,有一个对vl.application的引用。确保它引用“vl.application.16”。
PS:可能不是问题,我从你的描述中盲目射击。
回复

使用道具 举报

3

主题

88

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2007-12-14 17:00:43 | 显示全部楼层

AutoCAD
和 VBA 中的 AutoLISP 解释器从未设计用于通信。在更高版本的 AutoLISP(读取 VisualLISP)中,您可以访问系统上的 ActiveX 组件,但您仍然无法在两个环境之间传递变量(很容易)。您可以按照“Matt W”的建议执行操作,并将生成的变量“停放”在 AutoCAD 内部的“USERX”系统中,以增强变量,但它们无法容纳复杂类型。
你可以沿着丑陋的(IMO)VLAX类路线走下去,这是几年前开发的,通过挂接到AutoCAD VisualLisp ActiveX进程并自动化它,但我强烈建议不要这样做。
回复

使用道具 举报

3

主题

88

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2007-12-14 18:05:23 | 显示全部楼层

必须同意。我会重新审视这个解决方案——是什么在“强制”vb lisp交换?
回复

使用道具 举报

3

主题

88

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2007-12-14 18:28:49 | 显示全部楼层
嘿,伙计们,已经到了。
我拿到了整个long VLAX类模块
我不太喜欢;仅仅给VBA传递一个糟糕的变量似乎就太多了。
将VLAX类模块插入到项目中后,您可以这样做:
  1. Sub VBAToLisp()
  2. Dim Obj As VLAX
  3. Dim strText As String
  4. Set Obj = New VLAX
  5. strText = "Hello!"
  6. Obj.SetLispSymbol "Test", strText
  7. Debug.Print strText

然后在ACAD,键入!测试
它应该返回Hello!
如果是这样,那么变量测试刚刚从VBA传递到ACAD或LISP,这是非常酷的
-
在另一方面;我正在尝试读入一个变量,但是目前为止还没有成功
下面是我所知道的:
  1. Dim Obj As VLAX
  2. Dim strText As String
  3. strText = "M"   'M was set to Mark in ACAD (setq M "Mark")
  4. Set Obj = New VLAX
  5. Obj.GetLispSymbol , strText  
  6. Debug.Print strText

看看这个:
实际上,我更感兴趣的是让这种方法发挥作用,但仍然没有运气。
  1. Sub VBAToLisp()
  2. Dim VL As Object
  3. Dim strText As String
  4. Set VL = CreateObject("VL.Application.16")
  5. strText = "Hello!"
  6. VL.SetLispSymbol "Test", strText
  7. Debug.Print strText
  8. End Sub

我没有VL的方法。Application对象,所以我甚至不知道GetLispSymbol和SetLispSymbol方法在VLISP中是否可用。错误是说对象不支持这个方法,所以我想这就是我的答案。
有人吗?有什么想法吗?谢谢马克
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-5 13:01 , Processed in 0.353652 second(s), 73 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表