QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
6天前
查看: 6283|回复: 5
收起左侧

[已答复] VBA:如何查找并替换块内文字?

[复制链接]
发表于 2011-12-7 14:54:44 | 显示全部楼层 |阅读模式 来自: 中国浙江杭州

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

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

x
RT! V; P5 u( A- r. X/ b; n# c# W
) I/ ~! I7 D' x2 R! T
有一批图纸需要更改文字,但文字时以块的形式出现的,包括两行单行文字  y+ e# @' P7 c% g4 z- \  }

( e5 x: \0 c1 S3 \, g# ~$ i其中一行为中文,另一行为英文,内容固定. C: }" g" v/ v+ s6 O
" u% ]5 D6 E. C8 v
比如中国杭州和Hangzhou China) }* Q8 T# V/ i& W5 |

, R0 r% y& ^" d+ N现在要统一改为杭州和Hangzhou6 r9 k7 s$ ^' K, A7 P* a" \) G
& N& n8 `! q) V4 L$ u
但块的名字不知道  [! y# |( S4 u
& u+ q. B9 L2 q; N, T+ [7 `8 p
5 q# E8 `9 {$ d5 `
请问如何用程序实现?请大虾帮忙,谢谢
 楼主| 发表于 2011-12-14 14:23:58 | 显示全部楼层 来自: 中国浙江杭州
自己顶下,还没解决问题,不能沉了
发表于 2011-12-14 19:27:23 | 显示全部楼层 来自: 中国辽宁
你若是真心求助,就应该提供尽可能详细的信息,比如一份DWG文件.
 楼主| 发表于 2011-12-15 13:10:33 | 显示全部楼层 来自: 中国浙江杭州
3# woaishuijia
7 J2 C1 F+ t* @* n) f2 t0 N8 e$ {6 X8 M6 L( J: B$ R1 d+ G. ?
最近实在是太忙了,不好意思4 I) X* _% H4 u
中国杭州改为杭州.dwg (79.74 KB, 下载次数: 6)
发表于 2011-12-15 20:05:46 | 显示全部楼层 来自: 中国辽宁
本帖最后由 woaishuijia 于 2011-12-15 20:07 编辑 ! _# R: S9 a& _  i& @( I

1 P: p4 G, H( r6 G) H下面的代码只针对上传的文档,仅供参考, o2 K8 l6 v, o9 m: k- v% O" Q9 q
  1. Sub A()+ U4 U( m$ C' l& W7 \
  2. Dim Path As String, FileName As String, D As AcadDocument, B As AcadBlock$ x, a* o2 Z6 O- r. V. c# X! Y
  3. On Error GoTo 10& R  P6 p! ~0 }  S; {
  4. '由用户在CAD当前文档的命令行输入需要修改的文件所在目录& y& r- c3 P# r5 c
  5. Path = ThisDrawing.Utility.GetString(True, vbCrLf & "指定文件所在目录:" ): i- S, d& i9 n# u  y; ^
  6. '如用户输入的目录字符串最后一个字符为""则去掉, m& i: X& }3 \# \6 r
  7. If Left(Path, 1) = "" Then Path = Right(Path, Len(Path) - 1)
    $ T9 H; x) ?7 O  p9 b
  8. '逐个打开该目录下的所有"*.DWG"文档
    7 t- E; S  {8 _3 v2 x, A) k: F
  9. FileName = Dir(Path & "\*.dwg" )
    ! l6 m5 U  O3 r
  10. Do Until FileName = ""/ }; X/ s0 ?; G
  11.     Set D = ThisDrawing.Application.Documents.Open(Path & "" & FileName)
    ) X0 h6 {6 D( K' Q0 v3 p6 z
  12.     '遍历该文档中所有块定义
    ' b/ l. ?6 b+ n1 f) i6 O
  13.     For Each B In D.Blocks
    # i$ A  }$ x% c9 O& o. I
  14.         '如果该块定义中只有两个元素则进一步检查其中内容$ g7 \. k8 W; X  L9 o
  15.         '否则跳过
    2 P3 [6 _2 ^. w/ _' w' u4 p# [! U
  16.         If B.Count = 2 Then) b  o3 k# q$ f" ~- o! p# m
  17.             '检查块元素是否为单行文字对象
    ) l+ c1 v% `! ]5 w
  18.             If B.Item(0).ObjectName = "AcDbText" And B.Item(1).ObjectName = "AcDbText" Then- c$ W( C9 d1 X/ T9 x
  19.                 '检查单行文字的内容,如符合要求即修改之,然后保存/ h. B7 U& G" y! s( x; Y
  20.                 If B.Item(0).TextString = "中国杭州" And B.Item(1).TextString = "Hangzhou China" Then, R7 G0 w2 C+ B: S% ?
  21.                     B.Item(0).TextString = "杭州"
    2 U, _/ |& ^, E0 U$ n/ a
  22.                     B.Item(1).TextString = "Hangzhou"
    % Q4 m% ^( Q; L0 A" q3 R
  23.                     D.Save
    2 |2 Y- w# c% F" m
  24.                 ElseIf B.Item(0).TextString = "Hangzhou China" And B.Item(1).TextString = "中国杭州" Then
    3 p7 o. E, o4 {3 e- X
  25.                     B.Item(0).TextString = "Hangzhou"
    3 f% P7 B) h: c" s  r# U. z7 ^' w
  26.                     B.Item(1).TextString = "杭州"" o. L. R5 d- X6 R) j& I
  27.                     D.Save) S, ^/ c; B# p8 ]4 C
  28.                 End If# d6 y* h: Q7 P0 J" f# S
  29.             End If
    9 f$ T  P& y) `4 ?2 ]7 h/ V' M
  30.         End If" Z9 u0 A' X7 S7 [9 [- }, K
  31.     Next
    # R& ]5 _5 L! M2 y5 a! `0 C) j3 G
  32.     '关闭打开的文档
    ; T. Q; Y5 i) C
  33.     D.Close
    0 z- K( w. N4 E0 _0 ]
  34.     '获取下一个文件名
    1 S8 W' E: G. F
  35.     FileName = Dir()
    % _+ O, A& `5 l
  36. Loop
    + a! {  l# A0 H/ |. K  _0 `. k
  37. 10: End Sub
复制代码
 楼主| 发表于 2011-12-16 08:49:38 | 显示全部楼层 来自: 中国浙江杭州
非常感谢版主,问题解决了
! M" q: c5 m; K1 L  x+ O4 z2 h/ }# D4 B) C% H% P' f% o8 B
再次感谢
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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