明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2804|回复: 6

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

[复制链接]
发表于 2004-4-7 21:25:00 | 显示全部楼层 |阅读模式
  1. Sub Att2Table()
  2.        On Error Resume Next
  3.        Dim Ent As AcadEntity
  4.        Dim Pnt As Variant
  5.        Do
  6.                ThisDrawing.Utility.GetEntity Ent, Pnt, vbCrLf & "请选择要提取属性的块:"
  7.                If Err.Number <> 0 Then Exit Sub
  8.                If Ent.ObjectName = "AcDbBlockReference" Then
  9.                        If Ent.HasAttributes = True Then
  10.                                Exit Do
  11.                        End If
  12.                End If
  13.        Loop
  14.        Dim BlkRef As AcadBlockReference
  15.        Set BlkRef = Ent
  16.        Dim BlkName As String
  17.        BlkName = BlkRef.Name
  18.       
  19.       
  20.        Dim SS As AcadSelectionSet
  21.        Set SS = CreatSSet
  22.        Dim FilterType As Variant
  23.        Dim FilterData As Variant
  24.        Dim FType(2) As Integer
  25.        Dim FData(2) As Variant
  26.        FType(0) = 0
  27.        FData(0) = "INSERT" '图元名
  28.        FType(1) = 66
  29.        FData(1) = 1   '带属性
  30.        FType(2) = 2
  31.        FData(2) = BlkName   '图块名
  32.        FilterType = FType
  33.        FilterData = FData
  34.        SS.Select acSelectionSetAll, , , FilterType, FilterData
  35.        Dim i As Integer
  36.        Dim j As Integer
  37.        Dim Blk As AcadBlock
  38.        Dim Att As AcadAttribute
  39.        Dim AttRef As AcadAttributeReference
  40.        Dim AttRefs As Variant
  41.        Dim Rows As Double
  42.        Dim Cols As Double
  43.        Dim Table As AcadTable
  44.        For i = 0 To SS.Count - 1
  45.                Set BlkRef = SS(i)
  46.                AttRefs = BlkRef.GetAttributes
  47.                If i = 0 Then
  48.                        Cols = UBound(AttRefs) + 1
  49.                        Rows = SS.Count
  50.                        Set Table = AddBlkTable(Cols, Rows)
  51.                        Set Blk = ThisDrawing.Blocks(BlkRef.Name)
  52.                        For Each Ent In Blk
  53.                                If Ent.ObjectName = "AcDbAttributeDefinition" Then
  54.                                        Set Att = Ent
  55.                                        Table.SetText 0, j, Att.PromptString
  56.                                        j = j + 1
  57.                                End If
  58.                        Next
  59.                End If
  60.                For j = 0 To UBound(AttRefs)
  61.                        Set AttRef = AttRefs(j)
  62.                        Table.SetText i + 1, j, AttRef.TextString
  63.                Next
  64.        Next
  65. End Sub
  66. Function AddBlkTable(TableColCount As Double, TableRowCount As Double)
  67.        Dim Table As AcadTable
  68.        Dim InsertionPoint As Variant
  69.        InsertionPoint = ThisDrawing.Utility.GetPoint(, vbCrLf & "请选择表格插入点:")
  70.        Dim RowHeight As Double, Colwidth As Double
  71.        RowHeight = 8: Colwidth = 70 '行高及列宽
  72.        Set Table = ThisDrawing.ModelSpace.AddTable _
  73.                                (InsertionPoint, TableRowCount + 1, TableColCount, RowHeight, Colwidth)
  74.        Table.HeaderSuppressed = True
  75.        '取消原先表格格式中的首行合并
  76.        Table.UnmergeCells 0, 0, 0, TableColCount - 1 '按顺序为合并的起始行号、结束行号、起始列号、结束列号
  77.        Table.SetTextHeight 7, 7
  78.        'Table.SetAlignment 3, 5
  79.        Set AddBlkTable = Table
  80.        'Debug.Print Table.Rows
  81. End Function
发表于 2004-4-8 10:17:00 | 显示全部楼层

SS & TABLE都是NOTHING???問題出在那??

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2004-4-8 12:07:00 | 显示全部楼层
问题可能出在这一句吧,Set SS = CreatSSet,没有对应的创建选择集的逊数。 999
 楼主| 发表于 2004-4-8 12:38:00 | 显示全部楼层
呵呵,少给一个函数:
  1. Function CreatSSet() As AcadSelectionSet
  2.        On Error Resume Next
  3.        ThisDrawing.SelectionSets("mccad").Delete
  4.        Set CreatSSet = ThisDrawing.SelectionSets.Add("mccad")
  5. End Function
发表于 2004-7-15 17:00:00 | 显示全部楼层
我试了一下,2004中没有AcadTable对象,可以用别的替一下吗?另外这个程序可以找出嵌套图块下的属性吗?
发表于 2013-3-13 17:19:39 | 显示全部楼层
Table.SetTextHeight 7, 7

研究下第一个行的类型为什么是7?
发表于 2013-3-19 10:50:12 | 显示全部楼层
Table.SetText 0, j, Att.PromptString

貌似无法实现。行列要求长整型,j好像不是长整型,怎样转换?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 15:27 , Processed in 0.168972 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表