QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
如何利VBA遍历指定目录及其所有子目录?
7 u5 n9 I1 X8 u$ a: m5 h: w$ T
+ M: F* U+ Z7 E# t( d! e1 W现在有一批图纸需要将其中的指定字符串替换为另一指定字符串,手工修改太慢了,想借助于工具
, q2 y7 b& X, P" z  V6 F3 U0 c" ~
/ ]7 T* t0 ]+ s( a3 y" ?/ {8 q请高手提供帮助,谢谢
发表于 2010-5-20 11:17:16 | 显示全部楼层 来自: 中国天津

  1. 9 f4 D1 k: _& X- y4 u# i
  2.     Dim objFileSystem As Object, objFolder As Object, objSubFolders As Object, objFiles As Object  N2 c& z6 r! `: z) Q
  3.     Set objFileSystem = CreateObject("Scripting.FileSystemObject")'文件系统对象- m% x5 V8 M9 z, Y
  4.     Set objFolder = objFileSystem.GetFolder(指定目录的路径字符串)'指定的目录对象2 \2 v7 @1 Z& ?  I: }; S4 I
  5.     Set objSubFolders = objFolder.SubFolders'该目录对象的子目录集合对象9 {* L% \% |$ h5 b( h9 B9 Y6 ?" ?& K
  6.     Set objFiles = objFolder.Files'该目录对象的文件集合对象6 u- `* T3 c& V& v; y; }
复制代码
' o# q2 d3 E7 T. L+ g, `6 r6 E
通过上面的代码既可以查找子目录对象,也可以查找文件对象.6 @# A. @" X: f* `  K- q9 Z
查找文件对象还可以用Dir函数,似乎比使用文件集合对象更方便.
 楼主| 发表于 2010-5-20 12:28:36 | 显示全部楼层 来自: 中国浙江杭州
本帖最后由 157787698 于 2010-5-20 12:30 编辑 / o/ u$ _/ R# P: e7 J

. W  n/ Q+ x' a; [感谢斑竹回复,下面我用DIR实现了要求的功能:
: u9 ~8 G, K3 ~) c6 j4 Q
. X, c0 p( h4 q4 \+ v; W& A
6 J# T* y2 r. J# c" `- PDim Files() As String '文件路径
7 n2 B" I2 j, `0 h0 u, }% K' @Dim Folder() As String '文件夹路径, a2 P6 d* T7 g& [  [  f
Dim a, b, c As Long( X" U- d( O) U+ C4 M/ S* J! e
Dim sPath As String
2 f* D% |4 v% ?7 j
! L9 f2 K$ b! I# H- `2 p( GsPath = Dir(filePath & FileType) '查找第一个文件8 [+ M' g- Y7 y6 E, o

' _: r# t. m9 |, |# u+ d7 NDo While Len(sPath) '循环到没有文件为止
: b5 o! L# w# W9 a   a = a + 1" k* U3 z9 P2 }9 L2 e/ J, ~
   ReDim Preserve Files(1 To a)$ X$ [* H7 G1 Y; @1 h9 n
   Files(a) = filePath & sPath '将文件目录和文件名组合,并存放到数组中
' H1 k( ~' v- Q2 V) t! c   ListBox1.AddItem Files(a) '加入list控件中# i: g" h. J( @, J$ J
   sPath = Dir '查找下一个文件
4 b. L: }$ I5 n' B   DoEvents '让出控制权
  t  J" s; |/ t' F6 _# V5 YLoop
1 o* n! S8 S# d0 i% y# b
: G! |3 E5 l. n- X  ]8 K% A# k- h4 CsPath = Dir(filePath, vbDirectory)  '查找第一个文件夹
' T" U1 R/ X) `' \
+ e- @) a5 H; ~+ x7 |! m  wDo While Len(sPath) '循环到没有文件夹为止( L  b) Y# q( |* p# r
   If Left(sPath, 1) <> "." Then '为了防止重复查找
8 Z" t+ O8 s, [& E! X& Q   If GetAttr(filePath & sPath) And vbDirectory Then  '如果是文件夹则。。。。。。- J7 s& Q/ D/ l' z; |. H. v  o$ E1 L
      b = b + 1' ~2 N' i+ ?2 Y) A- l1 ]
      ReDim Preserve Folder(1 To b)
& y' ?& T, a3 Q) V: E      Folder(b) = filePath & sPath & "\" '将目录和文件夹名称组合形成新的目录,并存放到数组中6 F, P4 C6 y7 T" L' K. R4 y
   End If
. X3 O! H; D- M( D( c; E) C   End If
4 a& o0 t/ W$ o  c. P" Y, g' JsPath = Dir '查找下一个文件夹$ B, i9 x4 T" K. m; w- [
DoEvents '让出控制权) ?" n( V; _6 N7 S' u4 x9 a" J1 Z
Loop
  `2 `" M& `- x# i% y3 S! C  ?. A. e" R
For c = 1 To b '使用递归方法,遍历所有目录8 q2 B1 M! M: }5 ~# {
   SearchFiles Folder(c), FileType
4 K" G9 [# x# f# i: n0 I! x! ?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 )

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