QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
如何利VBA遍历指定目录及其所有子目录?
3 L+ Y6 X% `3 \" G8 k
! V1 g( b4 m; g: k* n现在有一批图纸需要将其中的指定字符串替换为另一指定字符串,手工修改太慢了,想借助于工具
% x5 a2 l0 @  H9 ]
: C, ?0 K( w- G请高手提供帮助,谢谢
发表于 2010-5-20 11:17:16 | 显示全部楼层 来自: 中国天津

  1. ; D3 d8 H, y! f  g6 G
  2.     Dim objFileSystem As Object, objFolder As Object, objSubFolders As Object, objFiles As Object  Y9 X5 x' ^. c9 J- H; n
  3.     Set objFileSystem = CreateObject("Scripting.FileSystemObject")'文件系统对象: V1 [& s' Q$ \! T1 S' }  r3 U
  4.     Set objFolder = objFileSystem.GetFolder(指定目录的路径字符串)'指定的目录对象
    6 g/ j" [/ P1 N$ @
  5.     Set objSubFolders = objFolder.SubFolders'该目录对象的子目录集合对象" U" C1 p4 D1 j1 N$ A6 }+ c! [
  6.     Set objFiles = objFolder.Files'该目录对象的文件集合对象+ ^  O% Z3 C' v
复制代码
- [, `) N- U5 ]" Y0 j
通过上面的代码既可以查找子目录对象,也可以查找文件对象.
: O* n3 b) v3 j8 f! D查找文件对象还可以用Dir函数,似乎比使用文件集合对象更方便.
 楼主| 发表于 2010-5-20 12:28:36 | 显示全部楼层 来自: 中国浙江杭州
本帖最后由 157787698 于 2010-5-20 12:30 编辑 - f( N. D6 W8 d: b

  n: h, M- |% a) G感谢斑竹回复,下面我用DIR实现了要求的功能:8 Z1 |: j% u$ l# r1 w

- u/ U9 ^% @2 u3 J# k# f7 A9 n2 N% z) J
' f2 y6 ^" B; ~$ d9 z; KDim Files() As String '文件路径5 E9 g2 @5 ^4 `! X
Dim Folder() As String '文件夹路径: \$ Z/ `- K! _! O* T7 A
Dim a, b, c As Long
, F  F9 w8 v1 ?% A, T+ E2 ?Dim sPath As String
/ j) u& z% Z9 G2 S8 B% o. t3 N- B1 p8 ^( X: e( Z: f1 J
sPath = Dir(filePath & FileType) '查找第一个文件
5 [1 T7 c# M" S+ }/ g7 F( y$ C8 f# `7 O, N0 w. o
Do While Len(sPath) '循环到没有文件为止
8 a1 K, n1 J5 H6 D' L* {$ S   a = a + 1
5 D2 @! J2 E. L+ i. ?/ G; H0 a1 Z, }   ReDim Preserve Files(1 To a)
& _7 r( F- D4 d; S   Files(a) = filePath & sPath '将文件目录和文件名组合,并存放到数组中
" _% M' @- N# Q/ k) [   ListBox1.AddItem Files(a) '加入list控件中
2 M2 W, f% G6 h' y5 V0 {3 X   sPath = Dir '查找下一个文件; ^; g# Z+ u3 l& i. d/ O# j
   DoEvents '让出控制权
; o. G" c0 f: @9 g1 R7 }' }Loop/ o; B6 d& p0 v# y$ Z

4 q$ W. C+ d- t; v. jsPath = Dir(filePath, vbDirectory)  '查找第一个文件夹
# [( v3 _3 b6 b6 m
2 Y. A8 `% _$ m8 G5 GDo While Len(sPath) '循环到没有文件夹为止/ m# V1 J+ E: S- y& q  g% f* A0 ^' j
   If Left(sPath, 1) <> "." Then '为了防止重复查找; L1 ]% C, O% Y% N6 G& `! {
   If GetAttr(filePath & sPath) And vbDirectory Then  '如果是文件夹则。。。。。。9 e2 x6 n; p6 o6 M" G
      b = b + 1$ f. \, L% u+ T5 v1 M0 Z
      ReDim Preserve Folder(1 To b)
3 c- w& S7 ^1 T' j; H      Folder(b) = filePath & sPath & "\" '将目录和文件夹名称组合形成新的目录,并存放到数组中
6 L. x! P  @' B# X   End If
# W) r6 c1 R" K   End If( F; n0 U( J: T) k$ v8 N
sPath = Dir '查找下一个文件夹
5 Z( `) M$ C! C7 S5 p2 uDoEvents '让出控制权( X3 j% R5 b2 ?
Loop, D5 Y, K5 [; y- ^) V* S$ e
  k& X+ \  B  i4 _! L
For c = 1 To b '使用递归方法,遍历所有目录' H& _$ O# h1 o
   SearchFiles Folder(c), FileType
( }5 V% u$ l6 g- _2 P- R4 hNext
 楼主| 发表于 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 )

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