Kiểm tra và thông báo nếu 1 số file không có trong folder

Liên hệ QC

hadoan-pap

Thành viên tiêu biểu
Tham gia
8/7/15
Bài viết
453
Được thích
18
Em chào mọi người.

Em có 1 bài toán nhỏ như sau ạ.

Em lưu tự động 4 file trong folder với các tên : abc1, abc2, abc3, abc4.... Em muốn tạo chương trình để ấn nút nó sẽ kiểm tra và hiện thị lên thông báo nếu có bất cứ file nào không tồn tại trong folder.

Hiện em mới chỉ làm được với việc check từng file như đoạn code bên dưới... em muốn chương trinh check và đưa ra ngẫu nhiên thông báo với 1 file bất kỳ trong 4 file không tồn tại.

Rất mong mọi người hỗ trợ ạ.

Em xin cảm ơn!

Function FileExists(FilePath As String) As Boolean
Dim TestStr As String
TestStr = ""
On Error Resume Next
TestStr = Dir(FilePath)
On Error GoTo 0
If TestStr = "" Then
FileExists = False
Else
FileExists = True
End If
End Function
Sub Button2_Click()
Dim strFile As String
strFile = "C:\Users\Administrator\Desktop\Count File\File\abc1"

If FileExists(strFile) Then
'File Exists
Else
MsgBox "File abc1 not exists "
End If
End Sub
 
Em chào mọi người.

Em có 1 bài toán nhỏ như sau ạ.

Em lưu tự động 4 file trong folder với các tên : abc1, abc2, abc3, abc4.... Em muốn tạo chương trình để ấn nút nó sẽ kiểm tra và hiện thị lên thông báo nếu có bất cứ file nào không tồn tại trong folder.

Hiện em mới chỉ làm được với việc check từng file như đoạn code bên dưới... em muốn chương trinh check và đưa ra ngẫu nhiên thông báo với 1 file bất kỳ trong 4 file không tồn tại.

Rất mong mọi người hỗ trợ ạ.

Em xin cảm ơn!

Function FileExists(FilePath As String) As Boolean
Dim TestStr As String
TestStr = ""
On Error Resume Next
TestStr = Dir(FilePath)
On Error GoTo 0
If TestStr = "" Then
FileExists = False
Else
FileExists = True
End If
End Function
Sub Button2_Click()
Dim strFile As String
strFile = "C:\Users\Administrator\Desktop\Count File\File\abc1"

If FileExists(strFile) Then
'File Exists
Else
MsgBox "File abc1 not exists "
End If
End Sub
Gợi ý cho bạn: Sử dụng FileSystemObject để kiểm tra sự tồn tại của 1 file trong folder nhé
 
Upvote 0
Gợi ý cho bạn: Sử dụng FileSystemObject để kiểm tra sự tồn tại của 1 file trong folder nhé
Cảm ơn anh nhiều.

Em có đoạn code mới đang làm dở như dưới ạ.

Em gán tên cac file em cần kiểm tra vào cột A, em muốn chương trình chạy để tìm ra vị tri tên không có trong thư mục khi đó sẽ show ra thông báo tên file không tồn tại :)

E đang mắc đoạn show thông báo ạ :)

Dim rRange As Range, rCell As Range
Dim strPath As String

strPath = "C:\Users\Administrator\Desktop\Count File\File\"
Set rRange = Sheet1.Range("A1", Range("A65536").End(xlUp))

For Each rCell In rRange
If Dir(strPath & rCell) = vbNullString Then

Else
''Run "MacroFile"
End If
Next rCell
 
Upvote 0
Code của Button2_Click sửa lại như vầy:

Dim strFolder As String
Dim strFiles As String
Dim F As Variant
strFolder = "C:\Users\Administrator\Desktop\Count File\File\"
strFiles = "abc1|abc2|abc3|abc4"
For Each F in Split(strFiles, "|")
If Not FileExists(strFolder & F) Then
MsgBox "File " & F & " does not exist"
End If
Next F
 
Upvote 0
Code của Button2_Click sửa lại như vầy:

Dim strFolder As String
Dim strFiles As String
Dim F As Variant
strFolder = "C:\Users\Administrator\Desktop\Count File\File\"
strFiles = "abc1|abc2|abc3|abc4"
For Each F in Split(strFiles, "|")
If Not FileExists(strFolder & F) Then
MsgBox "File " & F & " does not exist"
End If
Next F
Dạ, em cảm ơn anh.

Nhưng nó có 1 vấn đề nhỏ ạ... đó là nếu thiếu 1 file thì nó chỉ xuất hiện 1 thông báo là thiếu 1 file đó.... còn nếu thiếu 2 file thì nó xuất hiện 2 thông báo liên tiếp nhau.

Có cách nào mà nó check xem thiếu nhiêu hơn 1 file thì nó cũng chỉ xuất hiện 1 thông báo kiểu như "File abc1 & abc2 does not exits" không ạ ? Em bị vướng ở cái phần này anh ạ.
 
Upvote 0
Dạ, em cảm ơn anh.

Nhưng nó có 1 vấn đề nhỏ ạ... đó là nếu thiếu 1 file thì nó chỉ xuất hiện 1 thông báo là thiếu 1 file đó.... còn nếu thiếu 2 file thì nó xuất hiện 2 thông báo liên tiếp nhau.

Có cách nào mà nó check xem thiếu nhiêu hơn 1 file thì nó cũng chỉ xuất hiện 1 thông báo kiểu như "File abc1 & abc2 does not exits" không ạ ? Em bị vướng ở cái phần này anh ạ.
Cho cái thông báo ra khỏi vòng lặp và các file nào thiếu gộp lại với nhau.Rồi thông báo bên ngoài vòng lặp.
 
Upvote 0
Cho cái thông báo ra khỏi vòng lặp và các file nào thiếu gộp lại với nhau.Rồi thông báo bên ngoài vòng lặp.
Hi cậu ^^.

Như vậy thì có bao nhiêu file phải khai báo ngần đó biến để sau đó gộp ah ?

ví dụ có 4 biến tương ứng với 4 file là strFile1, strFile2, strFile3, strFile4 ..... nếu 2 trong 4 file bị thiếu thì nó show thông báo như nào vì không biết file nào thiếu để gán vào thông báo lúc show ra màn hình.
 
Upvote 0
Nó rườm rà lắm. Thớt thích nói tiếng Tây cho nên còn phải tính cái vụ "does" hay "do" nữa.
Code không khó nhưng lủng củng.
Hi ^^

Dạ thôi thì cứ show thông báo "Cac file " &str1&str2& "không tồn tại cũng được ạ"... Nhưng miễn là nó chỉ show thông báo 1 lần thôi ạ.

Vì trong chương trình của em là nó sẽ tự động gửi mail thông báo nếu file nào bị thiếu và hiển thị nội dung báo file nào bị thiếu.... thay vì thiếu 2-3 file chương trình sẽ gửi 2-3 email... thì em muốn nó chỉ báo 1 lần đủ thông tin những file nào bị thiếu ạ.
 
Upvote 0
Dạ, có ai sửa giúp e đoạn code đó dc k ạ ?
 
Upvote 0
Dạ, có ai sửa giúp e đoạn code đó dc k ạ ?
Bạn thử.Tưởng sửa xong rồi.
Mã:
Dim strFolder As String
Dim strFiles As String
Dim F As Variant, s As String
strFolder = "C:\Users\Administrator\Desktop\Count File\File\"
strFiles = "abc1|abc2|abc3|abc4"
For Each F In Split(strFiles, "|")
If Not FileExists(strFolder & F) Then
s = s & ";" & F
End If
Next F
s = Right(s, Len(s) - 1)
MsgBox "File " & s & " does not exist"
 
Upvote 0
Bạn thử.Tưởng sửa xong rồi.
Mã:
Dim strFolder As String
Dim strFiles As String
Dim F As Variant, s As String
strFolder = "C:\Users\Administrator\Desktop\Count File\File\"
strFiles = "abc1|abc2|abc3|abc4"
For Each F In Split(strFiles, "|")
If Not FileExists(strFolder & F) Then
s = s & ";" & F
End If
Next F
s = Right(s, Len(s) - 1)
MsgBox "File " & s & " does not exist"
hehe ^^

Cảm ơn cậu nhiều nhé :)

Đúng như ý mình mong muốn rồi :)
 
Upvote 0
...
s = Right(s, Len(s) - 1)
MsgBox "File " & s & " does not exist"
File abc1; abc2; abc3 does not exist --> không đúng luật tiếng Tây!

Tối thiểu:
If InStr(s, ";") Then
MsgBox "Files " & s & " do not exist"
Else
MsgBox "File " & s & " does not exist"
End If

Đã nói tây u nó rườm rà lắm mờ.
 
Upvote 0
Nếu làm biếng thì gộp nó vô luôn chắc Tây nó cũng hiểu. :)
"File(s)..... do(es) not exist."
Bác VetMini đang nói đến luật mà. Còn bơ luật đi thì nói thế nào Tây cũng hiểu.
Trong nhiều ngôn ngữ động từ phải chia theo ngôi, theo số nhiều số ít và theo giống. Không chia thì Tây vẫn hiểu.
Trong tiếng Việt động từ không chia nhưng thứ tự lại quan trọng. Có ông Tây nọ gặp nhóm các cô thiếu nữ và: "Chào các anh. Hôm qua cơm ăn tôi ...". Các cô cười như nắc nẻ nhưng vẫn hiểu. :D
 
Upvote 0
Nếu làm biếng thì gộp nó vô luôn chắc Tây nó cũng hiểu. :)
"File(s)..... do(es) not exist."
1. Hiểu thì chắc hiểu nhưng một cái (...) không sao, hai cái (...) gần nhau đọc nó rất luộm thuộm.
2. Theo kỹ thuật (technically) thì không hẳn sai. Theo điệu văn (semantically) thì file(s) và do(es) nó không đúng thứ tự. Người đọc sẽ hơi bị khựng một chút.

Túm lại, chiếu theo kỹ thuật không ai bắt bẻ bạn. Chỉ cần lưu ý là làm kiểu này thì người đọc hiểu đúng ngay cái từ mở đầu của bạn: "làm biếng".
 
Upvote 0
1. Hiểu thì chắc hiểu nhưng một cái (...) không sao, hai cái (...) gần nhau đọc nó rất luộm thuộm.
2. Theo kỹ thuật (technically) thì không hẳn sai. Theo điệu văn (semantically) thì file(s) và do(es) nó không đúng thứ tự. Người đọc sẽ hơi bị khựng một chút.

Túm lại, chiếu theo kỹ thuật không ai bắt bẻ bạn. Chỉ cần lưu ý là làm kiểu này thì người đọc hiểu đúng ngay cái từ mở đầu của bạn: "làm biếng".

Dạ em hiểu ý anh ạ. Thêm cái ngữ pháp đó thì lại thành rối hơn ^^

E chỉ muốn show cái thông báo và gửi mail anh ạ... còn đâu cái thông báo user VietNam cả họ cũng không để ý mấy cái đó đâu ạ ^^..
 
Upvote 0
Dạ em hiểu ý anh ạ. Thêm cái ngữ pháp đó thì lại thành rối hơn ^^

E chỉ muốn show cái thông báo và gửi mail anh ạ... còn đâu cái thông báo user VietNam cả họ cũng không để ý mấy cái đó đâu ạ ^^..
Họ không để ý nhưng tôi để ý. Và người nào để ý thì sẽ cười người viết là:
1. dốt, hoặc
2. không có chút tôn trọng giành cho người dùng.

Điển hình "user VietNam" là cái quái gì?
Bởi vì họ là người Việt cho nên ta có thể nhăng cuội sử dụng "the fourth highest card" tuỳ thích à?

Chú: trong cỗ bài Tây, cái quân mà tiếng Anh gọi là con "Jack" thì người Nam gọi là con "Tây Bồi".
 
Upvote 0
Họ không để ý nhưng tôi để ý. Và người nào để ý thì sẽ cười người viết là:
1. dốt, hoặc
2. không có chút tôn trọng giành cho người dùng.

Điển hình "user VietNam" là cái quái gì?
Bởi vì họ là người Việt cho nên ta có thể nhăng cuội sử dụng "the fourth highest card" tuỳ thích à?

Chú: trong cỗ bài Tây, cái quân mà tiếng Anh gọi là con "Jack" thì người Nam gọi là con "Tây Bồi".
E cảm ơn anh đã góp ý :)

Em sẽ để ý hơn ạ!
 
Upvote 0
Web KT
Back
Top Bottom