QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
10天前
查看: 6232|回复: 5
收起左侧

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

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

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

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

x
RT( W7 l1 d) H; D0 {

8 U7 {0 T; H/ q: A有一批图纸需要更改文字,但文字时以块的形式出现的,包括两行单行文字
* l" }0 X8 I. Q( s6 s) T) D3 x* n% g
" l# L2 A2 @# @! Y- F6 c( Z8 v其中一行为中文,另一行为英文,内容固定4 R/ `3 I* b  M! z* N, H# r
7 c! z+ g/ e8 I+ o4 d: U
比如中国杭州和Hangzhou China! A( `9 x& m2 r) t
' O; Y- g/ [$ B; j$ e9 w4 }
现在要统一改为杭州和Hangzhou: n' a8 ]% N7 G* V7 k

& m& l4 }( t, _* N! ]9 \# w但块的名字不知道
7 i$ e8 l+ D3 X. _
* A8 x( r4 `% M# G9 k
, H! `# `: t; L/ r9 L8 m6 U( K请问如何用程序实现?请大虾帮忙,谢谢
 楼主| 发表于 2011-12-14 14:23:58 | 显示全部楼层 来自: 中国浙江杭州
自己顶下,还没解决问题,不能沉了
发表于 2011-12-14 19:27:23 | 显示全部楼层 来自: 中国辽宁
你若是真心求助,就应该提供尽可能详细的信息,比如一份DWG文件.
 楼主| 发表于 2011-12-15 13:10:33 | 显示全部楼层 来自: 中国浙江杭州
3# woaishuijia
0 h! o! C( V" J5 C2 U- ]1 T" `& @5 I4 V2 R* q! Q! I$ Z; V& J
最近实在是太忙了,不好意思
) w5 {& b5 b5 I6 [3 W; C  c 中国杭州改为杭州.dwg (79.74 KB, 下载次数: 6)
发表于 2011-12-15 20:05:46 | 显示全部楼层 来自: 中国辽宁
本帖最后由 woaishuijia 于 2011-12-15 20:07 编辑 3 m4 p4 S' x5 {. V9 {( j6 U
& k# A. D. b' O: }2 h% C
下面的代码只针对上传的文档,仅供参考
) h6 [+ w6 o) }' l! E* r
  1. Sub A()
    4 X. d$ o. t- E% e' r# E
  2. Dim Path As String, FileName As String, D As AcadDocument, B As AcadBlock) w: b1 ?* C! `& d* b
  3. On Error GoTo 10
    ' I' s- ^* M! v0 }  L1 U
  4. '由用户在CAD当前文档的命令行输入需要修改的文件所在目录
    $ ]% J* j1 t* b5 E% B
  5. Path = ThisDrawing.Utility.GetString(True, vbCrLf & "指定文件所在目录:" ). B6 `9 b8 a) m( b; \! c
  6. '如用户输入的目录字符串最后一个字符为""则去掉* H5 U  W, @4 W' a3 I: H! L
  7. If Left(Path, 1) = "" Then Path = Right(Path, Len(Path) - 1)
    $ F. B* X8 }/ A, ^
  8. '逐个打开该目录下的所有"*.DWG"文档
    , j: E: O7 g. R
  9. FileName = Dir(Path & "\*.dwg" )
    ( J5 C+ W1 [' _
  10. Do Until FileName = "") G5 F/ u. i" Q0 Q# W9 D
  11.     Set D = ThisDrawing.Application.Documents.Open(Path & "" & FileName)
    ; U5 I6 n% s5 [
  12.     '遍历该文档中所有块定义2 U" B9 D/ O/ @4 S- H
  13.     For Each B In D.Blocks( p& f8 Z4 x$ `$ i. t! b$ [
  14.         '如果该块定义中只有两个元素则进一步检查其中内容
    6 i/ w4 h4 ?2 g9 R3 \: s
  15.         '否则跳过
    " S. D9 A% q+ s. ?( \8 D, O4 D
  16.         If B.Count = 2 Then( x3 c* b5 }$ {, v1 u: }
  17.             '检查块元素是否为单行文字对象
    7 g: R" U0 h( E/ o# g
  18.             If B.Item(0).ObjectName = "AcDbText" And B.Item(1).ObjectName = "AcDbText" Then0 l5 F0 W3 ^4 D) K* o
  19.                 '检查单行文字的内容,如符合要求即修改之,然后保存: g+ i$ n0 h$ }8 V% T# Q
  20.                 If B.Item(0).TextString = "中国杭州" And B.Item(1).TextString = "Hangzhou China" Then: m# b* j- p* M8 t% x
  21.                     B.Item(0).TextString = "杭州"
    3 d) h2 h! I$ Y' ~
  22.                     B.Item(1).TextString = "Hangzhou"
    4 F2 F; w4 h) }4 e0 t
  23.                     D.Save
    $ W5 r$ g! [/ D; E& _
  24.                 ElseIf B.Item(0).TextString = "Hangzhou China" And B.Item(1).TextString = "中国杭州" Then
    2 S, f, R! D' T* j; S
  25.                     B.Item(0).TextString = "Hangzhou"
    5 U( z& j1 `6 D1 P
  26.                     B.Item(1).TextString = "杭州"
    . X/ {. E3 C, D/ d7 u4 I
  27.                     D.Save
    8 G  V9 D; j+ d) _: A( O8 s% U0 z3 f
  28.                 End If$ T. l3 o! {5 r# W
  29.             End If( @1 i5 I( s9 r3 |( o* x" Z* z& n( s
  30.         End If! h" G3 s* S* X  S# g8 }
  31.     Next
    3 e8 G7 x) r5 ^
  32.     '关闭打开的文档
    % L% h) ?# R1 J5 Y
  33.     D.Close# e- E( \; S2 ]+ ]) W
  34.     '获取下一个文件名' E# T8 U6 Z- m0 M) B, [! H( x* P
  35.     FileName = Dir()
    3 h; _& W; n) a( e" n  Q8 N
  36. Loop
    . a/ ]1 L! @, a3 [1 ]
  37. 10: End Sub
复制代码
 楼主| 发表于 2011-12-16 08:49:38 | 显示全部楼层 来自: 中国浙江杭州
非常感谢版主,问题解决了9 S' [) W0 ]# n9 L
4 x1 W4 N4 V  y( o
再次感谢
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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