QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
RT
! B3 j6 y- p: b. \3 _
) h+ C6 X  [! \2 ?0 m有一批图纸需要更改文字,但文字时以块的形式出现的,包括两行单行文字
# m2 Y* v! [9 I# q* Q8 F4 W! t; C2 y, K' z# n7 o; r- u- u/ |8 q3 a
其中一行为中文,另一行为英文,内容固定
& I, y9 |# F+ K% c
2 B- v# v( x) L% g- B1 \3 ]比如中国杭州和Hangzhou China
" m: I$ ]1 Q' k2 U$ e
4 D1 o5 c+ h! ?' |. l现在要统一改为杭州和Hangzhou
5 d9 w- ?7 U1 P$ a" w
4 n) o% q* a( \, e' l但块的名字不知道% E7 t1 Z* X8 Y7 c& |
/ Z% ?6 r, E! Q

) C6 t' w7 K$ b请问如何用程序实现?请大虾帮忙,谢谢
 楼主| 发表于 2011-12-14 14:23:58 | 显示全部楼层 来自: 中国浙江杭州
自己顶下,还没解决问题,不能沉了
发表于 2011-12-14 19:27:23 | 显示全部楼层 来自: 中国辽宁
你若是真心求助,就应该提供尽可能详细的信息,比如一份DWG文件.
 楼主| 发表于 2011-12-15 13:10:33 | 显示全部楼层 来自: 中国浙江杭州
3# woaishuijia ( C+ s. x/ x) X

+ ~. y/ Y+ _& i. I, b# R- ?+ \最近实在是太忙了,不好意思# F) C" D. T3 t; L. T: T
中国杭州改为杭州.dwg (79.74 KB, 下载次数: 7)
发表于 2011-12-15 20:05:46 | 显示全部楼层 来自: 中国辽宁
本帖最后由 woaishuijia 于 2011-12-15 20:07 编辑
) f( @% L3 m9 O% U" D0 U2 h7 Q0 z1 c
下面的代码只针对上传的文档,仅供参考
# t  t1 i7 `) }- S" n
  1. Sub A()
    $ {& V* u' x4 p+ g" K% L
  2. Dim Path As String, FileName As String, D As AcadDocument, B As AcadBlock+ N* j& F; s# \9 X4 T
  3. On Error GoTo 10
    6 n! O. X- c4 M1 h9 S% A9 R
  4. '由用户在CAD当前文档的命令行输入需要修改的文件所在目录% C* ~+ o8 r# |* _. M- g6 C
  5. Path = ThisDrawing.Utility.GetString(True, vbCrLf & "指定文件所在目录:" )
    5 y& Q+ H7 g. j
  6. '如用户输入的目录字符串最后一个字符为""则去掉
    & P5 Z5 Q0 n5 j6 ?. q
  7. If Left(Path, 1) = "" Then Path = Right(Path, Len(Path) - 1)( [" B8 z* u) z" T6 c
  8. '逐个打开该目录下的所有"*.DWG"文档3 X; p+ d' |9 ?- p1 B1 O
  9. FileName = Dir(Path & "\*.dwg" )( a5 b) D0 ]7 @% c
  10. Do Until FileName = ""8 g0 B- ~8 e& O: Q
  11.     Set D = ThisDrawing.Application.Documents.Open(Path & "" & FileName)
    , v. U0 Z- K- U7 M
  12.     '遍历该文档中所有块定义% S# R8 z: r* ?. i& j- L2 R0 M, ]
  13.     For Each B In D.Blocks. o2 K+ _: u8 ~" s8 }% L" V9 z
  14.         '如果该块定义中只有两个元素则进一步检查其中内容6 v7 g8 H3 S- @  L
  15.         '否则跳过
    3 J$ P' a( B5 z9 c. J* c
  16.         If B.Count = 2 Then( m. K* Y) k% N$ P
  17.             '检查块元素是否为单行文字对象! O( V$ l$ q  P' A  h3 c; A) g
  18.             If B.Item(0).ObjectName = "AcDbText" And B.Item(1).ObjectName = "AcDbText" Then% g* q+ h+ T+ F, k1 Y$ ]' B" s
  19.                 '检查单行文字的内容,如符合要求即修改之,然后保存5 H* y9 a6 {; X2 N6 ^& L7 D
  20.                 If B.Item(0).TextString = "中国杭州" And B.Item(1).TextString = "Hangzhou China" Then6 p( u5 b  V# ]5 e0 g( {5 u
  21.                     B.Item(0).TextString = "杭州"% s& X- {+ @, ^6 @
  22.                     B.Item(1).TextString = "Hangzhou"5 u$ s- O6 @; s
  23.                     D.Save, v* G; W3 C# @% U% X
  24.                 ElseIf B.Item(0).TextString = "Hangzhou China" And B.Item(1).TextString = "中国杭州" Then
    ) M' y  v' ?0 m% B
  25.                     B.Item(0).TextString = "Hangzhou"
    " a, O' A8 B' n" i0 n# n
  26.                     B.Item(1).TextString = "杭州"
    8 G2 y8 M& [, _2 H
  27.                     D.Save
    ( {. C+ j. g; K* l1 b5 F
  28.                 End If
    / t; `' {0 h% Q6 R2 J. P
  29.             End If; B2 `4 E6 U% q9 k! @0 A% Q6 r
  30.         End If
    4 m% `- j- y7 C/ X* u5 p
  31.     Next. S" d  E& R; ~
  32.     '关闭打开的文档
    : L. j; [' }- g, x- ?
  33.     D.Close
    * i, O1 h: E1 w7 v8 N8 z; |* F' L4 W( s
  34.     '获取下一个文件名
    % E  Q* T: f4 C9 |& J  [
  35.     FileName = Dir()
    5 r2 J. W+ c0 j* V5 {) f
  36. Loop/ Z9 p- N: ]) }/ \7 u3 ?
  37. 10: End Sub
复制代码
 楼主| 发表于 2011-12-16 08:49:38 | 显示全部楼层 来自: 中国浙江杭州
非常感谢版主,问题解决了
: D: j2 X/ U6 H7 J% w; ]
0 Q; y1 L  P+ N& ~再次感谢
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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