QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
RT
9 |! W$ P  X# S* N% G) a0 ?+ B0 \( t9 ~* ^0 N1 v. F0 K7 V! O
有一批图纸需要更改文字,但文字时以块的形式出现的,包括两行单行文字4 }" t0 J7 ]& `* ^
( c( k, w- Y+ h
其中一行为中文,另一行为英文,内容固定6 |0 D8 s: N0 D" x4 W: _/ z

" V! r) v: H$ e0 k% N比如中国杭州和Hangzhou China, _, k, }/ c% Z& U
3 m0 [7 b7 F" {- D
现在要统一改为杭州和Hangzhou
# r7 U' ]1 j0 K8 V  k7 y3 `7 Q/ y
" t4 _+ m, A! K, ~; f但块的名字不知道5 O0 `0 K* Z" y# c, c' D8 ~

9 l- y0 g+ s, @- @7 F  a3 m# d' l
5 w0 q! q$ L. h' m# c% t3 W请问如何用程序实现?请大虾帮忙,谢谢
 楼主| 发表于 2011-12-14 14:23:58 | 显示全部楼层 来自: 中国浙江杭州
自己顶下,还没解决问题,不能沉了
发表于 2011-12-14 19:27:23 | 显示全部楼层 来自: 中国辽宁
你若是真心求助,就应该提供尽可能详细的信息,比如一份DWG文件.
 楼主| 发表于 2011-12-15 13:10:33 | 显示全部楼层 来自: 中国浙江杭州
3# woaishuijia 9 A& u0 Z/ z( D# J/ b' r: F! ~

% z: N  t! }2 t: m9 K9 X) B最近实在是太忙了,不好意思( t- I4 i( [5 }) H
中国杭州改为杭州.dwg (79.74 KB, 下载次数: 6)
发表于 2011-12-15 20:05:46 | 显示全部楼层 来自: 中国辽宁
本帖最后由 woaishuijia 于 2011-12-15 20:07 编辑
3 b( b$ }3 C8 r$ t) Q3 N. d& A5 _, B9 ]( t
下面的代码只针对上传的文档,仅供参考# ]! f5 c/ N! z
  1. Sub A()
    / u/ s9 a$ Z3 P# L
  2. Dim Path As String, FileName As String, D As AcadDocument, B As AcadBlock" w$ D' G& z) C; n5 L2 R- a' w7 d
  3. On Error GoTo 101 }( U. P4 [3 ^. T
  4. '由用户在CAD当前文档的命令行输入需要修改的文件所在目录. V! a  k! a$ R6 v6 P4 E" k
  5. Path = ThisDrawing.Utility.GetString(True, vbCrLf & "指定文件所在目录:" )6 m/ M: b5 V0 r6 w4 R  D- J
  6. '如用户输入的目录字符串最后一个字符为""则去掉/ Q5 l6 P: {0 l5 {& H& X0 M7 \
  7. If Left(Path, 1) = "" Then Path = Right(Path, Len(Path) - 1)
    " s# d, [/ x0 ^2 x- h6 o
  8. '逐个打开该目录下的所有"*.DWG"文档
      |8 z  l& Q+ ?  s
  9. FileName = Dir(Path & "\*.dwg" )
    : h; F8 H  z9 g) X
  10. Do Until FileName = ""
    ( P/ N. `+ E) f8 Z3 g: d
  11.     Set D = ThisDrawing.Application.Documents.Open(Path & "" & FileName)
    3 Z! n9 h' W6 v' V* J
  12.     '遍历该文档中所有块定义
    % p! t. I/ L" s9 |5 R# m; }
  13.     For Each B In D.Blocks
    2 r$ N: ~: m# A* J, ?( N
  14.         '如果该块定义中只有两个元素则进一步检查其中内容( o' S; @% c3 i, n
  15.         '否则跳过
    ( P( j  D% x9 r
  16.         If B.Count = 2 Then
    7 s8 a, K- q' E' x/ L/ l/ M# G, @
  17.             '检查块元素是否为单行文字对象
    * n+ Q' D3 w* o5 w  z& a& t  F
  18.             If B.Item(0).ObjectName = "AcDbText" And B.Item(1).ObjectName = "AcDbText" Then& i0 m. B9 B4 C0 ^
  19.                 '检查单行文字的内容,如符合要求即修改之,然后保存
    . p8 b8 m. G( x& s
  20.                 If B.Item(0).TextString = "中国杭州" And B.Item(1).TextString = "Hangzhou China" Then) N$ L0 e& G, ^- \8 U, j- A
  21.                     B.Item(0).TextString = "杭州"" f" w( Y' n$ K2 ~
  22.                     B.Item(1).TextString = "Hangzhou"( K; a8 l% u% J4 f8 V/ q* u
  23.                     D.Save
    - F' O/ u# k# b* n! ^% Z& F
  24.                 ElseIf B.Item(0).TextString = "Hangzhou China" And B.Item(1).TextString = "中国杭州" Then
    " Y  A4 @9 j5 d$ l/ O1 [
  25.                     B.Item(0).TextString = "Hangzhou"
    $ Y3 o' i$ a4 q. ]0 X+ z$ H
  26.                     B.Item(1).TextString = "杭州"
    $ m4 {1 _$ D9 Q; D1 O2 p
  27.                     D.Save
    7 l, s/ v/ X4 `+ O/ P; S
  28.                 End If2 K" n: p' a, x4 N
  29.             End If
    ( {5 b$ g) N4 H4 [5 ]
  30.         End If
    - C1 [; \- m4 Y6 E& R1 d
  31.     Next- H; y5 [9 E2 |$ w
  32.     '关闭打开的文档
    3 W: h9 W  E4 P" ?. Z) o" ^/ x' j
  33.     D.Close+ J) ~# s7 {" V/ g  o( J2 N
  34.     '获取下一个文件名
    : Q" ~8 j, V/ Y0 J' W3 C
  35.     FileName = Dir()5 _- w- R* \' m5 @/ E$ G& M/ f
  36. Loop
    & D4 ]* X$ D9 }  q. r. J% `
  37. 10: End Sub
复制代码
 楼主| 发表于 2011-12-16 08:49:38 | 显示全部楼层 来自: 中国浙江杭州
非常感谢版主,问题解决了3 ^5 G( K8 \2 l& ^

. ^6 E* }. x1 g5 S* g: D6 n2 k再次感谢
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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