乐筑天下

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

[编程交流] 编辑属性宽度因子

[复制链接]

1

主题

1

帖子

0

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 17:15:37 | 显示全部楼层 |阅读模式
我使用VBA成功地使用以下代码编辑了属性的值:
 
出错时继续下一步
使用此图纸
对于每个oLayout In。布局
对于k=0到oLayout。块计数-1
Set entry=oLayout。块项目(k)
Objname=条目。对象名称
如果Objname=“AcDbBlockReference”,则
如果输入。然后命名为“Title Info*”
atts=入口。获取属性
对于I=LBound(atts)到UBound(atts)
如果附件(I)。TagString=“PG”然后
附件(一)。TextString=oLayout。名称
如果结束
 
 
我现在正试图编辑这个特定的属性宽度因子,我很难做到这一点。
任何建议都很好
回复

使用道具 举报

1

主题

1069

帖子

1050

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2022-7-6 17:58:06 | 显示全部楼层
欢迎加入!
试试看
 
  1. Private Sub Ch_Att_Width(bName As String, atag As String, dblWid As Double)
  2.     Dim oSset As AcadSelectionSet, _
  3.         blkRef As AcadBlockReference, _
  4.         attObj As AcadAttributeReference, _
  5.         attData() As AcadObject, _
  6.         fType(2) As Integer, _
  7.         fData(2) As Variant, _
  8.         dxfType, _
  9.         dxfData, _
  10.         k As Integer
  11.     fType(0) = 0: fType(1) = 2: fType(2) = 66
  12.     fData(0) = "INSERT": fData(1) = bName: fData(2) = 1
  13.     dxfType = fType: dxfData = fData
  14.    
  15.     For Each oSset In ThisDrawing.SelectionSets
  16.          If oSset.Name = "$Blocks$" Then
  17.               oSset.Delete
  18.               Exit For
  19.          End If
  20.     Next oSset
  21.     Set oSset = ThisDrawing.SelectionSets.Add("$Blocks$")
  22.    
  23.     MsgBox "Select blocks on screen"
  24.     oSset.SelectOnScreen dxfType, dxfData
  25.     For Each blkRef In oSset
  26.          attData = blkRef.GetAttributes
  27.          For k = 0 To UBound(attData)
  28.               Set attObj = attData(k)
  29.               If StrComp(attObj.TagString, atag) = 0 Then
  30.                    attObj.ScaleFactor = dblWid
  31.                    attObj.Update
  32.                    blkRef.Update
  33.                    Exit For
  34.               End If
  35.          Next k
  36.     Next blkRef
  37.     oSset.Delete
  38.     Set oSset = Nothing
  39.    
  40.     MsgBox "Done"
  41. End Sub
  42. Sub demo()
  43. Ch_Block_Att_Width "MLR", "PRESET", 0.45
  44. ' where: "MLR" is block name,
  45. ' "PRESET" is desired tag,
  46. ' 0.45 is width factor
  47. End Sub

 
~'J'~
回复

使用道具 举报

28

主题

130

帖子

126

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
154
发表于 2022-7-6 18:22:56 | 显示全部楼层
另一条路
 
  1. SUB rename&changewidth()
  2. Dim  j, k As Integer
  3. Dim ELEMENT, ArrayAttributes
  4. On Error Resume Next
  5. For j = 0 To ThisDrawing.Layouts.Count - 1                 
  6. If ThisDrawing.Layouts(j).Name = "Model" Then GoTo 10  ThisDrawing.SendCommand "layout s " & ThisDrawing.Layouts(j).Name & vbCr
  7.                For Each ELEMENT In ThisDrawing.PaperSpace
  8.                    If ELEMENT.EntityType = 7 Then
  9.                        If Err Then GoTo 5
  10.                        If ELEMENT.HasAttributes = True Then
  11.                            ArrayAttributes = ELEMENT.GetAttributes
  12.                            For k = LBound(ArrayAttributes) To UBound(ArrayAttributes)
  13.                                If ArrayAttributes(k).TagString = "[color=red]TYPEATTRIBUTETAGLABELHERE[/color]" Then ArrayAttributes(k).TextString = "[color=red]TYPE TEXT TO CHANGE ATTRIBUTE TO HERE[/color]"
  14.                                If ArrayAttributes(k).TagString = "[color=red]TYPEATTRIBUTETAGLABELHERE[/color]" Then ArrayAttributes(k).ScaleFactor = [color=red]12[/color] ' this is the width of your attribute
  15.                            Next k
  16.                        End If
  17. 5
  18.                    End If
  19.                Next
  20. 10
  21.            Next j
  22. End SUB
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-5-26 11:37 , Processed in 1.041199 second(s), 59 queries .

© 2020-2025 乐筑天下

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