設為首頁收藏本站Access中國

Office中國論壇/Access中國論壇

 找回密碼
 注冊

QQ登錄

只需一步,快速開始

返回列表 發(fā)新帖
查看: 3649|回復: 6
打印 上一主題 下一主題

[模塊/函數(shù)] [分享]遍歷文件夾內(nèi)匹配的文件

[復制鏈接]
跳轉到指定樓層
1#
發(fā)表于 2009-3-18 23:36:44 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

有時需要處理同一目錄下一批文件,比如excel, text, 等?梢杂孟旅孢@個簡單的VB標準代碼來實現(xiàn)。不需要額外引用非默認對象。


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



用法:  直接調(diào)用這個過程 ergodicFilesInFolder sFullFileNamePattern
例如:
      ergodicFilesInFolder "c:\temp\excel\*.xls"
      ergodicFilesInFolder "c:\temp\excel\CN*.txt"

以下摘自 Microsoft Access 2003 Help

Dir 函數(shù)

返回一個 String,用以表示一個文件名、目錄名或文件夾名稱,它必須與指定的模式或文件屬性、或磁盤卷標相匹配。
語法
Dir[(pathname[, attributes])]
Dir 函數(shù)的語法具有以下幾個部分:

部分描述
pathname可選參數(shù)。用來指定文件名的字符串表達式,可能包含目錄或文件夾、以及驅動器。如果沒有找到 pathname,則會返回零長度字符串 ("")。
attributes可選參數(shù)。常數(shù)或數(shù)值表達式,其總和用來指定文件屬性。如果省略,則會返回匹配 pathname 但不包含屬性的文件。
  
設置值
attributes 參數(shù)的設置可為:
常數(shù)描述
vbNormal0(缺省) 指定沒有屬性的文件。
vbReadOnly1指定無屬性的只讀文件
vbHidden2指定無屬性的隱藏文件
VbSystem4指定無屬性的系統(tǒng)文件 在Macintosh中不可用。
vbVolume8指定卷標文件;如果指定了其它屬性,則忽略vbVolume 在Macintosh中不可用。
vbDirectory16指定無屬性文件及其路徑和文件夾。
vbAlias64指定的文件名是別名,只在Macintosh上可用。

注意 這些常數(shù)是由 VBA 所指定的,在程序代碼中的任何位置,可以使用這些常數(shù)來替換真正的數(shù)值。
說明
在 Microsoft Windows 中, Dir 支持多字符 (*) 和單字符 (?) 的通配符來指定多重文件。
在 Macintosh 中,這些字符作為合法文件名字符并且不能作為通配符來指定多個文件
由于 Macintosh 不支持通配符,使用文件類型指定文件組?梢允褂 MacID 函數(shù)指定文件類型而不用文件名。比如,下列語句返回當前文件夾中第一個TEXT文件的名稱:
Dir("SomePath", MacID("TEXT"))
為選中文件夾中所有文件,指定一空串:
Dir("")
在 Microsoft Windows 中,如果在Dir函數(shù)中使用MacID函數(shù),將產(chǎn)生錯誤。
任何大于256的attribute值都被認為是MacID 函數(shù)的值。
在第一次調(diào)用 Dir 函數(shù)時,必須指定 pathname,否則會產(chǎn)生錯誤。如果也指定了文件屬性,那么就必須包括 pathname。
Dir 會返回匹配 pathname 的第一個文件名。若想得到其它匹配 pathname 的文件名,再一次調(diào)用 Dir,且不要使用參數(shù)。如果已沒有合乎條件的文件,則 Dir 會返回一個零長度字符串 ("")。一旦返回值為零長度字符串,并要再次調(diào)用 Dir 時,就必須指定 pathname,否則會產(chǎn)生錯誤。不必訪問到所有匹配當前 pathname 的文件名,就可以改變到一個新的 pathname 上。但是,不能以遞歸方式來調(diào)用 Dir 函數(shù)。以 vbDirectory 屬性來調(diào)用 Dir 不能連續(xù)地返回子目錄。
提示 由于文件名并不會以特別的次序來返回,所以可以將文件名存儲在一個數(shù)組中,然后再對這個數(shù)組排序。



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

.
ACMAIN - Access論壇回貼準則(個人).
.

.
QQ群 48866293 / 12035577 / 7440532 / 13666209
http://ctxi.cn/vvb/ .
http://www.accessbbs.cn/bbs/index.php .
http://www.accessoft.com/bbs/index.asp .
http://www.access-programmers.co.uk/forums .
.
http://ctxi.cn/home/space.php?uid=141646 .
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享分享 分享淘帖 訂閱訂閱
2#
發(fā)表于 2009-3-18 23:37:58 | 只看該作者
謝謝~!
3#
發(fā)表于 2009-3-19 00:00:06 | 只看該作者
收下了
4#
發(fā)表于 2009-3-20 08:38:55 | 只看該作者
復制、粘貼、收藏-謝謝了!
5#
發(fā)表于 2009-3-20 08:58:21 | 只看該作者
收藏!
6#
發(fā)表于 2009-3-20 10:36:30 | 只看該作者
本帖最后由 todaynew 于 2009-3-20 11:10 編輯

能否將其改造為一個能返回文件名稱(帶路徑)的數(shù)組函數(shù)?
我是這樣寫的,但是不對,能否幫忙改一下:
Public Function ergodicFilesInFolder(sFullFileNamePattern As String) As Variant
'返回文件名數(shù)組
    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#
發(fā)表于 2011-5-28 12:16:51 | 只看該作者
謝謝分享
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則

QQ|站長郵箱|小黑屋|手機版|Office中國/Access中國 ( 粵ICP備10043721號-1 )  

GMT+8, 2024-10-23 08:29 , Processed in 0.126590 second(s), 30 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回復 返回頂部 返回列表