QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 3407|回复: 3
收起左侧

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

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

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

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

x
本帖最后由 woaishuijia 于 2010-9-1 20:17 编辑
0 ]  ^+ r; C5 u% ?* }" n& W
8 z8 T- {+ O* D# O各位大侠,帮小弟看看这段代码是哪里出问题的。我是参考着书上写的
$ x7 e, F8 e! R5 Y
  1. '查找块
    6 H  R; }" w3 Y) B# p$ J/ _
  2. Public Sub FindBlock()
    6 E5 E; ?9 T. g0 T$ H! v3 z, Q8 R8 n' I

  3. - x7 u) x3 w, {) F
  4. Dim Objblock As AcadBlockReference
    2 z, f  D$ ?6 I; h
  5. ) p, @" H4 G$ ~6 h8 W* ]& s
  6. For Each Objblock In ThisDrawing.ModelSpace     '这句话出错了,说是错误13,类型不匹配. e1 h1 A9 j- [- L' q
  7.    If StrComp(Objblock.Name, "属性块") = 0 Then
    4 h1 j7 \) E8 V: e/ J/ V: x
  8.      MsgBox "存在!"- }& s# z( o+ h! a8 k# z3 J
  9.   Else
    ; F. r1 Y- c& N; f4 z# d7 d4 W6 W
  10.      MsgBox "不存在!"
    $ U7 P6 x. Z# w& `6 p, w" G
  11.   End If
    # A- ^, K+ D7 p9 X* B
  12. Next Objblock2 l) z+ \3 `) \  d
  13. & ?6 i& b/ ]% e3 E3 p
  14. End Sub
复制代码
发表于 2010-9-1 20:47:27 | 显示全部楼层 来自: 中国辽宁
参考下面代码

  1. 5 y, _& q8 C( H- E
  2. Sub A()  y2 `$ T. w. l6 ?
  3.     Dim E As AcadEntity, BR As AcadBlockReference, B As Boolean  A- b# V4 K* w
  4.     For Each E In ThisDrawing.ModelSpace9 I  o7 T2 {, {  ?, c" g
  5.         If E.ObjectName = "AcDbBlockReference" Then  S! [' {* \5 c8 Q' R' R# w$ ~
  6.             Set BR = E) g) h5 R. K- ^( \- Z8 |+ n
  7.             If BR.Name = "属性块" Then
    3 d8 \6 X% X  A( |% z& V
  8.                 B = True( G- D; [8 W8 ]! G
  9.                 Exit For1 f) @# b( }) B: D( U6 m+ E% v
  10.             End If1 v  }7 X* C: J" ~
  11.         End If
    ; Z) L- j- Q: J1 Q, y# D4 V: n
  12.     Next5 Z4 O4 W* E( y9 w3 q1 K3 k
  13.     If B Then* u- w- H, C4 K+ ]% g
  14.         MsgBox "存在". ^  b( e' W% |0 F$ E2 [
  15.     Else5 a! S! _" f; W' b1 a# B. }
  16.         MsgBox "不存在"
    1 ]* O6 t  w% f: `6 a
  17.     End If
    7 P: K. m! T2 a7 M5 |5 J
  18. End Sub
    " l( t5 T$ N) q# g7 @
复制代码
"For Each XX In ThisDrawing.ModelSpace....Next"是循环遍历模型空间所有图元对象,而你的循环变量声明为块参照对象.假如模型空间只有块参照一种对象,那你的代码就不会出错.如果模型空间中存在多种图元对象,那当然会出现"类型不匹配"错误了.所以,遍历模型空间要使用"AcadEntity"型变量或者"Object"甚至是"Variant".
$ b9 d; z: t% c4 S上面的代码中用"AcadEntity"型变量做循环变量遍历模型空间,检查每个图元的"ObjectName"属性,当发现"AcDbBlockReference"(块参照)图元时,再进一步检查是否是所要查找的块参照.
发表于 2010-9-1 21:07:20 | 显示全部楼层 来自: 中国辽宁
有个问题:你是要查找名为"属性块"的块参照,还是要查找带有属性的块参照?
' X$ J2 |; \0 \4 c9 ]1 s如果是前者,上面的代码就可以了.如果是后者,要用下面的代码

  1. ( Q+ T0 @9 O, D- N- y) @  \
  2. Sub A()
      f, v( z  i1 H$ Y' _% k" f9 L
  3.     Dim E As AcadEntity, BR As AcadBlockReference, B As Boolean, Atts As Variant
    % D5 y/ s- Y9 b5 y" `- t" {4 I
  4.     For Each E In ThisDrawing.ModelSpace4 ]4 [. q/ d* {& I
  5.         If E.ObjectName = "AcDbBlockReference" Then; R8 T# p, j3 q2 {+ S1 C( {
  6.             Set BR = E0 ]6 G3 X, G0 K; f& c) D
  7.             Atts = BR.GetAttributes
    5 s, p  v4 O* v, Y
  8.             If UBound(Atts) >= 0 Then
    - s* Z0 w& f, l! J, o$ s
  9.                 B = True3 [. Z  w8 s3 ?. ?
  10.                 Exit For) B( k, o$ ~; \/ i
  11.             End If. y8 h2 c: `5 d, z6 s8 {: K' f) a
  12.         End If" M+ l5 s# G  |# g! v4 ^
  13.     Next1 ~9 W, n$ e. m% S' ~) c% [
  14.     If B Then
      v( Q4 w0 ?1 ^7 t- X8 C' y
  15.         MsgBox "存在"
    " G  d2 I' h1 S% K9 m/ ?
  16.     Else9 S1 [; [3 c( O' m) [0 v
  17.         MsgBox "不存在"
    * N9 P8 |8 b; @+ z6 E
  18.     End If
    8 |8 [( t9 U5 U% b
  19. End Sub0 p& d; l- x) j' a
复制代码
先声明一个变体变量,用块参照对象的"GetAttributes"方法获得块参照对象的属性数组并存放在这个变体变量中,再检查这个数组的下标,如果是-1则说明数组为空,该块参照对象没有属性;如果数组下标大于或等于0,则说明该块参照有属性.
 楼主| 发表于 2010-9-2 09:15:41 | 显示全部楼层 来自: 德国
3# woaishuijia
$ ]1 U2 l0 f! L) Q2 i7 M! ?" t3 ^5 p' o# K
我是想查找名字为“属性块”的块。谢谢老大的支持,小弟感激万分。
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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