QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
RT
) Y+ H1 w$ r: N, b( u; j
, y/ j/ K6 g9 B3 G4 z1 @有一批图纸需要更改文字,但文字时以块的形式出现的,包括两行单行文字
' ?4 k: h' M& \* R8 L( p8 _: z0 [/ u( o2 N1 @! ^# \) A
其中一行为中文,另一行为英文,内容固定0 w/ J8 E$ j5 j# X1 g- _) F3 {/ l/ Q
2 I1 y9 {2 b  G( ~9 H. k* [4 b
比如中国杭州和Hangzhou China3 P4 B9 p; e/ H8 Q3 y
. m7 l6 s+ }" _* u5 Z
现在要统一改为杭州和Hangzhou7 e1 p" Y' K2 e$ o1 ?( L& ]. [/ V
! d0 r  Z% f- u
但块的名字不知道
* O+ X8 {6 `9 Y! q, q
; t4 b( m$ }' m: F# C9 b
: {# S4 e5 d: b. K- w请问如何用程序实现?请大虾帮忙,谢谢
 楼主| 发表于 2011-12-14 14:23:58 | 显示全部楼层 来自: 中国浙江杭州
自己顶下,还没解决问题,不能沉了
发表于 2011-12-14 19:27:23 | 显示全部楼层 来自: 中国辽宁
你若是真心求助,就应该提供尽可能详细的信息,比如一份DWG文件.
 楼主| 发表于 2011-12-15 13:10:33 | 显示全部楼层 来自: 中国浙江杭州
3# woaishuijia
( X+ u/ z- W' q, H) O3 F( Z7 g4 O- ^/ S; p
最近实在是太忙了,不好意思
0 \$ v3 ]3 e$ P7 g 中国杭州改为杭州.dwg (79.74 KB, 下载次数: 6)
发表于 2011-12-15 20:05:46 | 显示全部楼层 来自: 中国辽宁
本帖最后由 woaishuijia 于 2011-12-15 20:07 编辑
, y" S3 g# k) e% i1 a! r9 Q" c8 v: g: ?0 a  q! }$ o
下面的代码只针对上传的文档,仅供参考2 j+ p2 I) ]% q) s. Z3 }" x
  1. Sub A()
    6 G) @8 D+ Z) j) t1 T
  2. Dim Path As String, FileName As String, D As AcadDocument, B As AcadBlock
    5 P2 J* `5 n" F( H* ?, Q
  3. On Error GoTo 10- J9 s: d) [$ r  q& Y1 j# N% [. f
  4. '由用户在CAD当前文档的命令行输入需要修改的文件所在目录
    % |  ~# _7 m5 O/ j' H
  5. Path = ThisDrawing.Utility.GetString(True, vbCrLf & "指定文件所在目录:" ), v# S/ U* \2 k" L8 ]4 {' H
  6. '如用户输入的目录字符串最后一个字符为""则去掉
    4 t. N9 h6 C* g0 @9 Y5 m) E: f  J5 Q
  7. If Left(Path, 1) = "" Then Path = Right(Path, Len(Path) - 1)9 t  ~- C- K8 o% i) ]/ p( V
  8. '逐个打开该目录下的所有"*.DWG"文档2 d& P7 U% B" q0 b8 S* c
  9. FileName = Dir(Path & "\*.dwg" )- J; ], x* H8 D5 e
  10. Do Until FileName = ""- V" b; f) [1 G/ G$ K+ d
  11.     Set D = ThisDrawing.Application.Documents.Open(Path & "" & FileName)8 v* \8 a( }7 r- m: ]; _, s) g% _
  12.     '遍历该文档中所有块定义0 f; V( X/ u5 X; m
  13.     For Each B In D.Blocks
    ( m* e8 z2 X$ f3 T& y
  14.         '如果该块定义中只有两个元素则进一步检查其中内容
    * ?; s0 C3 Q3 r: D# \  h2 e
  15.         '否则跳过
    " o3 ?& j0 b4 y9 X' g
  16.         If B.Count = 2 Then/ w. B( K- k: }. |! M9 c
  17.             '检查块元素是否为单行文字对象! P$ _3 B1 \4 k2 _6 @
  18.             If B.Item(0).ObjectName = "AcDbText" And B.Item(1).ObjectName = "AcDbText" Then
    ) y& l6 ^( |; P. w6 W
  19.                 '检查单行文字的内容,如符合要求即修改之,然后保存
    ( X( s5 H. y9 L  ?
  20.                 If B.Item(0).TextString = "中国杭州" And B.Item(1).TextString = "Hangzhou China" Then4 t, {0 t# H0 ?4 ^+ |3 I
  21.                     B.Item(0).TextString = "杭州"6 W1 E7 V" b! \! I3 ?
  22.                     B.Item(1).TextString = "Hangzhou"
    4 ^  E5 R5 F5 i; [) Q
  23.                     D.Save
    9 A3 n6 _$ D, F$ p, M
  24.                 ElseIf B.Item(0).TextString = "Hangzhou China" And B.Item(1).TextString = "中国杭州" Then& |' l! l$ r+ z
  25.                     B.Item(0).TextString = "Hangzhou"- Y: [/ V$ w& b; m1 e
  26.                     B.Item(1).TextString = "杭州"3 b' E5 K4 }, o6 W
  27.                     D.Save- l. e8 z% d* U/ J2 N/ }. Q7 M1 o/ j& b- @
  28.                 End If+ H6 S' c3 P: x; J+ t9 U
  29.             End If5 v/ n8 a" ]4 r# [
  30.         End If) A' L9 z; B4 g, b3 Q3 Q  ?* C  E# o
  31.     Next
    * }, R1 z% P1 y& k6 n" h) y
  32.     '关闭打开的文档
    0 f. N: d2 ?4 \! a" @6 I- R
  33.     D.Close
    ' A6 l  R, e) d7 ^- K9 s' l
  34.     '获取下一个文件名
    + H$ W; t( [" H6 w  C8 G" I
  35.     FileName = Dir()  n0 E  c5 L9 M% ]4 q
  36. Loop
    + |0 X9 e2 G1 ]
  37. 10: End Sub
复制代码
 楼主| 发表于 2011-12-16 08:49:38 | 显示全部楼层 来自: 中国浙江杭州
非常感谢版主,问题解决了
% g- K- ?6 \" {6 _( M4 h$ m0 z1 f5 T6 d% x
再次感谢
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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