QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
如何利VBA遍历指定目录及其所有子目录?. w2 o& ], o2 r' x6 Y) ]

, Y3 w$ D2 e$ M现在有一批图纸需要将其中的指定字符串替换为另一指定字符串,手工修改太慢了,想借助于工具  H, w7 u9 _* y# c* ]9 u) c* j

, F- K+ Z# N$ E. K请高手提供帮助,谢谢
发表于 2010-5-20 11:17:16 | 显示全部楼层 来自: 中国天津

  1. : t$ \- z  G9 f
  2.     Dim objFileSystem As Object, objFolder As Object, objSubFolders As Object, objFiles As Object3 P! @& S+ h7 _
  3.     Set objFileSystem = CreateObject("Scripting.FileSystemObject")'文件系统对象
    ( m! ~% l0 s" [. O: f
  4.     Set objFolder = objFileSystem.GetFolder(指定目录的路径字符串)'指定的目录对象
    / C2 {# {" H! L2 U' |4 H) |
  5.     Set objSubFolders = objFolder.SubFolders'该目录对象的子目录集合对象
    2 h  k6 h, j% E3 s- \/ r
  6.     Set objFiles = objFolder.Files'该目录对象的文件集合对象
    ! [3 P  S% J. u
复制代码
( e: X* s9 a7 n
通过上面的代码既可以查找子目录对象,也可以查找文件对象.
6 {2 H3 |7 ^% ^+ g; b. D: T查找文件对象还可以用Dir函数,似乎比使用文件集合对象更方便.
 楼主| 发表于 2010-5-20 12:28:36 | 显示全部楼层 来自: 中国浙江杭州
本帖最后由 157787698 于 2010-5-20 12:30 编辑
2 F/ \) F7 K: m% t4 a
( V% k* B+ l- k% J感谢斑竹回复,下面我用DIR实现了要求的功能:+ ^# T1 q8 _1 r1 K7 P; `& X4 _
5 g1 P: T, x5 k- o
( `( }& L1 h7 V9 ?' u4 e+ n
Dim Files() As String '文件路径- J" x* x4 X3 R" U7 x
Dim Folder() As String '文件夹路径( Y. Y& ~$ }6 T8 R6 k
Dim a, b, c As Long- [  O' }5 \) ^* H4 w
Dim sPath As String2 ]5 x, O3 v  ~) b, q

; @4 l# B/ I7 H/ C$ a5 XsPath = Dir(filePath & FileType) '查找第一个文件0 N. V; |- G! p  O- e% x1 U7 h
9 H$ v5 Z5 |; m, P3 C
Do While Len(sPath) '循环到没有文件为止' X2 {+ a" ]$ f, a
   a = a + 1
1 o! K# }# L! \7 m. C   ReDim Preserve Files(1 To a)
! U& P+ [3 A8 h, }   Files(a) = filePath & sPath '将文件目录和文件名组合,并存放到数组中
" T7 @2 ^. E! O% `7 R   ListBox1.AddItem Files(a) '加入list控件中
* S" w% @( @  O# b6 D. _' D   sPath = Dir '查找下一个文件* y& m" R) P- A
   DoEvents '让出控制权
8 p: p6 u% z, n* A* ~Loop1 F( z/ s( p9 G* p- f# ^2 [" @2 }

6 N* b( _4 P* ~0 l( Z% `sPath = Dir(filePath, vbDirectory)  '查找第一个文件夹
( F" N' @( `) N3 w+ }1 K* w( M- H) ?7 w9 k8 D0 B
Do While Len(sPath) '循环到没有文件夹为止  ?+ J  V7 ?8 @: L) w: r5 U
   If Left(sPath, 1) <> "." Then '为了防止重复查找5 w9 q6 S8 H5 X7 |( n
   If GetAttr(filePath & sPath) And vbDirectory Then  '如果是文件夹则。。。。。。, g. m* ~% y) q9 P+ B& F$ f: ^; F
      b = b + 1
2 w3 m9 j4 }2 x  k4 q7 @( l7 u      ReDim Preserve Folder(1 To b)" T5 }; A$ b! F7 k
      Folder(b) = filePath & sPath & "\" '将目录和文件夹名称组合形成新的目录,并存放到数组中
4 W/ w1 e$ o. E$ P7 B9 N  H   End If) `+ S1 Q, ~- W
   End If
; A$ ~+ _0 k+ E1 w$ r  b/ O  C* lsPath = Dir '查找下一个文件夹
: a/ {0 E' w2 D/ _DoEvents '让出控制权  N4 r2 d1 g3 G2 E* M
Loop% R1 C) C% W, i# S' |, m9 z

9 a) @  k: [! u! f8 f% W+ kFor c = 1 To b '使用递归方法,遍历所有目录0 t* o5 O# ^. q0 k: g  w
   SearchFiles Folder(c), FileType% X  Q+ h9 g9 A) R, y8 G
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 )

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