Cách dùng FileSystemObject trong VBA Excel
Dưới đây là một số ví dụ để bạn dễ hình dung hơn cách sử dụng FileSystemObject trong VBA.
Ví dụ 1: Kiểm tra xem các file hoặc thư mục có tồn tại hay không
Đoạn mã dưới đây sẽ kiểm tra xem thư mục có tên Test có tồn tại hay không trong vị trí cụ thể đã chỉ định.
Nếu thư mục tồn tại, điều kiện IF là True và nó sẽ hiển thị thông báo "thư mục tồn tại" trong hộp thoại thông báo. Nếu thư mục không tồn tại nó sẽ hiển thị thông báo "thư mục không tồn tại".
Sub CheckFolderExist()
Dim MyFSO As FileSystemObject
Set MyFSO = New FileSystemObject
If MyFSO.FolderExists("C:\Users\sumit\Desktop\Test") Then
MsgBox "thư mục tồn tại"
Else
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 file có tồn tại hay không.
Đoạn mã dưới đây kiểm tra xem file có tên Test.xlsx có tồn tại trong thư mục cụ thể hay không:
Sub CheckFileExist()
Dim MyFSO As FileSystemObject
Set MyFSO = New FileSystemObject
If MyFSO.FileExists("C:\Users\sumit\Desktop\Test\Test.xlsx") Then
MsgBox "File có tồn tại"
Else
MsgBox "File không tồn tại"
End If
End Sub
Ví dụ 2: Tạo thư mục mới trong vị trí đã chỉ định
Đoạn mã dưới đây tạo thư mục có tên Test trong ổ C trên hệ thống (chúng ta sẽ phải chỉ định đường dẫn trên hệ thống của mình, nơi muốn tạo thư mục).
Sub taothumuc()
Dim MyFSO As FileSystemObject
Set MyFSO = New FileSystemObject
MyFSO.taothumuc ("C:\Users\sumit\Desktop\Test")
End Sub
Đoạn mã trên đây sẽ trả về thông báo lỗi trong trường hợp nếu thư mục đã tồn tại.
Đoạn mã dưới đây kiểm tra xem thư mục đã tồn tại hay chưa và tạo thư mục nếu chưa có. Trong trường hợp nếu thư mục đã tồn tại, nó sẽ hiển thị thông báo lỗi. Để kiểm tra thư mục đã tồn tại hay chưa, chúng ta sử dụng phương thức FolderExists của FSO:
Sub taothumuc()
Dim MyFSO As FileSystemObject
Set MyFSO = New FileSystemObject
If MyFSO.FolderExists("C:\Users\sumit\Desktop\Test") Then
MsgBox "thư mục đã tồn tại"
Else
MyFSO.CreateFolder ("C:\Users\sumit\Desktop\Test")
End If
End Sub
Ví dụ 3: Lấy danh sách tên tất cả các file trong một thư mục
Sử dụng đoạn mã dưới đây để hiển thị tên của tất cả các file trong một thư mục cụ thể:
Sub laytenfile ()
Dim MyFSO As FileSystemObject
Dim MyFile As File
Dim MyFolder As Folder
Set MyFSO = New Scripting.FileSystemObject
Set MyFolder = MyFSO.GetFolder("C:\Users\sumit\Desktop\Test")
For Each MyFile In MyFolder.Files
Debug.Print MyFile.Name
Next MyFile
End Sub
Đoạn mã này phức tạp hơn một chút so với các đoạn mã mà Taimienphi.vn đã giới thiệu ở trên.
Như đã đề cập ở trên, khi tham chiếu 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 đi qua từng file trong thư mục được chỉ định sau đó 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 đang 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ể
Đoạn mã dưới đây sẽ hiển thị tên tất cả các thư mục con trong thư mục cụ thể được chỉ định:
Sub laytenthumuccon ()
Dim MyFSO As FileSystemObject
Dim MyFile As File
Dim MyFolder As Folder
Dim MySubFolder As Folder
Set MyFSO = New Scripting.FileSystemObject
Set MyFolder = MyFSO.GetFolder("C:\Users\sumit\Desktop\Test")
For Each MySubFolder In MyFolder.SubFolders
Debug.Print MySubFolder.Name
Next MySubFolder
End Sub
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 Source sang thư mục Destination:
Sub saochepfile()
Dim MyFSO As FileSystemObject
Dim SourceFile As String
Dim DestinationFolder As String
Set MyFSO = New Scripting.FileSystemObject
SourceFile = "C:\Users\sumit\Desktop\Source\SampleFile.xlsx"
DestinationFolder = "C:\Users\sumit\Desktop\Destination"
MyFSO.CopyFile Source:=SourceFile, Destination:=DestinationFolder & "\SampleFileCopy.xlsx"
End Sub
Trong đoạn mã trên chúng ta sử dụng 2 biến SourceFile và DestinationFolder.
Trong đó, biến Source File giữ địa chỉ của file mà chúng ta muốn sao chép và biến DestinationFolder giữ địa chỉ của thư mục mà chúng ta muốn sao chép file vào.
Lưu ý: khi sao chép file, 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 file, và có thể sử dụng cùng một tên file hoặc thay đổi. Trong ví dụ trên Taimienphi.vn sao chép file và đặt tên là SampleFileCopy.xlsx.
Ví dụ 6: Sao chép tất cả các file 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 file từ thư mục Source sang thư mục Destination:
Sub CopyAllFiles()
Dim MyFSO As FileSystemObject
Dim MyFile As File
Dim SourceFolder As String
Dim DestinationFolder As String
Dim MyFolder As Folder
Dim MySubFolder As Folder
SourceFolder = "C:\Users\sumit\Desktop\Source"
DestinationFolder = "C:\Users\sumit\Desktop\Destination"
Set MyFSO = New Scripting.FileSystemObject
Set MyFolder = MyFSO.GetFolder(SourceFolder)
For Each MyFile In MyFolder.Files
MyFSO.CopyFile Source:=MyFSO.GetFile(MyFile), _
Destination:=DestinationFolder & "\" & MyFile.Name, Overwritefiles:=False
Next MyFile
End Sub
Lưu ý: Trong phương thức MyFSO.CopyFile, chúng ta chỉ định thuộc tính Overwritefiles là False (mặc định là True). Điều này để đảm bảo trong trường hợp nếu file đã có trong thư mục, file đó sẽ không được sao chép. Nếu xóa Overwritefiles hoặc thiết lập giá trị là False, trong trường hợp nếu có các file bị trùng trong thư mục đích có cùng tên, các file này sẽ bị ghi đè.
Nếu chỉ muốn sao chép các file của một tiện ích mở rộng cụ thể, chúng ta có thể làm được điều này bằng cách sử dụng lệnh IF Then để kiểm tra xem tiện ích mở rộng có phải là xlsx hay không.
Sub CopyExcelFilesOnly()
Dim MyFSO As FileSystemObject
Dim MyFile As File
Dim SourceFolder As String
Dim DestinationFolder As String
Dim MyFolder As Folder
Dim MySubFolder As Folder
SourceFolder = "C:\Users\sumit\Desktop\Source"
DestinationFolder = "C:\Users\sumit\Desktop\Destination"
Set MyFSO = New Scripting.FileSystemObject
Set MyFolder = MyFSO.GetFolder(SourceFolder)
For Each MyFile In MyFolder.Files
If MyFSO.GetExtensionName(MyFile) = "xlsx" Then
MyFSO.CopyFile Source:=MyFSO.GetFile(MyFile), _
Destination:=DestinationFolder & "\" & MyFile.Name, Overwritefiles:=False
End If
Next MyFile
End Sub
Trên đây là một vài ví dụ về FileSystemObject trong VBA cũng như cách sử dụng của nó. Nêu bạn đang quan tâm về VBA trong Excel thì không nên bỏ lỡ những bài viết hay đã được Taimienphi.vn giới thiệu.