mccad 发表于 2004-4-7 21:25:00

[VBA]R2005 TABLE提取图面中所有带属性图块值并列表

Sub Att2Table()
       On Error Resume Next
       Dim Ent As AcadEntity
       Dim Pnt As Variant
       Do
               ThisDrawing.Utility.GetEntity Ent, Pnt, vbCrLf & "请选择要提取属性的块:"
               If Err.Number <> 0 Then Exit Sub
               If Ent.ObjectName = "AcDbBlockReference" Then
                     If Ent.HasAttributes = True Then
                               Exit Do
                     End If
               End If
       Loop
       Dim BlkRef As AcadBlockReference
       Set BlkRef = Ent
       Dim BlkName As String
       BlkName = BlkRef.Name
      
      
       Dim SS As AcadSelectionSet
       Set SS = CreatSSet
       Dim FilterType As Variant
       Dim FilterData As Variant
       Dim FType(2) As Integer
       Dim FData(2) As Variant
       FType(0) = 0
       FData(0) = "INSERT" '图元名
       FType(1) = 66
       FData(1) = 1   '带属性
       FType(2) = 2
       FData(2) = BlkName   '图块名
       FilterType = FType
       FilterData = FData
       SS.Select acSelectionSetAll, , , FilterType, FilterData
       Dim i As Integer
       Dim j As Integer
       Dim Blk As AcadBlock
       Dim Att As AcadAttribute
       Dim AttRef As AcadAttributeReference
       Dim AttRefs As Variant
       Dim Rows As Double
       Dim Cols As Double
       Dim Table As AcadTable
       For i = 0 To SS.Count - 1
               Set BlkRef = SS(i)
               AttRefs = BlkRef.GetAttributes
               If i = 0 Then
                     Cols = UBound(AttRefs) + 1
                     Rows = SS.Count
                     Set Table = AddBlkTable(Cols, Rows)
                     Set Blk = ThisDrawing.Blocks(BlkRef.Name)
                     For Each Ent In Blk
                               If Ent.ObjectName = "AcDbAttributeDefinition" Then
                                       Set Att = Ent
                                       Table.SetText 0, j, Att.PromptString
                                       j = j + 1
                               End If
                     Next
               End If
               For j = 0 To UBound(AttRefs)
                     Set AttRef = AttRefs(j)
                     Table.SetText i + 1, j, AttRef.TextString
               Next
       Next
End Sub
Function AddBlkTable(TableColCount As Double, TableRowCount As Double)
       Dim Table As AcadTable
       Dim InsertionPoint As Variant
       InsertionPoint = ThisDrawing.Utility.GetPoint(, vbCrLf & "请选择表格插入点:")
       Dim RowHeight As Double, Colwidth As Double
       RowHeight = 8: Colwidth = 70 '行高及列宽
       Set Table = ThisDrawing.ModelSpace.AddTable _
                               (InsertionPoint, TableRowCount + 1, TableColCount, RowHeight, Colwidth)
       Table.HeaderSuppressed = True
       '取消原先表格格式中的首行合并
       Table.UnmergeCells 0, 0, 0, TableColCount - 1 '按顺序为合并的起始行号、结束行号、起始列号、结束列号
       Table.SetTextHeight 7, 7
       'Table.SetAlignment 3, 5
       Set AddBlkTable = Table
       'Debug.Print Table.Rows
End Function

龙龙仔 发表于 2004-4-8 10:17:00

<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT size=3><FONT face="Times New Roman">SS &amp; TABLE</FONT>都是<FONT face="Times New Roman">NOTHING???</FONT>問題出在那<FONT face="Times New Roman">??</FONT></FONT>

efan2000 发表于 2004-4-8 12:07:00

问题可能出在这一句吧,Set SS = CreatSSet,没有对应的创建选择集的逊数。


       


999<BR>

mccad 发表于 2004-4-8 12:38:00

呵呵,少给一个函数:Function CreatSSet() As AcadSelectionSet
       On Error Resume Next
       ThisDrawing.SelectionSets("mccad").Delete
       Set CreatSSet = ThisDrawing.SelectionSets.Add("mccad")
End Function

WOODTANK 发表于 2004-7-15 17:00:00

我试了一下,2004中没有AcadTable对象,可以用别的替一下吗?另外这个程序可以找出嵌套图块下的属性吗?

crazylsp 发表于 2013-3-13 17:19:39

Table.SetTextHeight 7, 7

研究下第一个行的类型为什么是7?

crazylsp 发表于 2013-3-19 10:50:12

Table.SetText 0, j, Att.PromptString

貌似无法实现。行列要求长整型,j好像不是长整型,怎样转换?
页: [1]
查看完整版本: [VBA]R2005 TABLE提取图面中所有带属性图块值并列表