QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
RT# {, @3 n+ U5 k1 C: b2 c" {( B2 I
- ^9 `7 I; Z2 ^; t3 q
有一批图纸需要更改文字,但文字时以块的形式出现的,包括两行单行文字
* T( q* l8 x* @2 ^6 f6 N
+ d9 j% K# l) W& |+ w其中一行为中文,另一行为英文,内容固定' Q8 j* o' L/ r, Y& O. N( q
- M  J/ Y2 F: a+ [' ^2 ]+ q! w6 x1 Z. Q
比如中国杭州和Hangzhou China
8 D. v/ H+ Z& H% G# P; O4 V; Z7 B. d  c
现在要统一改为杭州和Hangzhou
0 Q7 A8 m; f- M% L' i/ c6 u) P7 h5 v0 j' g# ^; Y
但块的名字不知道
9 ?0 P8 @" l( i" P5 ]/ i3 h
3 o8 n' j8 @9 {
4 |) G7 `, S* p* ]; A+ \请问如何用程序实现?请大虾帮忙,谢谢
 楼主| 发表于 2011-12-14 14:23:58 | 显示全部楼层 来自: 中国浙江杭州
自己顶下,还没解决问题,不能沉了
发表于 2011-12-14 19:27:23 | 显示全部楼层 来自: 中国辽宁
你若是真心求助,就应该提供尽可能详细的信息,比如一份DWG文件.
 楼主| 发表于 2011-12-15 13:10:33 | 显示全部楼层 来自: 中国浙江杭州
3# woaishuijia % z; T+ I. a" J$ p; t6 B

5 S3 ^7 E' t9 i" Y( [最近实在是太忙了,不好意思0 I+ T" J) F+ W$ Z# o3 }* j) ^" k
中国杭州改为杭州.dwg (79.74 KB, 下载次数: 6)
发表于 2011-12-15 20:05:46 | 显示全部楼层 来自: 中国辽宁
本帖最后由 woaishuijia 于 2011-12-15 20:07 编辑
+ ~; h% j- R4 e2 P
' R8 _7 R" r5 X" o& x. k* F6 W下面的代码只针对上传的文档,仅供参考  Z/ g6 Q' y( j" _
  1. Sub A()# Y0 M: B  ^, Z# L( ^1 a- R
  2. Dim Path As String, FileName As String, D As AcadDocument, B As AcadBlock
    : J  o4 o" K( x* b. l3 Y5 c
  3. On Error GoTo 10; t$ }: t! H7 d6 F  M2 u, s
  4. '由用户在CAD当前文档的命令行输入需要修改的文件所在目录
    0 m4 l  Z$ g; P' |# Y
  5. Path = ThisDrawing.Utility.GetString(True, vbCrLf & "指定文件所在目录:" )
    4 t% i5 e/ _/ d6 y9 x; h6 [
  6. '如用户输入的目录字符串最后一个字符为""则去掉
    ) Y+ n: t" h+ y& K1 Z6 x) k
  7. If Left(Path, 1) = "" Then Path = Right(Path, Len(Path) - 1)! L3 x+ Z: B8 @5 H2 w! P
  8. '逐个打开该目录下的所有"*.DWG"文档
    6 j& z+ X) ~2 M8 \
  9. FileName = Dir(Path & "\*.dwg" )  S+ C3 {5 T9 p) n1 W% D! B/ I0 c; k
  10. Do Until FileName = ""3 B& H) I1 O7 ^/ m/ H# j
  11.     Set D = ThisDrawing.Application.Documents.Open(Path & "" & FileName)
    4 e+ Q& O, f6 m8 Z. Z
  12.     '遍历该文档中所有块定义
    $ g( Q. `8 J) }: z( E- x- D
  13.     For Each B In D.Blocks
    ( `) Q0 x! }! _6 O: p3 y' v7 d
  14.         '如果该块定义中只有两个元素则进一步检查其中内容
    & k( v8 c) ~& [( M! X
  15.         '否则跳过' A& }8 B/ |' N3 x) l# @& m
  16.         If B.Count = 2 Then
    8 R/ S. [+ x. B& I- w% W' [
  17.             '检查块元素是否为单行文字对象
    2 F: i3 J  U6 H. H+ I4 W' o, d' c
  18.             If B.Item(0).ObjectName = "AcDbText" And B.Item(1).ObjectName = "AcDbText" Then
    5 f9 \; a) h) R+ I/ u
  19.                 '检查单行文字的内容,如符合要求即修改之,然后保存5 D( |; Q) ~' e+ I( l0 h' R
  20.                 If B.Item(0).TextString = "中国杭州" And B.Item(1).TextString = "Hangzhou China" Then" Y4 w! G' u1 ]6 o& t) ?! O' P
  21.                     B.Item(0).TextString = "杭州"
    8 J0 P/ ^' A2 D1 K( E, f
  22.                     B.Item(1).TextString = "Hangzhou"
    % J; I& K4 k1 X
  23.                     D.Save
    " j3 h8 D  D8 r$ q4 x- C+ P4 m$ x4 U
  24.                 ElseIf B.Item(0).TextString = "Hangzhou China" And B.Item(1).TextString = "中国杭州" Then0 h$ H/ j6 O# [; l' ?# _
  25.                     B.Item(0).TextString = "Hangzhou"
    # _2 M8 k  r# @; C% c9 P
  26.                     B.Item(1).TextString = "杭州"$ l1 v' t# K; @; Q
  27.                     D.Save
    ' O. _, h8 L/ f5 F& T' C0 \+ C
  28.                 End If6 U- v3 `- {0 c" w, _; `
  29.             End If
    4 r( G( y3 ]# V: F8 F+ F
  30.         End If) w: S: X& t$ Z  M/ \
  31.     Next
    8 S" W$ A% W9 s2 J9 t9 o
  32.     '关闭打开的文档
    6 X4 }; \4 P; [6 Z/ G6 v9 n
  33.     D.Close
    0 M, S( `3 X% l" Z8 e; o6 M) q. p2 ?
  34.     '获取下一个文件名$ H) L) S4 \9 S6 j) A
  35.     FileName = Dir()
    # n  K, a, v, K1 w: R& b. g
  36. Loop
    % D  m8 M2 f9 e3 ]. |) l5 I
  37. 10: End Sub
复制代码
 楼主| 发表于 2011-12-16 08:49:38 | 显示全部楼层 来自: 中国浙江杭州
非常感谢版主,问题解决了
* l% W. f, e; E- _* s4 s
4 w+ W3 B+ y" V1 K% w5 I( Z再次感谢
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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