QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
8天前
查看: 3319|回复: 4
收起左侧

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

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

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

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

x
如何利VBA遍历指定目录及其所有子目录?
- S9 w5 c  C/ w' F& [
8 _  x/ O" g9 K" y) u% o9 u" H现在有一批图纸需要将其中的指定字符串替换为另一指定字符串,手工修改太慢了,想借助于工具+ R' Z& w' |1 F1 K9 m+ ]' e9 k

) ]1 W1 D6 n' m+ i请高手提供帮助,谢谢
发表于 2010-5-20 11:17:16 | 显示全部楼层 来自: 中国天津
  1. ! W! q+ d3 a( R, R7 U! ]6 s
  2.     Dim objFileSystem As Object, objFolder As Object, objSubFolders As Object, objFiles As Object5 r& ]4 y6 Z7 R; G  ?
  3.     Set objFileSystem = CreateObject("Scripting.FileSystemObject")'文件系统对象
    9 E  D2 w, R  ^+ s
  4.     Set objFolder = objFileSystem.GetFolder(指定目录的路径字符串)'指定的目录对象
    ' L; X$ a6 Y, g4 h1 m& ~  o
  5.     Set objSubFolders = objFolder.SubFolders'该目录对象的子目录集合对象
    : J0 H0 x. L- |  p( x  u7 U
  6.     Set objFiles = objFolder.Files'该目录对象的文件集合对象
    4 m* t, l8 J' F
复制代码
6 S* D8 w% m/ z7 k$ a, h( _' @
通过上面的代码既可以查找子目录对象,也可以查找文件对象., e+ _9 a; V2 q) a# v8 F: L" x/ v
查找文件对象还可以用Dir函数,似乎比使用文件集合对象更方便.
 楼主| 发表于 2010-5-20 12:28:36 | 显示全部楼层 来自: 中国浙江杭州
本帖最后由 157787698 于 2010-5-20 12:30 编辑 + \# M( D2 T) I/ e
. d/ c0 R; V% M# S4 E1 @6 A$ u, ?
感谢斑竹回复,下面我用DIR实现了要求的功能:3 f9 X2 ^2 @. W. h' S

! d/ Z! q5 o  a; O; o
0 L8 ^8 Q' f1 A% M# eDim Files() As String '文件路径
6 [- y+ }* Y5 Q: w8 Z, l7 @Dim Folder() As String '文件夹路径
3 U4 }! E6 v8 d/ I0 m" r) {$ xDim a, b, c As Long
1 L+ d; x" `8 c! w& t/ M4 wDim sPath As String$ e$ f* `, t7 T$ D5 v" t
% J. p# X# O% F5 v" ^& ]8 Z
sPath = Dir(filePath & FileType) '查找第一个文件
+ [% p; b) d% l; K! Y. M6 y4 v% P- Q
Do While Len(sPath) '循环到没有文件为止
8 H$ ?  N1 L5 h* ]( v9 H   a = a + 16 g/ y- G' u4 X# g/ K
   ReDim Preserve Files(1 To a)& p7 ]% ?/ M- R+ u0 _# H
   Files(a) = filePath & sPath '将文件目录和文件名组合,并存放到数组中
& x' w) |  m% g# t2 B9 B0 h; V% L) U   ListBox1.AddItem Files(a) '加入list控件中
6 q+ S) ^# e, @& J; S; r& g   sPath = Dir '查找下一个文件% U4 Y% Y4 I! F& H7 p! W" u
   DoEvents '让出控制权! Z6 K  s6 f$ Z) L" y/ ~. U$ h' h0 e
Loop' C. W, Z. T/ g( U

* A3 f5 h" h1 F2 x( p/ Z& }sPath = Dir(filePath, vbDirectory)  '查找第一个文件夹
4 \. |, s) ]2 H9 d. A5 e8 @# i1 n
Do While Len(sPath) '循环到没有文件夹为止7 A3 U& t$ U/ z# p0 I8 S. k
   If Left(sPath, 1) <> "." Then '为了防止重复查找
7 K) E0 @* O) P, l   If GetAttr(filePath & sPath) And vbDirectory Then  '如果是文件夹则。。。。。。9 c5 @' H0 N2 f- M* ~) W. ]
      b = b + 1" v7 Y& ^$ H/ e5 T  P+ `, D
      ReDim Preserve Folder(1 To b)7 ?$ q( R- h# C1 P& r; _
      Folder(b) = filePath & sPath & "\" '将目录和文件夹名称组合形成新的目录,并存放到数组中
% \, a4 R& S* J0 i( j   End If
. u' P7 l; f) u7 @. a   End If
4 F& x8 H! P. w0 g$ |& YsPath = Dir '查找下一个文件夹6 H9 G7 \$ r$ v
DoEvents '让出控制权
+ l: z; P$ f, C! i3 G  T3 \, {/ dLoop( K* I$ Q0 X' J4 J; N

; o1 V% f" _8 aFor c = 1 To b '使用递归方法,遍历所有目录
5 U& V0 O7 P+ A9 Z   SearchFiles Folder(c), FileType
1 ^+ R; ~7 M! G5 g" cNext
 楼主| 发表于 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 )

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