QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
7天前
查看: 6285|回复: 5
收起左侧

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

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

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

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

x
RT
* h2 f5 l6 H) V5 k7 M' X
& l. E; o7 \+ x2 [( L: Y有一批图纸需要更改文字,但文字时以块的形式出现的,包括两行单行文字
0 g& ~8 b9 c" l4 [; l
% q$ L7 |; ~* E# d* p& K) V  ?9 P其中一行为中文,另一行为英文,内容固定
" B( C2 G: b0 q3 n2 P6 w2 \* W
% m+ u. e! g* ~/ v# U- I# O) C比如中国杭州和Hangzhou China
# j, s4 Z7 p4 ^6 j& |7 n- l
3 Y3 e$ ?/ I. B" U5 p现在要统一改为杭州和Hangzhou
& U" k  o3 p8 ~9 ?; r
) I# @2 F# w; e* y但块的名字不知道
5 G" y$ u5 c/ J% s1 M3 M! U/ H: Q$ o8 F9 Q
2 }( U  D% ^, i! N2 I
请问如何用程序实现?请大虾帮忙,谢谢
 楼主| 发表于 2011-12-14 14:23:58 | 显示全部楼层 来自: 中国浙江杭州
自己顶下,还没解决问题,不能沉了
发表于 2011-12-14 19:27:23 | 显示全部楼层 来自: 中国辽宁
你若是真心求助,就应该提供尽可能详细的信息,比如一份DWG文件.
 楼主| 发表于 2011-12-15 13:10:33 | 显示全部楼层 来自: 中国浙江杭州
3# woaishuijia ( ]( P2 P/ O6 o7 j8 P8 `
% H$ o, T" p) q# H6 R0 V, S% ]( Q
最近实在是太忙了,不好意思1 W- \$ p* h$ |! N4 h9 C2 ^. n
中国杭州改为杭州.dwg (79.74 KB, 下载次数: 6)
发表于 2011-12-15 20:05:46 | 显示全部楼层 来自: 中国辽宁
本帖最后由 woaishuijia 于 2011-12-15 20:07 编辑 9 i) U- B. w/ V

% _3 `* W5 S$ u+ t2 U2 F下面的代码只针对上传的文档,仅供参考
0 T  B# h! V3 [" z3 a2 Q, z- p0 A/ W! ?
  1. Sub A()$ t1 R% E+ Y0 K; D& `" L/ D
  2. Dim Path As String, FileName As String, D As AcadDocument, B As AcadBlock
    + L& K! ?  N) R& E
  3. On Error GoTo 105 A4 q& C8 G" T1 |' W  v
  4. '由用户在CAD当前文档的命令行输入需要修改的文件所在目录! @$ h" n* S% T5 V! [6 r
  5. Path = ThisDrawing.Utility.GetString(True, vbCrLf & "指定文件所在目录:" )
    6 f' J2 k1 |3 k8 Q; |+ M% T
  6. '如用户输入的目录字符串最后一个字符为""则去掉
      |% `; ^- I) w" g6 Z
  7. If Left(Path, 1) = "" Then Path = Right(Path, Len(Path) - 1)
    ) R9 P1 t' c: G% e0 B+ ?
  8. '逐个打开该目录下的所有"*.DWG"文档7 R, X8 B4 O* L% ?
  9. FileName = Dir(Path & "\*.dwg" )
    ' |( J0 L$ r7 T2 ^- s% k
  10. Do Until FileName = ""
    % y. |( r$ d7 @: |2 C! Y
  11.     Set D = ThisDrawing.Application.Documents.Open(Path & "" & FileName)  V9 v5 R/ i- Y* F+ g! ~5 P0 l8 F7 E
  12.     '遍历该文档中所有块定义
    , A; A/ f% Z8 m9 y0 M" @1 w
  13.     For Each B In D.Blocks: P  ^' Z/ k& Z; Z# F
  14.         '如果该块定义中只有两个元素则进一步检查其中内容- Z# z  q0 ]8 G9 H0 I2 [) i
  15.         '否则跳过5 w, N9 q5 \9 Y( ]
  16.         If B.Count = 2 Then# ~4 N' K0 r; r# h
  17.             '检查块元素是否为单行文字对象0 h7 k9 C0 j$ D; Z9 K
  18.             If B.Item(0).ObjectName = "AcDbText" And B.Item(1).ObjectName = "AcDbText" Then
    $ r1 s: N; H8 a: C1 p/ l
  19.                 '检查单行文字的内容,如符合要求即修改之,然后保存& A" F0 k" J9 i5 T+ z  Y; F
  20.                 If B.Item(0).TextString = "中国杭州" And B.Item(1).TextString = "Hangzhou China" Then4 @1 E$ p7 b: r) a5 z* X
  21.                     B.Item(0).TextString = "杭州"
    * \7 a+ B, [, Y% V. ]5 o9 u* F; i4 q5 Y
  22.                     B.Item(1).TextString = "Hangzhou"* X0 u" g; C( T3 D0 p
  23.                     D.Save
    3 ]5 e; W/ ]- X& |
  24.                 ElseIf B.Item(0).TextString = "Hangzhou China" And B.Item(1).TextString = "中国杭州" Then
    8 w/ |9 V( ?! m" }; k" a+ B
  25.                     B.Item(0).TextString = "Hangzhou"  z. v& g/ V+ [  d, l4 @% C
  26.                     B.Item(1).TextString = "杭州"
    + L2 t0 q6 ?, k8 r) U  p' g
  27.                     D.Save7 M: b) |) c0 A- I2 W
  28.                 End If
    - o' q5 ~; _% V0 p5 d# C
  29.             End If' R9 k! _, K2 h. S" `" W( `: e
  30.         End If
    $ `1 \9 m+ q2 @- B0 M# A. u* _
  31.     Next' X& X" v! i  }* {, n+ q: I
  32.     '关闭打开的文档1 z& [! p; p: k5 `! f8 P7 J
  33.     D.Close
    : z# Y! ]' f7 F1 g3 x8 F
  34.     '获取下一个文件名
    1 g# e- w# x, y* j+ B
  35.     FileName = Dir()
    # W+ T6 K* }( D* ~6 X5 Y! G
  36. Loop
    $ i$ A0 j+ T5 I7 W4 L" {
  37. 10: End Sub
复制代码
 楼主| 发表于 2011-12-16 08:49:38 | 显示全部楼层 来自: 中国浙江杭州
非常感谢版主,问题解决了, m. o- \0 U6 n8 u+ v

% X$ J, V" a7 I; o' H, t0 Y再次感谢
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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