QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
9天前
查看: 3320|回复: 4
收起左侧

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

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

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

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

x
如何利VBA遍历指定目录及其所有子目录?
. ?) [: }" m; z8 `8 L0 k
6 B9 }7 U3 N1 y: }6 F5 i现在有一批图纸需要将其中的指定字符串替换为另一指定字符串,手工修改太慢了,想借助于工具7 w6 n5 _) S& {, x: I

7 P: V1 g! Y+ K, h请高手提供帮助,谢谢
发表于 2010-5-20 11:17:16 | 显示全部楼层 来自: 中国天津
  1. 8 M& Q8 `2 \5 c9 J2 D" S
  2.     Dim objFileSystem As Object, objFolder As Object, objSubFolders As Object, objFiles As Object
    1 s8 o5 n+ Q9 k* E( g; p
  3.     Set objFileSystem = CreateObject("Scripting.FileSystemObject")'文件系统对象9 e6 T1 U7 [* j" H5 u
  4.     Set objFolder = objFileSystem.GetFolder(指定目录的路径字符串)'指定的目录对象
    ) I3 U, M1 a, U( m2 i: j, j/ ~
  5.     Set objSubFolders = objFolder.SubFolders'该目录对象的子目录集合对象* g! E: l9 ^5 {/ W* _% w6 a
  6.     Set objFiles = objFolder.Files'该目录对象的文件集合对象
    6 W, c$ p/ F  q2 S/ _2 T
复制代码

4 P2 K2 |2 p) l8 N% W通过上面的代码既可以查找子目录对象,也可以查找文件对象.
3 ?! [8 O, s6 V' {查找文件对象还可以用Dir函数,似乎比使用文件集合对象更方便.
 楼主| 发表于 2010-5-20 12:28:36 | 显示全部楼层 来自: 中国浙江杭州
本帖最后由 157787698 于 2010-5-20 12:30 编辑 , U! J( C* g0 Y5 p* i
( T) ~/ _: W, N( K0 }
感谢斑竹回复,下面我用DIR实现了要求的功能:
% a8 F: L0 H; I  a# D& V) w6 v) t4 b8 e5 O! d3 |

( H5 {* m! W' @/ Q% BDim Files() As String '文件路径& r2 b5 L2 F8 V1 L1 u
Dim Folder() As String '文件夹路径2 J' G9 U7 ]' v
Dim a, b, c As Long
3 r$ y/ o% t( d' Z- w9 G( [Dim sPath As String
$ M' q# f1 ?6 t, p: j, ^2 e0 H
0 g& X7 o- N9 gsPath = Dir(filePath & FileType) '查找第一个文件
0 l6 q+ M; i3 }$ O+ g
! s' S+ T$ d" D& k  ^Do While Len(sPath) '循环到没有文件为止2 N, i& q& I$ W+ x! S( b" a
   a = a + 1. n. c5 E' R' Q: L% D" C
   ReDim Preserve Files(1 To a)& [6 d7 c5 ^8 ?/ z5 H
   Files(a) = filePath & sPath '将文件目录和文件名组合,并存放到数组中
% |: ?) D7 q( m8 z   ListBox1.AddItem Files(a) '加入list控件中# E* M. p( O, [! d2 q
   sPath = Dir '查找下一个文件
2 I- S/ ~8 K, p   DoEvents '让出控制权
9 M8 e% x7 c; A! ZLoop; \0 n5 d% S5 r  m
! F6 s9 }" @! `
sPath = Dir(filePath, vbDirectory)  '查找第一个文件夹
) `" e7 \8 ?' `7 t! H5 e( L
2 p1 m0 k, W, g' ZDo While Len(sPath) '循环到没有文件夹为止
1 j& {9 B* U3 n   If Left(sPath, 1) <> "." Then '为了防止重复查找
/ ]4 F  n9 X9 [8 n! a4 p7 h) Q& w   If GetAttr(filePath & sPath) And vbDirectory Then  '如果是文件夹则。。。。。。
) k; @# ?8 E- A4 b4 z" Q      b = b + 1
- ~% E  m/ r3 L6 M      ReDim Preserve Folder(1 To b)
* o6 Y! i6 d% w2 k5 z      Folder(b) = filePath & sPath & "\" '将目录和文件夹名称组合形成新的目录,并存放到数组中
5 M2 i- {: w+ B) ?: A% P5 R6 y   End If
" ~" A- [. [6 f   End If
' d8 l% X9 [, P. D  f7 QsPath = Dir '查找下一个文件夹
" j4 {" o. r2 j6 `6 A, l8 sDoEvents '让出控制权4 h' R7 w# q( ~; I
Loop
7 X- I/ M0 {# t) X- }2 \1 L! {! v8 c4 f& S0 B# ^! Z  U
For c = 1 To b '使用递归方法,遍历所有目录4 K4 X$ y9 [, O$ Q1 g, v; }
   SearchFiles Folder(c), FileType& Z1 \3 r' ?0 ]* Y, b8 b0 X: d6 }
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 )

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