QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
RT* `: ^5 W' |- I3 ]

2 k8 J1 d- E& [& X8 T- x9 K9 c- B有一批图纸需要更改文字,但文字时以块的形式出现的,包括两行单行文字4 _9 ~/ V0 x- Y( P  h
8 G0 y# N" x1 \& S  ]
其中一行为中文,另一行为英文,内容固定
; r5 Q; c# G; [. o7 t' u4 k! G. a0 x4 N; }
比如中国杭州和Hangzhou China
, ~2 s) B' X. F! l3 b7 L6 M0 c% H: ~
现在要统一改为杭州和Hangzhou0 Y% C( j6 o* r% C* w+ z

  i; ?6 x- ~  A: ~但块的名字不知道6 t4 a2 f, F. Z4 \& \1 C! V$ R

, _  r  j9 A& M
0 W7 E0 h. p! n! b( f& ^8 d请问如何用程序实现?请大虾帮忙,谢谢
 楼主| 发表于 2011-12-14 14:23:58 | 显示全部楼层 来自: 中国浙江杭州
自己顶下,还没解决问题,不能沉了
发表于 2011-12-14 19:27:23 | 显示全部楼层 来自: 中国辽宁
你若是真心求助,就应该提供尽可能详细的信息,比如一份DWG文件.
 楼主| 发表于 2011-12-15 13:10:33 | 显示全部楼层 来自: 中国浙江杭州
3# woaishuijia . P1 N$ l' f0 ^- k
; M4 w' g# ~! p0 @( u
最近实在是太忙了,不好意思6 ]7 c" o+ a+ ~/ `8 X" r" n/ l& Q
中国杭州改为杭州.dwg (79.74 KB, 下载次数: 7)
发表于 2011-12-15 20:05:46 | 显示全部楼层 来自: 中国辽宁
本帖最后由 woaishuijia 于 2011-12-15 20:07 编辑 + d- `( P2 e% T, S* [

  A7 r& ~$ O, s3 e下面的代码只针对上传的文档,仅供参考# w, Y$ N. y8 Q* V$ f$ _* S
  1. Sub A()
    6 p' \7 y; X! {  K9 T* R+ `
  2. Dim Path As String, FileName As String, D As AcadDocument, B As AcadBlock) T$ w- ^+ ^6 H* g8 q8 Z$ A: j0 ~
  3. On Error GoTo 10* h' J3 I  C" O
  4. '由用户在CAD当前文档的命令行输入需要修改的文件所在目录
    9 V7 i) K" g" l
  5. Path = ThisDrawing.Utility.GetString(True, vbCrLf & "指定文件所在目录:" )  b$ ]( z( F; T1 ]9 O, O: U# V8 c
  6. '如用户输入的目录字符串最后一个字符为""则去掉9 O0 }, x+ I9 a. ^0 A
  7. If Left(Path, 1) = "" Then Path = Right(Path, Len(Path) - 1)5 V1 M' i' ^; \3 _& J: T
  8. '逐个打开该目录下的所有"*.DWG"文档
    1 B! t# D( k" R
  9. FileName = Dir(Path & "\*.dwg" )9 O& P- u: {" C! U% s! E
  10. Do Until FileName = "") j& i5 [4 A/ }5 I8 t0 v# J4 I
  11.     Set D = ThisDrawing.Application.Documents.Open(Path & "" & FileName)) i, t( v/ V2 u) \
  12.     '遍历该文档中所有块定义& W, @9 s, N1 G& N( ?9 A
  13.     For Each B In D.Blocks  q4 I+ o: g9 S# D
  14.         '如果该块定义中只有两个元素则进一步检查其中内容
    & K& t8 t8 I6 Q! S  S
  15.         '否则跳过/ \4 X! B$ w/ H( R" R9 L- M
  16.         If B.Count = 2 Then% j' Q7 l, J* B/ y0 F
  17.             '检查块元素是否为单行文字对象" v3 ?0 ?" X0 k$ S+ m) ~! @/ {5 @2 Z
  18.             If B.Item(0).ObjectName = "AcDbText" And B.Item(1).ObjectName = "AcDbText" Then
    3 f! n: @8 Q/ C% y
  19.                 '检查单行文字的内容,如符合要求即修改之,然后保存+ Z* y$ }) |* B
  20.                 If B.Item(0).TextString = "中国杭州" And B.Item(1).TextString = "Hangzhou China" Then
    8 F' C  z; G% C6 Q7 B! Z
  21.                     B.Item(0).TextString = "杭州"
    ( N) k" ~  M" Z$ G9 w
  22.                     B.Item(1).TextString = "Hangzhou"% k$ C+ Z8 x2 X
  23.                     D.Save7 W. L' }! a* I- A
  24.                 ElseIf B.Item(0).TextString = "Hangzhou China" And B.Item(1).TextString = "中国杭州" Then9 ~' w" \! |- g, i+ \
  25.                     B.Item(0).TextString = "Hangzhou"% s" X  V% w7 h: j/ H1 Y: j' b
  26.                     B.Item(1).TextString = "杭州"
    + \8 {* _( S4 V2 e
  27.                     D.Save6 @* F% s! Y" S
  28.                 End If2 b/ U2 S4 S7 v; I" l
  29.             End If
    5 y/ i4 o3 M0 u$ E- K" V
  30.         End If
    / {' f0 k& a, B
  31.     Next% N5 X, H8 q- t
  32.     '关闭打开的文档1 @3 J) H- u  t6 u  q9 h
  33.     D.Close
    3 t+ k# c  w+ W& V
  34.     '获取下一个文件名
    , [: `4 g% ^& ?6 @" f' }" n
  35.     FileName = Dir()7 U6 h- `8 L2 r( s7 O; |2 M& M
  36. Loop
    3 ~7 b# ]0 P7 ?* a. X# d& f
  37. 10: End Sub
复制代码
 楼主| 发表于 2011-12-16 08:49:38 | 显示全部楼层 来自: 中国浙江杭州
非常感谢版主,问题解决了
! [& l' s# s. O; u  l1 Q* Z3 ~+ w; R" h- a
再次感谢
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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