Viết code tìm kiếm các file trong Folder (3 người xem)

  • Thread starter Thread starter lhthai
  • Ngày gửi Ngày gửi

Người dùng đang xem chủ đề này

  • lhthai

    Thành viên thường trực
    Tham gia
    1/9/07
    Bài viết
    309
    Được thích
    27
    Chào các Anh
    Em có Folder gồm nhiều file mỗi lần tìm kiếm rất lâu
    Em muốn viết code như sau
    Tại Textbox gõ tên file cần tim
    Thì hiện danh sách các file cần tìm trên listbox
    chỉ cần nhấn Double click vào thì mở file đó ra
    Do upload báo lỗi nên up tạm lên đây
    http://www.fshare.vn/file/XDEA70UODJ/
     
    Lần chỉnh sửa cuối:
    Chào các Anh
    Em có Folder gồm nhiều file mỗi lần tìm kiếm rất lâu
    Em muốn viết code như sau
    Tại Textbox gõ tên file cần tim
    Thì hiện danh sách các file cần tìm trên listbox
    chỉ cần nhấn Double click vào thì mở file đó ra
    Do upload báo lỗi nên up tạm lên đây
    http://www.fshare.vn/file/XDEA70UODJ/

    Xem thử link bên dưới :
    PHP:
    http://www.giaiphapexcel.com/forum/showthread.php?25782-Duy%E1%BB%87t-file-Excel-trong-sub-folder
     
    Upvote 0
    Chào các Anh
    Em có Folder gồm nhiều file mỗi lần tìm kiếm rất lâu
    Em muốn viết code như sau
    Tại Textbox gõ tên file cần tim
    Thì hiện danh sách các file cần tìm trên listbox
    chỉ cần nhấn Double click vào thì mở file đó ra
    Do upload báo lỗi nên up tạm lên đây
    http://www.fshare.vn/file/XDEA70UODJ/

    Cái này chắc là hợp với bạn nè:
    http://www.giaiphapexcel.com/forum/...-folder-cho-trước-và-tạo-Hyperlink&highlight=
     
    Upvote 0
    Chào các Anh GPE
    Mình muốn sửa Texbox như sau
    Chỉ cần gõ tên file thôi không cần gõ *.* ví dụ như
    gõ NV-Y104P là tìm kiếm các file thôi
    Tại lisbox
    1. không hiện đường dẫn chỉ hiện tên file thôi chỉ hiện như vậy thôi
    vd:NV-Y104P 9B-1425-004C-pdf
    2.Doulbe Click vào listbox vào là mở file luôn không cần đến đường link
     
    Upvote 0
    Không ai viết đành phải chờ thôi
     
    Upvote 0
    Chào các Anh GPE
    Mình muốn sửa Texbox như sau
    Chỉ cần gõ tên file thôi không cần gõ *.* ví dụ như
    gõ NV-Y104P là tìm kiếm các file thôi
    Tại lisbox
    1. không hiện đường dẫn chỉ hiện tên file thôi chỉ hiện như vậy thôi
    vd:NV-Y104P 9B-1425-004C-pdf
    2.Doulbe Click vào listbox vào là mở file luôn không cần đến đường link
    Thử file này
    Nhấp đúp vào hộp đường dẫn để chọn thư mục
    Nhập ký tự đầu của tên file vào hộp tên file
    Nhấp đúp vào file trong listbox
     

    File đính kèm

    Upvote 0
    Thử file này
    Nhấp đúp vào hộp đường dẫn để chọn thư mục
    Nhập ký tự đầu của tên file vào hộp tên file
    Nhấp đúp vào file trong listbox
    Cám ơn Anh Quanghai1969
    File này tương tự như file của anh ndu96081631
    ý em lả muốn rút gọn như file đính kèm em đã gửi
    hoặc bổ sung thêm vào file 3 checkbox
    check chon file Xls
    check chon file pdf
    check chon tất cả *.*
    còn
    Doulbe Click vào listbox vào là mở file luôn không cần đến đường link

     
    Upvote 0
    Cám ơn Anh Quanghai1969
    File này tương tự như file của anh ndu96081631
    ý em lả muốn rút gọn như file đính kèm em đã gửi
    hoặc bổ sung thêm vào file 3 checkbox
    check chon file Xls
    check chon file pdf
    check chon tất cả *.*
    còn
    Doulbe Click vào listbox vào là mở file luôn không cần đến đường link

    Bạn kiên nhẫn đợi xem coi có ai siêng hơn không nha. Mình lười lắm rồi. Vả lại cũng hết khả năng rồi. Yêu cầu của bạn cao quá với hết tới rồi.
     
    Upvote 0
    Chào các Anh GPE
    Em thấy file của Anh quanghai1969 rất hay
    Nếu trường hợp em muốn sữa tên checkbox trên form ".xls" thành Excel & ".doc" thanh Word ..
    Không biết hàm trên đây sữa như thế nào
    Mã:
    Function LoaiFile(path) As String
       Dim Tem As String, i As Byte
       With UserForm1
          For i = 1 To 5
             If .Controls("CheckBox" & i) = True Then
                Tem = Tem & path & "*" _
                & .Controls("CheckBox" & i).Caption & "* "
             End If
          Next
          LoaiFile = Tem
       End With
    End Function
     
    Upvote 0
    Chào các Anh GPE
    Em thấy file của Anh quanghai1969 rất hay
    Nếu trường hợp em muốn sữa tên checkbox trên form ".xls" thành Excel & ".doc" thanh Word ..
    Không biết hàm trên đây sữa như thế nào
    Mã:
    Sửa thế này thử xem
    PHP:
    Function LoaiFile(path) As String
       Dim Tem As String, i As Byte, StrType()
       StrType = Array(".xls", ".doc", ".pdf", ".zip", ".rar")
       For i = 1 To 5
          If UserForm1.Controls("CheckBox" & i) = True Then
             Tem = Tem & path & "*" & StrType(i - 1) & "*" & Space(1)
          End If
       Next
       LoaiFile = Tem
    End Function
     
    Lần chỉnh sửa cuối:
    Upvote 0
    Sửa thế này thử xem
    PHP:
    Function LoaiFile(path) As String
       Dim Tem As String, i As Byte, StrType()
       StrType = Array(".xls", ".doc", ".pdf", ".zip", ".rar")
       With UserForm1
          For i = 1 To 5
             If .Controls("CheckBox" & i) = True Then
                Tem = Tem & path & "*" & StrType(i - 1) & "*" & Space(1)
             End If
          Next
          LoaiFile = Tem
       End With
    End Function
    Cám ơn anh rất nhiều
     
    Upvote 0
    Thử file này
    Nhấp đúp vào hộp đường dẫn để chọn thư mục
    Nhập ký tự đầu của tên file vào hộp tên file
    Nhấp đúp vào file trong listbox

    Code này đúng với mình đang cần tìm, nhưng file của mình đang lưu trong nhiều thư mục con quá nên nhờ anh giúp thêm phần tìm luôn trong các thư mục con nhé. Cảm ơn nhiều.
     
    Upvote 0
    Code này đúng với mình đang cần tìm, nhưng file của mình đang lưu trong nhiều thư mục con quá nên nhờ anh giúp thêm phần tìm luôn trong các thư mục con nhé. Cảm ơn nhiều.
    Thử dùng File này:
    Cách dùng:
    - Bước 1: Tại D1, nhấn nút Tạo Link, hộp thoại mở ra tìm và chọn Folder cha xong click OK, vậy là xong việc lấy tên File và tạo Link.
    - Bước 2: Chọn cột B và nhấn Ctrl+F, hộp thoại mở ra gõ tên File cần tìm, xong click vào tên File và nhấn Yes.
     

    File đính kèm

    Upvote 0
    Thử dùng File này:
    Cách dùng:
    - Bước 1: Tại D1, nhấn nút Tạo Link, hộp thoại mở ra tìm và chọn Folder cha xong click OK, vậy là xong việc lấy tên File và tạo Link.
    - Bước 2: Chọn cột B và nhấn Ctrl+F, hộp thoại mở ra gõ tên File cần tìm, xong click vào tên File và nhấn Yes.

    Cảm ơn bạn nhiều. Do file anh QuangHai viết mình tích hợp vào form đang sử dụng nên cần edit lại 1 chút để có thể search được sub-folder.
     
    Upvote 0
    Cảm ơn bạn nhiều. Do file anh QuangHai viết mình tích hợp vào form đang sử dụng nên cần edit lại 1 chút để có thể search được sub-folder.
    Tôi thiết nghĩ:
    Tìm trên UserForm thì bạn nên nêu rõ mục đích để các thành viên hiểu mà giúp cho đúng ý.
    Còn tìm để xem chơi cho vui thì không nên làm cho tốn công, tốn sức.
     
    Upvote 0
    Thử dùng File này:
    Cách dùng:
    - Bước 1: Tại D1, nhấn nút Tạo Link, hộp thoại mở ra tìm và chọn Folder cha xong click OK, vậy là xong việc lấy tên File và tạo Link.
    - Bước 2: Chọn cột B và nhấn Ctrl+F, hộp thoại mở ra gõ tên File cần tìm, xong click vào tên File và nhấn Yes.
    Phải tải về ngâm cứu thôi.Hehe:p:p:p
     
    Upvote 0
    Tôi thiết nghĩ:
    Tìm trên UserForm thì bạn nên nêu rõ mục đích để các thành viên hiểu mà giúp cho đúng ý.
    Còn tìm để xem chơi cho vui thì không nên làm cho tốn công, tốn sức.
    Cảm ơn bạn góp ý.

    Mình có 1 folder chứa các file hình ảnh, và các hình này được lưu trong từng folder theo ngày. Form của anh QuangHai viết đúng với nhu cầu mình cần là chỉ cần chọn folder cha và nhập tên file vào để tìm đúng file mình cần và open.
    Nhưng form đó mình chưa tìm được trong các sub-folder mà chỉ tìm được cho folder hiện hành nên cần nhờ các anh chị trong forum giúp đỡ.
     
    Upvote 0
    Cảm ơn bạn góp ý.

    Mình có 1 folder chứa các file hình ảnh, và các hình này được lưu trong từng folder theo ngày. Form của anh QuangHai viết đúng với nhu cầu mình cần là chỉ cần chọn folder cha và nhập tên file vào để tìm đúng file mình cần và open.
    Nhưng form đó mình chưa tìm được trong các sub-folder mà chỉ tìm được cho folder hiện hành nên cần nhờ các anh chị trong forum giúp đỡ.
    Tham khảo File trong bài viết của Link sau:
    http://www.giaiphapexcel.com/diendan/threads/file-áp-giá-và-gán-hình-ảnh-hàng-hóa.130630/
     
    Upvote 0
    1606547603913.png
    Các anh, chị có thể sửa giúp em code này, để nó loại bỏ các thông tin không cần thiết được không ạ!
    1. Phần tên thư mục con (chữ xanh da trời trong ảnh) hiện bình thường, không cần hiện trong dấu ngoặc vuông"[ ]"
    2. Tên file tìm được chỉ cần hiện tên thôi, không cần hiện đuôi và thông tin phụ. em cảm ơn ạ!

    ví dụ: code hiện tại tìm được file này "I-200714-0005-VCP-CREV QV-Request to approve List of material suppliers.rar (7/24/2020 2:23:10 AM 244,022,305Bytes)"
    nhưng em chỉ cần hiện "I-200714-0005-VCP-CREV QV-Request to approve List of material suppliers".
    3. Và nếu các cao thủ có thể gán hyperlink cho các thư mục con và các file thì càng tuyệt vời ạ!
    Các anh chị check file đính kèm giúp em nhé!
    EM VÔ CÙNG CẢM KÍCH!!!
     

    File đính kèm

    Upvote 0
    View attachment 250203
    Các anh, chị có thể sửa giúp em code này, để nó loại bỏ các thông tin không cần thiết được không ạ!
    1. Phần tên thư mục con (chữ xanh da trời trong ảnh) hiện bình thường, không cần hiện trong dấu ngoặc vuông"[ ]"
    2. Tên file tìm được chỉ cần hiện tên thôi, không cần hiện đuôi và thông tin phụ. em cảm ơn ạ!

    ví dụ: code hiện tại tìm được file này "I-200714-0005-VCP-CREV QV-Request to approve List of material suppliers.rar (7/24/2020 2:23:10 AM 244,022,305Bytes)"
    nhưng em chỉ cần hiện "I-200714-0005-VCP-CREV QV-Request to approve List of material suppliers".
    3. Và nếu các cao thủ có thể gán hyperlink cho các thư mục con và các file thì càng tuyệt vời ạ!
    Các anh chị check file đính kèm giúp em nhé!
    EM VÔ CÙNG CẢM KÍCH!!!
    Tôi thiết nghĩ nên sử dụng code chọn bất kỳ Folder và lấy tên File trong Folder đó và tạo HyperLnk thì sẽ hợp lý hơn, bạn không nên làm kiểu bạn nếu trong Folder cha, con, cháu, chắc chứa quá nhiều File có lẽ sẽ làm cho bạn rối não.

    A_Link.JPGA_Link.JPG
     
    Upvote 0
    Tôi thiết nghĩ nên sử dụng code chọn bất kỳ Folder và lấy tên File trong Folder đó và tạo HyperLnk thì sẽ hợp lý hơn, bạn không nên làm kiểu bạn nếu trong Folder cha, con, cháu, chắc chứa quá nhiều File có lẽ sẽ làm cho bạn rối não.

    View attachment 250216View attachment 250216
    Làm thế có mục đích riêng bác ạ! file em đưa đã làm dc điều đó, em chỉ cần chỉnh sửa chút như trong bài đăng thôi. Cảm anh, chị!
     
    Upvote 0
    Làm thế có mục đích riêng bác ạ! file em đưa đã làm dc điều đó, em chỉ cần chỉnh sửa chút như trong bài đăng thôi. Cảm anh, chị!
    Tôi viết code mới, không dùng code của bạn.

    Hướng dẫn:
    1. Sub ListFilesAndFolders là code tổng quát dùng để tìm kiếm các thư mục và tập tin. Cùng 1 cách gọi Sub ListFilesAndFolders, tức cùng có một số kết quả như nhau nhưng tùy nhu cầu mà ta có thể trình bầy các kết quả đó theo dạng và trong cấu trúc mà mình mong muốn. Ví dụ cùng tìm thư mục và tập tin trong "C:\1" nhưng nếu tôi dùng sub batman1 thì tôi sẽ trình bầy kết quả ở dạng khác, còn bạn sẽ gọi sub buivantinh để trình bầy cũng các kết quả đó nhưng ở dạng khác.
    Tóm lại người dùng sẽ gọi Sub ListFilesAndFolders trong code của mình.

    2. Mở tập tin Excel -> Alt + F11 -> menu Insert -> Module -> dán code sau vào module vừa thêm.

    Với nhu cầu của bạn thì bạn chạy sub buivantinh
    Mã:
    Public Sub ListFilesAndFolders(ByVal FolderStart As String, result, Optional fso As Object, Optional ByVal sFilter As String = "", _
            Optional ByVal inSub As Boolean = False, Optional level As Long)
    '    kết quả trả về trong mảng result có 3 hàng và nhiều cột - chỉ số hàng và cột tính từ 1.
    '    Mỗi cột của mảng result có đường dẫn đầy đủ của tập tin ở hàng  1, ở hàng  2 là level của tập tin ở hàng  1, còn
    '    hàng  3 = TRUE (FALSE) ứng với hàng  1 là đường dẫn tới thư mục (tập tin).
    '    nếu lấy tất cả các tập tin thì sFilter = "" (đã là mặc định nên có thể bỏ qua)
    '    nếu chỉ lấy vd. các tập tin JPG thì sFilter = "*.jpg"
    '    nếu lấy các tập tin JPG mà tên phải chứa "hichic" thì nhập sFilter = "*hichic*.jpg"
    '    nếu tìm cả trong các thư mục con thì inSub = TRUE, ngược lại thì inSub = False. Mặc định là inSub = False.
    '    hàm bắt đầu tìm trong thư mục FolderStart
    '    có thể truyền tham số fso và level nhưng không bắt buộc.
    Dim count As Long, f As Object, SubF As Object, files As Object
        If fso Is Nothing Then Set fso = CreateObject("Scripting.FileSystemObject")
        If level = 0 Then level = 1
        If fso.FolderExists(FolderStart) Then
            If IsEmpty(result) Then
                ReDim result(1 To 3, 1 To 1)
                count = 0
            Else
                count = UBound(result, 2)
            End If
            count = count + 1
            ReDim Preserve result(1 To 3, 1 To count)
            result(1, count) = FolderStart
            result(2, count) = level
            result(3, count) = True
            level = level + 1
           
            If sFilter = "" Then sFilter = "*"
            Set f = fso.GetFolder(FolderStart)
            On Error Resume Next
            count = f.files.count
            If Err.Number Then
                Err.Clear
                On Error GoTo 0
            Else
                On Error GoTo 0
                Set files = f.files
                For Each SubF In files
                    If LCase(SubF.Name) Like LCase(sFilter) Then
                        ReDim Preserve result(1 To 3, 1 To UBound(result, 2) + 1)
                        result(1, UBound(result, 2)) = SubF.Path
                        result(2, UBound(result, 2)) = level
                        result(3, UBound(result, 2)) = False
                    End If
                Next SubF
                If inSub Then
                    For Each SubF In f.SubFolders
                        ListFilesAndFolders SubF.Path, result, fso, sFilter, True, level
                    Next
                End If
            End If
           
            Set f = Nothing
            level = level - 1
        End If
    End Sub
    
    'Sub batman1()
    'Dim r As Long, level As Long, fso As Object, result, kq()
    ''    xóa kết quả cũ
    '    Sheet1.UsedRange.Clear
    ''   tất cả các tập tin trong thư mục "c:\1" và các thư mục con, chỉ tên thôi.
    '    Set fso = CreateObject("Scripting.FileSystemObject")
    '    ListFilesAndFolders "c:\1", result, , "", True
    '    If Not IsEmpty(result) Then
    '        ReDim kq(1 To UBound(result, 2), 1 To 1)
    '        For r = 1 To UBound(result, 2)
    '            level = result(2, r)
    '            If UBound(kq, 2) < level Then ReDim Preserve kq(1 To UBound(kq, 1), 1 To level)
    '            If r = 1 Then
    '                kq(r, level) = result(1, r)
    '            Else
    '                kq(r, level) = fso.GetBaseName(result(1, r))
    '            End If
    '        Next r
    '        Sheet1.Range("A2").Resize(UBound(kq, 1), UBound(kq, 2)).Value = kq
    '    End If
    '    Set fso = Nothing
    'End Sub
    
    Sub buivantinh()
    Dim r As Long, level As Long, text As String, fso As Object, result, rng As Range
    '    xóa kết quả cũ
        Sheet1.UsedRange.Clear
    '   tất cả các tập tin trong thư mục "c:\1" và các thư mục con, chỉ tên thôi.
        Set fso = CreateObject("Scripting.FileSystemObject")
        ListFilesAndFolders "c:\1", result, , "", True
        If Not IsEmpty(result) Then
            For r = 1 To UBound(result, 2)
                level = result(2, r)
                If result(3, r) Then    ' là thư mục -> gom các ô để dùng chữ đỏ.
                    If rng Is Nothing Then
                        Set rng = Sheet1.Cells(r, level)
                    Else
                        Set rng = Union(rng, Sheet1.Cells(r, level))
                    End If
                End If
                If r = 1 Then
                    text = result(1, r)
                Else
                    text = fso.GetBaseName(result(1, r))
                End If
                Sheet1.Hyperlinks.Add Anchor:=Sheet1.Cells(r, level), Address:=result(1, r), TextToDisplay:=text
            Next r
            If Not rng Is Nothing Then rng.Font.Color = RGB(255, 0, 0)
        End If
        Set fso = Nothing
    End Sub
     
    Lần chỉnh sửa cuối:
    Upvote 0
    Code không chạy a Bat man ạ!
    Lưu ý:
    1. Bạn thêm code của tôi vào Module1 và vào cả Module2. Hãy vứt bỏ Module2.

    2. Sub buivantinh chỉ là VÍ DỤ VỀ CÁCH GỌI sub ListFilesAndFolders. Trong Sub buivantinh là code ví dụ, có dòng
    Mã:
    ListFilesAndFolders "c:\1", result, , "", True

    Trên máy tôi có thư mục "c:\1" nên tôi tìm trong thư mục "c:\1", trên máy bạn không có thư mục đó thì lấy kết quả từ trên trời à? Thay cho "c:\1" thì nhập đường dẫn tới thư mục bắt đầu trên máy của mình.

    3. Chú ý là trong code có Sheet1. Nếu tập tin có sheet tên khác thì thay Sheet1 bằng tên đó.

    Những lưu ý trên lẽ ra không nên có. Làm gì thì cũng nên suy nghĩ một chút.
     
    Upvote 0
    okey anh! Em cảm ơn ạ! em gà mờ nên cứ nghĩ bấm run là nó hiện lên hộp thoại yc đường dẫn. haha.
     
    Upvote 0
    okey anh! Em cảm ơn ạ! em gà mờ nên cứ nghĩ bấm run là nó hiện lên hộp thoại yc đường dẫn. haha.
    Nếu là tôi thì tôi sẽ suy nghĩ chút như thế này ...

    batman1 không thể biết mình định tìm trong thư mục nào. Vậy trong code chắc chắn 200% phải có CHỖ NHẬP HOẶC CHỌN thư mục. Nhưng khi chạy code thì không thấy hộp thoại chọn thư mục. Vậy thì 200% thư mục được nhập trong code. Nhưng sao mình nhìn không thấy chỗ nào nhỉ, hay mình không biết nhìn, không biết đọc code? Vậy nên sẽ có câu hỏi: "Bạn ơi, nhập hay chọn thư mục cần tìm ở đâu?". Nhưng bạn lại không đặt câu hỏi đó mà chỉ phán một câu: "Code không chạy a Bat man ạ!"
     
    Upvote 0
    Nếu là tôi thì tôi sẽ suy nghĩ chút như thế này ...

    batman1 không thể biết mình định tìm trong thư mục nào. Vậy trong code chắc chắn 200% phải có CHỖ NHẬP HOẶC CHỌN thư mục. Nhưng khi chạy code thì không thấy hộp thoại chọn thư mục. Vậy thì 200% thư mục được nhập trong code. Nhưng sao mình nhìn không thấy chỗ nào nhỉ, hay mình không biết nhìn, không biết đọc code? Vậy nên sẽ có câu hỏi: "Bạn ơi, nhập hay chọn thư mục cần tìm ở đâu?". Nhưng bạn lại không đặt câu hỏi đó mà chỉ phán một câu: "Code không chạy a Bat man ạ!"
    Tính tương tác để HỌC của phần đông số bạn lên GPE HỎI là khá kém nên tôi nghĩ GPE cần có 1 chuyên mục thử thách trước khi các thành viên được duyệt chính thức.
     
    Upvote 0
    Tính tương tác để HỌC của phần đông số bạn lên GPE HỎI là khá kém nên tôi nghĩ GPE cần có 1 chuyên mục thử thách trước khi các thành viên được duyệt chính thức.
    Nhưng lúc đó nhiều người sẽ bị loại ngay ở vòng gửi xe rồi. Sẽ không còn con số đăng ký khủng để "khoe" với thiên hạ. :D
     
    Upvote 0
    Chào các Anh
    Em có Folder gồm nhiều file mỗi lần tìm kiếm rất lâu
    em đã có list tên file cần tìm bằng excecl ( cột A)
    tạo lệnh trên file chưa tên list .
    tạo 1 lệnh mở folder chưa các file cần tìm.
    tạo 1 lệnh để mở folder copy và lấy đường dẫn
    để để sau khi tìm kiếm được theo điều kiện file chứa các ký tự theo list đã cho sẵn.
    thì copy file đã tìm kiếm được vào folder copy.
     
    Upvote 0
    Tính không viết nhưng nhờ tam khảo cái 50% của bạn và code tạm thế này
    @Quang_Hải cảm ơn anh Quang Hải
    File của anh rất hay em muốn tìm hiểu thêm về code của file này. anh có thể viết giải thích giúp em các dòng code trong đó được không.
    vì em đang cần tạo 1 cách tìm nhiều file hoặc folder ở nhiều đường dẫn khác nhau nhưng có điểm chung là cùng tên file/folder
     
    Upvote 0
    Thử dùng File này:
    Cách dùng:
    - Bước 1: Tại D1, nhấn nút Tạo Link, hộp thoại mở ra tìm và chọn Folder cha xong click OK, vậy là xong việc lấy tên File và tạo Link.
    - Bước 2: Chọn cột B và nhấn Ctrl+F, hộp thoại mở ra gõ tên File cần tìm, xong click vào tên File và nhấn Yes.
    Trường hợp: nếu duy chuyển Folder và file sang máy tính khác thì làm sao để sử dụng được vậy bạn, hay là phải làm lại từ đầu
     
    Upvote 0
    cám ơn file của anh quang hải, em tải file về thì khi lọc file lại không được mn giúp em với ạ
     

    File đính kèm

    • screenshot_1763728660.png
      screenshot_1763728660.png
      97.6 KB · Đọc: 10
    Upvote 0
    1763731704459.png
    Tôi xác nhận code vẫn chạy bình thường nhé. Win 10 Excel 365.
     
    Upvote 0

    phongvanvu bạn cho mình xin code lại với, để mình so sánh thử. cám ơn ạ.​

    Đối với file này bạn phải mở ứng dụng Excel trước với "Run As Administrator" - rồi mới mở file.
    Code trong file có tạo file tạm nên hệ thống sẽ không cho (không có quyền Administrator) nếu bạn tìm folder trong ổ C:\, ổ đĩa khác thì được.

    Screenshot at Nov 21 22-28-04.png
     
    Upvote 0

    ongke0711 cám ơn bạn, mình có làm như bạn nói rồi những vẫn không ra được kết quả. code hiện tại​

    Option Explicit
    Sub Main()
    On Error Resume Next
    Dim i&, n&, path$, File$, Root$, Res(), Sarr, tam$
    With UserForm1
    Root = .TextBox1.Value
    path = Replace("""" & Root & "\""", "\\", "\")
    tam = IIf(.CheckBox6, path, LoaiFile(path))
    If tam = "" Then
    MsgBox "Chua Chon Loai File!", vbCritical
    Exit Sub
    End If
    Sarr = GetAllFile(tam, .CheckBox7)
    File = .TextBox2
    With CreateObject("Scripting.FileSystemObject")
    For i = LBound(Sarr) To UBound(Sarr)
    If UCase(.getbasename(Sarr(i))) Like UCase(File) & "*" Then
    n = n + 1
    ReDim Preserve Res(1 To n)
    Res(n) = Sarr(i)
    End If
    Next
    End With
    .ListBox1.Clear
    If n > 0 Then .ListBox1.List = Res
    End With
    End Sub
    Function GetAllFile(ByVal StrFolder As String, InSub As Boolean)
    On Error GoTo ExitSub
    Dim sComm As String, TmpFile As String, TmpStr As String
    With CreateObject("Scripting.FileSystemObject")
    TmpFile = .GetTempName
    sComm = "DIR " & StrFolder & "/A-D /B/O " _
    & IIf(InSub, "/S", vbNullString) & " > " & TmpFile
    CreateObject("Wscript.Shell").Run "cmd /u/c " & sComm, 0, 1
    TmpStr = Trim(.OpenTextFile(TmpFile, 1, , -1).ReadAll)
    If Len(TmpStr) Then GetAllFile = Split(TmpStr, vbCrLf)
    End With
    ExitSub:
    Kill TmpFile
    End Function
    Sub Auto_Open()
    UserForm1.Show
    End Sub
    Function LoaiFile(path) As String
    Dim Tem As String, i As Byte
    With UserForm1
    For i = 1 To 5
    If .Controls("CheckBox" & i) = True Then
    Tem = Tem & path & "*" _
    & .Controls("CheckBox" & i).Caption & "* "
    End If
    Next
    LoaiFile = Tem
    End With
    End Function
     
    Upvote 0
    Bạn thử bỏ đoạn code bẫy lỗi xem nó báo lỗi ở chỗ nào?
     
    Upvote 0
    Tính không viết nhưng nhờ tam khảo cái 50% của bạn và code tạm thế này
    file rất hữu ích, cho mình hỏi nếu mình muốn chổ hộp textbox nếu mình muốn lưu cái đường dẫn mà mình chọn luôn tức là mỗi lập bật hộp thư lên không phải mất công chọn lại đường dẫn thì chỉnh code như thế nào
    Bài đã được tự động gộp:

    file rất hữu ích, cho mình hỏi nếu mình muốn chổ hộp textbox nếu mình muốn lưu cái đường dẫn mà mình chọn luôn tức là mỗi lập bật hộp thư lên không phải mất công chọn lại đường dẫn thì chỉnh code như thế nào
    Mình đã tự chỉnh được rồi nha , cảm ơn bạn file cực kỳ hữu ích
     
    Lần chỉnh sửa cuối:
    Upvote 0
    Nhìn qua code thì có vẻ phải thay hàm Diir() vì nó không hỗ trợ tìm tên file tiếng Việt.
     
    Upvote 0
    Upvote 0
    Thêm hàm chuyển đổi có dấu thành không dấu thì sẽ tìm được cả 2 loại nha

    Function BoDau(ByVal s As String) As String

    Dim Acc As Variant, NonAcc As Variant, i As Long

    Acc = Array(ChrW(225), ChrW(224), ChrW(7843), ChrW(227), ChrW(7841), _
    ChrW(259), ChrW(7855), ChrW(7857), ChrW(7859), ChrW(7861), ChrW(7863), _
    ChrW(226), ChrW(7845), ChrW(7847), ChrW(7849), ChrW(7851), ChrW(7853), _
    ChrW(233), ChrW(232), ChrW(7867), ChrW(7869), ChrW(7865), _
    ChrW(234), ChrW(7871), ChrW(7873), ChrW(7875), ChrW(7877), ChrW(7879), _
    ChrW(237), ChrW(236), ChrW(7881), ChrW(297), ChrW(7883), _
    ChrW(243), ChrW(242), ChrW(7887), ChrW(245), ChrW(7885), _
    ChrW(244), ChrW(7891), ChrW(7893), ChrW(7895), ChrW(7897), ChrW(7899), _
    ChrW(417), ChrW(7901), ChrW(7899), ChrW(7903), ChrW(7905), ChrW(7907), _
    ChrW(250), ChrW(249), ChrW(7911), ChrW(361), ChrW(7909), _
    ChrW(432), ChrW(7913), ChrW(7915), ChrW(7917), ChrW(7919), ChrW(7921), _
    ChrW(253), ChrW(7923), ChrW(7927), ChrW(7929), ChrW(7925), ChrW(273))

    NonAcc = Array( _
    "a", "a", "a", "a", "a", _
    "a", "a", "a", "a", "a", "a", _
    "a", "a", "a", "a", "a", "a", _
    "e", "e", "e", "e", "e", _
    "e", "e", "e", "e", "e", "e", _
    "i", "i", "i", "i", "i", _
    "o", "o", "o", "o", "o", _
    "o", "o", "o", "o", "o", "o", _
    "o", "o", "o", "o", "o", "o", _
    "u", "u", "u", "u", "u", _
    "u", "u", "u", "u", "u", "u", _
    "y", "y", "y", "y", "y", "d")

    s = LCase$(s)

    For i = LBound(Acc) To UBound(Acc)
    s = Replace$(s, Acc(i), NonAcc(i))
    Next i

    BoDau = s
    End Function
     
    Upvote 0
    Phần dấu sắc thì trên VBA nó vẫn hiển thị được nhưng với các dấu phải chuyển thành kiểu như ChrW(7843) thì nó sẽ đọc không ra bắt buộc phải có 1 hàm function chuyển đổi thì nó mới tìm ra được nha bạn
    :cool: """:::":\ tôi không biết bạn tìm kiểu gì chứ tôi gõ chữ gì cũng được, chẳng cần thêm hàm gì cả.
    Bạn đừng nói các từ "ể, ễ, ầ, ề...) VBA đọc được nhé.

    Screenshot 2025-12-01 at 12.33.54.png Screenshot 2025-12-01 at 12.34.25.png Screenshot 2025-12-01 at 12.34.57.png Screenshot 2025-12-01 at 12.34.15.png
     
    Upvote 0
    :cool: """:::":\ tôi không biết bạn tìm kiểu gì chứ tôi gõ chữ gì cũng được, chẳng cần thêm hàm gì cả.
    Bạn đừng nói các từ "ể, ễ, ầ, ề...) VBA đọc được nhé.

    View attachment 310451 View attachment 310452 View attachment 310453 View attachment 310454
    Tôi gõ không dấu thì chỉ tìm được không dấu
    1764572011966.png
    Tôi lọc chữ Huyền thì không tìm ra được file nào hết
    1764571781604.png
    Còn đây là sau khi thêm hàm chuẩn hóa dấu thì nó sẽ tìm được đầy đủ
    1764571924445.png
    Bài đã được tự động gộp:

    :cool: """:::":\ tôi không biết bạn tìm kiểu gì chứ tôi gõ chữ gì cũng được, chẳng cần thêm hàm gì cả.
    Bạn đừng nói các từ "ể, ễ, ầ, ề...) VBA đọc được nhé.

    View attachment 310451 View attachment 310452 View attachment 310453 View attachment 310454
    file Excel thì gõ dấu tìm bình thường nhưng file pdf thì không nha bạn, không phải loại file nào có dấu cũng tìm được
     

    File đính kèm

    • 1764571678285.png
      1764571678285.png
      30.6 KB · Đọc: 4
    Upvote 0
    Nhìn qua code thì có vẻ phải thay hàm Diir() vì nó không hỗ trợ tìm tên file tiếng Việt.
    Mình gửi lại file sau khi thêm hàm chuẩn hóa dấu để có thể tìm mọi tên file không bỏ sót, file này dựa trên file của bạn Quang Hải viết để tối ưu các file có dấu
     

    File đính kèm

    Upvote 0
    file Excel thì gõ dấu tìm bình thường nhưng file pdf thì không nha bạn, không phải loại file nào có dấu cũng tìm được
    Haha...lần đầu tiên mới nghe vụ tìm tên file có liên quan đến extension của file.

    Mình gửi lại file sau khi thêm hàm chuẩn hóa dấu để có thể tìm mọi tên file không bỏ sót, file này dựa trên file của bạn Quang Hải viết để tối ưu các file có dấu
    Bạn đã sai ngay từ đầu khi đặt vấn đề để giải quyết. Vấn đề ở đây (của file chủ thớt) không phải là "không tìm kiếm được những file có dấu" (như tôi đã dẫn chứng) mà vấn đề là phương thức tìm kiếm tên file nào nó đầy đủ hơn - tìm kiếm không dấu hay có dấu.
    - Tìm kiếm với từ khoá có dấu: nó sẽ tìm chính xác nếu bạn biết tên file, trả về đúng file yêu cầu.
    - Tìm kiếm với từ khoá không dấu: nó sẽ trả về nhiều kết quả hơn, do nó cũng trả về những file không chính xác với tên file cần tìm chứ không có "bỏ sót" gì ở đây. Vd: Tìm người tên "Ẩn" --> nó sẽ về tất cả những người tên: An, Ân, Ấn...do qui về từ "an" để tìm.
    =
    Tóm lại giải pháp của bạn là qui tất cả tên file về không dấu hết để tìm kiếm. Chỉ là thay đổi phương pháp tìm kiếm chứ không phải sửa lỗi sai của file gốc. Chỉ vậy thôi.

    Cái này ngâm cứu cho vui thôi chứ tìm kiếm file thì cứ vô File Explorer mà gõ không dấu, có dấu tuỳ thích. Còn muốn tìm nhanh hơn nữa thì cài cái soft Everything là nó tìm cả Windows với tốc độ cực nhanh.

    Screenshot 2025-12-01 at 22.14.00.png
     
    Lần chỉnh sửa cuối:
    Upvote 0
    Haha...lần đầu tiên mới nghe vụ tìm tên file có liên quan đến extension của file.


    Bạn đã sai ngay từ đầu khi đặt vấn đề để giải quyết. Vấn đề ở đây (của file chủ thớt) không phải là "không tìm kiếm được những file có dấu" (như tôi đã dẫn chứng) mà vấn đề là phương thức tìm kiếm tên file nào nó đầy đủ hơn - tìm kiếm không dấu hay có dấu.
    - Tìm kiếm với từ khoá có dấu: nó sẽ tìm chính xác nếu bạn biết tên file, trả về đúng file yêu cầu.
    - Tìm kiếm với từ khoá không dấu: nó sẽ trả về nhiều kết quả hơn, do nó cũng trả về những file không chính xác với tên file cần tìm chứ không có "bỏ sót" gì ở đây. Vd: Tìm người tên "Ẩn" --> nó sẽ về tất cả những người tên: An, Ân, Ấn...do qui về từ "an" để tìm.
    =
    Tóm lại giải pháp của bạn là qui tất cả tên file về không dấu hết để tìm kiếm. Chỉ là thay đổi phương pháp tìm kiếm chứ không phải sửa lỗi sai của file gốc. Chỉ vậy thôi.

    Cái này ngâm cứu cho vui thôi chứ tìm kiếm file thì cứ vô File Explorer mà gõ không dấu, có dấu tuỳ thích. Còn muốn tìm nhanh hơn nữa thì cài cái soft Everything là nó tìm cả Windows với tốc độ cực nhanh.

    View attachment 310462
    Vậy bạn có thể giải thích cho mình tại sao mình tìm file pdf có dấu mà dấu đó trong VBA nó không hỗ trợ gõ trực tiếp mà phải bằng mã Chrw() mình search không ra không VD như bên dưới mình tìm ĐH Đại Dũng nhưng mình không gõ ra được chữ đại dũng trên textbox chứ chưa nói gõ được mà nó search ra
    1764644780418.png

    Gõ Đại Dũng không ra
    1764644827608.png
    Gõ từ Đại
    1764644893250.png
    Gõ từ Dũng
    1764644921008.png
    Thêm 1 vấn đề nữa tại sao mình thêm ý tưởng là chuẩn hóa có dấu thành không dấu khi tìm như bạn nói gõ chữ "An" nó sẽ ra: An, Ân, Ấn,Ần,Ẩn,Ăn, Ắn...và vì sao phải làm vậy, vì tên file đó người khác đặt mình không thể bắt họ phải đặt tên file chuẩn, đúng chính tả, nhiều khi họ đặt tên bị lỗi, thiếu dấu, sai ký tự chổ có dấu chổ không, nó không đồng nhất VD như Thanh Huyền, Thanh Huyen... cả 2 tên đều là 1 nhưng cái có dấu cái không
     
    Upvote 0
    Gõ dấu trên textbox không được thì bạn xem lại đang dùng bảng mã nào.
     
    Upvote 0
    Gõ dấu trên textbox không được thì bạn xem lại đang dùng bảng mã nào.
    Mình đang dùng Unicode telex nha bạn
    Bài đã được tự động gộp:

    Gõ dấu trên textbox không được thì bạn xem lại đang dùng bảng mã nào.
    Đổi qua VNI thì gõ được nhưng tìm không ra
    1764646699303.png
    Bài đã được tự động gộp:

    Mình đang dùng Unicode telex nha bạn
    Bài đã được tự động gộp:


    Đổi qua VNI thì gõ được nhưng tìm không ra
    1764646699303.png
    Thêm dấu * phía trước thì tìm mới ra nha
    1764646906948.png
    Bài đã được tự động gộp:


    Bài đã được tự động gộp:

    Mình đang dùng Unicode telex nha bạn
    Bài đã được tự động gộp:


    Đổi qua VNI thì gõ được nhưng tìm không ra
    1764646699303.png
    Bài đã được tự động gộp:


    Thêm dấu * phía trước thì tìm mới ra nha
    1764646906948.png
    Bài đã được tự động gộp:
    Trong code chỉnh lại đoạn này là sẽ tìm ra nha mọi người
    If UCase(.getbasename(Sarr(i))) Like "*" & UCase(File) & "*" Then
     
    Lần chỉnh sửa cuối:
    Upvote 0
    - Gõ tiếng Việt không ra trong Textbox thì có liên quan gì đến VBA???
    - Một vấn đề phải xét đến nữa là khi tạo file PDF thì dùng bảng mã nào để gõ tên nữa đây.
    - Có vẻ bạn không hiều đoạn code bạn viết trên hoạt động như thế nào mà cứ tranh luận tìm ra với không ra.
     
    Upvote 0
    - Gõ tiếng Việt không ra trong Textbox thì có liên quan gì đến VBA???
    - Một vấn đề phải xét đến nữa là khi tạo file PDF thì dùng bảng mã nào để gõ tên nữa đây.
    - Có vẻ bạn không hiều đoạn code bạn viết trên hoạt động như thế nào mà cứ tranh luận tìm ra với không ra.
    bây giờ thì mình hiểu rồi bạn, với hiện bảng mã mình đã gõ quen telex rồi nên mình không xài vni, với mặc dù xài vni nhưng lúc thì gõ dấu được lúc không nên mình thấy phương án chuẩn bỏ dấu để tìm cho tất cả vẫn là khả thi nhất.
    Cảm ơn bạn đã có những giải thích nên mình hiểu nhiều hơn về cấu trúc, mình cũng tay ngang học về code nên cũng có nhiều cái chưa hiểu hết
     
    Upvote 0
    Mình đang dùng Unicode telex nha bạn
    Unicode có 2 bảng mã: dựng sẵn và tổ hợp.
    Trong form người ta thiết kế để dùng unicode dựng sẵn mà mình dùng tổ hợp thì sai (và ngược lại)

    Tôi chỉ đoán vậy thôi vì thấy người ta vẫn gõ trên textbox ra tiếng Việt được mà chỉ bạn là không được.

    Để tôi tải về dùng thử xem thế nào rồi nói tiếp
     
    Upvote 0
    M
    Unicode có 2 bảng mã: dựng sẵn và tổ hợp.
    Trong form người ta thiết kế để dùng unicode dựng sẵn mà mình dùng tổ hợp thì sai (và ngược lại)

    Tôi chỉ đoán vậy thôi vì thấy người ta vẫn gõ trên textbox ra tiếng Việt được mà chỉ bạn là không được.

    Để tôi tải về dùng thử xem thế nào rồi nói tiếp
    Mình đã dùng cả 2 cái đều không được bạn, Vni thì lúc được lúc không khá ức chế với hiện cty mình các bạn sale tạo đơn hàng để tên file tùm lum lúc thì có dấu lúc thì không dấu nên thay vì phải gõ 1 lần không dấu và 1 lần có dấu để tìm 1 đơn hàng giống nhau thì mình gõ không dấu để tìm được cả 2 cho nhanh và đỡ mất công
     
    Upvote 0
    Thêm 1 vấn đề nữa tại sao mình thêm ý tưởng là chuẩn hóa có dấu thành không dấu khi tìm như bạn nói gõ chữ "An" nó sẽ ra: An, Ân, Ấn,Ần,Ẩn,Ăn, Ắn...và vì sao phải làm vậy, vì tên file đó người khác đặt mình không thể bắt họ phải đặt tên file chuẩn, đúng chính tả, nhiều khi họ đặt tên bị lỗi, thiếu dấu, sai ký tự chổ có dấu chổ không, nó không đồng nhất VD như Thanh Huyền, Thanh Huyen... cả 2 tên đều là 1 nhưng cái có dấu cái không
    Mệt ghê...bạn đọc kỹ lại bài tôi viết. Có đoạn nào tôi phản đối cái việc tìm kiếm không dấu đâu mà bạn đi giải thích, mà giải thích này thì dân lập trình nào mà chẳng biết? Tôi chỉ không đồng ý với bạn là bạn nói không gõ được dấu tiếng Việt trong textbox tìm kiếm và tìm không ra. Tôi đã dẫn chứng cho bạn là tôi vẫn làm được như bình thường.
    Còn việc "từ khoá tìm kiếm chuyển về không dấu" lại là một phạm trù khác mà bạn cứ đem vô tranh luận là sao? Thà bạn nói bạn đóng góp một phương thức tìm kiếm khác nó an toàn hơn thì nó rõ ràng hơn chứ phát biểu file cũ tìm kiếm không ra là sai.
    Trong diễn đàn này đã có biết bao bài về tìm kiếm ngay khi gõ rồi bạn à.
    Bài đã được tự động gộp:

    M

    Mình đã dùng cả 2 cái đều không được bạn, Vni thì lúc được lúc không khá ức chế với hiện cty mình các bạn sale tạo đơn hàng để tên file tùm lum lúc thì có dấu lúc thì không dấu nên thay vì phải gõ 1 lần không dấu và 1 lần có dấu để tìm 1 đơn hàng giống nhau thì mình gõ không dấu để tìm được cả 2 cho nhanh và đỡ mất công
    Cách mà các ứng dụng tôi và nhiều người khác cũng làm là tìm kiếm khi gõ ký tự: nếu gõ không dấu thì nó ra một danh sách ứng với không dấu, khi gõ tiếp bỏ thêm dấu thì nó sẽ lọc tiếp những từ khoá đúng với từ có dấu, chỉ có vậy.
     
    Upvote 0
    Mệt ghê...bạn đọc kỹ lại bài tôi viết. Có đoạn nào tôi phản đối cái việc tìm kiếm không dấu đâu mà bạn đi giải thích, mà giải thích này thì dân lập trình nào mà chẳng biết? Tôi chỉ không đồng ý với bạn là bạn nói không gõ được dấu tiếng Việt trong textbox tìm kiếm và tìm không ra. Tôi đã dẫn chứng cho bạn là tôi vẫn làm được như bình thường.
    Còn việc "từ khoá tìm kiếm chuyển về không dấu" lại là một phạm trù khác mà bạn cứ đem vô tranh luận là sao? Thà bạn nói bạn đóng góp một phương thức tìm kiếm khác nó an toàn hơn thì nó rõ ràng hơn chứ phát biểu file cũ tìm kiếm không ra là sai.
    Trong diễn đàn này đã có biết bao bài về tìm kiếm ngay khi gõ rồi bạn à.
    Bài đã được tự động gộp:


    Cách mà các ứng dụng tôi và nhiều người khác cũng làm là tìm kiếm khi gõ ký tự: nếu gõ không dấu thì nó ra một danh sách ứng với không dấu, khi gõ tiếp bỏ thêm dấu thì nó sẽ lọc tiếp những từ khoá đúng với từ có dấu, chỉ có vậy.
    Cảm ơn bạn, tùy đặc thù cách làm mỗi công ty mà thay đổi sao cho phù hợp để tối ưu sử dụng, tôi biết trong diễn đàn này toàn cao thủ không nên rảnh rảnh tôi lên đọc các bài đăng xem có ý tưởng nào hay không để học hỏi thêm
     
    Upvote 0
    M

    Mình đã dùng cả 2 cái đều không được bạn, Vni thì lúc được lúc không khá ức chế với hiện cty mình các bạn sale tạo đơn hàng để tên file tùm lum lúc thì có dấu lúc thì không dấu nên thay vì phải gõ 1 lần không dấu và 1 lần có dấu để tìm 1 đơn hàng giống nhau thì mình gõ không dấu để tìm được cả 2 cho nhanh và đỡ mất công
    Tôi đã tải file LocFile ở bài #11 của Quang Hải (chắc mọi người cũng dùng file đó để thảo luận suốt mấy lâu nay chứ gì?). Kết quả thế này:
    1. Gõ tiếng Việt bằng telex với bảng mã Unicode dựng sẵn vào texbox ra tiếng Việt bình thường.
    2. Gõ có dấu TV thì nó tìm file có dấu TV y như thấy trên textbox.
    3. Gõ ký tự đạị diện như *, ? để tìm Ví dụ "*tiến*" thì lọc ra các file có từ Tiến độ, Tiến bộ, tiên tiến
     
    Upvote 0
    Tôi đã tải file LocFile ở bài #11 của Quang Hải (chắc mọi người cũng dùng file đó để thảo luận suốt mấy lâu nay chứ gì?). Kết quả thế này:
    1. Gõ tiếng Việt bằng telex với bảng mã Unicode dựng sẵn vào texbox ra tiếng Việt bình thường.
    2. Gõ có dấu TV thì nó tìm file có dấu TV y như thấy trên textbox.
    3. Gõ ký tự đạị diện như *, ? để tìm Ví dụ "*tiến*" thì lọc ra các file có từ Tiến độ, Tiến bộ, tiên tiến
    Cảm ơn bạn, vậy là do lỗi Unicode ở máy của tôi có vấn đề
     
    Upvote 0
    Tham khảo ứng dụng quản lý thư mục này bạn

     
    Upvote 0

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

    Back
    Top Bottom