Duyệt các file trong folder, xem tất cả các sheet trong file để xem có ô nào trống thì thông báo

Liên hệ QC

LienDong

Thành viên thường trực
Tham gia
22/11/12
Bài viết
218
Được thích
46
Nghề nghiệp
Ai nói đúng thì làm!
Em nhờ các anh/chị giúp em như sau:
Em có 1 floder bất kỳ
Trong đó có nhiều file (tên file có thể có dấu tiếng Việt)
Trong 1 File có nhiều sheet
Bây giờ tìm trong các sheet đó xem có ô nào trống không?
Em ví dụ: file gởi lên thì ở sheet Lop1.1 có ô C8 là bị trống
Yêu cầu của em:
Sau khi chạy code thì chỉ cần thông báo Tên file có ô bị trống là được , nếu khi duyệt trong floder mà chọn được các file muốn chạy code thì tốt còn không thì chọn tất cả các file trong 1 floder bất kỳ nào đó
Ghi chú: Em đã được anh ndu96081631 viết code để chạy được cho tất cả các file có dấu tiếng Việt
Em xin cảm ơn!
 

File đính kèm

  • Khối_1.xlsx
    12.5 KB · Đọc: 5
Trong 1 File có nhiều sheet
Bây giờ tìm trong các sheet đó xem có ô nào trống không?
Em ví dụ: file gởi lên thì ở sheet Lop1.1 có ô C8 là bị trống
Yêu cầu của em:
Sau khi chạy code thì chỉ cần thông báo Tên file có ô bị trống là được
Mã:
Sub abc()
Dim ws As Worksheet, cll As Range
For Each ws In Worksheets
    For Each cll In ws.UsedRange
        If cll.Value = "" Then
            MsgBox "Sheet:  " & ws.Name & vbCrLf & "Ô: " & cll.Address & " trô'ng"
        End If
    Next
Next ws
End Sub
Bạn thử cái này
 
Upvote 0
Mã:
Sub abc()
Dim ws As Worksheet, cll As Range
For Each ws In Worksheets
    For Each cll In ws.UsedRange
        If cll.Value = "" Then
            MsgBox "Sheet:  " & ws.Name & vbCrLf & "Ô: " & cll.Address & " trô'ng"
        End If
    Next
Next ws
End Sub
Bạn thử cái này
Cái zụ này chắc phải sử dung FSO chứ bạn? đâu phải chỉ có 1 file thôi đâu
 
Upvote 0
Sau khi chạy code thì chỉ cần thông báo Tên file có ô bị trống là được , nếu khi duyệt trong floder mà chọn được các file muốn chạy code thì tốt còn không thì chọn tất cả các file trong 1 floder bất kỳ nào đó
Mình có cái code chọn các file trong folder nè...
Mã:
Function ArrayFileSelect(Optional arrExtensionFile As Variant, Optional blMultiSelect As Boolean = False) As Variant
Dim blIsArray As Boolean
Dim i As Long
Dim strErrMsg As String, strTitle As String
Dim varItem As Variant, arrResults() As Variant
      
    If Not IsMissing(arrExtensionFile) Then
        blIsArray = IsArray(arrExtensionFile)
        If Not blIsArray Then strErrMsg = "Please pass an ARRAY in the first parameter of this function!"
    End If
    
    If strErrMsg = vbNullString Then
        If blMultiSelect Then strTitle = "Choose one or more files" Else strTitle = "Choose file"
        With Application.FileDialog(msoFileDialogFilePicker)
            .AllowMultiSelect = blMultiSelect
            .Filters.Clear
            If blIsArray Then .Filters.Add "File type", "*." & Join(arrExtensionFile, ", *.")
            .Title = strTitle
            If .Show <> 0 Then
                ReDim arrResults(1 To .SelectedItems.Count) As Variant
                For Each varItem In .SelectedItems
                    i = i + 1
                    arrResults(i) = varItem
                Next varItem
                ArrayFileSelect = arrResults
            End If
        End With
    Else
        MsgBox strErrMsg, vbCritical, "Error!"
    End If
End Function
bạn ứng dụng vào cái mình muốn đi nha
 
Upvote 0
Mình có cái code chọn các file trong folder nè...
Mã:
Function ArrayFileSelect(Optional arrExtensionFile As Variant, Optional blMultiSelect As Boolean = False) As Variant
Dim blIsArray As Boolean
Dim i As Long
Dim strErrMsg As String, strTitle As String
Dim varItem As Variant, arrResults() As Variant
    
    If Not IsMissing(arrExtensionFile) Then
        blIsArray = IsArray(arrExtensionFile)
        If Not blIsArray Then strErrMsg = "Please pass an ARRAY in the first parameter of this function!"
    End If
  
    If strErrMsg = vbNullString Then
        If blMultiSelect Then strTitle = "Choose one or more files" Else strTitle = "Choose file"
        With Application.FileDialog(msoFileDialogFilePicker)
            .AllowMultiSelect = blMultiSelect
            .Filters.Clear
            If blIsArray Then .Filters.Add "File type", "*." & Join(arrExtensionFile, ", *.")
            .Title = strTitle
            If .Show <> 0 Then
                ReDim arrResults(1 To .SelectedItems.Count) As Variant
                For Each varItem In .SelectedItems
                    i = i + 1
                    arrResults(i) = varItem
                Next varItem
                ArrayFileSelect = arrResults
            End If
        End With
    Else
        MsgBox strErrMsg, vbCritical, "Error!"
    End If
End Function
bạn ứng dụng vào cái mình muốn đi nha
Hihi. Mỗi người ráp 1 tý không biết thớt ráp vào nhau được không nữa. Đánh dấu bài này. Mai mốt biết đâu mình cũng dùng tới
 
Upvote 0
Mã:
Sub abc()
Dim ws As Worksheet, cll As Range
For Each ws In Worksheets
    For Each cll In ws.UsedRange
        If cll.Value = "" Then
            MsgBox "Sheet:  " & ws.Name & vbCrLf & "Ô: " & cll.Address & " trô'ng"
        End If
    Next
Next ws
End Sub
Bạn thử cái này
Một sheet có khoảng 20 tỷ ô, không nói rỏ thế nào là ô trống code chạy mệt nghỉ
 
Upvote 0
Cảm ơn các anh chị
Bây giờ em đã tạm ráp các code trên được vào với nhau, chỉ còn vướng mắc là làm sao khi vào floder thì chỉ cần chọn file muốn chạy code
Vì thực tế công việc của em là kiểm tra xem các file do người khác chuyển đến là xem họ đã nhập đầy đủ thông tin chưa? nên khả năng chỉ một vài ô là họ để trống thôi
Mình có cái code chọn các file trong folder nè...
Bạn cho hỏi code của bạn làm sao ráp vô được với code
Để có thể chọn được các file mà mình muốn chọn trong 1 floder?
 
Upvote 0
Thử file này xem sao bạn:
PHP:
Sub BlankCell()
Dim Ws As Worksheet, oWb As Workbook, nWb As Workbook, Fso As Object, Rng As Range, RngFind As Range, sFind As String
Dim Chk As Boolean, fPath As String, sFile As Variant, Lr As Long, Lcol As Long, I As Long
sFind = ""
I = 2
Set Fso = CreateObject("Scripting.FileSystemObject")
Set oWb = ThisWorkbook
With Application
    .Calculation = xlCalculationManual
    .DisplayAlerts = False
    .ScreenUpdating = False
    .AskToUpdateLinks = False
End With
With Application.FileDialog(msoFileDialogFolderPicker)
    Chk = .Show
    If Not Chk Then Exit Sub
    fPath = .SelectedItems(1)
End With
    For Each sFile In Fso.GetFolder(fPath).Files
        If Fso.GetExtensionName(sFile) Like "xls*" And sFile.Name <> oWb.Name And Left(sFile.Name, 2) <> "~$" Then
            With Workbooks.Open(sFile)
                Set nWb = ActiveWorkbook
                    For Each Ws In nWb.Sheets
                        Lr = Ws.Cells.Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row
                        Lcol = Ws.Cells.Find("*", searchorder:=xlByColumns, searchdirection:=xlPrevious).Column
                            Set Rng = Ws.Range("A1").Resize(Lr, Lcol)
                            Set RngFind = Rng.Find(sFind, LookIn:=xlValues, lookat:=xlWhole)
                                If Not RngFind Is Nothing Then
                                I = I + 1
                                    oWb.Sheets("sheet1").Range("A" & I) = nWb.Name
                                    oWb.Sheets("sheet1").Range("B" & I) = Ws.Name
                                End If
                    Next
                    nWb.Close False
            End With
        End If
    Next
Set Fso = Nothing
With Application
    .Calculation = xlCalculationAutomatic
    .DisplayAlerts = True
    .ScreenUpdating = True
    .AskToUpdateLinks = True
End With
End Sub
 

File đính kèm

  • Tìm ô trống.xlsm
    21.1 KB · Đọc: 6
Lần chỉnh sửa cuối:
Upvote 0
Mã:
Sub abc()
Dim ws As Worksheet, cll As Range
For Each ws In Worksheets
    For Each cll In ws.UsedRange
        If cll.Value = "" Then
            MsgBox "Sheet:  " & ws.Name & vbCrLf & "Ô: " & cll.Address & " trô'ng"
        End If
    Next
Next ws
End Sub
Bạn thử cái này
Các Anh/chị cho em hỏi thêm:
Ở đây nếu em muốn kiểm tra 1 sheet bất kỳ trong 1 file thì sửa code làm sao?
Em ví dụ: ở 1 sheet nào đó
Cột C có số liệu từ C3 đến C8 ( có thể số liệu ít hơn hoặc nhiều hơn) thì em muốn kiểm tra ở các cột G & H xem có ô nào bị trống không?
Trong file đính kèm của em: Em kiểm tra sheet Lop5.1 thì ô G5 bị trống
 

File đính kèm

  • Book2.xlsx
    10 KB · Đọc: 1
Upvote 0
Cảm ơn các anh chị
Bây giờ em đã tạm ráp các code trên được vào với nhau, chỉ còn vướng mắc là làm sao khi vào floder thì chỉ cần chọn file muốn chạy code
Vì thực tế công việc của em là kiểm tra xem các file do người khác chuyển đến là xem họ đã nhập đầy đủ thông tin chưa? nên khả năng chỉ một vài ô là họ để trống thôi

Bạn cho hỏi code của bạn làm sao ráp vô được với code
Để có thể chọn được các file mà mình muốn chọn trong 1 floder?
Tôi viết code cho bạn hoàn chỉnh rồi, bạn coi thử được không nha....
Bài đã được tự động gộp:

Một sheet có khoảng 20 tỷ ô, không nói rỏ thế nào là ô trống code chạy mệt nghỉ
Dạ em nghĩ dùng cái này là đúng ý thầy phải không...
Mã:
Set rngBlanks = ws.UsedRange.SpecialCells(xlCellTypeBlanks)
 

File đính kèm

  • CountBlankCell.xlsm
    47.2 KB · Đọc: 7
Upvote 0
Tôi viết code cho bạn hoàn chỉnh rồi, bạn coi thử được không nha....
Bài đã được tự động gộp:


Dạ em nghĩ dùng cái này là đúng ý thầy phải không...
Mã:
Set rngBlanks = ws.UsedRange.SpecialCells(xlCellTypeBlanks)
Tuyệt vời, cảm ơn bạn nhiều
 
Upvote 0
Cảm ơn các anh chị
Bây giờ em đã tạm ráp các code trên được vào với nhau, chỉ còn vướng mắc là làm sao khi vào floder thì chỉ cần chọn file muốn chạy code
Vì thực tế công việc của em là kiểm tra xem các file do người khác chuyển đến là xem họ đã nhập đầy đủ thông tin chưa? nên khả năng chỉ một vài ô là họ để trống thôi

Bạn cho hỏi code của bạn làm sao ráp vô được với code
Để có thể chọn được các file mà mình muốn chọn trong 1 floder?
Chạy sub main
Mã:
Sub Main()
  Dim wB As Workbook, ListFile As Object, FileItem, wbMain As Workbook
 
  Set wbMain = ThisWorkbook
  Set ListFile = GetFile("")
  If ListFile Is Nothing Then MsgBox "Chua chon File, thoat Sub ": Exit Sub
  For Each FileItem In ListFile
    If InStr(1, FileItem, "\" & wbMain.Name, vbTextCompare) = 0 Then
      Set wB = Workbooks.Open(FileItem)
      '.......
      wB.Close False
    End If
  Next FileItem
  Set ListFile = Nothing: Set FileItem = Nothing
End Sub

Function GetFile(ByVal strPath As String) As Variant
  Dim Fldr As FileDialog, sItem As Variant
  Set Fldr = Application.FileDialog(msoFileDialogFilePicker)
  With Fldr
    .AllowMultiSelect = True
    .InitialFileName = strPath
    .Filters.Add "Images", "*.xls*"
    If .Show = -1 Then Set GetFile = .SelectedItems Else Set GetFile = Nothing
  End With
  Set Fldr = Nothing
End Function
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom