QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
6天前
查看: 6280|回复: 5
收起左侧

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

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

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

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

x
RT
  K; ~6 }/ o- _5 {$ [- s/ B- @& \; {( A; I' @, t0 E
有一批图纸需要更改文字,但文字时以块的形式出现的,包括两行单行文字
; i; W% A' w% Z! J$ K4 {/ r# d6 M7 _+ I$ `; m
其中一行为中文,另一行为英文,内容固定
8 W3 V3 A6 i) r. s- a5 D
7 W2 I; {2 [) W$ V+ L3 s比如中国杭州和Hangzhou China+ E6 s( h' m# ?& y) X4 _
; R  w/ C# l& s  e& L
现在要统一改为杭州和Hangzhou
  V$ t  X6 @& a: Z3 @
" A. `) o# H0 ~& K但块的名字不知道
2 L2 E+ u7 a6 m% n
$ H/ w, `8 Z! C  u7 g/ F& _# R7 L+ `+ a' C
请问如何用程序实现?请大虾帮忙,谢谢
 楼主| 发表于 2011-12-14 14:23:58 | 显示全部楼层 来自: 中国浙江杭州
自己顶下,还没解决问题,不能沉了
发表于 2011-12-14 19:27:23 | 显示全部楼层 来自: 中国辽宁
你若是真心求助,就应该提供尽可能详细的信息,比如一份DWG文件.
 楼主| 发表于 2011-12-15 13:10:33 | 显示全部楼层 来自: 中国浙江杭州
3# woaishuijia
& b0 A2 |% Q- V7 A. f; U- |6 N3 H$ J
" V% C% k! T& S8 A% C最近实在是太忙了,不好意思
) ]! j, y7 K$ k+ r# t: y- t 中国杭州改为杭州.dwg (79.74 KB, 下载次数: 6)
发表于 2011-12-15 20:05:46 | 显示全部楼层 来自: 中国辽宁
本帖最后由 woaishuijia 于 2011-12-15 20:07 编辑 2 m) |& v; j3 I. E* {+ s: s" ~

5 r$ a7 ^% J; v- A5 C# n3 |1 b: O" {下面的代码只针对上传的文档,仅供参考# r) W5 Y. J% \
  1. Sub A()
    & N! f2 x- Y. c
  2. Dim Path As String, FileName As String, D As AcadDocument, B As AcadBlock
    3 Y9 h9 Q5 U( E! c0 k+ c
  3. On Error GoTo 10
    . t+ I" `& U; m! D2 _4 C; `6 F! a
  4. '由用户在CAD当前文档的命令行输入需要修改的文件所在目录
    # a5 }2 n: o7 I8 j8 k) L- T
  5. Path = ThisDrawing.Utility.GetString(True, vbCrLf & "指定文件所在目录:" )
    7 A# Q( E( X& `0 y* ^- m1 O
  6. '如用户输入的目录字符串最后一个字符为""则去掉$ u8 g8 o* o, {' @3 y  S: g% I# p1 P
  7. If Left(Path, 1) = "" Then Path = Right(Path, Len(Path) - 1)$ c: q' q9 N6 Y7 d+ o; @
  8. '逐个打开该目录下的所有"*.DWG"文档
    6 p5 p- A# u! H" l
  9. FileName = Dir(Path & "\*.dwg" )9 K2 S9 r& x. G$ H* F# b9 _
  10. Do Until FileName = ""1 q' x2 u' f) @; W
  11.     Set D = ThisDrawing.Application.Documents.Open(Path & "" & FileName)
    4 \- D& X2 H8 j1 o, \- V5 Y) l
  12.     '遍历该文档中所有块定义
    * O: T: T9 p0 S" c+ i
  13.     For Each B In D.Blocks& B; N* Q5 \$ J+ ~# F7 a3 i
  14.         '如果该块定义中只有两个元素则进一步检查其中内容
    , @3 p5 _# B8 c' z
  15.         '否则跳过
    9 u. D9 n0 h9 z" K/ U0 t
  16.         If B.Count = 2 Then9 v- S. \. b% ~3 U1 l# r
  17.             '检查块元素是否为单行文字对象
    % c' Y2 p9 X! s2 [* E& Z
  18.             If B.Item(0).ObjectName = "AcDbText" And B.Item(1).ObjectName = "AcDbText" Then
    $ Q! h( p$ [3 S- K# w0 D% k6 h
  19.                 '检查单行文字的内容,如符合要求即修改之,然后保存
    ; B3 P1 U; z5 H/ _% W
  20.                 If B.Item(0).TextString = "中国杭州" And B.Item(1).TextString = "Hangzhou China" Then
    ! ]/ K& g% b1 ]0 R; i
  21.                     B.Item(0).TextString = "杭州"
    6 Q6 K, I' }' g3 m& \9 ]9 _
  22.                     B.Item(1).TextString = "Hangzhou"
    $ B& e6 S* x2 G- Z. S
  23.                     D.Save
    9 B$ h1 {  r% V1 b$ \
  24.                 ElseIf B.Item(0).TextString = "Hangzhou China" And B.Item(1).TextString = "中国杭州" Then
    / B* _$ c% I# s) v  ]0 {0 w
  25.                     B.Item(0).TextString = "Hangzhou"
    2 n. c- A( I( L
  26.                     B.Item(1).TextString = "杭州"
    $ b2 V$ }  u: g6 ]" X9 u, G5 r7 P( ]
  27.                     D.Save1 O. v: s6 G# C$ \3 O$ ?$ E
  28.                 End If; H) J" L& b( H/ U8 U
  29.             End If
    ! r9 C3 K* D' Y3 Z) W2 S* e! i
  30.         End If" |6 Q3 h6 y3 H6 m
  31.     Next
    6 r# t: n7 [- G
  32.     '关闭打开的文档" R& M& c7 O; o* n% z* j
  33.     D.Close  R& D  f: Y6 h" Y
  34.     '获取下一个文件名
    / w# k3 s6 _) D/ i9 x! \
  35.     FileName = Dir()3 @6 z' k% Q" a& W5 `( l
  36. Loop
    8 r5 }8 M1 ^0 M+ Q  {* \$ s
  37. 10: End Sub
复制代码
 楼主| 发表于 2011-12-16 08:49:38 | 显示全部楼层 来自: 中国浙江杭州
非常感谢版主,问题解决了
) X: _( @8 P$ j7 q1 U8 {/ h# X, ]$ F* G4 I6 o$ Y2 k. I
再次感谢
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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