Để bạn dễ dàng hiểu cách sử dụng FileSystemObject (FSO) trong VBA, chúng tôi sẽ giới thiệu một số ví dụ thực tế về việc áp dụng nó trong lập trình VBA.
1. Ví dụ về FileSystemObject trong VBA.
1.1. Ví dụ 1: Kiểm tra sự tồn tại của file hoặc thư mục
1.2. Ví dụ 2: Tạo thư mục mới tại vị trí chỉ định
1.3. Ví dụ 3: Liệt kê tất cả các tên file trong một thư mục
1.4. Ví dụ 4: Liệt kê tất cả các thư mục con trong một thư mục cụ thể
1.5. Ví dụ 5: Sao chép file từ một thư mục sang thư mục khác
1.6. Ví dụ 6: Sao chép tất cả các file từ một thư mục sang thư mục khác
1. Ví dụ về FileSystemObject trong VBA
Dưới đây là một số ví dụ để bạn hiểu rõ hơn về cách sử dụng FileSystemObject trong VBA.
1.1 Ví dụ 1: Kiểm tra sự tồn tại của các file hoặc thư mục
Đoạn mã dưới đây sẽ kiểm tra xem thư mục có tên Test có tồn tại không tại vị trí đã chỉ định cụ thể.
Nếu thư mục tồn tại, điều kiện IF sẽ được kích hoạt và hiển thị thông báo 'Thư mục đã tồn tại' trong hộp thoại. 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ẽ xuất hiện.
Hàm Kiểm tra Sự Tồn Tại của Thư Mục()
Khai báo MyFSO Như FileSystemObject
Thiết lập MyFSO là 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'
End If
End Sub
Tương tự, chúng ta cũng có thể kiểm tra xem một tập tin có tồn tại không.
Dưới đây là đoạn mã để kiểm tra xem tập tin có tên Test.xlsx có tồn tại trong một thư mục cụ thể không:
Sub KiểmTraTậpTinTồnTại()
Khai báo MyFSO Như FileSystemObject
Thiết lập MyFSO là FileSystemObject mới
Nếu MyFSO.FileExists('C:\Users\sumit\Desktop\Test\Test.xlsx') Thì
MsgBox 'Tập tin tồn tại'
Ngược lại
MsgBox 'Tập tin không tồn tại'
End If
Kết Thúc Hàm
1.2 Ví dụ 2: Tạo Thư Mục Mới Tại Vị Trí Chỉ Định
Dưới đây là đoạn mã để tạo thư mục có tên Test trên ổ C của máy tính (chúng ta cần chỉ định đường dẫn trên máy tính của mình để tạo thư mục).
Hàm tạothumuc()
Khai báo MyFSO Như FileSystemObject
Thiết lập MyFSO là FileSystemObject mới
MyFSO.tạoThưMục('C:\Users\sumit\Desktop\Test')
Kết Thúc Hàm
Nếu thư mục đã tồn tại, đoạn mã sẽ xuất 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 mới nếu chưa có. Trong trường hợp 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, chúng ta sử dụng phương thức FolderExists của FSO:
Hàm tạo thư mục()
Khai báo MyFSO là FileSystemObject
Thiết lập MyFSO là đối tượng FileSystemObject mới
Nếu MyFSO.thưMụcTồnTại('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 If
Kết Thúc Hàm
1.3 Ví dụ 3: Liệt kê tên của tất cả các tập tin trong một thư mục
Dùng mã sau để hiển thị tên của tất cả các tập tin trong một thư mục cụ thể:
Hàm lấy tên tập tin()
Khai báo MyFSO Như FileSystemObject
Khai báo MyFile Như Tập Tin
Khai báo MyFolder Là Thư Mục
Thiết lập MyFSO Là Scripting.FileSystemObject Mới
Thiết lập MyFolder Là Thư Mục được lấy từ đường dẫn đã chỉ định
Đối Với Mỗi Tập Tin Trong MyFolder.Files
Debug.Print Tên của Tập Tin
Kế tiếp MyFile
Kết Thúc Hàm
Đoạn mã này phức tạp hơn một chút so với các đoạn mã mà chúng tôi đã giới thiệu ở trên.
Như đã nói ở trên, khi sử dụng thư viện Microsoft Scripting Runtime Library, chúng ta có thể sử dụng FileSystemObject cũng như 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 đã 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.
1.4 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ể
Đoạn mã sau sẽ hiển thị tên của tất cả các thư mục con trong một thư mục cụ thể được chỉ định:
Hàm lấy tên thư mục con()
Khai báo MyFSO Là FileSystemObject
Khai báo MyFile Là Tập Tin
Khai báo MyFolder Là Thư Mục
Khai báo MySubFolder Là Thư Mục
Thiết lập MyFSO Là Scripting.FileSystemObject Mới
Thiết lập MyFolder Là Thư Mục Được Lấy Từ Đường Dẫn Chỉ Định
Đối Với Mỗi Thư Mục Con Trong MyFolder.SubFolders
Debug.Print Tên của MySubFolder
Kế Tiếp MySubFolder
Kết Thúc Hàm
1.5 Ví dụ 5: Sao chép file từ thư mục này sang thư mục khác
Đoạn mã dưới đây sao chép file từ thư mục Gốc sang thư mục Đích:
Hàm sao chép tập tin()
Khai báo MyFSO Là FileSystemObject
Khai báo Tập Tin Nguồn Là Chuỗi
Khai báo Thư Mục Đích Là Chuỗi
Thiết lập MyFSO Là Scripting.FileSystemObject Mới
SourceFile = 'C:\Users\sumit\Desktop\Nguồn\TậpTinMẫu.xlsx'
DestinationFolder = 'C:\Users\sumit\Desktop\Đích'
MyFSO.CopyFile Source:=NguồnTậpTin, Destination:=ThưMụcĐích & '\TậpTinMẫuSaoChép.xlsx'
Kết Thúc Hàm
Trong đoạn mã trên, chúng ta sử dụng 2 biến NguồnTậpTin và ThưMụcĐích.
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à TậpTinMẫuSaoChép.xlsx.
1.6 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 Nguồn sang thư mục Đích:
Hàm SaoChépTấtCảCácTậpTin()
Khai báo MyFSO Là FileSystemObject
Khai báo MyFile Là File
Khai báo ThưMụcNguồn Là Chuỗi
Khai báo ThưMụcĐích Là Chuỗi
Khai báo ThưMụcCủaTôi Là ThưMục
Khai báo ThưMụcConCủaTôi Là ThưMục
ThưMụcNguồn = 'C:\Users\sumit\Desktop\Source'
ThưMụcĐích = 'C:\Users\sumit\Desktop\Destination'
Tạo MyFSO Là Scripting.FileSystemObject
Gán MyFolder Bằng ThưMục(Nguồn)
Đối Với Mỗi Tập Tin Trong MyFolder.Files
SaoChépTậpTin(Nguồn:=MyFSO.LấyTậpTin(MyTậpTin), _
Đích:=ThưMụcĐích & '\' & MyTậpTin.Tên, GhiĐèTậpTin:=False
TiếpTheo MyTậpTin
KếtThúc Sub
Chú Ý: Trong hàm MyFSO.SaoChépTậpTin, chúng ta chỉ đặt thuộc tính GhiĐèTậpTin là Sai (mặc định là Đúng). Điều này đảm bảo rằng nếu tập tin đã tồn tại trong thư mục đích, nó sẽ không bị sao chép. Nếu loại bỏ GhiĐèTậpTin hoặc đặt giá trị là Sai, các tập tin trùng tên trong thư mục đích sẽ bị ghi đè.
Nếu chỉ muốn sao chép các tập tin có phần mở rộng cụ thể, chúng ta có thể làm điều này bằng cách sử dụng câu lệnh IF Then để kiểm tra xem phần mở rộng có phải là xlsx hay không.
Sub SaoChépTậpTinExcel()
Dim MyFSO As FileSystemObject
Dim TậpTinCủaTôi As TậpTin
Dim ThưMụcNguồn As Chuỗi
Dim ThưMụcĐích As Chuỗi
Dim ThưMụcCủaTôi As ThưMục
Dim ThưMụcConCủaTôi As ThưMục
ThưMụcNguồn = 'C:\Users\sumit\Desktop\Source'
ThưMụcĐích = 'C:\Users\sumit\Desktop\Destination'
Set TậpTinHệThốngCủaTôi = New Scripting.FileSystemObject
Set ThưMụcCủaTôi = TậpTinHệThốngCủaTôi.GetFolder(ThưMụcNguồn)
For Each TậpTinCủaTôi Trong ThưMụcCủaTôi.Files
Nếu TậpTinHệThốngCủaTôi.GetExtensionName(TậpTinCủaTôi) = 'xlsx' Thì
TậpTinHệThốngCủaTôi.CopyFile Nguồn:=TậpTinHệThốngCủaTôi.GetFile(TậpTinCủaTôi), _
Đích:=ThưMụcĐích & '\' & TậpTinCủaTôi.Name, GhiĐèTậpTin:=False
End If
KếTiếp TậpTinCủaTôi
Bài viết về FileSystemObject trong VBA (Phần 2) ở trên đã giới thiệu cho bạn một số ví dụ về FileSystemObject trong VBA. Bạn cũng có thể tham khảo các bài viết khác trên Mytour để hiểu sâu hơn về hàm TRIM trong Excel VBA nhé.
