Viết code tìm kiếm các file trong Folder (2 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: 9
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

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

Back
Top Bottom