乐筑天下

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

[编程交流] 标题栏属性

[复制链接]

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 22:40:04 | 显示全部楼层 |阅读模式
大家好,
 
我试图从VBA中访问标题栏属性,以便跨图形集显示它们。我对Excel VBA很有经验,但恐怕我对AutoCAD一窍不通。我的图形包含一个名为A3BORDER的块,我可以从中读取项目,通过查找正确的ObjectName,我可以忽略静态文本和图形对象。代码如下:
 
  1. Sub foo()
  2.    Set myblk = ThisDrawing.Blocks("*PAPER_SPACE").Item(2)
  3.    For i = 0 To ThisDrawing.Blocks("A3BORDER").Count - 1
  4.        Set myobj = ThisDrawing.Blocks("A3BORDER").Item(i)
  5.        If myobj.ObjectName = "AcDbAttributeDefinition" Then
  6.            Debug.Print myobj.StyleName, myobj.TextString
  7.        End If
  8.    Next
  9. End Sub

问题是我从模板而不是布局中获取属性,例如SHEET_NO返回的值是“XX OF YY”,而不是“8/8”如果我在块编辑器中编辑标题栏,我看到的默认值是XX OF YY。
我试着在PAPER_SPACE中查看项目,其中有一个有效的名称=“A3BORDER”,这就是我需要的实例吗?如果是这样,我该如何获取它的项目?
 
谢谢
忍者
回复

使用道具 举报

22

主题

272

帖子

254

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
111
发表于 2022-7-6 22:50:55 | 显示全部楼层
很高兴了解您的excel VBA体验。欢迎来到论坛
回复

使用道具 举报

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 23:03:41 | 显示全部楼层
嗯,有一个富有成效的第一反应。请原谅我不懂这个黑板上的礼仪,但我觉得这可能有助于表明我熟悉VBA,但不熟悉AutoCAD对象结构。呵呵。
回复

使用道具 举报

0

主题

4

帖子

4

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 23:07:54 | 显示全部楼层
不太确定你的代码,但也许你需要寻找的对象是
 
myobj。ObjectName=“AcDbAttribute”
 
而不是
 
myobj。ObjectName=“ACDBAttribute定义”
回复

使用道具 举报

0

主题

4

帖子

4

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 23:15:04 | 显示全部楼层
还有,你看过myobj吗。GetAttributes方法?
回复

使用道具 举报

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 23:23:34 | 显示全部楼层
嗨,斯皮夫,
 
谢谢,但是这个块没有AcDbAttribute项,只有AcDbAttribute定义、用于固定测试的AcDbText和其他图形项,例如行等。不过,您已经为我设置了正确的路径。我已经试过了
  1. ThisDrawing.Blocks("A3BORDER").HasAttributes
它失败了,所以我不想为GetAttributes费心。出于某种原因,我没有在myblk上进行HasAttributes测试。返回True,GetAttributes返回我要查找的文本。线索应该是上面的代码未能通过调试提示,如果它是有效的测试,它将返回False。通过测试myblk,我有效地做到了这一点(这不是有效的代码,只是说明)
  1. ThisDrawing.Blocks("*PAPER_SPACE").Blocks("A3BORDER").HasAttributes

这显然是纸上的实例,而不是我在块编辑器中看到的实例。
 
再次感谢Spiff88
忍者
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 23:34:54 | 显示全部楼层
这里有一些帖子是关于使用VBA和标题栏属性的,我每天都在使用它们,所以我发布了一些代码,我会帮你找到帖子
 
找不到预先发布的代码,因此再次显示可能会有所帮助
 
  1. Public Sub add_project_number()
  2. ' This Updates the project number
  3. Dim SS As AcadSelectionSet
  4. Dim Count As Integer
  5. Dim FilterDXFCode(1) As Integer
  6. Dim FilterDXFVal(1) As Variant
  7. Dim attribs, newtext As Variant
  8. Dim BLOCK_NAME As String
  9. 'On Error Resume Next
  10. Dim startCH As Double
  11. newtext = ThisDrawing.Utility.GetString(True, "Enter new project code : ")
  12. FilterDXFCode(0) = 0
  13. FilterDXFVal(0) = "INSERT"
  14. FilterDXFCode(1) = 2
  15. FilterDXFVal(1) = "DA1DRTXT"
  16. BLOCK_NAME = "DA1DRTXT"
  17. Set SS = ThisDrawing.SelectionSets.Add("issued")
  18. SS.Select acSelectionSetAll, , , FilterDXFCode, FilterDXFVal
  19. For Cntr = 0 To SS.Count - 1
  20.   attribs = SS.Item(Cntr).GetAttributes
  21.       
  22.       
  23.        attribs(1).TextString = newtext
  24.                attribs(1).Update
  25.         
  26. Next Cntr
  27. ThisDrawing.SelectionSets.Item("issued").Delete
  28. End Sub
回复

使用道具 举报

0

主题

9

帖子

9

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 23:47:08 | 显示全部楼层
我不确定你的问题是否得到了回答,但你可能要寻找的对象不是att定义,而是att值。我仍在努力学习AutoCAD中的方法等,所以我帮不了什么忙,但我在其他情况下也遇到过这种情况。不确定,但值得一试。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 05:42 , Processed in 0.491564 second(s), 68 queries .

© 2020-2025 乐筑天下

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