Excel VBA 利用FileSystemObject處理檔案

碼農的日常發表於2020-10-01

Excel VBA 利用FileSystemObject類處理檔案

FileSystemObject介紹

FileSystemObject是Windows Script Host Object Model物件模型的成員,能夠對檔案進行方便的基本操作,讀取,寫入,提取關鍵字等操作,讀取之後使用left(),right(),mid()函式可輕鬆的提取關鍵詞並寫入excel表格中,若與Microsoft VBScript Regular Expressions 5.5結合,可有更強的表現。

使用方法有前期繫結和後期繫結:

  1. 前期繫結 ,在Visual Basic編輯器中選擇工具選單>>引用,將彈出如下對話方塊,選中紅框中的選項,點選確定。
    在這裡插入圖片描述
  2. 後期繫結方法是creatobject(“Scripting.Filesystemobject”)

FileSystemObject的應用

下面的一段程式碼展示了利用FileSystemObject類獲取指定目錄下的檔案和子目錄,並對每個檔案進行開啟讀取操作

Sub ReadTxtFile()
    Dim fso As FileSystemObject
    Dim fld As Folder '定義資料夾物件
    Dim subflds As Folders '定義資料夾物件的集合
    Dim fls As Files '定義檔案物件的集合
    Dim f As File  '定義檔案物件
    Dim c As Integer
    Dim dpath As String
    Dim txtstr As TextStream '文字流物件

    
    dpath = "C:\Users\Administrator\Desktop\shell" '指定目錄
'    Set fso = New FileSystemObject  '前期繫結設定fso物件
    Set fso = creatobject("Scripting.Filesystemobject")  '後期繫結

    'Function GetFolder(FolderPath As String) As Folder '函式原型
    Set fld = fso.GetFolder(dpath) '設定資料夾物件
    
    Set subflds = fld.SubFolders() '設定子目錄物件集合
    'Debug.Print subflds.Count  '獲取子目錄的數量
    For Each d In subflds
    	'Debug.Print d.Name  '輸出每一個子目錄名
    
    Next
    'Function OpenTextFile(FileName As String, [IOMode As IOMode = ForReading], [Create As Boolean = False], [Format As Tristate = TristateFalse]) As TextStream    
    Set fls = fld.Files  '設定檔案物件集合
'    Debug.Print fls.Count '獲取檔案的數量
'遍歷所有檔案並讀取
    For Each f In fls
        Set txtstr = fso.OpenTextFile(fso.BuildPath(dpath, f.Name), ForReading, False, TristateFalse) 
        Debug.Print txtstr.ReadAll() '讀取全部文字內容
'一次讀取一行文字內容
'        Do While txtstr.AtEndOfStream <> True
            'Debug.Print txtstr.ReadLine()
'        Loop
        txtstr.Close '關閉文字流物件
    Next f
    
'將物件值設為nothing    
    Set f = Nothing  
    Set fld = Nothing
    Set fls = Nothing
    Set fso = Nothing
End Sub

下面介紹筆者在使用其複製檔案時提示報錯的解決辦法

CopyFile的過程原型,共有3個引數,最後一個引數為True時會覆蓋目標路徑下的檔案
'Sub CopyFile(Source As String, Destination As String, [OverWriteFiles As Boolean = True])
使用方法: fso.CopyFile “原路徑/filename”, “目標路徑filename”, True
其中原路徑下的filename與目標路徑下的filename可以不相同,也可以相同,但不能省略,否則就會報錯。

CopyFolder 使用方法同上
fso.CopyFolder “原路徑/目錄”, “目標路徑目錄”, True

OpenTextFile函式說明

object.OpenTextFile(FileName As String, [IOMode As IOMode = ForReading], [Create As Boolean = False], [Format As Tristate = TristateFalse]) As TextStream

object:必選引數,為FileSystemObject對像
FileName:必選引數,要開啟的檔名
IOMode :可選引數,可選擇ForReading(以只讀方式開啟),ForWriting(以寫入模式開啟),ForAppending(以追加模式開啟)
Create :可選引數,預設為False;當原檔案不存在,此引數為True時,會自動建立檔案
Format :可選引數,TristateFalse(以ASCII格式開啟檔案),TristateTrue(以unicode格式開啟檔案),TristateUseDefault(系統自動選擇開啟方式)

BuildPath函式說明

使用方法object.BuildPath(Path As String, Name As String) As String
object:必選引數,為FileSystemObject對像
Path :必選引數,路徑,字元型別
Name :必選引數,檔案或資料夾名,字元型別

若覺得不錯,還請點贊,謝謝

相關文章