Ninjaneer 发表于 2022-7-6 22:40:04

标题栏属性

大家好,
 
我试图从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”,这就是我需要的实例吗?如果是这样,我该如何获取它的项目?
 
谢谢
忍者

mdbdesign 发表于 2022-7-6 22:50:55

很高兴了解您的excel VBA体验。欢迎来到论坛

Ninjaneer 发表于 2022-7-6 23:03:41

嗯,有一个富有成效的第一反应。请原谅我不懂这个黑板上的礼仪,但我觉得这可能有助于表明我熟悉VBA,但不熟悉AutoCAD对象结构。呵呵。

spiff88 发表于 2022-7-6 23:07:54

不太确定你的代码,但也许你需要寻找的对象是
 
myobj。ObjectName=“AcDbAttribute”
 
而不是
 
myobj。ObjectName=“ACDBAttribute定义”

spiff88 发表于 2022-7-6 23:15:04

还有,你看过myobj吗。GetAttributes方法?

Ninjaneer 发表于 2022-7-6 23:23:34

嗨,斯皮夫,
 
谢谢,但是这个块没有AcDbAttribute项,只有AcDbAttribute定义、用于固定测试的AcDbText和其他图形项,例如行等。不过,您已经为我设置了正确的路径。我已经试过了

ThisDrawing.Blocks("A3BORDER").HasAttributes
它失败了,所以我不想为GetAttributes费心。出于某种原因,我没有在myblk上进行HasAttributes测试。返回True,GetAttributes返回我要查找的文本。线索应该是上面的代码未能通过调试提示,如果它是有效的测试,它将返回False。通过测试myblk,我有效地做到了这一点(这不是有效的代码,只是说明)

ThisDrawing.Blocks("*PAPER_SPACE").Blocks("A3BORDER").HasAttributes

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

BIGAL 发表于 2022-7-6 23:34:54

这里有一些帖子是关于使用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

Cherilm 发表于 2022-7-6 23:47:08

我不确定你的问题是否得到了回答,但你可能要寻找的对象不是att定义,而是att值。我仍在努力学习AutoCAD中的方法等,所以我帮不了什么忙,但我在其他情况下也遇到过这种情况。不确定,但值得一试。
页: [1]
查看完整版本: 标题栏属性