QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
goto3d 说: 此次SW竞赛获奖名单公布如下,抱歉晚了,版主最近太忙:一等奖:塔山817;二等奖:a9041、飞鱼;三等奖:wx_dfA5IKla、xwj960414、bzlgl、hklecon;请以上各位和版主联系,领取奖金!!!
2022-03-11
全站
goto3d 说: 在线网校新上线表哥同事(Mastercam2022)+虞为民版大(inventor2022)的最新课程,来围观吧!
2021-06-26
查看: 3183|回复: 3
收起左侧

[已答复] VBA 查找属性块代码是这么写的吗?

[复制链接]
发表于 2010-9-1 19:07:40 | 显示全部楼层 |阅读模式

马上注册,结识高手,享用更多资源,轻松玩转三维网社区。

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

x
本帖最后由 woaishuijia 于 2010-9-1 20:17 编辑
4 n% @: P, l* M# h0 t0 |$ ?6 k) l: y
各位大侠,帮小弟看看这段代码是哪里出问题的。我是参考着书上写的. X7 x3 z: T' e3 {0 k& ]
  1. '查找块
    9 G1 t, w! j: K, K1 F# f4 E/ }
  2. Public Sub FindBlock()
    ( N( R5 D/ b3 u

  3. * w( B/ u/ x; ~8 a
  4. Dim Objblock As AcadBlockReference
    * ]0 ?" L, x+ }6 j: [9 V

  5. ' E6 e8 ^' T9 b* @7 {& T( J
  6. For Each Objblock In ThisDrawing.ModelSpace     '这句话出错了,说是错误13,类型不匹配
    - b: ]+ Z* z! y, Y
  7.    If StrComp(Objblock.Name, "属性块") = 0 Then3 X" o( x. c. E
  8.      MsgBox "存在!"
    / f* X- R, F  Q: V% s+ y
  9.   Else; E4 P+ a1 w" `8 k, b
  10.      MsgBox "不存在!"6 }5 k6 t, }" k3 J, ~; |0 t3 `+ C
  11.   End If
    $ E9 y, U) m! [8 s
  12. Next Objblock) m& E9 B3 {1 [7 H

  13. $ I. a  p6 k! C
  14. End Sub
复制代码
发表于 2010-9-1 20:47:27 | 显示全部楼层
参考下面代码
  1. . ?; g$ T0 j5 ^+ O2 e5 \
  2. Sub A()4 U+ i! e+ F; S5 E  [2 Y
  3.     Dim E As AcadEntity, BR As AcadBlockReference, B As Boolean& ]4 k$ k  i9 m8 e
  4.     For Each E In ThisDrawing.ModelSpace
    & Q8 g( E$ Z6 m2 y$ ^9 m
  5.         If E.ObjectName = "AcDbBlockReference" Then4 k: {  I% \) S2 J4 ]: C4 s. S
  6.             Set BR = E
    * z, H3 I& g+ W# f4 O
  7.             If BR.Name = "属性块" Then
    ( o. P5 A+ o' ~
  8.                 B = True
    & @/ O) E- I! Z
  9.                 Exit For
    7 i' ]8 x. {. k8 i& c$ K" D
  10.             End If
    0 K' x. t% O! X. E
  11.         End If' r; `- S9 A! w& k# s7 _# t
  12.     Next
    . X8 u, P+ Q" Q
  13.     If B Then
    1 q# _* N- O3 k7 [
  14.         MsgBox "存在"4 X( `6 Y# Z4 W5 c: }! P# B
  15.     Else
    : r; P/ r7 h8 S& u3 J: H4 e! F
  16.         MsgBox "不存在"
    # t, G* \4 |! A8 [+ f
  17.     End If5 D! _2 f$ J' L" k% c8 p+ R
  18. End Sub/ |; O$ F; t' q# g
复制代码
"For Each XX In ThisDrawing.ModelSpace....Next"是循环遍历模型空间所有图元对象,而你的循环变量声明为块参照对象.假如模型空间只有块参照一种对象,那你的代码就不会出错.如果模型空间中存在多种图元对象,那当然会出现"类型不匹配"错误了.所以,遍历模型空间要使用"AcadEntity"型变量或者"Object"甚至是"Variant".4 ?  ]4 x' B& Q7 {$ `
上面的代码中用"AcadEntity"型变量做循环变量遍历模型空间,检查每个图元的"ObjectName"属性,当发现"AcDbBlockReference"(块参照)图元时,再进一步检查是否是所要查找的块参照.
发表于 2010-9-1 21:07:20 | 显示全部楼层
有个问题:你是要查找名为"属性块"的块参照,还是要查找带有属性的块参照?
1 p/ o* L0 \$ o( R如果是前者,上面的代码就可以了.如果是后者,要用下面的代码
  1. , W, t# _: a6 K# g4 ~% V' Y/ ~- b
  2. Sub A()& w& y$ D) o% G6 g+ `3 G
  3.     Dim E As AcadEntity, BR As AcadBlockReference, B As Boolean, Atts As Variant9 X. ~) R2 m8 a% r
  4.     For Each E In ThisDrawing.ModelSpace
    + ]% A/ u1 T: R: n7 T) M& l, ?. j0 O
  5.         If E.ObjectName = "AcDbBlockReference" Then. Y0 G) ]7 W1 g# `1 g
  6.             Set BR = E: K+ H: F$ `. A$ }" B: H, n, w' Z
  7.             Atts = BR.GetAttributes* W$ e% g; R$ W6 v! N8 n+ M! r
  8.             If UBound(Atts) >= 0 Then
    1 l5 Y5 |* h9 X: k/ u3 ]4 c
  9.                 B = True
    5 H% k0 @1 G) t, ?$ K
  10.                 Exit For% J- o# k0 o2 r, v
  11.             End If
    1 X- k) u& D, J) d1 F% G
  12.         End If- n( P# z9 v) o1 g1 o
  13.     Next- u$ ^0 g# h! U4 M9 e/ ~
  14.     If B Then% Z( F/ G$ B: K0 `6 D. k# H0 [9 U
  15.         MsgBox "存在"
    " t  W: _- j  A9 }
  16.     Else( W- \6 T, T: U5 b3 J" W
  17.         MsgBox "不存在"
    # \4 h5 R7 B+ G- d; @
  18.     End If: e, U6 Q; ]) s* C- a% m, X- z
  19. End Sub
    ) E9 e0 X0 g  l0 Y$ Q" Q0 Y
复制代码
先声明一个变体变量,用块参照对象的"GetAttributes"方法获得块参照对象的属性数组并存放在这个变体变量中,再检查这个数组的下标,如果是-1则说明数组为空,该块参照对象没有属性;如果数组下标大于或等于0,则说明该块参照有属性.
 楼主| 发表于 2010-9-2 09:15:41 | 显示全部楼层
3# woaishuijia
8 P7 T+ f4 s) `' T. Z+ d# V
2 a* o6 J  c9 m) [  D$ K/ |我是想查找名字为“属性块”的块。谢谢老大的支持,小弟感激万分。
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Licensed Copyright © 2016-2020 http://www.3dportal.cn/ All Rights Reserved 京 ICP备13008828号

小黑屋|手机版|Archiver|三维网 ( 京ICP备2023026364号-1 )

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