QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
如何利VBA遍历指定目录及其所有子目录?  z5 V- j0 ]; M4 _* `+ S' g& N
0 c$ e6 o) U) W. ]. H; Y
现在有一批图纸需要将其中的指定字符串替换为另一指定字符串,手工修改太慢了,想借助于工具
+ C& `5 j) q1 l0 O$ |5 `3 M9 T* m
  m* A  [# V) ~- I# i" T请高手提供帮助,谢谢
发表于 2010-5-20 11:17:16 | 显示全部楼层 来自: 中国天津
  1. / `3 z: n4 p" R$ _; Y
  2.     Dim objFileSystem As Object, objFolder As Object, objSubFolders As Object, objFiles As Object
    ( x2 M2 p( v8 j6 R
  3.     Set objFileSystem = CreateObject("Scripting.FileSystemObject")'文件系统对象4 o" _3 e5 @7 ]& R  `: F. X6 M+ c
  4.     Set objFolder = objFileSystem.GetFolder(指定目录的路径字符串)'指定的目录对象: Q, ~& [5 Z* e: e. Q$ R/ c5 g
  5.     Set objSubFolders = objFolder.SubFolders'该目录对象的子目录集合对象& n' u+ T' Z1 V. {0 ?6 v0 x
  6.     Set objFiles = objFolder.Files'该目录对象的文件集合对象
    0 \, @" o/ n, @" [1 M' D
复制代码

  e6 N. C5 ^8 g  X通过上面的代码既可以查找子目录对象,也可以查找文件对象.
7 s7 L5 V  A- g查找文件对象还可以用Dir函数,似乎比使用文件集合对象更方便.
 楼主| 发表于 2010-5-20 12:28:36 | 显示全部楼层 来自: 中国浙江杭州
本帖最后由 157787698 于 2010-5-20 12:30 编辑 7 p" `# j1 g5 {/ b8 m
& B$ f. M1 f( j9 P' \0 }4 N
感谢斑竹回复,下面我用DIR实现了要求的功能:
7 V0 {- J$ X: U9 i# _: U, x
/ r2 c, L. o5 B
/ ~; C+ W8 b" K% @3 nDim Files() As String '文件路径
( |6 }7 _5 @7 a. Y5 }: `Dim Folder() As String '文件夹路径
) N9 {& Q" d1 w; z2 d; N# zDim a, b, c As Long
# [# R0 l+ j1 n! H! FDim sPath As String4 \' ~4 t" g8 ^9 l, g3 i

+ J' @' s- M0 Z2 f: \  j9 fsPath = Dir(filePath & FileType) '查找第一个文件+ K4 h) i- t# R& u
0 }3 ^3 e* y2 C/ a) p
Do While Len(sPath) '循环到没有文件为止
! f8 j) n- q' E- P) c   a = a + 1& b6 }5 k0 `# G  p
   ReDim Preserve Files(1 To a)
, a$ ~" C3 h* N. e: V   Files(a) = filePath & sPath '将文件目录和文件名组合,并存放到数组中( p; B5 N8 Z4 u+ C9 J
   ListBox1.AddItem Files(a) '加入list控件中
, U8 j4 @; I  E5 d  _5 V$ v! ]   sPath = Dir '查找下一个文件( w4 W( a! ^( O+ `0 a% [4 h1 u7 z
   DoEvents '让出控制权: h0 S4 I0 X# c0 v! \( b+ e
Loop# a$ _+ F, h( A; A# ]3 v

3 B% B1 h. \$ @% l; NsPath = Dir(filePath, vbDirectory)  '查找第一个文件夹& _3 ^' F5 Z% ^

7 N$ b0 K5 _7 ?8 {5 ^. {Do While Len(sPath) '循环到没有文件夹为止  ]  v/ h4 Q# F) e; ]$ @$ u
   If Left(sPath, 1) <> "." Then '为了防止重复查找
/ P$ e% a6 i4 h7 m* }) n4 D% J! i   If GetAttr(filePath & sPath) And vbDirectory Then  '如果是文件夹则。。。。。。6 {$ A6 x# _# V! s" y/ B& G
      b = b + 17 i  O7 m) ~: [* ~) Q- o% F
      ReDim Preserve Folder(1 To b)' c& z* w. n. \; R' ^" H. d3 B5 Z9 R7 J
      Folder(b) = filePath & sPath & "\" '将目录和文件夹名称组合形成新的目录,并存放到数组中
5 O0 \9 [7 n$ G: I+ A( X, |( e   End If) \5 {% w  P6 W7 f8 W: l* F
   End If" F% T7 [- ^& X' [6 ?; _
sPath = Dir '查找下一个文件夹$ \& C: y2 t, G) j, D
DoEvents '让出控制权
6 o0 i4 l. ^  d7 yLoop, u& n, y' {) `) }" I0 l6 t1 b

8 v- m7 _% U! f% ^  s1 qFor c = 1 To b '使用递归方法,遍历所有目录2 {9 a4 F3 N! f1 o  V
   SearchFiles Folder(c), FileType
% P; m3 i' v; ~% P6 RNext
 楼主| 发表于 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 )

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