Duyệt file (folder) trong 1 folder cho trước và tạo Hyperlink

Liên hệ QC

ndu96081631

Huyền thoại GPE
Thành viên BQT
Super Moderator
Tham gia
5/6/08
Bài viết
30,703
Được thích
53,947
Xét thấy nhiều bạn có nhu cầu duyệt file hoặc folder rồi tạo Hyperlink trên sheet.
Gần đây lại có 1 bạn khơi lại chủ đề này:
http://www.giaiphapexcel.com/forum/showthread.php?81354-Nhờ-Link-foder-trong-trong-excel-!
Bạn ấy lại muốn code có khả năng vừa duyệt file lại vừa duyệt folder nên tôi quyết định tiến hành xây dựng file và cuối cùng cũng hoàn tất
Giao diện chương trình như sau:

Capture.JPGCapture.JPG






































Với file này, các bạn có thể lưu thành Add-In và khi gọi Add-In lên các bạn sẽ nhìn thấy 1 button trên menu bar (hoặc Ribbon). Bấm vào button thì form sẽ xuất hiện (như hình trên)
Khi lưu thành Add-In, các bạn sẽ được "khuyến mãi" thêm hàm lấy file, folder như sau
Mã:
Function FilesFoldersList(ByVal RootFolder As String, ByVal ListType As Boolean, _
                          ByVal Search As String, ByVal InSub As Boolean)
  'ListType = True: Get Files list
  'ListType = False: Get Folders list
  Dim sComm As String, tmp As String, str As String, tmpFile, Arr
  On Error Resume Next
  If Right(RootFolder, 1) <> "\" Then RootFolder = RootFolder & "\"
  str = """" & RootFolder & IIf(ListType, Search, "") & """"
 
  With CreateObject("Scripting.FileSystemObject")
    tmpFile = .GetTempName
    sComm = "DIR " & str & " /ON /B /A" & IIf(ListType, "-", "") & "D[COLOR=#ff0000][B]-S[/B][/COLOR]" & IIf(InSub, "/S", " ") & " >" & tmpFile
    CreateObject("Wscript.Shell").Run "cmd /u /c " & sComm, 0, True
    With .OpenTextFile(tmpFile, 1, , -2)
      tmp = Trim(.ReadAll)
      If Right(tmp, 2) = vbCrLf Then tmp = Left(tmp, Len(tmp) - 2)
      If Len(tmp) Then
        If InSub = False Then tmp = RootFolder & Replace(tmp, vbCrLf, vbCrLf & RootFolder)
        FilesFoldersList = Split(tmp, vbCrLf)
      End If
      .Close
    End With
  End With
  Kill tmpFile
End Function
Có thể gõ hàm trực tiếp trên sheet theo cú pháp:
Mã:
=FilesFoldersList([COLOR=#ff0000]Tên thư mục[/COLOR], [COLOR=#ff8c00]list file hay folder?[/COLOR], [COLOR=#008000]từ khóa[/COLOR], [COLOR=#0000cd]có lấy trong folder con hay không?[/COLOR])
Ví dụ:
=FilesFoldersList("D:\Excel", True, "*.xlsm", True)
Có nghĩa là: Bạn muốn tìm trong thư mục "D:\Excel" các file có đuôi .xlsmlấy list trong các folder con luôn
Kết quả trả về của hàm trên là mảng 1 chiều chưa các file hoặc folder liên quan
------------------------------------------------
Lưu ý: Trong code chính, chổ màu đỏ (-S) nhằm mục đích loại bỏ các file hoặc folder hệ thống (tránh nguy hiểm). Nếu các bạn có nhu cầu lấy luôn các file folder hệ thống thì cứ xóa cái -S ấy đi là được
------------------------------------------------
Rất mong nhận được sự cải tiến, đóng góp của các bạn để chương trình được hoàn thiện hơn
Cảm ơn!
 

File đính kèm

  • Search_For_Files_Folders.xlsm
    31.4 KB · Đọc: 1,052
  • Search_For_Files_Folders.xls
    70 KB · Đọc: 880
Lần chỉnh sửa cuối:
Mình thấy cũng tuyệt rồi, mình muốn quản lý dữ liệu thông qua cái này, nếu tạo Hyperlink được 2 chiều thì tốt quá.

VD: Nếu sửa tên file, folder hoặc tạo thêm file và folder mà nó tự động cập nhật lên file excel của mình. Còn làm được cả ngược lại thì quá tối ưu trong việc quản lý dữ liệu.

Thanks!

Bạn có ví dụ với kết quả trong File rồi đưa lên đây tôi xem thử.
 
Upvote 0
Xin chào các bạn trên diễn đàn và tác giả ndu
ờ bài #1 mình có tải file Search_For_Files_Folders.xlsm của tác giả ndu về và thử lấy với folder có 1 số file sau:
050607.xlsx
050706.xlsx
060507.xlsx
060705.xlsx
070506.xlsx
070605.xlsx
với điều kiện tên file cần lấy là: *06??.xlsx (mục đích của mình là lấy tất cả các file có ký tự 06 ở giữa tên file) nhưng khi lấy file thì kết quả cho ra các file sau:
050607.xlsx
050706.xlsx
070506.xlsx
070605.xlsx
nếu dùng trình Search trong win tìm trong folder với các file trên thì kết quả cho ra chỉ có 2 file (đây là kết quả đúng) là:
050607.xlsx
070605.xlsx
Mình nhận thấy hình như lệnh trong cmd nhận ký tự đại diện khác với win hay sao đó
Các bạn trên diễn đàn và tác giả ndu có thể giải thích cho mình được không
 
Upvote 0
Mình nhận thấy hình như lệnh trong cmd nhận ký tự đại diện khác với win hay sao đó
Các bạn trên diễn đàn và tác giả ndu có thể giải thích cho mình được không
Tôi cũng không rõ nguyên nhân lắm. Tuy nhiên tôi thắc mắc sao bạn không gõ từ khóa dò tìm là ??06??.xlsx
???
 
Upvote 0
Lý do em nhập từ khóa *06??.xlsx như vậy vì có thể trong Folder có thể có các file có tên khác ví dụ như Copy of 150623.xlsx chẳng hạn
em chỉ muốn quan tâm đến 04 số cuối của file thôi số 06 là bắt buộc tìm chính xác và kế đến là 2 ký tự đại diện bất kỳ
 
Lần chỉnh sửa cuối:
Upvote 0
Gửi anh NDU, Em cảm ơn anh nhiều về bài viết đẫ giúp em trong công việc rất nhiều, mong anh giúp đỡ thêm được không ạ:
Khi duyệt ra file thì lưu luôn tên file vào sau cột LINK được không ạ.
 
Upvote 0
Gửi anh NDU. Bác giúp em chỉnh sửa và thêm 1 số chức năng như dưới với ạ!
1. Cột PATH chỉ hiện theo tên file tìm kiếm được (nếu có thể cho phép người dùng có thể thêm cột vào trước hoặc sau các cột đã được thiết lập sẵn)
2. Chỉnh Font chữ vùng tự động hiện dữ liệu và font chữ toàn sheet cho cùng font
3. Ngoài vùng do addin tự động hiển thị dữ liệu người dùng có thể thêm cột mà sau mỗi lần tìm kiếm gán link ko bị mất đi (chỉ cập nhật thêm). Hiện tại chỉ cho hiển thị thông tin của lần tìm kiếm cuối cùng các dữ liệu khác đều bị xóa trắng
4. Cập nhật nhiều vùng nhiều vùng tương ứng với vùng tìm kiếm và sẽ liệt kê theo vị trí trỏ chuột
5. Khi vùng thứ nhất có thêm dữ liệu trong folder cần tìm kiếm mà không đè hay làm mất dữ liệu ở các vùng khác (Như ảnh e đang minh họa - Việc này nếu ko được người dùng có thể tự insert thêm dòng để gán lại)
upload_2017-12-23_22-31-2.png
 
Upvote 0
Các thầy ơi! Em theo cách của thầy Ndu đã lấy hết được link của các file rồi, nhưng nó không theo thứ tự tên file em lưu trong list thống kê. Có cách nào sắp xếp lại link file theo tên file không ạ? Em xin cảm ơn!
 
Upvote 0
Web KT

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

Back
Top Bottom