乐筑天下

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

[编程交流] 通过speci迭代的VBA代码

[复制链接]

13

主题

70

帖子

57

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-6 22:16:35 | 显示全部楼层 |阅读模式
我简直不敢相信我已经花了这么多时间试图找到这样一个简单问题的解决方案——我希望我即将发布的代码能够自我解释——我正在尝试迭代VBA中的块引用集合,以便我可以处理一组代码(代码与此无关,因为我已经知道如何完成这部分)
 
这是我试图使用的简单代码,它甚至不会启动循环,所以我一定是定义错了什么
 
请解释我不理解的部分
 
(都是模型空间,没有布局空间)
 
我希望当人们回复时,这个网站会给我发电子邮件。。。我以前从未在这里发布过,我不知道这是怎么回事
 
  1. Sub PW()
  2. Dim blkEndcap As AcadBlockReference
  3. ' iterate thru a list of blocks named "fixture_block" and also have ScaleX set to 15 and ScaleY set to 5
  4. For Each blkEndcap In ThisDrawing.Blocks
  5.    If blkEndcap.Name = "fixture_block" And blkEndcap.ScaleX = 15 And blkEndcap.ScaleY = 5 Then
  6.      debug.print "found one"
  7.    End If
  8. Next
  9. End Sub
回复

使用道具 举报

13

主题

70

帖子

57

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-6 22:24:00 | 显示全部楼层
我可能要等至少24小时才能得到一个有用的回复,不是吗。。。该死-我今晚就想把这件事做完
回复

使用道具 举报

10

主题

973

帖子

909

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 22:26:46 | 显示全部楼层
使用VBA已经有一段时间了,但请尝试以下方法:
 
  1. Dim AENT As AcadEntity
  2. Dim blkEndcap As AcadBlockReference
  3.        For Each AENT In ThisDrawing.ModelSpace
  4.            If TypeOf AENT Is AcadBlockReference Then
  5.                Set blkEndcap = AENT
  6.                If blkEndcap.Name = "fixture_block" And And blkEndcap.ScaleX = 15.0 And blkEndcap.ScaleY = 5.0  Then
  7.                     debug.print "found one"
  8.                End If
  9.            End If
  10.        Next AENT
回复

使用道具 举报

10

主题

973

帖子

909

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 22:35:47 | 显示全部楼层
但是,我应该提到,如果所讨论的块引用是动态块,那么您必须使用
AcadBlockR公司​参考。E​有效的​我
回复

使用道具 举报

13

主题

70

帖子

57

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-6 22:40:35 | 显示全部楼层
这有助于。。。但我似乎仍然无法引用比例部分-下面是我如何分解它的
 
  1. Sub pw3()
  2. Dim AENT As AcadEntity
  3. Dim blkEndcap As AcadBlockReference
  4.        For Each AENT In ThisDrawing.ModelSpace
  5.            If TypeOf AENT Is AcadBlockReference Then
  6.                Set blkEndcap = AENT
  7.                If blkEndcap.Name = "fixture_block" Then
  8.                  If blkEndcap.ScaleX = 15# Then
  9.                    If blkEndcap.ScaleY = 5# Then
  10.                     Debug.Print "found one"
  11.                    End If
  12.                  End If
  13.                End If
  14.            End If
  15.        Next AENT
  16. End Sub
回复

使用道具 举报

13

主题

70

帖子

57

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-6 22:41:59 | 显示全部楼层
非常感谢你至少给了我一些继续下去的机会
回复

使用道具 举报

10

主题

973

帖子

909

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 22:48:33 | 显示全部楼层
尝试:
 
如果blkEndcap。XScaleFactor=15#然后
回复

使用道具 举报

13

主题

70

帖子

57

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-6 22:53:03 | 显示全部楼层
天哪,谢谢你-真管用
 
当试图用谷歌搜索这样的东西时,文档很糟糕
 
谢谢谢谢谢谢谢谢
回复

使用道具 举报

10

主题

973

帖子

909

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 23:01:07 | 显示全部楼层
不客气。我很高兴你能站起来跑步。
 
AutoCAD过去提供了相当好的VBA参考。我认为它是在Autodesk计划取消VBA自定义选项时删除的。在Autodesk上四处查看。com,它可能仍然可以下载。
回复

使用道具 举报

13

主题

70

帖子

57

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-6 23:02:10 | 显示全部楼层
哦,我知道他们从默认安装中删除了它,因为它可以像任何其他VBA代码一样被滥用
 
这让我想到了另一个问题,由于公司网络管理的复杂性,您可能无法回答,但当我在家用计算机上为autocad编写VBA代码时,它运行得很好,但当我尝试在工作中运行它时,我发现了一个奇怪的错误(我忘了它是什么,但如果你能帮我的话,我可以明天写下来解释)-我猜它与windows 7有关,可能与一些网络限制或注册表限制或其他什么有关。。。我在代码中所做的一切都有问题,就是试图创建VBA代码来设置一些维度变量,但这就像我没有用VBA代码更改这些变量的“权限”。。。有什么想法吗?如果没有,那很酷。。。你已经帮我解决了我遇到的愚蠢问题*戴上编码帽*
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 11:52 , Processed in 0.744256 second(s), 72 queries .

© 2020-2025 乐筑天下

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