QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
RT4 ]0 e, g7 T7 o9 e! V6 U& m
" U. A. h$ n3 K/ s4 x2 Q4 t1 J+ F
有一批图纸需要更改文字,但文字时以块的形式出现的,包括两行单行文字# v7 \. @$ g: Y8 N6 ^0 A
, W7 S2 s, T& q2 o$ }/ E2 a5 V/ U" h( I
其中一行为中文,另一行为英文,内容固定
- b, R- ~  v' D5 `9 ^) L. B+ _% V5 N* t5 g; y8 b
比如中国杭州和Hangzhou China
, L$ c( `$ r, D# B8 R
% A% s+ i* O: |9 B+ X现在要统一改为杭州和Hangzhou
# |; A. o2 X% _0 \. D$ B' @
7 `/ v; o7 u0 e- c8 h但块的名字不知道
: G6 z2 i3 H: {
1 c% l- f* Q- p1 i$ [4 ?+ F
6 w6 e. x$ c, h# V: {请问如何用程序实现?请大虾帮忙,谢谢
 楼主| 发表于 2011-12-14 14:23:58 | 显示全部楼层 来自: 中国浙江杭州
自己顶下,还没解决问题,不能沉了
发表于 2011-12-14 19:27:23 | 显示全部楼层 来自: 中国辽宁
你若是真心求助,就应该提供尽可能详细的信息,比如一份DWG文件.
 楼主| 发表于 2011-12-15 13:10:33 | 显示全部楼层 来自: 中国浙江杭州
3# woaishuijia 3 X/ w, J) f* I: B1 c
, r/ F4 ~* a, V7 y& ^
最近实在是太忙了,不好意思" }& S5 L6 m' h
中国杭州改为杭州.dwg (79.74 KB, 下载次数: 7)
发表于 2011-12-15 20:05:46 | 显示全部楼层 来自: 中国辽宁
本帖最后由 woaishuijia 于 2011-12-15 20:07 编辑 # }1 C+ G* I) A, u% E! H- a4 a

7 f# M7 V8 B9 O+ B# |6 I1 b8 V! I下面的代码只针对上传的文档,仅供参考
3 {: L2 v$ A& O4 H+ ~6 w
  1. Sub A()
    - ?: w. q/ d: V$ y- @) }
  2. Dim Path As String, FileName As String, D As AcadDocument, B As AcadBlock  L& L1 K7 G" Y. B- d
  3. On Error GoTo 10
    ! R# R" O; n& K; A+ `
  4. '由用户在CAD当前文档的命令行输入需要修改的文件所在目录
    ( E6 a) U, s9 N* m; ~
  5. Path = ThisDrawing.Utility.GetString(True, vbCrLf & "指定文件所在目录:" )" \% |  s* w% z) J. x$ c5 A0 `
  6. '如用户输入的目录字符串最后一个字符为""则去掉
    . \- O. i# Q! i/ L& J
  7. If Left(Path, 1) = "" Then Path = Right(Path, Len(Path) - 1)
    ( E; E. ~8 n9 C0 o6 r
  8. '逐个打开该目录下的所有"*.DWG"文档
    9 F! D7 z% V" B$ }
  9. FileName = Dir(Path & "\*.dwg" )# I# k, }  `+ @) O7 _- \; x6 B
  10. Do Until FileName = "") L# ]3 m# o; M2 {& L  _  @
  11.     Set D = ThisDrawing.Application.Documents.Open(Path & "" & FileName)
    % f/ I4 \# y, K/ b6 _
  12.     '遍历该文档中所有块定义# z0 ^, i) `" P! R" A
  13.     For Each B In D.Blocks" g6 n7 `" O+ g$ _4 ~+ z
  14.         '如果该块定义中只有两个元素则进一步检查其中内容. N1 {/ E% x' |, m: O
  15.         '否则跳过
    & l0 h2 n$ Q4 {& J6 P$ x" a
  16.         If B.Count = 2 Then
      o7 Z; `! I  j/ E4 g0 v
  17.             '检查块元素是否为单行文字对象
    " ?2 R. S6 ~: t5 p7 }2 v5 y
  18.             If B.Item(0).ObjectName = "AcDbText" And B.Item(1).ObjectName = "AcDbText" Then
    5 K$ I6 G: ?4 c+ B6 r0 p
  19.                 '检查单行文字的内容,如符合要求即修改之,然后保存
    0 g% I* x5 v+ A. O2 Y: F, L+ f
  20.                 If B.Item(0).TextString = "中国杭州" And B.Item(1).TextString = "Hangzhou China" Then; g- ^. e$ |- W) G& P
  21.                     B.Item(0).TextString = "杭州"
    5 `! v. P6 m, }# z
  22.                     B.Item(1).TextString = "Hangzhou"
    ) s2 e; _) Z3 r- g' g) [8 `$ ^8 ^) Q
  23.                     D.Save; o1 c1 j+ g7 [
  24.                 ElseIf B.Item(0).TextString = "Hangzhou China" And B.Item(1).TextString = "中国杭州" Then
    8 K' `0 Q/ O$ g
  25.                     B.Item(0).TextString = "Hangzhou"- Z1 x) v! x. \6 a
  26.                     B.Item(1).TextString = "杭州"6 ~* r6 q3 E( E0 E7 A" l5 w: I1 I5 `
  27.                     D.Save
    $ k# M' o& x* }' ^- Z9 o
  28.                 End If$ w4 W3 G" L$ f  D7 D" T8 E! K
  29.             End If
    $ P; d. F; N5 Q; Y0 C; Z8 q
  30.         End If
    7 Z/ p! P, @8 I! m) ?$ ~) }5 N
  31.     Next
    7 S5 ~1 C# r( `+ v
  32.     '关闭打开的文档. f) y& ?7 {2 u! z2 k* Q$ K7 F
  33.     D.Close' `" i$ p1 ?7 p$ C* t/ `1 G* g
  34.     '获取下一个文件名1 t$ {" M$ e& p* S' f: i% b
  35.     FileName = Dir()
    * y. K6 h9 Y. q" |1 C7 D8 B
  36. Loop' E7 n+ ^% w& V) b1 C
  37. 10: End Sub
复制代码
 楼主| 发表于 2011-12-16 08:49:38 | 显示全部楼层 来自: 中国浙江杭州
非常感谢版主,问题解决了
2 x4 \( E0 w3 }# t/ @! i: v6 ~; t! j% b- O# g
再次感谢
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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