明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1766|回复: 10

如何用VBA向CAD发送(entget (car (entsel)) '("*"))命令?

[复制链接]
发表于 2018-4-10 16:54:52 | 显示全部楼层 |阅读模式
本帖最后由 dong20030432 于 2018-4-10 16:55 编辑

用下面的语句提示实时错误13,类型不匹配
acadapp.ActiveDocument.SendCommand "(entget (car (entsel)) '(" * ")) "
请帮忙看下正确方法是什么,谢谢了!发送下面这句可以正常使用,上面的为什么不行呢?
acadapp.ActiveDocument.SendCommand "(entget (car (entsel))) "

发表于 2018-4-10 19:02:29 | 显示全部楼层
"(entget (car (entsel)) '(" * ")) "
你这是让两个字符串相乘!
"(entget (car (entsel)) '("" * "")) "
 楼主| 发表于 2018-4-11 08:47:46 | 显示全部楼层
本帖最后由 dong20030432 于 2018-4-11 08:52 编辑
zzyong00 发表于 2018-4-10 19:02
"(entget (car (entsel)) '(" * ")) "
你这是让两个字符串相乘!
"(entget (car (entsel)) '("" * "")) "

我在命令行直接输入(entget (car (entsel)) '("*")),可以得到对象的扩展数据((-1 . <图元名: 7ee89360>) (0 . "INSERT") (330 . <图元名: 7ee6ecf8>)
(5 . "164") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 .
"AcDbBlockReference") (2 . "*U1") (10 415.0 5.0 0.0) (41 . 1.0) (42 . 1.0) (43
. 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0) (-3
("INTECAD_HUST_CAD_CENTER" (1000 . "TITLE") (1002 . "{") (1000 . "type") (1000
. "heada") (1000 . "name") (1000 . "headd") (1000 . "length") (1040 . 180.0)
(1000 . "height") (1040 . 56.0) (1000 . "rightbottompoint") (1011 415.0 5.0
0.0) (1000 . "ceset") (1070 . 0) (1000 . "maintf") (1070 . 1) (1002 . "}")
(1000 . "OBJECT") (1002 . "{") (1000 . "OBJECTID") (1000 . "TITLE") (1002 .
"}") (1000 . "INTECAD") (1002 . "{") (1000 . "VERSION") (1000 . "V60") (1002 .
"}") (1000 . "TITDATA") (1002 . "{") (1000 . "prop1") (1005 . "0") (1000 .
"prop2") (1005 . "0") (1000 . "name") (1005 . "0") (1000 . "code") (1005 . "0")
(1000 . "material") (1005 . "0") (1000 . "totalpaper") (1005 . "0") (1000 .
"no") (1005 . "0") (1000 . "weight") (1005 . "0") (1000 . "scale") (1005 .
"1B5") (1000 . "prop3") (1005 . "0") (1000 . "prop10") (1005 . "0") (1000 .
"prop13") (1005 . "0") (1000 . "prop18") (1005 . "0") (1000 . "prop27") (1005 .
"0") (1000 . "prop4") (1005 . "0") (1000 . "prop12") (1005 . "0") (1000 .
"prop14") (1005 . "0") (1000 . "prop19") (1005 . "0") (1000 . "prop26") (1005 .
"0") (1000 . "prop6") (1005 . "0") (1000 . "prop9") (1005 . "0") (1000 .
"prop17") (1005 . "0") (1000 . "prop22") (1005 . "0") (1000 . "prop25") (1005 .
"0") (1000 . "prop5") (1005 . "0") (1000 . "prop8") (1005 . "0") (1000 .
"prop16") (1005 . "0") (1000 . "prop21") (1005 . "0") (1000 . "prop23") (1005 .
"0") (1000 . "prop7") (1005 . "0") (1000 . "prop11") (1005 . "0") (1000 .
"prop15") (1005 . "0") (1000 . "prop20") (1005 . "0") (1000 . "prop24") (1005 .
"0") (1002 . "}"))))

而在命令行输入(entget (car (entsel)))只能得到下面的信息:
((-1 . <图元名: 7ee89360>) (0 . "INSERT") (330 . <图元名: 7ee6ecf8>)
(5 . "164") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 .
"AcDbBlockReference") (2 . "*U1") (10 415.0 5.0 0.0) (41 . 1.0) (42 . 1.0) (43
. 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0))

我现在是想用VB直接发送第一个命令,让扩展数据在命令行显示出来,但语句好像有错误,不能成功!
那个是英文单引号,可能不是相乘,应该是表示*不是通配符吧?
发表于 2018-4-11 14:24:26 | 显示全部楼层
改为如下即可:
acadapp.ActiveDocument.SendCommand "(entget (car (entsel)) '(" & Chr(34) & " * " & Chr(34) & ")) "
 楼主| 发表于 2018-4-11 16:47:08 | 显示全部楼层
yshf 发表于 2018-4-11 14:24
改为如下即可:
acadapp.ActiveDocument.SendCommand "(entget (car (entsel)) '(" & Chr(34) & " * " & C ...

还是不行呀,这样改了以后查询不到扩展数据了,跟(entget (car (entsel)))的结果一样了,请再帮忙看下,谢谢了!
发表于 2018-4-11 17:49:30 | 显示全部楼层
跟(entget (car (entsel)))的结果一样了

说明你选取那个图元没有扩展数据,另选取一个有扩展数据的试一试。
 楼主| 发表于 2018-4-12 09:51:34 | 显示全部楼层
yshf 发表于 2018-4-11 17:49
说明你选取那个图元没有扩展数据,另选取一个有扩展数据的试一试。

我选择的就是有扩展数据的图元呀,同一个图元,在命令行输入(entget (car (entsel)) '("*"))就可以得到扩展数据,用你改的那个代码没获取到。
发表于 2018-4-12 11:21:02 | 显示全部楼层
不好意思,没有细看,改为如下即可(*前后各有一空格,需要删除):
acadapp.ActiveDocument.SendCommand "(entget (car (entsel)) '(" & Chr(34) & "*" & Chr(34) & ")) "
 楼主| 发表于 2018-4-12 12:21:42 | 显示全部楼层
yshf 发表于 2018-4-12 11:21
不好意思,没有细看,改为如下即可(*前后各有一空格,需要删除):
acadapp.ActiveDocument.SendCommand " ...

感谢高手!!!确实可以了。
 楼主| 发表于 2018-4-12 12:23:50 | 显示全部楼层
zzyong00 发表于 2018-4-10 19:02
"(entget (car (entsel)) '(" * ")) "
你这是让两个字符串相乘!
"(entget (car (entsel)) '("" * "")) "

非常感谢!你的代码只是*前后各多了一个空格,删除后就能用了。

点评

哪是复制了你的代码  发表于 2018-4-12 17:25
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 07:45 , Processed in 0.167374 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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