是的,这是同一种想法,
For Each MyoEnt In MyObjSS
If TypeOf MyoEnt Is AcadBlockReference Then
Set MyBlockRef = MyoEnt
dblBrefInPt = MyBlockRef.InsertionPoint
dblRotation = MyBlockRef.Rotation
Xaxis = .PolarPoint(OP, dblRotation, 1#)
Yaxis = .PolarPoint(OP, pi / 2 + dblRotation, 1#)
Set NewUCS = ThisDrawing.UserCoordinateSystems.Add(OP, Xaxis, Yaxis, "UCSfromRef")
NewUCS.Origin = dblBrefInPt
ThisDrawing.ActiveUCS = NewUCS
myvaratt = MyBlockRef.GetAttributes
For i = 0 To UBound(myvaratt)
If myvaratt(i).TagString = "INFO_BLOCK_ID" Then
myvaratt(i).TagString = "BLOCK_REF"
myvaratt(i).Alignment = acAlignmentLeft
myvaratt(i).StyleName = "Standard"
myvaratt(i).Invisible = True
myvaratt(i).height = 250#
insertionPnt11() = .TranslateCoordinates(myvaratt(i).InsertionPoint, acWorld, acUCS, 0)
insertionPnt11(0) = insertionPnt11(0) + 1048# '
insertionPnt11(1) = insertionPnt11(1) + 2900
myvaratt(i).InsertionPoint = .TranslateCoordinates(insertionPnt11, acUCS, acWorld, 0)
myvaratt(i).Update
End If
Next
End If
Next
上面的代码只是整体内容的摘录。这是完整的工作点,但我相信我可以瘦下来,也改善它。我很感激你对它的意见和任何提示,你可以给我改善它,因为我仍然非常学习。我可以马上发布,但我会这样做,希望你有时间看看。
干杯
Col。 嘿,上校,
我很高兴看到我不是唯一一个这么晚才起床的人,我实际上在用Excel做一些编程;这是我一段时间以来一直想做的事情,直到现在才有机会看到它。
如果你的代码只是一个开始,那么我会说你做得很好!
好吧,老实说,我以前用过很多属性,但我从来没有真正想过要用编程的方式处理它们;因此,如果不尝试代码,我无法提出任何好的建议;虽然如果您有特定的问题,我可以帮助您调试。
你明白我为什么喜欢typeof方法吗?
同样,使用dxf组过滤器没有错,但是,您需要知道什么数字代表什么实体类型等。
例如,如果使用此方法声明变量
MyBlockRef作为AcadBlockReference
您已经有了您的实体类型(AcadBlockReference);所以我们不需要去寻找什么dxf代码=什么实体类型;这对我来说很有意义。
此外,您还为Acadentity声明了一个变量
暗肌如无齿
现在,您已经指示VBA遍历sset中的每个实体并找到实体类型blockreference,您也可以这样做
dblBrefInPt=MyOINT。插入点,等等
因此,在您筛选的每种类型的ent之后,默认情况下,变量myoint应该等于该实体类型,无需显式设置引用,例如set MyBlockRef=myoint
这个集合MyBlockRef=myoint没有任何错误;尤其是如果它能帮助你更好地遵循代码,但我认为这是没有必要的。
如果变量myoint被声明为Acadentity,那么它应该选择您指示它在循环中查找的实体类型的所有方法和属性。
我使用相同的方法从一次遍历一个控件上的所有控件类型;这很酷。
因此,例如,如果您想查找表单上的所有列表框,可以应用相同的方法。您可能需要将变量声明为对象,而不是Acadentity,因为控件不是Acadentity,所以它看起来像这样:
Dim MyObj as Object
For Each MyoObj In Userform1 (or whatever you name the form)
If TypeOf MyoObj Is listbox Then
listbox.width = 25
End if
Next MyoObj
干得好,上校!
继续
毫升 上校,
另外,不要引用我的话,试试看;
如果您声明了变量:
将MyBlockRef设置为AcadBlockReference
那你就可以逍遥法外了
如果MyoEnt的类型为AcadBlockReference,则
dblBrefInPt=MyBlockRef。插入点
不需要这样做:设置MyBlockRef=myoint
毫升 毫升,
非常感谢您的提示,正如我所说,我不擅长VBA,只会学习,但我确实理解(希望)您的提示,并将尝试将它们植入我的代码中,以帮助流水线。
非常感谢你。
Col公司 没问题Col
看起来你有了一个很好的开始。
还有很多东西要学
如果你还需要帮助,就喊一声
毫升 Col公司
如果你还不知道的话,还有一个很好的提示。
单击view,Locals
然后,当局部变量窗口打开时,单击F8,这将开始在局部变量窗口中处理代码。
当您不断点击F8时,它将完成代码的每一步,您将准确地看到它在哪里遇到问题,这样您就知道该在哪里解决问题。
我也学到了很多,仅仅是看着代码(局部)通过循环等。这真的帮助我理解了代码是如何处理的,因此,我认为这也帮助你更好地编码。
在过去的很多时候,我会在论坛上问一个问题,当我需要做的只是使用本地调试。
在VBA中编码时,它可能是您最好的朋友
毫升 毫升,
谢谢你,。不,我没有听说过当地的窗户。我会看看的。
干杯
col公司 凉的
那将是你最好的新朋友Col!
毫升 大家好,我是论坛新手
选择集上有趣的帖子。。。有人记得SSX吗。lsp?
;;; Larry Knott版本2.0 1988年7月18日
;;; Carl Bethea和Jan S.Yoder 3.0版
;;; 对(ssx)的增强。
;;; 1990年3月15日
我们正在使用AutoCAD 2005移动到2008月末。。。。SSX仍然有效。。。
问候约翰
SSX。LSP 嗨,约翰
我不是一个真正的LISP程序员,但我确实在这里和那里使用了一点LISP。
对于在命令行创建快速sset,ssget总是一个非常好的工具。
下面是一个很酷的例子,我将ACAD与LISP结合在一起
如果从VBA运行此宏,它将提示您输入sset名称。
我之所以创建它,是因为我有时喜欢做与编程任务无关的SSET,而且我知道我不会记住LISP语法。
毫升
Sub CreateSSinCAD()
Dim SsetName As String
SsetName = InputBox("Enter Selection Set name and select your objects" & vbCrLf & vbCrLf & _
"Use the sset transparently with a modify command" & vbCrLf & "ie cp (enter) !ssetname")
If SsetName > "" Then
ThisDrawing.SendCommand "(setq " & (SsetName) & " (" & "ssget))" & vbCr
End If
End Sub
页:
1
[2]