小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

VBA實用小程序72:遍歷文件夾(和子文件夾)中的文件

 hercules028 2021-04-18

excelperfect

很多時候,我們都想要遍歷文件夾中的每個文件,例如在工作表中列出所有文件名、對每個文件進行修改。VBA給我們提供了一些方式:(1)Dir函數(shù);(2)File System Object。

使用Dir函數(shù)

Dir函數(shù)是一個內置的VBA函數(shù),可用于可使用VBA的任何應用程序。

使用File System Object(FSO)

File System Object(FSO)是一個單獨的操作庫,我們可以在VBA代碼中使用它。有兩種方法可以打開FSO庫,即早期綁定或后期綁定。如果你不確定要使用哪個,建議使用后期綁定。它可能會導致代碼速度變慢,但運行時的錯誤應該更少。

早期綁定

在VBE編輯器中,單擊“工具——引用”。在“引用”對話框中,找到并選取“MicrosoftScripting Runtime”,單擊“確定”按鈕。

圖片

圖1

后期綁定

后期綁定不需要任何特定操作來啟用FSO庫,確保在VBA代碼中需要時打開庫。

遍歷文件夾中所有文件

下面的示例代碼將文件名打印到立即窗口,很容易修改這些代碼以更適合你的具體情況。

方法1:使用Dir函數(shù)

Sub LoopAllFilesInAFolder()

   '遍歷文件夾中的所有文件

    Dim fileName As Variant

    fileName =Dir('D:\excelperfect\')

    While fileName <> ''

        '插入對每個文件要執(zhí)行的操作

        '本示例代碼打印文件名到立即窗口

        Debug.Print fileName

        '設置fileName指向下一個文件

        fileName = Dir

    Wend

End Sub

上面的代碼可以很容易地通過使用通配符進行調整。例如:

'遍歷帶有擴展名”.xlsx”的每個文件

filename =Dir(“D:\excelperfect\*.xlsx”)

'遍歷文件名中包含單詞”January”的每個文件

filename =Dir(“D:\excelperfect\*January*”)

'遍歷文件夾中的每個文本文件

filename =Dir(“D:\excelperfect\*.txt”)

方法2:使用File System Object(FSO)后期綁定

Sub LoopAllFilesInFolder1()

    Dim folderName As String

    Dim FSOLibrary As Object

    Dim FSOFolder As Object

    Dim FSOFile As Object

   '將文件名賦值給變量

    folderName = 'D:\excelperfect\'

   '設置對FSO庫的所有引用

    Set FSOLibrary =CreateObject('Scripting.FileSystemObject')

    Set FSOFolder =FSOLibrary.GetFolder(folderName)

    Set FSOFile = FSOFolder.Files

   '使用For Each循環(huán)遍歷文件夾中的每個文件

    For Each FSOFile In FSOFile

        '插入對每個文件要執(zhí)行的操作

        ' 本示例代碼打印文件名到立即窗口

        Debug.Print FSOFile.Name

    Next

   '釋放內存

    Set FSOLibrary = Nothing

    Set FSOFolder = Nothing

    Set FSOFile = Nothing

End Sub

方法3:使用File System Object(FSO)早期綁定

要使用本方法,記得像本文開頭那樣開啟對FSO庫的引用。

Sub LoopFilesInFolder2()

    Dim folderName As String

    Dim FSOLibrary As FileSystemObject

    Dim FSOFolder As Object

    Dim FSOFile As Object

   '將文件名賦值給變量

    folderName = 'D:\excelperfect\'

   '設置對FSO庫的所有引用

    Set FSOLibrary = New FileSystemObject

    Set FSOFolder =FSOLibrary.GetFolder(folderName)

    Set FSOFile = FSOFolder.Files

   '使用For Each循環(huán)遍歷文件夾中的每個文件

    For Each FSOFile In FSOFile

        '插入對每個文件要執(zhí)行的操作

        ' 本示例代碼打印文件名到立即窗口

        Debug.Print FSOFile.Name

    Next

   '釋放內存

    Set FSOLibrary = Nothing

    Set FSOFolder = Nothing

    Set FSOFile = Nothing

End Sub

遍歷子文件夾中所有文件

當文件存儲在子文件夾中時,可能就需要一些技巧了?,F(xiàn)在需要找到一種方法來鉆取到這些子文件夾中。我們將使用上述相同的Dir和FSO方法。為了確保這些代碼可以處理任意數(shù)量的子文件夾,宏實際上會調用自身(一種稱為遞歸的技術)。

方法1:使用Dir函數(shù)

這個示例將把完整的文件路徑(文件夾路徑和文件名)打印到立即窗口。

Sub loopAllSubFolderSelectStartDirectory()

   '調用LoopAllSubFolders過程

    Call LoopAllSubFolders('D:\excelperfect\')

End Sub

Sub LoopAllSubFolders(ByVal folderPath As String)

    Dim fileName As String

    Dim fullFilePath As String

    Dim numFolders As Long

    Dim folders() As String

    Dim i As Long

    If Right(folderPath, 1) <>'\' Then folderPath = folderPath & '\'

    fileName = Dir(folderPath &'*.*', vbDirectory)

    While Len(fileName) <> 0

        If Left(fileName, 1) <>'.' Then

            fullFilePath = folderPath &fileName

            If (GetAttr(fullFilePath) And vbDirectory) = vbDirectory Then

                ReDim Preserve folders(0 TonumFolders) As String

                folders(numFolders) =fullFilePath

                numFolders = numFolders + 1

            Else

                '插入對每個文件要執(zhí)行的操作

               '本示例代碼打印完整文件路徑和文件名到立即窗口

                Debug.Print folderPath &fileName

            End If

        End If

        fileName = Dir()

    Wend

    For i = 0 To numFolders - 1

        LoopAllSubFolders folders(i)

    Next i

End Sub

方法2:使用File System Object(FSO)后期綁定

運行下面的過程:

Sub loopAllSubFolderSelectStartDirectory1()

    Dim FSOLibrary As Object

    Dim FSOFolder As Object

    Dim folderName As String

    '將文件夾名賦值給變量

     folderName = 'D:\excelperfect\'

    '設置對FSO庫的引用

     Set FSOLibrary = CreateObject('Scripting.FileSystemObject')

    '調用LoopAllSubFolders1過程

     LoopAllSubFolders1 FSOLibrary.GetFolder(folderName)

End Sub

SubLoopAllSubFolders1(FSOFolder As Object)

    Dim FSOSubFolder As Object

    Dim FSOFile As Object

   '遍歷每個子文件夾

    For Each FSOSubFolder In FSOFolder.SubFolders

        LoopAllSubFolders1 FSOSubFolder

    Next

   '遍歷每個文件并打印名字

    For Each FSOFile In FSOFolder.Files

        '插入對每個文件要執(zhí)行的操作

        '本示例代碼打印完整文件路徑和文件名到立即窗口

        Debug.Print FSOFile.Path

    Next

End Sub

方法3:使用File System Object(FSO)早期綁定

要使用本方法,記得像本文開頭那樣開啟對FSO庫的引用。

Sub loopAllSubFolderSelectStartDirectory2()

    Dim FSOLibrary As FileSystemObject

    Dim FSOFolder As Object

    Dim folderName As String

    '將文件夾名賦值給變量

     folderName = 'D:\excelperfect\'

    '設置對FSO庫的引用

     Set FSOLibrary = New FileSystemObject

    '調用LoopAllSubFolders2過程

     LoopAllSubFolders2 FSOLibrary.GetFolder(folderName)

End Sub

Sub LoopAllSubFolders2(FSOFolder As Object)

    Dim FSOSubFolder As Object

    Dim FSOFile As Object

   '遍歷每個子文件夾

    For Each FSOSubFolder In FSOFolder.SubFolders

        LoopAllSubFolders2 FSOSubFolder

    Next

   '遍歷每個文件并打印名字

    For Each FSOFile In FSOFolder.Files

        '插入對每個文件要執(zhí)行的操作

        '本示例代碼打印完整文件路徑和文件名到立即窗口

        Debug.Print FSOFile.Path

    Next

End Sub

注:本文整理自exceloffthegrid.com,供有興趣的朋友學習參考。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多