Lấy danh mục tên file và tên sheet của file excel đang đóng

Liên hệ QC

Nhattanktnn

Thành viên gắn bó
Tham gia
11/11/16
Bài viết
3,154
Được thích
4,125
Donate (Momo)
Donate
Giới tính
Nam
Cái code nào, ở bài số mấy GẦN NHẤT với yêu cầu của bạn thì nêu ra đây.
Hy vọng sẽ có người chỉ cho cách chỉnh sửa.

Nếu bạn khong nếu ra nổi cái gần nhất thì nên quên đi. Trình chưa đủ.
 
Upvote 0
Cái code nào, ở bài số mấy GẦN NHẤT với yêu cầu của bạn thì nêu ra đây.
Hy vọng sẽ có người chỉ cho cách chỉnh sửa.

Nếu bạn khong nếu ra nổi cái gần nhất thì nên quên đi. Trình chưa đủ.
Code ở bài #10 ra kết quả gần nhất ạ, nhưng vấn đề là em muốn ra chi tiết trên file excel chứ không phải hiển thị trên form như vậy, vì em còn căn cứ vào đó để link lấy dữ liệu nữa ạ, em đính kèm luôn file kết quả mong muốn để bác dễ hình dung
Bài đã được tự động gộp:

Bạn chuyển file lên đi. Nói rõ yêu cầu mình làm cho
Mình gửi file lên, bạn xem giúp mình nhé. Chân thành cảm ơn
 

File đính kèm

  • Xuất tên file và tên sheet.xlsx
    9 KB · Đọc: 9
Lần chỉnh sửa cuối:
Upvote 0
Code ở bài #10 ra kết quả gần nhất ạ, nhưng vấn đề là em muốn ra chi tiết trên file excel chứ không phải hiển thị trên form như vậy, vì em còn căn cứ vào đó để link lấy dữ liệu nữa ạ, em đính kèm luôn file kết quả mong muốn để bác dễ hình dung
Bài đã được tự động gộp:


Mình gửi file lên, bạn xem giúp mình nhé. Chân thành cảm ơn
Thử code cùi bắp này xem sao:
Mã:
Sub laytenfilevasheet()
Dim Fdl As FileDialog
Dim Fso As Object, FObj As Object
Dim Wbcu As Workbook, Wbmoi As Workbook, Ws As Worksheet
Dim Lr As Long

Set Fdl = Application.FileDialog(msoFileDialogFolderPicker)
Set Fso = CreateObject("Scripting.FileSystemObject")
Set Wbcu = ThisWorkbook

With Application
    .DisplayAlerts = False
    .ScreenUpdating = False
    .AskToUpdateLinks = False
End With
If Fdl.Show <> 0 Then
    For Each FObj In Fso.GetFolder(Fdl.SelectedItems(1)).Files
        If Fso.GetExtensionName(FObj) Like "xls*" Then
            With Workbooks.Open(FObj)
                Set Wbmoi = ActiveWorkbook
                For Each Ws In Wbmoi.Worksheets
                    With Wbcu.Sheets("sheet1")
                        Lr = .Range("A50000").End(xlUp).Row + 1
                        .Range("A" & Lr).Value = Wbmoi.Name
                        .Range("B" & Lr).Value = Ws.Name
                    End With
                Next Ws
                .Close False
            End With
        End If
    Next FObj
End If

With Application
    .DisplayAlerts = True
    .ScreenUpdating = True
    .AskToUpdateLinks = True
End With
End Sub
 
Upvote 0
Thử code cùi bắp này xem sao:
Mã:
Sub laytenfilevasheet()
Dim Fdl As FileDialog
Dim Fso As Object, FObj As Object
Dim Wbcu As Workbook, Wbmoi As Workbook, Ws As Worksheet
Dim Lr As Long

Set Fdl = Application.FileDialog(msoFileDialogFolderPicker)
Set Fso = CreateObject("Scripting.FileSystemObject")
Set Wbcu = ThisWorkbook

With Application
    .DisplayAlerts = False
    .ScreenUpdating = False
    .AskToUpdateLinks = False
End With
If Fdl.Show <> 0 Then
    For Each FObj In Fso.GetFolder(Fdl.SelectedItems(1)).Files
        If Fso.GetExtensionName(FObj) Like "xls*" Then
            With Workbooks.Open(FObj)
                Set Wbmoi = ActiveWorkbook
                For Each Ws In Wbmoi.Worksheets
                    With Wbcu.Sheets("sheet1")
                        Lr = .Range("A50000").End(xlUp).Row + 1
                        .Range("A" & Lr).Value = Wbmoi.Name
                        .Range("B" & Lr).Value = Ws.Name
                    End With
                Next Ws
                .Close False
            End With
        End If
    Next FObj
End If

With Application
    .DisplayAlerts = True
    .ScreenUpdating = True
    .AskToUpdateLinks = True
End With
End Sub
Mình thử nhưng không được bạn à, sau khi chạy code thì module để insert code cũng mất luôn
 
Upvote 0
Mình thử nhưng không được bạn à, sau khi chạy code thì module để insert code cũng mất luôn
Sửa lại như dưới đây nhé:
Mã:
Sub laytenfilevasheet()
Dim Fdl As FileDialog
Dim Fso As Object, FObj As Object
Dim Wbcu As Workbook, Wbmoi As Workbook, Ws As Worksheet
Dim Lr As Long

Set Fdl = Application.FileDialog(msoFileDialogFolderPicker)
Set Fso = CreateObject("Scripting.FileSystemObject")
Set Wbcu = ThisWorkbook

With Application
    .DisplayAlerts = False
    .ScreenUpdating = False
    .AskToUpdateLinks = False
End With
If Fdl.Show <> 0 Then
    For Each FObj In Fso.GetFolder(Fdl.SelectedItems(1)).Files
        If Fso.GetExtensionName(FObj) Like "xls*" And FObj.Name <> Wbcu.Name Then
  
            With Workbooks.Open(FObj)
                Set Wbmoi = ActiveWorkbook
                For Each Ws In Wbmoi.Worksheets
                    With Wbcu.Sheets("sheet1")
                        Lr = .Range("A50000").End(xlUp).Row + 1
                        .Range("A" & Lr).Value = Wbmoi.Name
                        .Range("B" & Lr).Value = Ws.Name
                    End With
                Next Ws
                .Close False
            End With
        End If
    Next FObj
End If

With Application
    .DisplayAlerts = True
    .ScreenUpdating = True
    .AskToUpdateLinks = True
End With
End Sub
 
Upvote 0
Sửa lại như dưới đây nhé:
Mã:
Sub laytenfilevasheet()
Dim Fdl As FileDialog
Dim Fso As Object, FObj As Object
Dim Wbcu As Workbook, Wbmoi As Workbook, Ws As Worksheet
Dim Lr As Long

Set Fdl = Application.FileDialog(msoFileDialogFolderPicker)
Set Fso = CreateObject("Scripting.FileSystemObject")
Set Wbcu = ThisWorkbook

With Application
    .DisplayAlerts = False
    .ScreenUpdating = False
    .AskToUpdateLinks = False
End With
If Fdl.Show <> 0 Then
    For Each FObj In Fso.GetFolder(Fdl.SelectedItems(1)).Files
        If Fso.GetExtensionName(FObj) Like "xls*" And FObj.Name <> Wbcu.Name Then

            With Workbooks.Open(FObj)
                Set Wbmoi = ActiveWorkbook
                For Each Ws In Wbmoi.Worksheets
                    With Wbcu.Sheets("sheet1")
                        Lr = .Range("A50000").End(xlUp).Row + 1
                        .Range("A" & Lr).Value = Wbmoi.Name
                        .Range("B" & Lr).Value = Ws.Name
                    End With
                Next Ws
                .Close False
            End With
        End If
    Next FObj
End If

With Application
    .DisplayAlerts = True
    .ScreenUpdating = True
    .AskToUpdateLinks = True
End With
End Sub
Giờ xuất ra danh sách được rồi, mình test với folder mình đang làm có tới 55 file excel, nhưng nó chỉ chạy tới file 54 và file cuối cùng nó báo lỗi như này, 1 file thì mình làm tay cũng được nhưng nhờ bạn xem lại code giúp mình cho nó hoàn thiện
Lỗi1.PNG
Lỗi2.PNG
 
Upvote 0
và không phải file tạm của Excel
Anh giải thích giúp em "File tạm" của excel là gì? và cách đặt điều kiện cho trường hợp này là gì với ạ?

Thật ra code này còn thiếu điều kiện nữa là file chứa pass cũng bị báo lỗi nữa, em định đặt bẫy lỗi cho phần này những để do không có nhiều thời gian để sửa và cũng là để chủ thớt tự nghiên cứu thêm khi gặp lỗi này.
Bài đã được tự động gộp:

Giờ xuất ra danh sách được rồi, mình test với folder mình đang làm có tới 55 file excel, nhưng nó chỉ chạy tới file 54 và file cuối cùng nó báo lỗi như này, 1 file thì mình làm tay cũng được nhưng nhờ bạn xem lại code giúp mình cho nó hoàn thiện
View attachment 239753
View attachment 239754
có thể file thứ 55 có đặt pass
 
Upvote 0
Anh giải thích giúp em "File tạm" của excel là gì? và cách đặt điều kiện cho trường hợp này là gì với ạ?

Thật ra code này còn thiếu điều kiện nữa là file chứa pass cũng bị báo lỗi nữa, em định đặt bẫy lỗi cho phần này những để do không có nhiều thời gian để sửa và cũng là để chủ thớt tự nghiên cứu thêm khi gặp lỗi này.
Bài đã được tự động gộp:


có thể file thứ 55 có đặt pass
Ồ, đúng là file này có vấn đề, không đặt pass nhưng yêu cầu repair khi mở. vậy giả sử nếu file này nó nằm giữa thì bẫy lỗi bỏ qua chạy sang file khác được không? và kết hợp msgbox chạy được bao nhiêu file để mình dò lại đúng số lượng file trong folder đó chưa?
 
Upvote 0
Upvote 0
Anh giải thích giúp em "File tạm" của excel là gì? và cách đặt điều kiện cho trường hợp này là gì với ạ?

Thật ra code này còn thiếu điều kiện nữa là file chứa pass cũng bị báo lỗi nữa, em định đặt bẫy lỗi cho phần này những để do không có nhiều thời gian để sửa và cũng là để chủ thớt tự nghiên cứu thêm khi gặp lỗi này.
Bài đã được tự động gộp:


có thể file thứ 55 có đặt pass
Excel tạo file tạm lưu các thao tác xử lý, file tạm dùng để phục hồi file làm việc khi excel bị đóng không đúng như cúp điện
File tạm có ký tự đầu tiên là "~"
 
Upvote 0
Mình nghĩ bạn đã biết cách làm thì nên bỏ thêm chút thời gian mà tìm hiểu và tự viết thì tốt hơn
Mã:
Sub laytenfilevasheet()
Dim Fdl As FileDialog
Dim Fso As Object, FObj As Object
Dim Wbcu As Workbook, Wbmoi As Workbook, Ws As Worksheet
Dim Lr As Long, i As Long, k As Long

Set Fdl = Application.FileDialog(msoFileDialogFolderPicker)
Set Fso = CreateObject("Scripting.FileSystemObject")
Set Wbcu = ThisWorkbook

With Application
    .DisplayAlerts = False
    .ScreenUpdating = False
    .AskToUpdateLinks = False
End With
If Fdl.Show <> 0 Then

    For Each FObj In Fso.GetFolder(Fdl.SelectedItems(1)).Files
    i = i + 1
        If Fso.GetExtensionName(FObj) Like "xls*" And FObj.Name <> Wbcu.Name Then
        On Error GoTo Boqualoi:
            With Workbooks.Open(FObj)
            k = k + 1
                Set Wbmoi = ActiveWorkbook
                For Each Ws In Wbmoi.Worksheets
                    With Wbcu.Sheets("sheet1")
                        Lr = .Range("A50000").End(xlUp).Row + 1
                        .Range("A" & Lr).Value = Wbmoi.Name
                        .Range("B" & Lr).Value = Ws.Name
                    End With
                Next Ws
                .Close False
            End With
Boqualoi:
        End If
    Next FObj
End If
MsgBox "Da kiem tra " & k & "/" & i & " file"
With Application
    .DisplayAlerts = True
    .ScreenUpdating = True
    .AskToUpdateLinks = True
End With
End Sub
Vậy thêm như này có được không bạn? Bạn xem qua giúp mình sửa vậy có vấn đề gì không?
 
Upvote 0
Thêm 2 điều kiện để mở file FObj: tên file khác tên file chính, và không phải file tạm của Excel
4.PNG
Đúng là bác HieuCD nhìn xa trông rộng thật, giờ điều kiện với file tạm là như nào vậy bác, em học kiểu chắp vá nên cái biết cái không, tìm google thì chưa tìm ra được
 
Upvote 0
Upvote 0
Bác ấy trả lời rồi mà bạn: File tạm có ký tự đầu tiên là "~" ==> Đặt thêm điều kiệu: left(FObj.Name,1)<>"~"
Thành thật xin lỗi, mình không để ý kỹ! Nãy mình cũng có thấy file tạm có dạng "~$" nên mình đưa nó vào làm điều kiện rồi. cảm ơn bạn nhé
 
Upvote 0
Web KT

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

Back
Top Bottom