QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 6322|回复: 5
收起左侧

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

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

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

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

x
RT" I3 x; B9 e! ~  ]) a. _6 O! F

/ q& p9 [/ S! n7 E% E有一批图纸需要更改文字,但文字时以块的形式出现的,包括两行单行文字
# a3 j7 ~0 N+ b
  L: Y& u  ]0 _3 d$ R/ C9 ?其中一行为中文,另一行为英文,内容固定4 @1 o1 \- m. R! q

+ q8 d: x- ^; Y0 [比如中国杭州和Hangzhou China. D/ J7 x' I; D  {2 U# T+ Y

# \7 G" T& |/ {  B1 M现在要统一改为杭州和Hangzhou) c3 N- g9 j" ^. u9 E1 G3 c

/ R: O$ W7 N1 W' [) t/ m* B但块的名字不知道- I, e6 M+ U2 |, b$ s
3 a( V% u7 ^9 R0 c8 F
' R6 X# ~" u7 o3 x6 L: b
请问如何用程序实现?请大虾帮忙,谢谢
 楼主| 发表于 2011-12-14 14:23:58 | 显示全部楼层 来自: 中国浙江杭州
自己顶下,还没解决问题,不能沉了
发表于 2011-12-14 19:27:23 | 显示全部楼层 来自: 中国辽宁
你若是真心求助,就应该提供尽可能详细的信息,比如一份DWG文件.
 楼主| 发表于 2011-12-15 13:10:33 | 显示全部楼层 来自: 中国浙江杭州
3# woaishuijia
  g' c7 f% t' g3 r' Q" [! V6 E  @4 T; B, L4 P: ^6 |7 _
最近实在是太忙了,不好意思4 ~& k5 ]2 C( a6 F8 W0 w/ x3 i
中国杭州改为杭州.dwg (79.74 KB, 下载次数: 7)
发表于 2011-12-15 20:05:46 | 显示全部楼层 来自: 中国辽宁
本帖最后由 woaishuijia 于 2011-12-15 20:07 编辑 . r$ v5 \' o8 V4 J/ K; |
! N5 e' V9 m3 s+ i1 s
下面的代码只针对上传的文档,仅供参考
8 V$ L6 d/ \% y9 B+ m: i
  1. Sub A()+ M1 K: m: L5 Z0 D0 T7 M+ }
  2. Dim Path As String, FileName As String, D As AcadDocument, B As AcadBlock
    8 k2 U" r7 \; J  ~8 A! F0 r
  3. On Error GoTo 10- L0 r9 N" x4 U& c9 @
  4. '由用户在CAD当前文档的命令行输入需要修改的文件所在目录
    - z- T1 w( p. c
  5. Path = ThisDrawing.Utility.GetString(True, vbCrLf & "指定文件所在目录:" )0 s1 `6 f( a7 a  V! S
  6. '如用户输入的目录字符串最后一个字符为""则去掉
    ' O! t0 Y3 g! G4 A" i, }
  7. If Left(Path, 1) = "" Then Path = Right(Path, Len(Path) - 1)
    + G! e, ?1 ?' P3 s# }, X; n2 j
  8. '逐个打开该目录下的所有"*.DWG"文档2 d: B8 S% M' M% Q+ Q* \3 Z
  9. FileName = Dir(Path & "\*.dwg" )2 ^* k/ N+ D, Y% T+ [+ p( D! d. x
  10. Do Until FileName = ""
    2 t' u! ]8 j$ |6 w
  11.     Set D = ThisDrawing.Application.Documents.Open(Path & "" & FileName)
    ' w/ e# \% u( S. G% s1 J# Q
  12.     '遍历该文档中所有块定义
    0 k6 r. [# o) C# x  x
  13.     For Each B In D.Blocks
    " y( f* d8 X* y) u4 z) L
  14.         '如果该块定义中只有两个元素则进一步检查其中内容
    8 X# W$ u& ^  e6 R0 ]  O  Z% ?
  15.         '否则跳过
    , u6 I2 ]* V) ?' x; g% J0 T0 P& x
  16.         If B.Count = 2 Then
    . ^, L& F0 h/ {; Y- u
  17.             '检查块元素是否为单行文字对象
    * Y4 J2 U  q7 o+ ?7 T, q8 J4 n+ r) k
  18.             If B.Item(0).ObjectName = "AcDbText" And B.Item(1).ObjectName = "AcDbText" Then- w; h4 e8 E3 j( d5 |/ Y
  19.                 '检查单行文字的内容,如符合要求即修改之,然后保存
    ) [8 i7 c2 G2 F+ t  u9 ~
  20.                 If B.Item(0).TextString = "中国杭州" And B.Item(1).TextString = "Hangzhou China" Then# c+ F# i7 \7 Y- m* j
  21.                     B.Item(0).TextString = "杭州"1 P+ x  E$ d0 F# {1 Y! J* Q
  22.                     B.Item(1).TextString = "Hangzhou"
    * g) x, |4 q0 ]1 K
  23.                     D.Save
    : o. K; s$ d' G2 q" u. K
  24.                 ElseIf B.Item(0).TextString = "Hangzhou China" And B.Item(1).TextString = "中国杭州" Then/ }7 c% }7 u5 I$ G
  25.                     B.Item(0).TextString = "Hangzhou"7 F) y& [0 H6 m* u) e
  26.                     B.Item(1).TextString = "杭州"* Q4 L, x6 A% b/ E# c& U
  27.                     D.Save
    6 i& f# f8 g; }
  28.                 End If* `7 K) v6 e' X9 B7 w
  29.             End If" _8 A: R. x9 p* q: d
  30.         End If
    * [" h6 o8 K; {8 N8 X. z3 R
  31.     Next
    * r8 D2 L) u& z* a% F: m
  32.     '关闭打开的文档7 G) c* ^: e$ V
  33.     D.Close8 V2 W: k1 E" H: z; \% Z4 z
  34.     '获取下一个文件名
    8 i1 U: z( l) d  s4 L" L& @
  35.     FileName = Dir()
      u% g5 C: ~' x: L7 \0 \! b
  36. Loop! }! y& o/ m, x0 v9 a8 v
  37. 10: End Sub
复制代码
 楼主| 发表于 2011-12-16 08:49:38 | 显示全部楼层 来自: 中国浙江杭州
非常感谢版主,问题解决了
1 j2 W6 i) X3 x- t" U; p, d/ Y& F9 Q+ S! X0 l! P+ W
再次感谢
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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