Hướng dẫn chi tiết về cách sử dụng FileSystemObject trong VBA Excel
Hướng dẫn sử dụng FileSystemObject trong VBA
Dưới đây là một số ví dụ giúp bạn hiểu rõ hơn về cách sử dụng FileSystemObject trong VBA.
Ví dụ 1: Kiểm tra sự tồn tại của các file hoặc thư mục
Mã dưới đây sẽ kiểm tra xem thư mục Test có tồn tại ở vị trí cụ thể đã chỉ định hay không.
Nếu thư mục tồn tại, điều kiện IF sẽ là Đúng và thông báo 'thư mục tồn tại' sẽ được hiển thị trong hộp thoại thông báo. Nếu thư mục không tồn tại, thông báo 'thư mục không tồn tại' sẽ được hiển thị.
Sub KiểmTraThưMụcTồnTại()
Khai báo MyFSO là một đối tượng FileSystemObject
Thiết lập MyFSO là một đối tượng FileSystemObject mới
Nếu MyFSO.FolderExists('C:\Users\sumit\Desktop\Test') Thì
MsgBox 'Thư mục tồn tại'
Ngược lại
MsgBox 'Thư mục không tồn tại'
Kết thúc Nếu
Kết thúc Sub
Tương tự, chúng ta có thể kiểm tra xem một file có tồn tại hay không.
Dưới đây là đoạn mã kiểm tra xem file Test.xlsx có tồn tại trong thư mục đã chỉ định hay không:
Sub KiểmTraFileTồnTại()
Khai báo MyFSO là một đối tượng FileSystemObject
Thiết lập MyFSO là một đối tượng FileSystemObject mới
Nếu MyFSO.FileExists('C:\Users\sumit\Desktop\Test\Test.xlsx') Thì
MsgBox 'File đã tồn tại'
Trong trường hợp ngược lại
MsgBox 'File không tồn tại'
Kết thúc Nếu
Kết thúc Sub
Ví dụ 2: Tạo thư mục mới ở vị trí xác định
Dưới đây là đoạn mã để tạo thư mục có tên Test trong ổ C trên máy tính của bạn.
Sub TaoThuMucMoi()
Khai báo MyFSO là một đối tượng FileSystemObject
Thiết lập MyFSO là một đối tượng FileSystemObject mới
MyFSO.TạoThưMục('C:\Users\sumit\Desktop\Test')
Kết thúc Sub
Trong trường hợp thư mục đã tồn tại, đoạn mã sẽ thông báo lỗi.
Đoạn mã dưới đây kiểm tra xem thư mục đã tồn tại chưa và tạo thư mục nếu chưa tồn tại. Nếu thư mục đã tồn tại, sẽ hiển thị thông báo lỗi. Để kiểm tra sự tồn tại của thư mục, ta sử dụng phương thức FolderExists của FSO:
Sub TaoThuMuc()
Khai báo MyFSO là một đối tượng FileSystemObject
Thiết lập MyFSO là một đối tượng FileSystemObject mới
Nếu MyFSO.FolderExists('C:\Users\sumit\Desktop\Test') Thì
MsgBox 'Thư mục đã tồn tại'
Ngược lại
MyFSO.TạoThưMục('C:\Users\sumit\Desktop\Test')
Kết thúc Nếu
Kết thúc Sub
Ví dụ 3: Lấy danh sách tên của tất cả các file trong một thư mục
Dùng đoạn mã sau để hiển thị tên của mọi file trong một thư mục nhất định:
Sub LấyTênFile()
Khai báo MyFSO là một đối tượng FileSystemObject
Khai báo MyFile là một đối tượng File
Khai báo MyFolder là một đối tượng Folder
Thiết lập MyFSO là một đối tượng Scripting.FileSystemObject mới
Thiết lập MyFolder là một đối tượng Folder từ thư mục đã chỉ định
Duyệt qua từng file trong thư mục MyFolder
In ra tên của MyFile
Tiếp theo MyFile
Kết thúc Sub
Đoạn mã này đòi hỏi một chút phức tạp hơn so với các ví dụ trước mà Mytour đã giới thiệu.
Như đã đề cập trước đó, khi tham chiếu thư viện Microsoft Scripting Runtime Library, chúng ta có thể sử dụng FileSystemObject cùng với tất cả các đối tượng khác (như File và Folder).
Trong đoạn mã trên, chúng ta sử dụng 3 đối tượng là FileSystemObject, File và Folder. Điều này cho phép chúng ta duyệt qua từng file trong thư mục được chỉ định và sử dụng thuộc tính name để lấy danh sách tên tất cả các file.
Lưu ý: trong đoạn mã trên, chúng ta sử dụng Debug.Print để lấy tên của tất cả các file. Các tên này sẽ được liệt kê và hiển thị trên cửa sổ trên VB Editor.
Ví dụ 4: Lấy danh sách tất cả các thư mục con trong một thư mục cụ thể
Dùng đoạn mã sau để hiển thị tên của tất cả các thư mục con trong thư mục cụ thể đã chỉ định:
Sub LấyTênThưMụcCon()
Khai báo MyFSO là một đối tượng FileSystemObject
Khai báo MyFile là một đối tượng File
Khai báo MyFolder là một đối tượng ThưMục
Khai báo MySubFolder là một đối tượng ThưMục
Thiết lập MyFSO là một đối tượng Scripting.FileSystemObject mới
Thiết lập MyFolder là một đối tượng ThưMục từ thư mục đã chỉ định
Duyệt qua từng ThưMụcCon trong MyFolder
In ra tên của MySubFolder
Tiếp theo ThưMụcCon
Kết thúc Sub
Ví dụ 5: Sao chép file từ thư mục này sang thư mục khác
Dưới đây là đoạn mã sao chép file từ thư mục Gốc sang thư mục Đích:
Sub SaoChepFile()
Khai báo MyFSO là một đối tượng FileSystemObject
Khai báo SourceFile là một chuỗi
Khai báo DestinationFolder là một chuỗi
Thiết lập MyFSO là một đối tượng Scripting.FileSystemObject mới
SourceFile = 'C:\Users\sumit\Desktop\Source\SampleFile.xlsx'
DestinationFolder = 'C:\Users\sumit\Desktop\Destination'
MyFSO.SaoChépTậpTin Nguồn:=SourceFile, Đích:=DestinationFolder & '\SampleFileCopy.xlsx'
Kết thúc Sub
Trong đoạn mã trên, chúng ta sử dụng 2 biến SourceFile và DestinationFolder.
Trong đó, biến TậpTinNguồn giữ địa chỉ của tập tin mà chúng ta muốn sao chép và biến ThưMụcĐích giữ địa chỉ của thư mục mà chúng ta muốn sao chép tập tin vào.
Lưu ý: khi sao chép tập tin, nếu chỉ cung cấp tên thư mục đích thôi là chưa đủ. Chúng ta phải chỉ định tên tập tin, và có thể sử dụng cùng một tên tập tin hoặc thay đổi. Trong ví dụ trên, chúng tôi sao chép tập tin và đặt tên là SampleFileCopy.xlsx.
Ví dụ 6: Sao chép tất cả các tập tin từ thư mục này sang thư mục khác
Đoạn mã dưới đây sao chép tất cả các tập tin từ thư mục Gốc sang thư mục Đích:
Sub SaoChépTấtCảCácTậpTin()
Dim MyFSO As FileSystemObject
Dim MyFile As File
Dim ThưMụcGốc As String
Dim ThưMụcĐích As String
Dim ThưMụcGốc As Folder
Dim ThưMụcCon As Folder
ThưMụcNguồn = 'C:\Users\sumit\Desktop\Source'
ThưMụcĐích = 'C:\Users\sumit\Desktop\Destination'
Set ĐốiTượngFSO = New Scripting.FileSystemObject
Set ĐốiTượngThưMụcGốc = ĐốiTượngFSO.GetFolder(ThưMụcNguồn)
For Each TệpTrongThưMục In ĐốiTượngThưMụcGốc.Files
ĐốiTượngFSO.SaoChépTệp Nguồn:=ĐốiTượngFSO.GetFile(TệpTrongThưMục), _
Đích:=ThưMụcĐích & '\' & TệpTrongThưMục.Name, GhiĐèTệp:=False
KếTiếp TệpTrongThưMục
End Sub
Chú ý: Trong phương thức SaoChépTệp của ĐốiTượngFSO, ta chỉ định thuộc tính GhiĐèTệp là False (mặc định là True). Điều này đảm bảo nếu có file tồn tại trong thư mục đích, chúng sẽ không bị sao chép lại. Nếu loại bỏ thuộc tính GhiĐèTệp hoặc đặt giá trị là False, trong trường hợp có các file trùng tên trong thư mục đích, các file này sẽ bị ghi đè.
Nếu chỉ muốn sao chép các file có định dạng mở rộng cụ thể, ta có thể sử dụng lệnh IF Then để kiểm tra xem định dạng mở rộng có phải là xlsx hay không.
Sub SaoChépTệpExcelChỉ()
Dim ĐốiTượngFSO As FileSystemObject
Dim TệpCủaTôi As File
Dim ThưMụcNguồn As String
Dim ThưMụcĐích As String
Dim ThưMụcCủaTôi As Folder
Dim ThưMụcConCủaTôi As Folder
ThưMụcNguồn = 'C:\Users\sumit\Desktop\Nguồn'
ThưMụcĐích = 'C:\Users\sumit\Desktop\Đích'
Set MyFSO = New Scripting.FileSystemObject
Set ThưMụcCủaTôi = MyFSO.GetFolder(ThưMụcNguồn)
For Each TệpTrongThưMục In ThưMụcCủaTôi.Files
If MyFSO.GetExtensionName(TệpTrongThưMục) = 'xlsx' Then
MyFSO.CopyFile Source:=MyFSO.GetFile(TệpTrongThưMục), _
Destination:=ThưMụcĐích & '\' & TệpTrongThưMục.Name, GhiĐèTệp:=False
End If
Next TệpTrongThưMục
End Sub
Dưới đây là một số ví dụ về FileSystemObject trong VBA cùng cách sử dụng. Nếu bạn quan tâm đến VBA trong Excel, đừng bỏ lỡ những bài viết hữu ích mà Mytour đã chia sẻ.