QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
11天前
查看: 3280|回复: 4
收起左侧

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

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

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

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

x
如何利VBA遍历指定目录及其所有子目录?4 M5 k. i, r' n9 ~7 T% u! K1 `, k

+ Q+ {& {. C* T/ A. s( ^7 l3 h/ u) h现在有一批图纸需要将其中的指定字符串替换为另一指定字符串,手工修改太慢了,想借助于工具
2 O& p* I, g6 i6 o* s. `2 N9 n6 ~$ Z& p9 s3 D
请高手提供帮助,谢谢
发表于 2010-5-20 11:17:16 | 显示全部楼层 来自: 中国天津

  1. & ?' v3 _: ?0 g# N
  2.     Dim objFileSystem As Object, objFolder As Object, objSubFolders As Object, objFiles As Object/ v( ?5 b/ O- ~9 D- W  [
  3.     Set objFileSystem = CreateObject("Scripting.FileSystemObject")'文件系统对象
    ! a. @: V, C( X. }. L: U6 L
  4.     Set objFolder = objFileSystem.GetFolder(指定目录的路径字符串)'指定的目录对象
      h7 c" h* v3 H" t
  5.     Set objSubFolders = objFolder.SubFolders'该目录对象的子目录集合对象% _; H, Y5 N2 z# N
  6.     Set objFiles = objFolder.Files'该目录对象的文件集合对象
    8 [! M, G% x. }; q, g9 S6 B9 Z
复制代码

9 W0 E5 n0 H/ L通过上面的代码既可以查找子目录对象,也可以查找文件对象.3 m9 \% ]2 v# A- }
查找文件对象还可以用Dir函数,似乎比使用文件集合对象更方便.
 楼主| 发表于 2010-5-20 12:28:36 | 显示全部楼层 来自: 中国浙江杭州
本帖最后由 157787698 于 2010-5-20 12:30 编辑
2 a# [& a/ I2 ^1 u4 s2 r+ d% u) ?$ T" g8 h% U
感谢斑竹回复,下面我用DIR实现了要求的功能:2 a: n: S! Q0 ^- I* M0 l5 s

" @9 }" W& L- l9 w1 n" B1 ?) v
Dim Files() As String '文件路径" i; i( V1 U0 x% \/ I* g
Dim Folder() As String '文件夹路径0 v' T& R5 j* y' Z. R
Dim a, b, c As Long( K& W5 \' m3 x% u# _4 o2 Q/ x2 C
Dim sPath As String2 P# P  w% i1 [1 L

# m3 _# O- `5 JsPath = Dir(filePath & FileType) '查找第一个文件
  q) @( @" U) }+ Y; d1 }9 t1 C/ `/ C. g8 C& h
Do While Len(sPath) '循环到没有文件为止
  T* _- }' ]( ?* J8 E9 u   a = a + 15 V9 L: V- G0 B2 r( z8 P# F6 d
   ReDim Preserve Files(1 To a). R* N. ^4 ~/ _  N$ g
   Files(a) = filePath & sPath '将文件目录和文件名组合,并存放到数组中
6 \: |5 [. L# T& S* V. [   ListBox1.AddItem Files(a) '加入list控件中
: t- l; H% m3 `   sPath = Dir '查找下一个文件
0 \0 p, z! l& E2 u   DoEvents '让出控制权
: x( O& ^0 `7 U- d+ }Loop
9 f' {! X6 b. N0 w& x1 Y9 x( V4 |# f% G% k
sPath = Dir(filePath, vbDirectory)  '查找第一个文件夹0 N, }5 q( M: B8 R/ W* h

$ _+ j* U& ~% Q; S5 J6 X. UDo While Len(sPath) '循环到没有文件夹为止
, K1 E& U& J. i   If Left(sPath, 1) <> "." Then '为了防止重复查找
1 R& C# w% L2 l7 F8 y( s  |   If GetAttr(filePath & sPath) And vbDirectory Then  '如果是文件夹则。。。。。。2 c8 D: D0 Y. _/ c: o
      b = b + 1
9 S; t" o. N2 ~( \8 F8 c      ReDim Preserve Folder(1 To b)! P- k; N7 |& t  B) W8 C
      Folder(b) = filePath & sPath & "\" '将目录和文件夹名称组合形成新的目录,并存放到数组中: }, X$ A$ _- d1 q
   End If
3 q! v# k7 i: U! ]$ A; d6 c   End If
/ h. e( Z2 ^( |% S& {sPath = Dir '查找下一个文件夹  S3 u) ~5 g! a- u( c! I
DoEvents '让出控制权' I, V3 P+ n: B% }* i% Z/ j
Loop) f+ K7 [3 ^) o% u9 u

% n( E. o( L) @. w; XFor c = 1 To b '使用递归方法,遍历所有目录
: w! ~: R" X: C6 j; R( H; ]   SearchFiles Folder(c), FileType) B) @. A! R% Q: _5 A" s
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 )

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