QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
RT* m- E0 A! }8 d$ }+ r; _$ N

) a" l9 E- z- S' D9 P# ^, B有一批图纸需要更改文字,但文字时以块的形式出现的,包括两行单行文字
! a# f9 Z* }, K, c# R+ T2 Z3 _- {8 @' ~) ^+ R( z* I/ n! B! @
其中一行为中文,另一行为英文,内容固定7 U2 g$ s) |9 I( ~3 |
) H  m% H- q) E2 m- e  \
比如中国杭州和Hangzhou China
" c8 o# i) A: @
  Y0 P/ X: z" G* ^( r% a# ^$ q现在要统一改为杭州和Hangzhou3 P9 [' D- J* n5 ~  t5 z/ \% G

5 y, @- [1 U  w" |) d8 j: N* C但块的名字不知道) L! r: P# x3 h4 `* N9 t
  ^; m7 \2 e9 E: `0 }! c

, [  ^5 u! ^& Z1 k7 E# _8 \7 X请问如何用程序实现?请大虾帮忙,谢谢
 楼主| 发表于 2011-12-14 14:23:58 | 显示全部楼层 来自: 中国浙江杭州
自己顶下,还没解决问题,不能沉了
发表于 2011-12-14 19:27:23 | 显示全部楼层 来自: 中国辽宁
你若是真心求助,就应该提供尽可能详细的信息,比如一份DWG文件.
 楼主| 发表于 2011-12-15 13:10:33 | 显示全部楼层 来自: 中国浙江杭州
3# woaishuijia ! S. e0 i, v4 J0 o8 `" L

( `: h% _* j: i& G$ S最近实在是太忙了,不好意思
: {/ y! f( U$ `, h; A& m7 h 中国杭州改为杭州.dwg (79.74 KB, 下载次数: 6)
发表于 2011-12-15 20:05:46 | 显示全部楼层 来自: 中国辽宁
本帖最后由 woaishuijia 于 2011-12-15 20:07 编辑
" Q0 v$ U7 |+ H# r5 w7 C, M( ^7 D8 t4 C& t; ~
下面的代码只针对上传的文档,仅供参考
4 [# s( m4 F1 H4 N
  1. Sub A()
    " Y1 H0 E- P4 N7 h" q
  2. Dim Path As String, FileName As String, D As AcadDocument, B As AcadBlock
    - d( G+ Q3 x# q
  3. On Error GoTo 10( \: ~1 Y7 |0 u6 m$ F
  4. '由用户在CAD当前文档的命令行输入需要修改的文件所在目录
    ! [! i5 \2 H0 c, C* P# u
  5. Path = ThisDrawing.Utility.GetString(True, vbCrLf & "指定文件所在目录:" )
    + L4 {0 a/ n: z0 A; ^) x
  6. '如用户输入的目录字符串最后一个字符为""则去掉# Q6 |, A' i7 `2 Q! N
  7. If Left(Path, 1) = "" Then Path = Right(Path, Len(Path) - 1)
    $ c. H8 E0 A5 a
  8. '逐个打开该目录下的所有"*.DWG"文档8 @; I, g- w- V+ W) }5 C5 M
  9. FileName = Dir(Path & "\*.dwg" )' E4 P2 K/ V+ M
  10. Do Until FileName = ""
    : J; N/ u4 B: r% o) \) K+ d9 G* l
  11.     Set D = ThisDrawing.Application.Documents.Open(Path & "" & FileName)
    7 h4 F% n' B: M. Y' ]) Z: {
  12.     '遍历该文档中所有块定义
    / M$ Q# o4 V8 V/ M9 N1 D
  13.     For Each B In D.Blocks9 p& y- C  H, M# |8 g* ?
  14.         '如果该块定义中只有两个元素则进一步检查其中内容/ I/ `# T# U; l4 ]
  15.         '否则跳过% p7 U8 ?9 G9 c
  16.         If B.Count = 2 Then2 R- I4 E2 K4 P, a3 E6 f' D: a
  17.             '检查块元素是否为单行文字对象
    + V( G$ e" P+ F, U+ ?
  18.             If B.Item(0).ObjectName = "AcDbText" And B.Item(1).ObjectName = "AcDbText" Then9 |7 Q  q, {$ f/ k
  19.                 '检查单行文字的内容,如符合要求即修改之,然后保存
    : i; m7 H- h" {
  20.                 If B.Item(0).TextString = "中国杭州" And B.Item(1).TextString = "Hangzhou China" Then
    ; B( D1 u, I1 F! E
  21.                     B.Item(0).TextString = "杭州") b& b/ C1 R. X) u- q) ?% M  `
  22.                     B.Item(1).TextString = "Hangzhou"
    , q/ w$ ]/ n* B& o9 s
  23.                     D.Save: ^( w! Z9 ~; @) d7 ?
  24.                 ElseIf B.Item(0).TextString = "Hangzhou China" And B.Item(1).TextString = "中国杭州" Then
    ; r6 M( X3 ^2 y; X) Q
  25.                     B.Item(0).TextString = "Hangzhou"
    , d! y- N+ O' t6 W6 o3 Y
  26.                     B.Item(1).TextString = "杭州"
    / U* G8 l# b3 `
  27.                     D.Save
    % l$ c, s# {3 p( X: g  e* W
  28.                 End If
    ( s4 K8 Z; \' c2 `! _: }
  29.             End If6 P+ E9 q7 I& [6 V4 V9 ?% h+ ?5 Z
  30.         End If7 J+ @% O) T4 J8 @; x3 b& ]& D
  31.     Next
    & I6 Q% a) W8 C! E- k; x6 C! c
  32.     '关闭打开的文档
    4 F7 O' v5 _' X- }5 i# y! A' r
  33.     D.Close
    ; G4 A& U. I# f$ U
  34.     '获取下一个文件名
    * O$ v+ `1 U1 Z/ R& T2 `0 k1 |: ?; [
  35.     FileName = Dir()9 H/ I9 U' D+ O9 n) F" h$ [7 p
  36. Loop! C) W5 f* z) T( X0 E) P: ?2 E* K
  37. 10: End Sub
复制代码
 楼主| 发表于 2011-12-16 08:49:38 | 显示全部楼层 来自: 中国浙江杭州
非常感谢版主,问题解决了
" L) p) @! {' N$ ~% ?7 }' m
) j# x, C% h! j再次感谢
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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