找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2064|回复: 4

[VBA程序]:[急用]在VBA中,插入有属性的块,怎样给属性赋值?

[复制链接]
发表于 2003-5-2 10:43:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
在VBA中,插入有属性的块,怎样给属性赋值?
能否来个例子?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2003-5-2 21:01:24 | 显示全部楼层
Sub lhjc()
Dim blockA00 As String
Dim insertpoint As Variant
ThisDrawing.ActiveTextStyle.BigFontFile = "C:\Program Files\AutoCAD 2002\Fonts\Hztxtg.shx"  '设置文字样式
ThisDrawing.ActiveTextStyle.fontFile = "C:\Program Files\AutoCAD 2002\Fonts\italic.shx"
On Error Resume Next
insertpoint = ThisDrawing.Utility.GetPoint(, "输入插入点:")
blockA00 = "C:\Program Files\AutoCAD 2002\design\att\tukuang\A00.dwg"
If Err Then
Err.Clear
Exit Sub
End If
Dim blockobjA00 As AcadBlockReference
Set blockobjA00 = ThisDrawing.ModelSpace.InsertBlock(insertpoint, blockA00, 1, 1, 1, 0)
ThisDrawing.SendCommand "attedit" & vbCrLf & "(entlast)" & vbCr   '取得最后插入实体属性
If blockobjA00.Layer = "图框" Then
Exit Sub
Else:
Set tukuang = ThisDrawing.Layers.Add("图框")
blockobjA00.Layer = "图框"
End If
ZoomAll
End Sub

前提是先做好一个外部的属性块,然后用程序调用.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-5-5 17:01:49 | 显示全部楼层
不太理解
假如有一个块,它带有一个属性,这个属性的预定值为12.34,但在插入后,我要把值赋为34.56,应怎样呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 181个

财富等级: 日进斗金

发表于 2003-5-5 20:17:12 | 显示全部楼层
将块插入到图纸中后,返回块引用对象,然后使用HasAttributes判断有没有属性,用GetAttributes返回所有的属性,接着枚举,找到需要的属性,更改其值。

  1.   [FONT=courier new]
  2. 本例创建一个块,然后向块中添加属性。接着将块插入到图形中。然后返回属性数据,并在消息框中显示。块参照中的属性数据将被更新,并再次返回和显示属性数据。

  3. Sub Ch10_GettingAttributes()
  4.     ' 创建块
  5.     Dim blockObj As AcadBlock
  6.     Dim insertionPnt(0 To 2) As Double
  7.     insertionPnt(0) = 0
  8.     insertionPnt(1) = 0
  9.     insertionPnt(2) = 0
  10.     Set blockObj = ThisDrawing.Blocks.Add _
  11.                           (insertionPnt, "TESTBLOCK")
  12.    
  13.     ' 定义属性定义
  14.     Dim attributeObj As AcadAttribute
  15.     Dim height As Double
  16.     Dim mode As Long
  17.     Dim prompt As String
  18.     Dim insertionPoint(0 To 2) As Double
  19.     Dim tag As String
  20.     Dim value As String
  21.     height = 1#
  22.     mode = acAttributeModeVerify
  23.     prompt = "Attribute Prompt"
  24.     insertionPoint(0) = 5
  25.     insertionPoint(1) = 5
  26.     insertionPoint(2) = 0
  27.     tag = "Attribute Tag"
  28.     value = "Attribute Value"
  29.    
  30.     ' 在块上创建属性定义对象
  31.     Set attributeObj = blockObj.AddAttribute _
  32.                         (height, mode, prompt, _
  33.                         insertionPoint, tag, value)
  34.    
  35.    
  36.     ' 插入块
  37.     Dim blockRefObj As AcadBlockReference
  38.     insertionPnt(0) = 2
  39.     insertionPnt(1) = 2
  40.     insertionPnt(2) = 0
  41.     Set blockRefObj = ThisDrawing.ModelSpace.InsertBlock _
  42.                      (insertionPnt, "TESTBLOCK", 1, 1, 1, 0)
  43.     ZoomAll
  44.    
  45.     ' 获取块参照的属性
  46.     Dim varAttributes As Variant
  47.     varAttributes = blockRefObj.GetAttributes
  48.    
  49.     ' 将属性标记和值移至
  50.     ' 要在 Msgbox 中显示的字符串中
  51.     Dim strAttributes As String
  52.     strAttributes = ""
  53.     Dim I As Integer
  54.     For I = LBound(varAttributes) To UBound(varAttributes)
  55.         strAttributes = strAttributes + "  Tag: " + _
  56.                     varAttributes(I).TagString + vbCrLf + _
  57.                     "   Value: " + varAttributes(I).textString
  58.     Next
  59.     MsgBox "The attributes for blockReference " + _
  60.                    blockRefObj.Name & " are: " & vbCrLf _
  61.                    & strAttributes
  62.    
  63.     ' 更改属性值
  64.     ' 注意:没有 SetAttributes。一旦包含
  65.     ' 变量数组,就拥有了对象。
  66.     ' 更改这些对象就会改变图形中的对象。
  67.     varAttributes(0).textString = "NEW VALUE!"
  68.    
  69.     ' 再次获取属性
  70.     Dim newvarAttributes As Variant
  71.     newvarAttributes = blockRefObj.GetAttributes
  72.    
  73.     ' 再次显示标记和值
  74.     strAttributes = ""
  75.     For I = LBound(varAttributes) To UBound(varAttributes)
  76.         strAttributes = strAttributes + "  Tag: " + _
  77.                     newvarAttributes(I).TagString + vbCrLf + _
  78.                     "   Value: " + newvarAttributes(I).textString
  79.     Next
  80.     MsgBox "The attributes for blockReference " & _
  81.                   blockRefObj.Name & " are: " & vbCrLf _
  82.                   & strAttributes
  83. End Sub

  84.   [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-5-7 12:52:48 | 显示全部楼层
我的是先做好一个带有属性的块,然后保存为外部块,用程序调用时启动ate命令对属性块赋值。首先要把系统变量attdia的值改为1
具体:在上面程序内加一句ThisDrawing.SetVariable "attdia", 1在插入属性块时就会显示赋值对话框来重新赋值。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-22 12:13 , Processed in 0.441751 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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