QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
本帖最后由 woaishuijia 于 2010-9-1 20:17 编辑
+ _1 S' ~4 i5 l0 K2 P0 K" A' x# W9 F$ j1 G  Q8 V
各位大侠,帮小弟看看这段代码是哪里出问题的。我是参考着书上写的) ~, ?5 ^* l; N! L; Q& C" i. K8 N- R( P
  1. '查找块* u! r( D: N7 r- P
  2. Public Sub FindBlock()' e0 b( A% l  t
  3. ) R. M5 n) F* l4 M
  4. Dim Objblock As AcadBlockReference
    * s  P& G2 k/ P, _# Q

  5. % ]0 P2 ~+ _1 ^
  6. For Each Objblock In ThisDrawing.ModelSpace     '这句话出错了,说是错误13,类型不匹配
    0 L0 S9 J/ m8 c9 ]+ c5 t% h
  7.    If StrComp(Objblock.Name, "属性块") = 0 Then
      `  w7 L0 Q7 A* o6 f8 s  F
  8.      MsgBox "存在!"
    $ {4 z6 k6 u7 S5 K# u  \+ r/ d
  9.   Else
    + y! X" Q- d9 F: K0 x3 s
  10.      MsgBox "不存在!"
    ; M( r' G1 D# {( C: i; c! k& [
  11.   End If1 x2 G) t  p7 _3 P: {" i/ m- r+ i
  12. Next Objblock, W& S+ }% E' p6 X3 I( h0 ]
  13. 0 K. a8 P: N1 u; h+ R; w7 Q$ E) M
  14. End Sub
复制代码
发表于 2010-9-1 20:47:27 | 显示全部楼层
参考下面代码

  1. 9 B5 x3 f2 }5 @
  2. Sub A()
    / I# N* q2 n6 v$ s6 S7 E9 C
  3.     Dim E As AcadEntity, BR As AcadBlockReference, B As Boolean: U0 D" G$ ^+ u) _" n$ d" {5 ]
  4.     For Each E In ThisDrawing.ModelSpace
    $ ~& z$ H  J# J/ z& Q4 ~+ Q
  5.         If E.ObjectName = "AcDbBlockReference" Then( C+ r" G1 W/ ^. v, Z9 q7 Y& W; {
  6.             Set BR = E
    ! F1 V" g# x3 z3 i% D! P# T
  7.             If BR.Name = "属性块" Then
    1 W5 p0 l! F0 K( V2 g
  8.                 B = True4 R7 l, q( v8 ~% }
  9.                 Exit For
    ( v$ G' }2 ~2 S9 I& F5 T9 s; Y
  10.             End If
    $ F. ^# S; ]; F
  11.         End If+ g' ]( L. E- c% V4 I, L8 X5 J
  12.     Next
    5 v: }2 ~8 N5 J" f
  13.     If B Then: p6 b% C2 W- f. j( t: k
  14.         MsgBox "存在"
    % p% ~7 a0 p$ e# d) p+ f- T
  15.     Else* l7 o( N, N" t: v" n0 u# c0 V
  16.         MsgBox "不存在"
    & n/ J& S1 T% {
  17.     End If$ Z8 H- D4 [) @1 R
  18. End Sub
    + V: o/ G0 u/ o
复制代码
"For Each XX In ThisDrawing.ModelSpace....Next"是循环遍历模型空间所有图元对象,而你的循环变量声明为块参照对象.假如模型空间只有块参照一种对象,那你的代码就不会出错.如果模型空间中存在多种图元对象,那当然会出现"类型不匹配"错误了.所以,遍历模型空间要使用"AcadEntity"型变量或者"Object"甚至是"Variant".
: y$ X+ G6 V2 n$ ^8 Q上面的代码中用"AcadEntity"型变量做循环变量遍历模型空间,检查每个图元的"ObjectName"属性,当发现"AcDbBlockReference"(块参照)图元时,再进一步检查是否是所要查找的块参照.
发表于 2010-9-1 21:07:20 | 显示全部楼层
有个问题:你是要查找名为"属性块"的块参照,还是要查找带有属性的块参照?' H- [4 q7 u' b% f) F: b
如果是前者,上面的代码就可以了.如果是后者,要用下面的代码

  1. 5 P& |& y& B, }$ [: `
  2. Sub A()
    0 _# p' B/ W3 E! [/ s/ L4 v$ ^7 o
  3.     Dim E As AcadEntity, BR As AcadBlockReference, B As Boolean, Atts As Variant
    0 t1 w- D) h, R" {  |2 t
  4.     For Each E In ThisDrawing.ModelSpace
    . o, X( C+ h+ m( y, |- l
  5.         If E.ObjectName = "AcDbBlockReference" Then3 h6 r1 `4 Q7 J# K# ^# B
  6.             Set BR = E7 s* L* I. F% S! n% v
  7.             Atts = BR.GetAttributes$ y" o+ ~# M# w# l: B8 A
  8.             If UBound(Atts) >= 0 Then
    . j( g7 j5 m- l. B
  9.                 B = True3 {8 n( G9 W, b# i6 S3 L* T
  10.                 Exit For2 F( \* v! M. ^8 [/ P4 V
  11.             End If( l% x$ Y% c. t2 M* P
  12.         End If
    . [! @. L2 o7 Q" B
  13.     Next
    , H% T' @+ X* a- j. G- t
  14.     If B Then
    4 g% f6 U5 u. @7 l
  15.         MsgBox "存在"5 A/ S+ Z: H0 C% e( a% a
  16.     Else
    + \7 B, t$ b; s& M
  17.         MsgBox "不存在"4 m8 E9 z3 `( D( n, w, e
  18.     End If
    1 q/ o2 i) f" k* `6 F
  19. End Sub8 s$ O# _$ b4 y2 ?) T) r
复制代码
先声明一个变体变量,用块参照对象的"GetAttributes"方法获得块参照对象的属性数组并存放在这个变体变量中,再检查这个数组的下标,如果是-1则说明数组为空,该块参照对象没有属性;如果数组下标大于或等于0,则说明该块参照有属性.
 楼主| 发表于 2010-9-2 09:15:41 | 显示全部楼层
3# woaishuijia * c  X1 ^, @, R9 Z2 N$ c

% A1 \8 E  p7 P' n8 ^我是想查找名字为“属性块”的块。谢谢老大的支持,小弟感激万分。
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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