QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
10天前
查看: 3276|回复: 4
收起左侧

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

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

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

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

x
如何利VBA遍历指定目录及其所有子目录?8 a$ \; T/ p  w% a
/ T! S% c- [: U( r4 ?  }( p# s
现在有一批图纸需要将其中的指定字符串替换为另一指定字符串,手工修改太慢了,想借助于工具" M+ o1 [) L7 a9 Q
6 h7 t* e* p8 \  h2 I; E
请高手提供帮助,谢谢
发表于 2010-5-20 11:17:16 | 显示全部楼层 来自: 中国天津

  1.   S  u- z) z2 k1 }' }
  2.     Dim objFileSystem As Object, objFolder As Object, objSubFolders As Object, objFiles As Object
    7 L' T& B! M" T( V- D
  3.     Set objFileSystem = CreateObject("Scripting.FileSystemObject")'文件系统对象6 z8 B, H, e3 C  `
  4.     Set objFolder = objFileSystem.GetFolder(指定目录的路径字符串)'指定的目录对象
    - n5 U! o3 r( O6 }
  5.     Set objSubFolders = objFolder.SubFolders'该目录对象的子目录集合对象
    ! ?. w; L0 [! i2 f* J% d
  6.     Set objFiles = objFolder.Files'该目录对象的文件集合对象
    - X& U6 Q5 Q* M- ]
复制代码

! ~8 A8 z" T( T* x8 u通过上面的代码既可以查找子目录对象,也可以查找文件对象.( U2 j! q" a3 a, ]
查找文件对象还可以用Dir函数,似乎比使用文件集合对象更方便.
 楼主| 发表于 2010-5-20 12:28:36 | 显示全部楼层 来自: 中国浙江杭州
本帖最后由 157787698 于 2010-5-20 12:30 编辑
3 L# }+ Z5 g& r6 A& V1 v7 }( `; r$ B% q
感谢斑竹回复,下面我用DIR实现了要求的功能:; ]  o1 {3 {$ B4 B
% d, T( Z4 x7 J+ O* ~
) I, L6 m) E/ h. W
Dim Files() As String '文件路径1 C5 y* ?2 v, X
Dim Folder() As String '文件夹路径
3 r5 o0 z5 O$ w/ y0 r% |Dim a, b, c As Long
+ `8 n/ ?+ F& y1 TDim sPath As String
; b& w6 T0 L9 B
; v. j2 E0 ?' t3 IsPath = Dir(filePath & FileType) '查找第一个文件$ T& p/ w; A8 _6 D/ b

- X, A. K. x* |( Z; E) H: EDo While Len(sPath) '循环到没有文件为止
. W) A7 a  \; m1 q" }7 f   a = a + 19 R0 E7 y+ {+ T1 x9 i, E. [
   ReDim Preserve Files(1 To a)
9 t$ R& G5 z1 q% Y- W, b2 O1 q   Files(a) = filePath & sPath '将文件目录和文件名组合,并存放到数组中
1 F6 W8 b2 L" M0 _   ListBox1.AddItem Files(a) '加入list控件中) h' z6 u' R5 U' e4 Y
   sPath = Dir '查找下一个文件$ B4 B4 a$ a% a6 r$ ]( u
   DoEvents '让出控制权# |+ T5 }4 y- L3 f
Loop1 _% m( T, o: ^$ J3 }: g; _
5 h  e7 U0 y3 T7 @. U
sPath = Dir(filePath, vbDirectory)  '查找第一个文件夹' F% s, b! S- E. N* I2 p

8 h( Q( p. A" l) l: ]Do While Len(sPath) '循环到没有文件夹为止, \' @& N0 [+ {
   If Left(sPath, 1) <> "." Then '为了防止重复查找
; x& [! h4 t0 P5 B% E% N/ q+ n   If GetAttr(filePath & sPath) And vbDirectory Then  '如果是文件夹则。。。。。。
+ G; g0 e3 s# `3 S# S7 J      b = b + 1
* o  }# j1 N: m0 ?* I/ m      ReDim Preserve Folder(1 To b)
  _* t; b0 b# F      Folder(b) = filePath & sPath & "\" '将目录和文件夹名称组合形成新的目录,并存放到数组中
# m' W- d) B: r0 m+ ~3 s7 h   End If9 h; o  V( H& m* w
   End If4 _, [/ G8 _* ^
sPath = Dir '查找下一个文件夹! H+ c0 ~: r! F( ?7 t
DoEvents '让出控制权
7 b9 h0 f& K1 b1 ?/ R  oLoop- b& V! G" m! z8 V  q

- `' c) J, {5 }. ?; D& AFor c = 1 To b '使用递归方法,遍历所有目录
2 b8 o/ f+ b( y4 t   SearchFiles Folder(c), FileType5 Q3 W) s. ?1 T1 b1 T2 ~
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 )

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