QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
RT
6 r3 d/ l( I" l. }* h: \' w
$ |- ?, s$ }, D# u% n有一批图纸需要更改文字,但文字时以块的形式出现的,包括两行单行文字& }' m2 j6 G" m/ Q

: m: f9 q1 _) T5 H, [4 N! v% O其中一行为中文,另一行为英文,内容固定
6 u9 i! T$ ^/ y4 k4 d- o5 @. o9 J! `
比如中国杭州和Hangzhou China; H7 `+ }- b$ C, S2 r
2 n- R, ]" k2 Q0 i  G3 z1 v
现在要统一改为杭州和Hangzhou: d; d) u' V: A2 d& G
, u2 U5 z5 j& M* q5 @" R, j1 U
但块的名字不知道
* ^' c% t6 ?6 S9 X' T; d8 @' o: B# z4 s: h
" g9 t) z  x2 Q9 ]4 w7 C2 e; t4 t
请问如何用程序实现?请大虾帮忙,谢谢
 楼主| 发表于 2011-12-14 14:23:58 | 显示全部楼层 来自: 中国浙江杭州
自己顶下,还没解决问题,不能沉了
发表于 2011-12-14 19:27:23 | 显示全部楼层 来自: 中国辽宁
你若是真心求助,就应该提供尽可能详细的信息,比如一份DWG文件.
 楼主| 发表于 2011-12-15 13:10:33 | 显示全部楼层 来自: 中国浙江杭州
3# woaishuijia ' y8 M3 {- ^( D$ ?
$ m- X* d$ ~7 y' H8 R+ e) p; r2 S
最近实在是太忙了,不好意思) M) a5 c/ L1 t) I- N- X
中国杭州改为杭州.dwg (79.74 KB, 下载次数: 6)
发表于 2011-12-15 20:05:46 | 显示全部楼层 来自: 中国辽宁
本帖最后由 woaishuijia 于 2011-12-15 20:07 编辑
% K  G7 c: X9 h  f4 e/ g6 Y
7 _: s( z% T1 r4 `, F+ }8 F下面的代码只针对上传的文档,仅供参考8 b+ X$ B, y1 t4 A
  1. Sub A()* }+ v* X/ i3 J( i
  2. Dim Path As String, FileName As String, D As AcadDocument, B As AcadBlock$ }1 g0 O+ B: ]+ Z' f- e
  3. On Error GoTo 10
    ( b4 t1 H' F2 i9 T% m8 [* Y
  4. '由用户在CAD当前文档的命令行输入需要修改的文件所在目录
    7 a) l- c- c! C5 n+ |; c0 v4 T
  5. Path = ThisDrawing.Utility.GetString(True, vbCrLf & "指定文件所在目录:" )3 Y' G3 w; x. y9 w) R% [
  6. '如用户输入的目录字符串最后一个字符为""则去掉
    2 q( i$ b$ k6 c. @/ x
  7. If Left(Path, 1) = "" Then Path = Right(Path, Len(Path) - 1)6 O3 y8 ?0 m. m7 H
  8. '逐个打开该目录下的所有"*.DWG"文档( k. _$ C& J/ I. Y7 I+ l3 j
  9. FileName = Dir(Path & "\*.dwg" ), ?& p, o' }! [* ^
  10. Do Until FileName = ""9 j. N( |  S7 j$ M
  11.     Set D = ThisDrawing.Application.Documents.Open(Path & "" & FileName)- \/ a# X" |$ D3 S" }
  12.     '遍历该文档中所有块定义
    $ S' b( H' ]. v7 G
  13.     For Each B In D.Blocks
    6 h) z& \0 R8 B; {, {& B
  14.         '如果该块定义中只有两个元素则进一步检查其中内容; s8 S( }1 c& u0 ~/ u) |1 _. f
  15.         '否则跳过- e1 ^0 e2 i) v8 A# a
  16.         If B.Count = 2 Then
    3 W; m3 v' L1 D' `7 C' q3 d- g- Q
  17.             '检查块元素是否为单行文字对象
    / S. T5 s) a8 {
  18.             If B.Item(0).ObjectName = "AcDbText" And B.Item(1).ObjectName = "AcDbText" Then/ {1 Y. [5 f8 V  o2 a4 g
  19.                 '检查单行文字的内容,如符合要求即修改之,然后保存; q  @- H+ n0 B& C+ R
  20.                 If B.Item(0).TextString = "中国杭州" And B.Item(1).TextString = "Hangzhou China" Then8 B% h9 {" `" W2 M9 b
  21.                     B.Item(0).TextString = "杭州"$ S* _5 S0 S) J! F) e$ R
  22.                     B.Item(1).TextString = "Hangzhou"0 S7 ~# a: Y: W
  23.                     D.Save
    " r4 `) m: e0 E
  24.                 ElseIf B.Item(0).TextString = "Hangzhou China" And B.Item(1).TextString = "中国杭州" Then
    6 `* L; Z# A  k% \! Q
  25.                     B.Item(0).TextString = "Hangzhou"
    & N9 n: J+ M- h$ r: K$ p$ f) H
  26.                     B.Item(1).TextString = "杭州"
    ! a* r8 k+ a  {
  27.                     D.Save
    4 q' P2 ^4 Z0 P! U3 v/ ^& P% Y
  28.                 End If! D& r8 \6 l" y' J% [0 c" X
  29.             End If4 u/ |) t' w, j9 W  ^6 m* u" l
  30.         End If
    ( I: p' i) a  R! f5 d. \9 W0 g& M
  31.     Next
    0 r1 F/ \) I2 r3 h) m" ^( h+ `5 X
  32.     '关闭打开的文档
    , n4 e' g5 e5 Z
  33.     D.Close! p& i1 N$ }: X& u9 N5 b6 v
  34.     '获取下一个文件名, s& I, f! g5 ~! ^4 P
  35.     FileName = Dir()
    5 e2 |7 v6 P' ^. I! v+ c
  36. Loop: j) i- ]: r8 `6 {0 _) H
  37. 10: End Sub
复制代码
 楼主| 发表于 2011-12-16 08:49:38 | 显示全部楼层 来自: 中国浙江杭州
非常感谢版主,问题解决了
+ I% @( n* d8 ]: i* H- L1 g1 P+ s: }8 m7 W% d) s
再次感谢
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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