乐筑天下

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

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

[复制链接]

158

主题

2315

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2951
发表于 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
回复

使用道具 举报

29

主题

1152

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1268
发表于 2004-4-8 10:17:00 | 显示全部楼层
SS & TABLE都是NOTHING???問題出在那??

emnv35ndc5q.jpg

emnv35ndc5q.jpg

回复

使用道具 举报

26

主题

589

帖子

10

银币

中流砥柱

Rank: 25

铜币
693
发表于 2004-4-8 12:07:00 | 显示全部楼层
问题可能出在这一句吧,Set SS = CreatSSet,没有对应的创建选择集的逊数。
       
999
回复

使用道具 举报

158

主题

2315

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2951
发表于 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
回复

使用道具 举报

0

主题

1

帖子

1

银币

初来乍到

Rank: 1

铜币
1
发表于 2004-7-15 17:00:00 | 显示全部楼层
我试了一下,2004中没有AcadTable对象,可以用别的替一下吗?另外这个程序可以找出嵌套图块下的属性吗?
回复

使用道具 举报

31

主题

227

帖子

8

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
351
发表于 2013-3-13 17:19:00 | 显示全部楼层

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

使用道具 举报

31

主题

227

帖子

8

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
351
发表于 2013-3-19 10:50:00 | 显示全部楼层

貌似无法实现。行列要求长整型,j好像不是长整型,怎样转换?
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-6-29 17:44 , Processed in 1.282779 second(s), 69 queries .

© 2020-2025 乐筑天下

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