QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 3324|回复: 4
收起左侧

[求助] AUTOCAD如何利VBA遍历指定目录?

[复制链接]
发表于 2010-5-20 09:21:20 | 显示全部楼层 |阅读模式 来自: 中国浙江杭州

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

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

x
如何利VBA遍历指定目录及其所有子目录?) g9 j5 ~5 O3 A+ a6 {2 U/ |8 |
4 F4 k# P' _2 w8 i* \) h! n0 K
现在有一批图纸需要将其中的指定字符串替换为另一指定字符串,手工修改太慢了,想借助于工具
% I: [' ~$ x4 W9 W) Y) t& q/ _8 C7 p( [6 Q
请高手提供帮助,谢谢
发表于 2010-5-20 11:17:16 | 显示全部楼层 来自: 中国天津

  1. ! _2 `! H4 Q: u+ v, W1 W1 C
  2.     Dim objFileSystem As Object, objFolder As Object, objSubFolders As Object, objFiles As Object) p" e. Q6 g) F7 a8 J: F5 R3 |
  3.     Set objFileSystem = CreateObject("Scripting.FileSystemObject")'文件系统对象
    . w: W  c! {! n- R
  4.     Set objFolder = objFileSystem.GetFolder(指定目录的路径字符串)'指定的目录对象
    9 o( {/ {/ U5 [( y6 O  E$ F! W
  5.     Set objSubFolders = objFolder.SubFolders'该目录对象的子目录集合对象; L0 [0 Q/ n. ~- [+ `$ d
  6.     Set objFiles = objFolder.Files'该目录对象的文件集合对象
    + q2 b. g- R7 M, N) r. P; W
复制代码

1 V1 |1 D8 C$ `. w- A2 ?+ A( v% Z通过上面的代码既可以查找子目录对象,也可以查找文件对象., S* p  n! V$ ^+ d* j4 g& T6 D
查找文件对象还可以用Dir函数,似乎比使用文件集合对象更方便.
 楼主| 发表于 2010-5-20 12:28:36 | 显示全部楼层 来自: 中国浙江杭州
本帖最后由 157787698 于 2010-5-20 12:30 编辑 1 o8 I3 i$ l, v. U1 ~

  U8 G9 _: j' |# C$ t$ j0 \感谢斑竹回复,下面我用DIR实现了要求的功能:
) X7 {. V& @5 v4 V9 Y$ d3 m/ T6 Y2 c( b% M5 j! Z
' x6 r+ ]& v. @8 \& E
Dim Files() As String '文件路径, M% F( M) n1 T  c+ p: |
Dim Folder() As String '文件夹路径
( Y) @' e0 p7 ?$ g+ HDim a, b, c As Long
5 h! g9 J, @/ ~9 {! h) l, CDim sPath As String# p6 ^3 J" \! A& B: G' X
5 L/ V$ |/ l# Q# G0 s; ~2 h1 Q$ G
sPath = Dir(filePath & FileType) '查找第一个文件
5 m; G; i" S8 B; Y3 I% u
( Q9 W* z+ W5 R3 z3 VDo While Len(sPath) '循环到没有文件为止. q' L5 P0 w1 q0 `  f
   a = a + 1; W6 Q9 B8 K  R& i5 n) e! n9 l
   ReDim Preserve Files(1 To a)
+ [. C* y) O1 H3 G# T   Files(a) = filePath & sPath '将文件目录和文件名组合,并存放到数组中
: k  z' e! j% }( ~" o( b   ListBox1.AddItem Files(a) '加入list控件中+ N8 v( r2 `7 t+ n" V; u
   sPath = Dir '查找下一个文件6 O3 N* g8 S- m; a, r2 U
   DoEvents '让出控制权1 x4 C$ T2 q( C& b0 K3 _
Loop
4 l6 J3 ?1 h: Y5 I2 C
" A+ Z' B6 c9 o# r6 @  C- Z' J! a7 rsPath = Dir(filePath, vbDirectory)  '查找第一个文件夹
, `" y) |% t, ~1 q9 i: q
. N# [8 @0 ?1 X* b9 V2 ?Do While Len(sPath) '循环到没有文件夹为止( J9 I; E9 }$ h6 |$ g! c6 u
   If Left(sPath, 1) <> "." Then '为了防止重复查找
+ K9 u8 U4 X% l; w3 K   If GetAttr(filePath & sPath) And vbDirectory Then  '如果是文件夹则。。。。。。% }1 {- q, U5 B/ W( t+ u5 u
      b = b + 1
) H+ }, i7 L5 ?4 Y1 r* g: t# e( |      ReDim Preserve Folder(1 To b)
) _) q4 U1 l9 t1 x- P/ V- A- j      Folder(b) = filePath & sPath & "\" '将目录和文件夹名称组合形成新的目录,并存放到数组中& V7 j/ F( a' g8 E% T, ]% |
   End If
5 q- D( h( d' V$ O, w2 O2 o5 J! W   End If# t9 h/ A- q1 b
sPath = Dir '查找下一个文件夹
! _! L# G, [5 h$ aDoEvents '让出控制权
$ X2 r9 ~& x' K7 E6 s& R# {) ZLoop+ F5 K; f+ S' R/ B9 v# {) v( K6 t, z

  o  K% ?3 @: b. F8 a: j& vFor c = 1 To b '使用递归方法,遍历所有目录1 L/ L/ w+ o  z0 f- v) y$ L
   SearchFiles Folder(c), FileType
! Y, j0 F5 B6 w: K2 U! _  ENext
 楼主| 发表于 2010-5-20 12:31:18 | 显示全部楼层 来自: 中国浙江杭州
但是如何遍历图纸中的所有Text和Mtext,然后将指定的文字替换为另外的文字?
发表于 2010-5-20 17:37:46 | 显示全部楼层 来自: 中国北京
这就有点麻烦了.CAD的Mtext对象包含格式符,用VBA编程,就必须去除这些格式符得到"纯净"的字符串然后才能替换.
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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