Lấy list danh sách trong forder lên excel

Liên hệ QC
Thế các file của bạn nằm ở đâu? Trên đĩa cứng trong máy của bạn hay ở công viên, sở thú, đám mây đám mưa gì đó?
 
Trên mạng chỉ lấy dc trong 1 forder mà ko lấy dc tiếp trong forder con ạ, ý em làm lấy dc cả forder con như trên google driver ấy ạ
Mình xài cái này là được hết tất cả thư mục hiện hành và thư mục con.
Mã:
Option Explicit
Const DongBatDau As Integer = 5
Dim strPath As String
Sub Lay_DuongDanFile()
'Chon folder
Dim HopThoai As Integer
Dim strPath As String
Dim objFSO As Object
Dim SoRows As Integer

Sheet1.Range("A5:A500,D5:D500").ClearContents
Application.FileDialog(msoFileDialogFolderPicker).Title = _
"Chon môt Folder"
HopThoai = Application.FileDialog( _
msoFileDialogFolderPicker).Show
If HopThoai <> 0 Then
    strPath = Application.FileDialog(msoFileDialogFolderPicker _
    ).SelectedItems(1)
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    SoRows = LayTenFile(strPath, DongBatDau, objFSO)
    Call LayTenFolder(strPath, objFSO, SoRows)
End If
End Sub

Private Function LayTenFile(ByVal strPath As String, _
ByVal intRow As Integer, ByRef objFSO As Object) As Integer
Dim objFolder As Object
Dim objFile As Object
Dim i As Integer
i = intRow - DongBatDau + 1
Set objFolder = objFSO.GetFolder(strPath)
For Each objFile In objFolder.Files
        'Duong dân
        Cells(i + DongBatDau - 1, 1) = objFile.Path
        'Tên file
        Cells(i + DongBatDau - 1, 4) = objFile.Name
        i = i + 1
Next objFile
LayTenFile = i + DongBatDau - 1
End Function

Private Sub LayTenFolder(ByVal strFolder As String, _
    ByRef objFSO As Object, ByRef intRow As Integer)
Dim objFolder As Object
Dim objSubFolder As Object
Set objFolder = objFSO.GetFolder(strFolder)
For Each objSubFolder In objFolder.subfolders
    intRow = LayTenFile(objSubFolder.Path, _
        intRow, objFSO)
    Call LayTenFolder(objSubFolder.Path, _
        objFSO, intRow)
Next objSubFolder
End Sub
 
Em muốn lấy list các file trong 1 forder vào excel giống như này thì phải làm như nào ạ,( https://gdrive.vip/liet-ke-danh-sach-file-trong-folder-google-drive-vao-google-sheet-nhanh-chong/ ) em thấy cái này chỉ làm được trên google driver mà file của em toàn file nặng ko thể đồng bộ lên driver dc. nhờ các bác giúp đỡ ạ!

Nếu trên Window thì:
Bạn tải google Backup and Async:
Sau khi cài đặt chờ ứng dụng đồng bộ Drive.
tiếp tục sử dụng ứng dụng Excel lấy danh sách đường dẫn:
Nhập đường dẫn C:\.....\Google Drive đã cài đặt vào ứng dụng để lấy danh sách.


Nếu trên Google Spreadsheet thì bạn copy Script trong link bạn đã cung cấp nhúng vào ứng dụng Google App Scripts và cấp phép để chạy.
 
Nếu trên Window thì:
Bạn tải google Backup and Async:
Sau khi cài đặt chờ ứng dụng đồng bộ Drive.
tiếp tục sử dụng ứng dụng Excel lấy danh sách đường dẫn:
Nhập đường dẫn C:\.....\Google Drive đã cài đặt vào ứng dụng để lấy danh sách.


Nếu trên Google Spreadsheet thì bạn copy Script trong link bạn đã cung cấp nhúng vào ứng dụng Google App Scripts và cấp phép để chạy.
file của em là file mẫu áo nên nó rất nặng ạ, ko thể đồng bộ lên gg driver dc, nên em mới nhờ các bác xem có lấy dc forder trên ổ ko!
Bài đã được tự động gộp:

Mình xài cái này là được hết tất cả thư mục hiện hành và thư mục con.
Mã:
Option Explicit
Const DongBatDau As Integer = 5
Dim strPath As String
Sub Lay_DuongDanFile()
'Chon folder
Dim HopThoai As Integer
Dim strPath As String
Dim objFSO As Object
Dim SoRows As Integer

Sheet1.Range("A5:A500,D5:D500").ClearContents
Application.FileDialog(msoFileDialogFolderPicker).Title = _
"Chon môt Folder"
HopThoai = Application.FileDialog( _
msoFileDialogFolderPicker).Show
If HopThoai <> 0 Then
    strPath = Application.FileDialog(msoFileDialogFolderPicker _
    ).SelectedItems(1)
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    SoRows = LayTenFile(strPath, DongBatDau, objFSO)
    Call LayTenFolder(strPath, objFSO, SoRows)
End If
End Sub

Private Function LayTenFile(ByVal strPath As String, _
ByVal intRow As Integer, ByRef objFSO As Object) As Integer
Dim objFolder As Object
Dim objFile As Object
Dim i As Integer
i = intRow - DongBatDau + 1
Set objFolder = objFSO.GetFolder(strPath)
For Each objFile In objFolder.Files
        'Duong dân
        Cells(i + DongBatDau - 1, 1) = objFile.Path
        'Tên file
        Cells(i + DongBatDau - 1, 4) = objFile.Name
        i = i + 1
Next objFile
LayTenFile = i + DongBatDau - 1
End Function

Private Sub LayTenFolder(ByVal strFolder As String, _
    ByRef objFSO As Object, ByRef intRow As Integer)
Dim objFolder As Object
Dim objSubFolder As Object
Set objFolder = objFSO.GetFolder(strFolder)
For Each objSubFolder In objFolder.subfolders
    intRow = LayTenFile(objSubFolder.Path, _
        intRow, objFSO)
    Call LayTenFolder(objSubFolder.Path, _
        objFSO, intRow)
Next objSubFolder
End Sub
thanks bác để em thử ạ
 
file của em là file mẫu áo nên nó rất nặng ạ, ko thể đồng bộ lên gg driver dc, nên em mới nhờ các bác xem có lấy dc forder trên ổ ko!
Bài đã được tự động gộp:


thanks bác để em thử ạ
Chủ đề này cứ nhầm lẫn giữa offline (Excel / Files) và online (Google sheet).
Tóm lại bạn nên trình bày rõ , File nằm ở đâu và lấy danh sách để vào đâu (chắc không liên quan gì google sheet, vì nếu liên quan thì đã không đặt vào mục diễn đàn này)
 
file của em là file mẫu áo nên nó rất nặng ạ, ko thể đồng bộ lên gg driver dc, nên em mới nhờ các bác xem có lấy dc forder trên ổ ko!
Nếu trên window mà không đồng bộ Google Drive thì bỏ qua bước tải
Chỉ tải ứng dụng về sử dụng. Nếu không được bạn chờ đợi thành viên khác trợ giúp.
 
file của em là file mẫu áo nên nó rất nặng ạ, ko thể đồng bộ lên gg driver dc, nên em mới nhờ các bác xem có lấy dc forder trên ổ ko!
Bạn có sai lầm rất lớn khi vào diễn đàn hỏi mà không nêu rõ mục đích, do đó đã qua 10 bài viết nhưng không ai giúp bạn được cho bạn. Cụ thể là bạn muốn lấy list danh sách các file trong 1 forder vào excel nhưng không nói rõ làm cái gì với danh sách đó. Vì vậy, mỗi người hiểu mỗi kiểu khác nhau như sau:
1/ Lấy danh sách các file trong 1 forder để đếm số lượng File.
2/ Lấy danh sách các file trong 1 forder và tạo Hyperlink khi click vào Link mở File đó lên để xem.
3/ Lấy danh sách các file để tạo một hóa đơn với với nội dung, tiêu chí sản phẩm, đơn giá và hình ảnh của hàng hóa.
 
Bạn có sai lầm rất lớn khi vào diễn đàn hỏi mà không nêu rõ mục đích, do đó đã qua 10 bài viết nhưng không ai giúp bạn được cho bạn. Cụ thể là bạn muốn lấy list danh sách các file trong 1 forder vào excel nhưng không nói rõ làm cái gì với danh sách đó. Vì vậy, mỗi người hiểu mỗi kiểu khác nhau như sau:
1/ Lấy danh sách các file trong 1 forder để đếm số lượng File.
2/ Lấy danh sách các file trong 1 forder và tạo Hyperlink khi click vào Link mở File đó lên để xem.
3/ Lấy danh sách các file để tạo một hóa đơn với với nội dung, tiêu chí sản phẩm, đơn giá và hình ảnh của hàng hóa.
SORRY bác, bên em làm thiết kế mẫu áo, mỗi mẫu áo nó có các size và tên khác nhau. Bây giờ em muốn kiểm soát áo theo mẫu thiết kế đó lên excel ạ! ( file thiết kế là file photoshop bên em đã tách riêng theo size áo)
Bài đã được tự động gộp:

Chủ đề này cứ nhầm lẫn giữa offline (Excel / Files) và online (Google sheet).
Tóm lại bạn nên trình bày rõ , File nằm ở đâu và lấy danh sách để vào đâu (chắc không liên quan gì google sheet, vì nếu liên quan thì đã không đặt vào mục diễn đàn này)
ý em là em muốn làm offline giống như trên gg driver ạ!
 
Ơ lạ nhỉ. Người ta muốn có danh sách các tập tin trong thư mục vd. D:\Anh và các thư mục con của nó. Chỉ muốn có danh sách để ngắm cho thỏa thôi không được ̀phép? Sao lại phải khai ra mục đích?

Chủ thớt cứ vào link sau rồi dùng hàm ListAllFiles của HeSanbi thôi.

https://www.giaiphapexcel.com/diendan/threads/145043/
------------
Hoặc dùng hàm ít tùy biến hơn nhưng thường dùng, nhu cầu đủ dùng:
Mã:
Public Sub ListFilesOrFolders(ByVal FolderStart As String, result, Optional sFilter As String = "", _
        Optional folder As Boolean = False, Optional inSub As Boolean = False, Optional NameOnly As Boolean = True)
'    Neu lay tat ca cac tap tin hoac thu muc thi nhap sFilter = "" (da la mac dinh nen co the bo qua)
'     Neu lay tat ca cac tap tin vd. co dang JPG thi sFilter = "*.jpg",
'    Neu lay tat ca cac tap tin JPG ma ten phai chua hichic thi sFilter = "*hichic*.jpg"
'    Neu muon tim ca o cac thu muc con thi inSub = TRUE, nguoc lai thi inSub = FALSE (mac dinh)
'    Neu chi lay ten thi NameOnly = True (mac dinh). Neu muon lay toan bo duong dan thi NameOnly = FALSE.
'    Neu tim tap tin thi folder = False (mac dinh). Neu tim thu muc thi folder = True.
'    Ham bat dau tim trong thu muc khoi dong FolderStart
'    Ket qua tim kiem duoc tra ve trong mang result co chi so tinh tu 1
Dim count As Long, f As Object, fso As Object, SubF As Object, files As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    If fso.FolderExists(FolderStart) Then
        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 = IIf(folder, f.SubFolders, f.files)
            For Each SubF In files
                If LCase(SubF.Name) Like LCase(sFilter) Then
                    If IsEmpty(result) Then
                        ReDim result(1 To 1)
                        count = 0
                    Else
                        count = UBound(result)
                    End If
                    ReDim Preserve result(1 To count + 1)
                    If NameOnly Then
                        result(UBound(result)) = SubF.Name
                    Else
                        result(UBound(result)) = SubF.Path
                    End If
                End If
                If inSub And folder Then
                    ListFilesOrFolders SubF.Path, result, sFilter, True, True, NameOnly
                End If
            Next SubF
            If inSub And Not folder Then
                For Each SubF In f.SubFolders
                    ListFilesOrFolders SubF.Path, result, sFilter, False, True, NameOnly
                Next
            End If
        End If
        
        Set f = Nothing
    End If
    Set fso = Nothing
End Sub

' Các ví dụ dùng
Sub test1()
Dim result, k As Long
'   tất cả tập tin trong thư mục "c:\1" và các thư mục con, chỉ tên thôi
    ListFilesOrFolders "c:\1", result, "", , True
    If Not IsEmpty(result) Then
        For k = 1 To UBound(result)
            Debug.Print result(k)
        Next k
    End If
End Sub

Sub test2()
Dim result, k As Long
'   tất cả tập tin trong thư mục "c:\1", chỉ tên thôi
    ListFilesOrFolders "c:\1", result, ""
    If Not IsEmpty(result) Then
        For k = 1 To UBound(result)
            Debug.Print result(k)
        Next k
    End If
End Sub

Sub test3()
Dim result, k As Long
'   tất cả thư mục trong thư mục "c:\1", chỉ tên thôi
    ListFilesOrFolders "c:\1", result, "", True
    If Not IsEmpty(result) Then
        For k = 1 To UBound(result)
            Debug.Print result(k)
        Next k
    End If
End Sub

Sub test4()
Dim result, k As Long
'   tất cả thư mục trong thư mục "c:\1" và các thư mục con, chỉ tên thôi
    ListFilesOrFolders "c:\1", result, "", True, True
    If Not IsEmpty(result) Then
        For k = 1 To UBound(result)
            Debug.Print result(k)
        Next k
    End If
End Sub
 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom