Trong bài viết hàm DIR trong VBA (Phần 2) dưới đây Taimienphi.vn sẽ giới thiệu cho bạn một số ví dụ về hàm DIR trong VBA. Ngoài ra bạn đọc có thể tham khảo thêm một số bài viết đã có trên Taimienphi.vn để tìm hiểu về FileSystemObject (FSO) trong VBA là gì nhé.
Dưới đây là một số ví dụ về hàm DIR trong VBA:
Ví dụ 1: Lấy tên file từ đường dẫn
Nếu có đường dẫn file, chúng ta có thể sử dụng hàm DIR để lấy tên của file từ đó.
Ví du, đoạn mã dưới đây trả về tên của file và hiển thị tên file trong hộp thông báo:
Sub laytenfile()
Dim tenfile As String
FileName = Dir("C:\Users\sumit\Desktop\Test\Excel File A.xlsx")
MsgBox ten file
End Sub
Đoạn mã trên sử dụng biến "tenfile" để lưu ten file mà hàm DIR trả về. Sau đó sử dụng hộp thông báo để hiển thị tên file như hình dưới đây:
Trong trường hợp nếu file không tồn tại, hàm DIR sẽ trả về chuỗi rỗng.
Ví dụ, trong đoạn mã dưới đây chúng ta sử dụng lệnh If Then Else để kiểm tra xem file có tồn tại hay không. Nếu file không tồn tại, nó sẽ hiển thị hộp thông báo kèm theo nội dung thông báo file không tồn tại.
Sub kiemtrafiletontai ()
Dim tenfile As String
FileName = Dir("C:\Users\sumit\Desktop\Test\Excel File A.xlsx")
If FileName <> "" Then
MsgBox tenfile
Else
MsgBox "file khong ton tai"
End If
End Sub
Ví dụ 2: Kiểm tra thư mục có tồn tại hay không và tạo thư mục
Đoạn mã dưới đây kiểm tra xem thư mục Test có tồn tại hay không.
Hộp thông báo được sử dụng để hiển thị thông báo thư mục có tồn tại hay không tồn tại:
Sub CheckDirectory()
Dim duongdan As String
Dim CheckDir As String
PathName = "C:\Users\sumit\Desktop\Test"
CheckDir = Dir(tenduongdan, vbDirectory)
If CheckDir <> "" Then
MsgBox CheckDir & " ton tai"
Else
MsgBox "thu muc khong ton tai"
End If
End Sub
Nếu muốn chúng ta có thể tinh chỉnh đoạn mã trên để kiểm tra xem thư mục có tồn tại hay không, nếu thư mục không tồn tại, chúng ta có thể sử dugnj VBA để tạo thư mục đó.
Đoạn mã dưới đây sử dụng hàm MkDir để tạo thư mục trong trường hợp nếu thư mục không tồn tại:
Sub taothumuc()
Dim tenduongdan As String
Dim CheckDir As String
PathName = "C:\Users\sumit\Desktop\Test"
CheckDir = Dir(tenduongdan, vbDirectory)
If CheckDir <> "" Then
MsgBox CheckDir & " thu muc ton tai khong"
Else
MkDir PathName
MsgBox "tao thu muc moi cung ten" & CheckDir
End If
End Sub
Ví dụ 3: Lấy tên tất cả các file và thư mục trong một thư mục
Để lấy danh sách tên tất cả các file và thư mục trong một thư mục, chúng ta có thể sử dụng hàm DIR.
Đoạn mã dưới đây liệt kê danh sách tên tất cả các file và thư mục trong thư mục Test (nằm trong đường dẫn - C:\Users\sumit\Desktop\Test\).
Sử dụng Debug.Print để hiển thị tên file, thư mục trong cửa sổ Immediate. Ngoài ra chúng ta có thể sử dụng để liệt kê tên trong hộp thông báo hoặc cột Excel:
Sub laytatcatenfile&thumuc()
Dim tenfile As String
tenfile = Dir("C:\Users\sumit\Desktop\Test\", vbDirectory)
Do While tenfile <> ""
Debug.Print tenfile
Tenfile = Dir()
Loop
End Sub
Vòng lặp Do While được sử dụng trong đoạn mã trên để tiếp tục cho đến khi tất cả các file và thư mục trong đường dẫn đã cho được hiển thị. Nếu không còn file / thư mục nào nữa, tenfile sẽ là chuỗi rỗng và vòng lặp sẽ dừng lại.
Ví dụ 4: Lấy tên tất cả các file trong một thư mục
Sử dụng đoạn mã dưới đây để lấy tên tất cả các file trong một thư mục (ché không phải tên của các thư mục con):
Sub laytatcatenfile()
Dim tenfile As String
tenfile = Dir("C:\Users\sumit\Desktop\Test\")
Do While tenfile <> ""
Debug.Print FileName
tenfile = Dir()
Loop
End Sub
Đoạn mã này tương tự như đoạn mã được sử dụng trong ví dụ 3, nhưng có tinh chỉnh một chút.
Trong đoạn mã này chúng ta chưa chỉ định vbDirectory trong hàm DIR. Nếu chúng ta chỉ định vbDirectory, nó sẽ trả về tên của tất cả các file cũng như thư mục. Nếu không chỉ định vbDirectory, hàm DIR chỉ trả về tên của các file.
Lưu ý: Nếu muốn lấy tên của tất cả các file trong thư mục chính và các thư mục con, chúng ta không thể sử dụng hàm DIR (vì hàm không phải đệ quy). Để làm được điều này, chúng ta có thể sử dụng Power Query (không cần mã) hoặc sử dụng File System Object trong VBA (có đệ quy).
Ví dụ 5: Lấy tên tất cả các thư mục con trong một thư mục
Đoạn mã dưới đây sẽ lấy tên tất cả tên của các thư mục con trong thư mục được chỉ định.
Bằng cách sử dụng hàm GetAtr trong VBA, chúng ta có thể kiểm tra xem tên được trả về bởi hàm DIR là tên file hay tên thư mục:
Sub laytenthumuccon ()
Dim tenfile As String
Dim tenduongdan As String
PathName = "C:\Users\sumit\Desktop\Test\"
Tenfile = Dir(tenduongdan, vbDirectory)
Do While tenfile<> ""
If GetAttr(tenduongdan & tenfile) = vbDirectory Then
Debug.Print tenfile
End If
FileName = Dir()
Loop
End Sub
Chúng ta lại sử dụng Debug.Print để lấy tên trong cửa sổ Immediate. Ngoài ra chúng ta có thể lấy tên trong hộp thông báo hoặc trong Excel bằng cách sửa đổi mã cho phù hợp.
Ví dụ 6: Lấy tên file Excel đầu tiên trong thư mục
Với hàm DIR, chúng ta có thể chỉ định phần mở rộng file hoặc tiền tố / hậu tố bất kỳ mà chúng ta muốn trong tên file được trả về.
Đoạn mã dưới đây hiển thị tên của file Excel đầu tiên trong thư mục Test:
Sub laytenfiledautien()
Dim tenfile As String
Dim tenduongdan As String
Tenduongdan = "C:\Users\sumit\Desktop\Test\"
Tenfile= Dir(tenduongdan & "*.xls*")
MsgBox tenfile
End Sub
Lưu ý: Trong đoạn mã trên chúng ta sử dụng *.xls* (dấu hoa thị ở cả 2 bên). Điều này để đảm bảo tất cả các phiên bản file Excel đều được kiểm tra (.xls, xlsx, .xlsm, .xlsb).
Ví dụ 7: Lấy tên của tất cả các file Excel trong một thư mục
Sử dụng đoạn mã dưới đây để lấy tên của tất cả các file Excel trong thư mục Test:
Sub laytatcatenfile()
Dim tenthumuc As String
Dim tenfile As String
Tenthumuc = "C:\Users\sumit\Desktop\Test\"
Tenfile = Dir(FolderName & "*.xls*")
Do While tenfile <> ""
Debug.Print tenfile
Tenfile = Dir()
Loop
End Sub
Mặc dù hàm DIR chỉ trả về tên của file Excel đầu tiên, vì chúng ta gọi lại hàm trong vòng lặp, hàm sẽ đi qua tất cả các file và trả về tên tất cả các file Excel.
Như vậy bài viết trên đây Taimienphi.vn vừa giới thiệu cho bạn một số ví dụ về hàm DIR trong VBA, tiếp sau bài Hàm DIR trong VBA phần 1 đã được chúng tôi giới thiệu trước đó . Ngoài ra nếu có bất kỳ thắc mắc nào cần giải đáp, bạn đọc có thể để lại ý kiến của mình trong phần bình luận bên dưới bài viết nhé.