宏?
大家好,我正在寻找一些东西,把颜色,线型和线宽的对象按层。这有宏吗?谁能帮我,因为我对Visual Basic一无所知。
非常感谢你 VLISP:
(defun c:test (/ i obj ss)
(vl-load-com)
(setq i -1 *doc (cond (*doc) ((vla-get-ActiveDocument (vlax-get-acad-object)))))
(cond ((ssget "_:L")
(vlax-for obj (setq ss (vla-get-ActiveSelectionSet *doc))
(mapcar
(function (lambda (prop value) (vlax-put-property obj prop value)))
'(Color Linetype Lineweight) (list acByLayer "ByLayer" acLnWtByLayer)))
(vla-delete ss)))
(princ))
我的VBA很差,但是:
Sub 2ByLayer ( )
Dim sSet As AcadSelectionSet
Set sSet = ThisDrawing.SelectionSets.Add("ByLayerSet")
sSet.SelectOnScreen
For i = 0 To sSet.Count
sSet.Item(i).Linetype = "BYLAYER"
sSet.Color = acByLayer
sSet.Lineweight = acLnWtByLayer
Next i
sSet.Delete
End Sub
感谢对VBA的建议。。。 非常感谢李!
现在请原谅我的愚蠢,但我无法让脚本工作。我将代码粘贴到我的Visual LISP编辑器中,对吗?然后我做什么?
再次感谢 有几种方法可以实现:
[列表]
[*]打开VLIDE,File>NewFile,粘贴代码并单击图标加载代码
[/列表]
[列表]
[*]将代码另存为。lsp文件,通过启动套件加载。
[/列表]
[列表]
[*]将代码粘贴到命令行以加载它。
见此处:
http://www.cadtutor.net/forum/showthread.php?t=1390 太好了,李,谢谢你让我开始! 我不得不这么做。。。。。。
Public Sub AByLayer()
Dim i as Integer
Dim sSet As AcadSelectionSet
Set sSet = ThisDrawing.SelectionSets.Add("ByLayerSet")
sSet.SelectOnScreen
For i = 0 To sSet.Count - 1
sSet.Item(i).Linetype = "ByLayer"
sSet.Item(i).color = acByLayer
sSet.Item(i).Lineweight = acLnWtByLayer
Next i
sSet.Delete
End Sub
我必须以字母而不是数字开始程序名称。
我的设置要求声明变量,所以我添加了Dim语句。
从“计数”中去掉一个。
添加项目(i)至颜色和线宽线。 哇-真不敢相信我错过了那些“第(I)项”的陈述!那太草率了。
谢谢你,Dave,你看,我的CAD上没有安装VBA,而且还没有机会安装,所以我所有的VBA代码都只是“理论性的”,通过示例进行了帮助。
李 你做得比我好,我安装了VBA!
嗯,我不知道,你比我呆的时间长得多
好的,我想澄清一下:
[列表]
[*]“Public Sub”是否意味着可以在命令行调用该函数?而仅仅“Sub”意味着它是一个子函数?
[/列表]
[列表]
For循环中使用的[*]符号也需要声明。
[/列表]
[列表]
[*]数字不能用于函数名。
[/列表]
谢谢Dave,非常感谢。
李
页:
[1]
2