QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
RT
7 o+ |# N3 C9 [* M+ ~% I1 @! R% N( q- C6 w7 i& q
有一批图纸需要更改文字,但文字时以块的形式出现的,包括两行单行文字7 ~! D& ~( p, i6 V
" n& Y( K6 ^6 r1 M3 y. L. M
其中一行为中文,另一行为英文,内容固定
) u0 n& e# P& U' k' K" \/ b
6 ]# e7 D) l: U- I) M$ B" J1 C比如中国杭州和Hangzhou China
7 t" S* `- X6 g# \
; z4 r& G0 |# W( c2 P+ s' E: [1 J5 ]现在要统一改为杭州和Hangzhou' Q) ~$ B1 M/ q/ u9 V) s8 G5 ~
$ o4 F; m$ ]" b4 N' O& F
但块的名字不知道
6 f* L3 _7 e. g, F: w9 y2 P
1 i' s" B% V- M- X
) X- m: b5 g! Q- w$ Y( b请问如何用程序实现?请大虾帮忙,谢谢
 楼主| 发表于 2011-12-14 14:23:58 | 显示全部楼层 来自: 中国浙江杭州
自己顶下,还没解决问题,不能沉了
发表于 2011-12-14 19:27:23 | 显示全部楼层 来自: 中国辽宁
你若是真心求助,就应该提供尽可能详细的信息,比如一份DWG文件.
 楼主| 发表于 2011-12-15 13:10:33 | 显示全部楼层 来自: 中国浙江杭州
3# woaishuijia $ e; R: W# k2 j( _$ F' |% Y1 i

& k8 [0 A) G  b# W7 U5 o% d4 r最近实在是太忙了,不好意思
( M( N3 A( X" l9 k 中国杭州改为杭州.dwg (79.74 KB, 下载次数: 6)
发表于 2011-12-15 20:05:46 | 显示全部楼层 来自: 中国辽宁
本帖最后由 woaishuijia 于 2011-12-15 20:07 编辑 ) ]: [3 q/ {3 J# D8 R6 P

. `% M" W( t" z, d0 Z( l2 ^# K1 o下面的代码只针对上传的文档,仅供参考
6 \, |$ u1 Y) B
  1. Sub A()
      ]1 Q4 I$ E7 Q
  2. Dim Path As String, FileName As String, D As AcadDocument, B As AcadBlock
    5 _8 p" q" x4 o4 S0 ~
  3. On Error GoTo 10
    . f! y, o! }% M) U
  4. '由用户在CAD当前文档的命令行输入需要修改的文件所在目录
    / W$ b+ n$ D" p
  5. Path = ThisDrawing.Utility.GetString(True, vbCrLf & "指定文件所在目录:" )0 Y& d. x" Y2 ]; k: _; r
  6. '如用户输入的目录字符串最后一个字符为""则去掉
    ( A5 k+ p& G- \% ~: @. j
  7. If Left(Path, 1) = "" Then Path = Right(Path, Len(Path) - 1); T# f# {: T, o0 y: v8 U. a* C
  8. '逐个打开该目录下的所有"*.DWG"文档7 Q( ~4 D  G5 t
  9. FileName = Dir(Path & "\*.dwg" )
    6 p! h$ |$ ^' o4 J' b) t4 e- z' Q
  10. Do Until FileName = ""0 t. n; ~0 J' y" C7 g( o, P$ c4 V
  11.     Set D = ThisDrawing.Application.Documents.Open(Path & "" & FileName). X; m2 d1 X- G1 w' f5 t" z# P! v
  12.     '遍历该文档中所有块定义  B, N" j' A( k8 R6 x: E% K8 S$ h
  13.     For Each B In D.Blocks* I, h3 o) \' z) \# i$ U
  14.         '如果该块定义中只有两个元素则进一步检查其中内容
    : j: D% M* m: f9 n: S
  15.         '否则跳过
    + k) h) g. e' W: d
  16.         If B.Count = 2 Then! P5 q5 `# {+ Y: k* U0 t
  17.             '检查块元素是否为单行文字对象
    ; |' v5 J/ z" w$ ~; n4 ~
  18.             If B.Item(0).ObjectName = "AcDbText" And B.Item(1).ObjectName = "AcDbText" Then
    1 s# N* ^* O! z& }
  19.                 '检查单行文字的内容,如符合要求即修改之,然后保存
    5 d4 C4 D0 \+ ?; U
  20.                 If B.Item(0).TextString = "中国杭州" And B.Item(1).TextString = "Hangzhou China" Then* X# z$ ^6 c' S" @
  21.                     B.Item(0).TextString = "杭州", T5 l. Z% {( R% g1 Z
  22.                     B.Item(1).TextString = "Hangzhou"
    0 N/ F. Z' i0 Y/ j, b
  23.                     D.Save
    2 H  y, e' s, Q  k; J: a8 n
  24.                 ElseIf B.Item(0).TextString = "Hangzhou China" And B.Item(1).TextString = "中国杭州" Then% A. h+ D* s4 G+ o4 ?: d; L
  25.                     B.Item(0).TextString = "Hangzhou"7 y7 q) }( J# s. ~
  26.                     B.Item(1).TextString = "杭州"" g7 z' X7 V1 N# G9 g% V! e- }
  27.                     D.Save
    * S: K$ a, }6 ]  z
  28.                 End If
    # ~+ {1 A& B4 ~3 @% \/ _2 e
  29.             End If; f. _& Y- {3 _2 z5 U3 }1 X
  30.         End If( I' E, b5 N1 {% m
  31.     Next
      \% T- A, R7 E% v
  32.     '关闭打开的文档; \6 U' j; v3 O5 y/ L
  33.     D.Close; {! r' Y8 W- I) ?8 Q* S
  34.     '获取下一个文件名: R: L: W. n4 z" Z% q$ n3 o
  35.     FileName = Dir()
    . r* G, l" Z* T, |2 f3 L! h* f
  36. Loop
    + T- [5 J% z/ p/ z7 `
  37. 10: End Sub
复制代码
 楼主| 发表于 2011-12-16 08:49:38 | 显示全部楼层 来自: 中国浙江杭州
非常感谢版主,问题解决了. U# x3 m. Y8 |9 \% W, M! ~5 `% j
7 e4 i" \5 v! e% k* ~
再次感谢
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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