标题栏属性
大家好,我试图从VBA中访问标题栏属性,以便跨图形集显示它们。我对Excel VBA很有经验,但恐怕我对AutoCAD一窍不通。我的图形包含一个名为A3BORDER的块,我可以从中读取项目,通过查找正确的ObjectName,我可以忽略静态文本和图形对象。代码如下:
Sub foo()
Set myblk = ThisDrawing.Blocks("*PAPER_SPACE").Item(2)
For i = 0 To ThisDrawing.Blocks("A3BORDER").Count - 1
Set myobj = ThisDrawing.Blocks("A3BORDER").Item(i)
If myobj.ObjectName = "AcDbAttributeDefinition" Then
Debug.Print myobj.StyleName, myobj.TextString
End If
Next
End Sub
问题是我从模板而不是布局中获取属性,例如SHEET_NO返回的值是“XX OF YY”,而不是“8/8”如果我在块编辑器中编辑标题栏,我看到的默认值是XX OF YY。
我试着在PAPER_SPACE中查看项目,其中有一个有效的名称=“A3BORDER”,这就是我需要的实例吗?如果是这样,我该如何获取它的项目?
谢谢
忍者 很高兴了解您的excel VBA体验。欢迎来到论坛 嗯,有一个富有成效的第一反应。请原谅我不懂这个黑板上的礼仪,但我觉得这可能有助于表明我熟悉VBA,但不熟悉AutoCAD对象结构。呵呵。 不太确定你的代码,但也许你需要寻找的对象是
myobj。ObjectName=“AcDbAttribute”
而不是
myobj。ObjectName=“ACDBAttribute定义” 还有,你看过myobj吗。GetAttributes方法? 嗨,斯皮夫,
谢谢,但是这个块没有AcDbAttribute项,只有AcDbAttribute定义、用于固定测试的AcDbText和其他图形项,例如行等。不过,您已经为我设置了正确的路径。我已经试过了
ThisDrawing.Blocks("A3BORDER").HasAttributes
它失败了,所以我不想为GetAttributes费心。出于某种原因,我没有在myblk上进行HasAttributes测试。返回True,GetAttributes返回我要查找的文本。线索应该是上面的代码未能通过调试提示,如果它是有效的测试,它将返回False。通过测试myblk,我有效地做到了这一点(这不是有效的代码,只是说明)
ThisDrawing.Blocks("*PAPER_SPACE").Blocks("A3BORDER").HasAttributes
这显然是纸上的实例,而不是我在块编辑器中看到的实例。
再次感谢Spiff88
忍者 这里有一些帖子是关于使用VBA和标题栏属性的,我每天都在使用它们,所以我发布了一些代码,我会帮你找到帖子
找不到预先发布的代码,因此再次显示可能会有所帮助
Public Sub add_project_number()
' This Updates the project number
Dim SS As AcadSelectionSet
Dim Count As Integer
Dim FilterDXFCode(1) As Integer
Dim FilterDXFVal(1) As Variant
Dim attribs, newtext As Variant
Dim BLOCK_NAME As String
'On Error Resume Next
Dim startCH As Double
newtext = ThisDrawing.Utility.GetString(True, "Enter new project code : ")
FilterDXFCode(0) = 0
FilterDXFVal(0) = "INSERT"
FilterDXFCode(1) = 2
FilterDXFVal(1) = "DA1DRTXT"
BLOCK_NAME = "DA1DRTXT"
Set SS = ThisDrawing.SelectionSets.Add("issued")
SS.Select acSelectionSetAll, , , FilterDXFCode, FilterDXFVal
For Cntr = 0 To SS.Count - 1
attribs = SS.Item(Cntr).GetAttributes
attribs(1).TextString = newtext
attribs(1).Update
Next Cntr
ThisDrawing.SelectionSets.Item("issued").Delete
End Sub
我不确定你的问题是否得到了回答,但你可能要寻找的对象不是att定义,而是att值。我仍在努力学习AutoCAD中的方法等,所以我帮不了什么忙,但我在其他情况下也遇到过这种情况。不确定,但值得一试。
页:
[1]