QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
RT
2 u! j8 C) G$ P
8 M( m  j; f/ j1 T6 d有一批图纸需要更改文字,但文字时以块的形式出现的,包括两行单行文字- v8 M: P% ~/ _4 j
4 ?7 V5 t) G9 f, D3 Z1 x
其中一行为中文,另一行为英文,内容固定
/ O$ {0 V: }# n% X5 X- ~1 T4 o3 ?# h( o% f  D
比如中国杭州和Hangzhou China- u7 W- q* t1 @8 P& y* {7 `# t
4 J7 P, G8 I+ G0 v) K' z) C0 R
现在要统一改为杭州和Hangzhou* ~: {- T2 c( q* [7 F: g: [1 d
8 y9 b& u. p. Q
但块的名字不知道! d% {' n2 x7 T- p% f
4 o1 ~4 n: r1 M3 m# ^
1 j" U6 C  d7 t* g# u" A
请问如何用程序实现?请大虾帮忙,谢谢
 楼主| 发表于 2011-12-14 14:23:58 | 显示全部楼层 来自: 中国浙江杭州
自己顶下,还没解决问题,不能沉了
发表于 2011-12-14 19:27:23 | 显示全部楼层 来自: 中国辽宁
你若是真心求助,就应该提供尽可能详细的信息,比如一份DWG文件.
 楼主| 发表于 2011-12-15 13:10:33 | 显示全部楼层 来自: 中国浙江杭州
3# woaishuijia
) }' F7 R) f3 E+ ^
% Y: s1 V2 V! ]; z, V最近实在是太忙了,不好意思
5 ?9 o9 a! A$ w. T- _1 I 中国杭州改为杭州.dwg (79.74 KB, 下载次数: 8)
发表于 2011-12-15 20:05:46 | 显示全部楼层 来自: 中国辽宁
本帖最后由 woaishuijia 于 2011-12-15 20:07 编辑
' H1 ?0 @8 n; {- @- `3 }
& }* u8 A+ Y( \, k下面的代码只针对上传的文档,仅供参考
8 }- Z7 D% N" \
  1. Sub A()7 {2 e, [' a2 d2 u
  2. Dim Path As String, FileName As String, D As AcadDocument, B As AcadBlock9 V" M/ {5 v2 u, @0 A
  3. On Error GoTo 104 A/ J9 R! L- P& X( V
  4. '由用户在CAD当前文档的命令行输入需要修改的文件所在目录+ W$ D* D7 V2 U% r" V
  5. Path = ThisDrawing.Utility.GetString(True, vbCrLf & "指定文件所在目录:" )
    0 J! q, U. r9 C  b, U% ~3 |; j" E/ m
  6. '如用户输入的目录字符串最后一个字符为""则去掉
    $ H0 G3 t) t$ ?0 z1 L
  7. If Left(Path, 1) = "" Then Path = Right(Path, Len(Path) - 1). ?6 v. e! b. w! m8 l
  8. '逐个打开该目录下的所有"*.DWG"文档  E2 y4 y9 o3 B+ W8 Q2 V. N
  9. FileName = Dir(Path & "\*.dwg" )
    7 ~1 v, Q& J2 n  L5 [3 v5 t
  10. Do Until FileName = ""* O1 V. G" X8 j' y* b) w
  11.     Set D = ThisDrawing.Application.Documents.Open(Path & "" & FileName)
    & U! [& ?+ w% Y3 O8 G0 P) _
  12.     '遍历该文档中所有块定义! |! Q8 l4 `% W& y
  13.     For Each B In D.Blocks: g+ t8 @5 U4 o8 l# c: \4 n
  14.         '如果该块定义中只有两个元素则进一步检查其中内容
    ' u, T/ S& i% [6 q# H" I' j8 a7 }
  15.         '否则跳过1 M; z- J  [& w( |- |. `
  16.         If B.Count = 2 Then
    ) i' d  q3 v$ p, X4 Y  f- i6 o
  17.             '检查块元素是否为单行文字对象6 ^* L2 {9 D5 e: H
  18.             If B.Item(0).ObjectName = "AcDbText" And B.Item(1).ObjectName = "AcDbText" Then, I, x+ u) Q1 z5 u- w6 F
  19.                 '检查单行文字的内容,如符合要求即修改之,然后保存5 R. ^3 Q0 y) H
  20.                 If B.Item(0).TextString = "中国杭州" And B.Item(1).TextString = "Hangzhou China" Then
    3 H) _0 `- i0 e* J. Y3 P# t/ b! X
  21.                     B.Item(0).TextString = "杭州", ^  ]) Q( T) E  H2 M# `7 Z9 y
  22.                     B.Item(1).TextString = "Hangzhou"$ H8 j4 Z! L2 p) C! N7 a
  23.                     D.Save
    / `9 Y) V7 D  M6 {; E+ O
  24.                 ElseIf B.Item(0).TextString = "Hangzhou China" And B.Item(1).TextString = "中国杭州" Then
    , \; T6 _: |- J
  25.                     B.Item(0).TextString = "Hangzhou"
    , `  g6 v/ Z% W, F1 A9 N$ p
  26.                     B.Item(1).TextString = "杭州"# J4 E6 h) c" _8 w$ g* ^3 O, n
  27.                     D.Save* c7 w) r# P& g" _: B% z2 \
  28.                 End If( C0 J0 }4 z8 y0 @/ a" _
  29.             End If
    1 [! @8 o( I: Y0 |
  30.         End If
    2 j% S5 C- q& ?$ L6 @
  31.     Next" [8 T0 _" v+ j; X. |, d
  32.     '关闭打开的文档: T; F5 |. u7 ?
  33.     D.Close8 T) g9 o& o0 @1 m) ?
  34.     '获取下一个文件名
    # n9 ^5 k: Y/ [4 ]
  35.     FileName = Dir()
    : E, ]: s  h6 h1 A+ G
  36. Loop
    ! [( q* s% ]. _$ I( k' `
  37. 10: End Sub
复制代码
 楼主| 发表于 2011-12-16 08:49:38 | 显示全部楼层 来自: 中国浙江杭州
非常感谢版主,问题解决了8 W4 ]& o8 J  r, J

5 k  r% y2 s$ X再次感谢
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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