设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 3657|回复: 6
打印 上一主题 下一主题

[模块/函数] [分享]遍历文件夹内匹配的文件

[复制链接]
跳转到指定楼层
1#
发表于 2009-3-18 23:36:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

有时需要处理同一目录下一批文件,比如excel, text, 等。可以用下面这个简单的VB标准代码来实现。不需要额外引用非默认对象。


Public Sub ergodicFilesInFolder(sFullFileNamePattern As String)
    Dim sFileName As String
    sFileName = Dir(sFullFileNamePattern)
    Do While sFileName <> ""
        Debug.Print sFileName ' 这里改为你自己的文件处理语句 // ACMAIN
        sFileName = Dir()
    Loop
End Sub



用法:  直接调用这个过程 ergodicFilesInFolder sFullFileNamePattern
例如:
      ergodicFilesInFolder "c:\temp\excel\*.xls"
      ergodicFilesInFolder "c:\temp\excel\CN*.txt"

以下摘自 Microsoft Access 2003 Help

Dir 函数

返回一个 String,用以表示一个文件名、目录名或文件夹名称,它必须与指定的模式或文件属性、或磁盘卷标相匹配。
语法
Dir[(pathname[, attributes])]
Dir 函数的语法具有以下几个部分:

部分描述
pathname可选参数。用来指定文件名的字符串表达式,可能包含目录或文件夹、以及驱动器。如果没有找到 pathname,则会返回零长度字符串 ("")。
attributes可选参数。常数或数值表达式,其总和用来指定文件属性。如果省略,则会返回匹配 pathname 但不包含属性的文件。
  
设置值
attributes 参数的设置可为:
常数描述
vbNormal0(缺省) 指定没有属性的文件。
vbReadOnly1指定无属性的只读文件
vbHidden2指定无属性的隐藏文件
VbSystem4指定无属性的系统文件 在Macintosh中不可用。
vbVolume8指定卷标文件;如果指定了其它属性,则忽略vbVolume 在Macintosh中不可用。
vbDirectory16指定无属性文件及其路径和文件夹。
vbAlias64指定的文件名是别名,只在Macintosh上可用。

注意 这些常数是由 VBA 所指定的,在程序代码中的任何位置,可以使用这些常数来替换真正的数值。
说明
在 Microsoft Windows 中, Dir 支持多字符 (*) 和单字符 (?) 的通配符来指定多重文件。
在 Macintosh 中,这些字符作为合法文件名字符并且不能作为通配符来指定多个文件
由于 Macintosh 不支持通配符,使用文件类型指定文件组。可以使用 MacID 函数指定文件类型而不用文件名。比如,下列语句返回当前文件夹中第一个TEXT文件的名称:
Dir("SomePath", MacID("TEXT"))
为选中文件夹中所有文件,指定一空串:
Dir("")
在 Microsoft Windows 中,如果在Dir函数中使用MacID函数,将产生错误。
任何大于256的attribute值都被认为是MacID 函数的值。
在第一次调用 Dir 函数时,必须指定 pathname,否则会产生错误。如果也指定了文件属性,那么就必须包括 pathname。
Dir 会返回匹配 pathname 的第一个文件名。若想得到其它匹配 pathname 的文件名,再一次调用 Dir,且不要使用参数。如果已没有合乎条件的文件,则 Dir 会返回一个零长度字符串 ("")。一旦返回值为零长度字符串,并要再次调用 Dir 时,就必须指定 pathname,否则会产生错误。不必访问到所有匹配当前 pathname 的文件名,就可以改变到一个新的 pathname 上。但是,不能以递归方式来调用 Dir 函数。以 vbDirectory 属性来调用 Dir 不能连续地返回子目录。
提示 由于文件名并不会以特别的次序来返回,所以可以将文件名存储在一个数组中,然后再对这个数组排序。



******************
*  一切皆有可能  *
******************

.
ACMAIN - Access论坛回贴准则(个人).
.

.
QQ群 48866293 / 12035577 / 7440532 / 13666209
http://www.office-cn.net/vvb/ .
http://www.accessbbs.cn/bbs/index.php .
http://www.accessoft.com/bbs/index.asp .
http://www.access-programmers.co.uk/forums .
.
http://www.office-cn.net/home/space.php?uid=141646 .
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享分享 分享淘帖 订阅订阅
2#
发表于 2009-3-18 23:37:58 | 只看该作者
谢谢~!
3#
发表于 2009-3-19 00:00:06 | 只看该作者
收下了
4#
发表于 2009-3-20 08:38:55 | 只看该作者
复制、粘贴、收藏-谢谢了!
5#
发表于 2009-3-20 08:58:21 | 只看该作者
收藏!
6#
发表于 2009-3-20 10:36:30 | 只看该作者
本帖最后由 todaynew 于 2009-3-20 11:10 编辑

能否将其改造为一个能返回文件名称(带路径)的数组函数?
我是这样写的,但是不对,能否帮忙改一下:
Public Function ergodicFilesInFolder(sFullFileNamePattern As String) As Variant
'返回文件名数组
    Dim sFileName As Variant
    Dim i As Long
    sFileName = Array()
    sFileName(1) = Dir(sFullFileNamePattern)
    i = 1
    Do While sFileName(i) <> ""
        i = i + 1
        sFileName(i) = Dir()
    Loop
    ergodicFilesInFolder = sFileName
End Function
7#
发表于 2011-5-28 12:16:51 | 只看该作者
谢谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-25 07:32 , Processed in 0.093626 second(s), 30 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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