QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
如何利VBA遍历指定目录及其所有子目录?. P# N- O+ C3 ?6 H7 F4 K# P0 g7 M% Z

3 ~% s, b; ]+ O* p% \4 ~现在有一批图纸需要将其中的指定字符串替换为另一指定字符串,手工修改太慢了,想借助于工具/ [9 H( Y' A+ \1 p" Q$ E7 A8 C0 d/ c
$ h$ T: M/ z2 O& a: w5 D1 e
请高手提供帮助,谢谢
发表于 2010-5-20 11:17:16 | 显示全部楼层 来自: 中国天津
  1. % s) T1 `- W! Q+ ^8 B
  2.     Dim objFileSystem As Object, objFolder As Object, objSubFolders As Object, objFiles As Object& f6 I! S+ A% a) O$ O
  3.     Set objFileSystem = CreateObject("Scripting.FileSystemObject")'文件系统对象, ^/ W- H2 _8 `  m7 Q8 `' h4 b3 [6 A
  4.     Set objFolder = objFileSystem.GetFolder(指定目录的路径字符串)'指定的目录对象5 R; I5 ~7 g* Q3 d# `4 p6 c
  5.     Set objSubFolders = objFolder.SubFolders'该目录对象的子目录集合对象
    9 t5 q* P) X: `4 {& Y: Y* A+ i
  6.     Set objFiles = objFolder.Files'该目录对象的文件集合对象/ J( {6 m6 j% p2 D) }
复制代码

3 T( ~2 j. O5 H% \通过上面的代码既可以查找子目录对象,也可以查找文件对象.
/ @1 S' D+ q0 b4 z( t; r查找文件对象还可以用Dir函数,似乎比使用文件集合对象更方便.
 楼主| 发表于 2010-5-20 12:28:36 | 显示全部楼层 来自: 中国浙江杭州
本帖最后由 157787698 于 2010-5-20 12:30 编辑
" G9 k! i; ^% O! W9 C6 F. ]5 [+ R7 Q+ W* L3 ]" y* R
感谢斑竹回复,下面我用DIR实现了要求的功能:0 O9 H/ H6 I( j6 r

4 d! l9 p. Z3 D: P% x; v3 R9 H8 j1 t- U
4 s( ]( O2 i4 }9 W9 UDim Files() As String '文件路径  j. b( z/ F$ I! n5 ]$ W" K8 Q4 E
Dim Folder() As String '文件夹路径3 u* \( p3 f  o9 {$ Y3 _1 s+ l6 N
Dim a, b, c As Long
1 g( Y5 C5 o" x+ e1 d$ z. ^$ p/ oDim sPath As String# i6 ~5 I/ Z& _. e
/ s7 I8 A% N3 b" `1 g
sPath = Dir(filePath & FileType) '查找第一个文件2 r) b" ]* e, C4 c+ x6 Y0 R
" U1 ^4 W: P' ?" D6 i
Do While Len(sPath) '循环到没有文件为止8 r" f1 t' K' l& _1 l
   a = a + 1  i6 w. f! D+ f7 [$ g7 j' I' u
   ReDim Preserve Files(1 To a). K  }4 i: q! Z/ b* b% w( |  B
   Files(a) = filePath & sPath '将文件目录和文件名组合,并存放到数组中; g! B! l3 e% K- T) v& ?
   ListBox1.AddItem Files(a) '加入list控件中7 P. A/ c- V* t6 ]; j
   sPath = Dir '查找下一个文件/ E3 r: V. S, ^2 r  P
   DoEvents '让出控制权
* j* a5 q: o2 K( V) L+ L* X5 ~' x! jLoop. O' E% p2 u4 \8 W" t
! o1 m3 k# c8 a& k# b7 G
sPath = Dir(filePath, vbDirectory)  '查找第一个文件夹
9 r0 G8 ?/ T" @, `1 _/ [
$ q7 J% W* V8 n: v2 P# t# H. w$ VDo While Len(sPath) '循环到没有文件夹为止
: g8 T! f& Y8 O  C# H/ Y1 u   If Left(sPath, 1) <> "." Then '为了防止重复查找9 K) \! v& j* @8 z- n7 \
   If GetAttr(filePath & sPath) And vbDirectory Then  '如果是文件夹则。。。。。。
3 j9 x: f: }% z- q      b = b + 1/ L; L& a0 c! q1 E, m* ]% S
      ReDim Preserve Folder(1 To b): z. E# n" x' o- v5 t
      Folder(b) = filePath & sPath & "\" '将目录和文件夹名称组合形成新的目录,并存放到数组中5 L, A. o9 i- h3 p
   End If6 ^, y- R$ n' X$ `7 {5 w1 |) J4 u# A
   End If
2 n7 k" m7 V0 m( ~sPath = Dir '查找下一个文件夹
. i4 ^+ _4 {- m$ w/ _DoEvents '让出控制权
4 [0 C$ j- H* m6 y& P4 O4 s8 SLoop+ N' m) r. `5 y; h  q( a0 x: g
/ O9 G: U4 \5 n, n6 @: j- H6 U
For c = 1 To b '使用递归方法,遍历所有目录: f2 B% n1 G1 r/ ^; J
   SearchFiles Folder(c), FileType/ m5 X6 h; x5 f" o) f0 r
Next
 楼主| 发表于 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 )

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