QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
2天前
查看: 6309|回复: 5
收起左侧

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

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

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

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

x
RT( I! D$ x8 N3 i9 R  x' k
: b- X9 S% h4 O- c/ B) i9 \5 a
有一批图纸需要更改文字,但文字时以块的形式出现的,包括两行单行文字+ k8 ?% i# P6 o. H  B- t

. b, W0 u6 M! ]" Y其中一行为中文,另一行为英文,内容固定* e6 y7 ]3 S8 m4 D) \
* E0 u9 I9 x6 [
比如中国杭州和Hangzhou China' H! X7 c  ?6 Q$ T2 T4 r" V# N
' g$ a8 d. Z( W/ n5 g
现在要统一改为杭州和Hangzhou
; A* d3 q* C5 G) r" e/ f( T$ K4 m, @0 i' T* o; [. j
但块的名字不知道& e& [: d9 V  N2 \8 L& t

. \- R7 j$ h# N; e2 E: }
. [9 u; B& i, W+ y2 g- s; M- f请问如何用程序实现?请大虾帮忙,谢谢
 楼主| 发表于 2011-12-14 14:23:58 | 显示全部楼层 来自: 中国浙江杭州
自己顶下,还没解决问题,不能沉了
发表于 2011-12-14 19:27:23 | 显示全部楼层 来自: 中国辽宁
你若是真心求助,就应该提供尽可能详细的信息,比如一份DWG文件.
 楼主| 发表于 2011-12-15 13:10:33 | 显示全部楼层 来自: 中国浙江杭州
3# woaishuijia
- I6 n! K: f- |+ ^9 t7 w$ A3 P: g7 G8 v( S4 u' w. h6 X
最近实在是太忙了,不好意思# T" [- x$ c* T" [% D( l9 t/ E( L
中国杭州改为杭州.dwg (79.74 KB, 下载次数: 6)
发表于 2011-12-15 20:05:46 | 显示全部楼层 来自: 中国辽宁
本帖最后由 woaishuijia 于 2011-12-15 20:07 编辑
% V3 z1 S( B2 H3 ]9 q* X# A8 j5 G* J; V6 u( |
下面的代码只针对上传的文档,仅供参考9 w& m4 B% S3 ?' r* p+ k- j
  1. Sub A()4 k6 Y/ _! X; h: ~$ S5 t1 r2 t! b
  2. Dim Path As String, FileName As String, D As AcadDocument, B As AcadBlock
    ) G* {! p  k) e: y# P
  3. On Error GoTo 10
    - f! I' b# H3 H7 r/ u# x
  4. '由用户在CAD当前文档的命令行输入需要修改的文件所在目录
    " r9 t3 r; i0 H- F; [
  5. Path = ThisDrawing.Utility.GetString(True, vbCrLf & "指定文件所在目录:" )0 L0 w3 Z) d$ L0 g
  6. '如用户输入的目录字符串最后一个字符为""则去掉/ A3 X  L' x7 T# _
  7. If Left(Path, 1) = "" Then Path = Right(Path, Len(Path) - 1); _5 n  h" ^6 f# Z; z( L3 g+ D
  8. '逐个打开该目录下的所有"*.DWG"文档% e7 k; x/ d: Z! W  F/ r* k0 \
  9. FileName = Dir(Path & "\*.dwg" )1 K5 a' M" i0 O# ~( C2 n1 @% B' p
  10. Do Until FileName = ""
    : o) j5 q! W8 ~4 U+ ]
  11.     Set D = ThisDrawing.Application.Documents.Open(Path & "" & FileName), b& b* D' I3 _0 S& e2 u8 s% n8 h
  12.     '遍历该文档中所有块定义
    7 S( M) i3 W' O
  13.     For Each B In D.Blocks7 O) k1 c7 M7 H6 o9 Z6 r% s
  14.         '如果该块定义中只有两个元素则进一步检查其中内容2 I6 K! }9 `( Z
  15.         '否则跳过9 o' c' V8 v8 o" H
  16.         If B.Count = 2 Then
    5 {3 S3 `2 Q1 h) o3 b3 \: W! I, o
  17.             '检查块元素是否为单行文字对象
      W. @2 P* \4 M1 f1 l" }1 E1 L& Z
  18.             If B.Item(0).ObjectName = "AcDbText" And B.Item(1).ObjectName = "AcDbText" Then- O' l; d6 t3 g5 y  D
  19.                 '检查单行文字的内容,如符合要求即修改之,然后保存# p5 ^4 s" {' W: y
  20.                 If B.Item(0).TextString = "中国杭州" And B.Item(1).TextString = "Hangzhou China" Then" c1 G) k7 O0 L  r
  21.                     B.Item(0).TextString = "杭州"
    6 ^  E7 ^# A2 H3 A+ h7 ]2 M
  22.                     B.Item(1).TextString = "Hangzhou"$ b4 p4 I8 J7 e# }$ Z
  23.                     D.Save" i, W) k5 ^2 L! ~
  24.                 ElseIf B.Item(0).TextString = "Hangzhou China" And B.Item(1).TextString = "中国杭州" Then+ |) Q2 e8 S' w: n( e8 J+ \( }
  25.                     B.Item(0).TextString = "Hangzhou"
    ; Q. c+ K: G: @4 }+ y( K- a2 c- u2 Z
  26.                     B.Item(1).TextString = "杭州"
    8 ~  t5 Q, ]: P# s" r3 j9 v
  27.                     D.Save
    6 `- a2 P! ^$ }$ Q6 E' Q
  28.                 End If2 Y4 Y9 j( G5 K6 S4 ]* |
  29.             End If
    ; j0 r- _( R/ B" |/ o( ~  ?+ U
  30.         End If
    1 b- S* @; \% [/ F
  31.     Next
    + U( r( G& R' [
  32.     '关闭打开的文档
    ( K, w4 W. i0 \- ^0 f
  33.     D.Close
    / y2 c+ E2 X' P( P
  34.     '获取下一个文件名( J9 J- V6 w" Z: K8 H
  35.     FileName = Dir()9 b1 c8 I! y$ U0 R  A& O3 G
  36. Loop
    ' o5 s1 Y3 ^/ M5 O* l
  37. 10: End Sub
复制代码
 楼主| 发表于 2011-12-16 08:49:38 | 显示全部楼层 来自: 中国浙江杭州
非常感谢版主,问题解决了' |0 u5 x$ k( r
/ u6 p7 `2 ]3 b, K7 M
再次感谢
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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