通过speci迭代的VBA代码
我简直不敢相信我已经花了这么多时间试图找到这样一个简单问题的解决方案——我希望我即将发布的代码能够自我解释——我正在尝试迭代VBA中的块引用集合,以便我可以处理一组代码(代码与此无关,因为我已经知道如何完成这部分)这是我试图使用的简单代码,它甚至不会启动循环,所以我一定是定义错了什么
请解释我不理解的部分
(都是模型空间,没有布局空间)
我希望当人们回复时,这个网站会给我发电子邮件。。。我以前从未在这里发布过,我不知道这是怎么回事
Sub PW()
Dim blkEndcap As AcadBlockReference
' iterate thru a list of blocks named "fixture_block" and also have ScaleX set to 15 and ScaleY set to 5
For Each blkEndcap In ThisDrawing.Blocks
If blkEndcap.Name = "fixture_block" And blkEndcap.ScaleX = 15 And blkEndcap.ScaleY = 5 Then
debug.print "found one"
End If
Next
End Sub
我可能要等至少24小时才能得到一个有用的回复,不是吗。。。该死-我今晚就想把这件事做完 使用VBA已经有一段时间了,但请尝试以下方法:
Dim AENT As AcadEntity
Dim blkEndcap As AcadBlockReference
For Each AENT In ThisDrawing.ModelSpace
If TypeOf AENT Is AcadBlockReference Then
Set blkEndcap = AENT
If blkEndcap.Name = "fixture_block" And And blkEndcap.ScaleX = 15.0 And blkEndcap.ScaleY = 5.0Then
debug.print "found one"
End If
End If
Next AENT 但是,我应该提到,如果所讨论的块引用是动态块,那么您必须使用
AcadBlockR公司参考。E有效的我 这有助于。。。但我似乎仍然无法引用比例部分-下面是我如何分解它的
Sub pw3()
Dim AENT As AcadEntity
Dim blkEndcap As AcadBlockReference
For Each AENT In ThisDrawing.ModelSpace
If TypeOf AENT Is AcadBlockReference Then
Set blkEndcap = AENT
If blkEndcap.Name = "fixture_block" Then
If blkEndcap.ScaleX = 15# Then
If blkEndcap.ScaleY = 5# Then
Debug.Print "found one"
End If
End If
End If
End If
Next AENT
End Sub
非常感谢你至少给了我一些继续下去的机会 尝试:
如果blkEndcap。XScaleFactor=15#然后 天哪,谢谢你-真管用
当试图用谷歌搜索这样的东西时,文档很糟糕
谢谢谢谢谢谢谢谢 不客气。我很高兴你能站起来跑步。
AutoCAD过去提供了相当好的VBA参考。我认为它是在Autodesk计划取消VBA自定义选项时删除的。在Autodesk上四处查看。com,它可能仍然可以下载。 哦,我知道他们从默认安装中删除了它,因为它可以像任何其他VBA代码一样被滥用
这让我想到了另一个问题,由于公司网络管理的复杂性,您可能无法回答,但当我在家用计算机上为autocad编写VBA代码时,它运行得很好,但当我尝试在工作中运行它时,我发现了一个奇怪的错误(我忘了它是什么,但如果你能帮我的话,我可以明天写下来解释)-我猜它与windows 7有关,可能与一些网络限制或注册表限制或其他什么有关。。。我在代码中所做的一切都有问题,就是试图创建VBA代码来设置一些维度变量,但这就像我没有用VBA代码更改这些变量的“权限”。。。有什么想法吗?如果没有,那很酷。。。你已经帮我解决了我遇到的愚蠢问题*戴上编码帽*
页:
[1]
2