Thay thế application.filesearch trong Ofice 2007

Liên hệ QC

Quang_Hải

Thành viên gạo cội
Tham gia
21/2/09
Bài viết
6,070
Được thích
7,994
Nghề nghiệp
Làm đủ thứ
Trong office 2007 không thể sử dụng đươc đối tượng filesearch, mình cố gắng thử dùng code thế này thì liệt kê được các file trong thư mục có chứa tập tin excel nhưng không thể liệt kê được các file trong thư mục khác. Các anh chị có cách nào khác không

Sub filelist()
Fname = Dir("*.*")
Do While Fname <> ""
Cells(r + 1, 1) = Fname
Fname = Dir
r = r + 1
Loop
End Sub
 
Trong office 2007 không thể sử dụng đươc đối tượng filesearch, mình cố gắng thử dùng code thế này thì liệt kê được các file trong thư mục có chứa tập tin excel nhưng không thể liệt kê được các file trong thư mục khác. Các anh chị có cách nào khác không

Sub filelist()
Fname = Dir("*.*")
Do While Fname <> ""
Cells(r + 1, 1) = Fname
Fname = Dir
r = r + 1
Loop
End Sub
Bạn thử code sau

Mã:
Sub Test()
 Dim strPathFile, strFile, strPath As String
 Dim r As Integer
 [COLOR=#ff0000]strPath = "e:\" 'Duong dan can lay ten file[/COLOR]
 strFile = Dir(strPath & "*.xls")
    Do While Len(strFile) > 0
        strPathFile = strPath & strFile
        Cells(r + 1, 1) = strPathFile
        strFile = Dir()
        r = r + 1
    Loop
   
End Sub
 
Upvote 0
Trong office 2007 không thể sử dụng đươc đối tượng filesearch, mình cố gắng thử dùng code thế này thì liệt kê được các file trong thư mục có chứa tập tin excel nhưng không thể liệt kê được các file trong thư mục khác. Các anh chị có cách nào khác không

Sub filelist()
Fname = Dir("*.*")
Do While Fname <> ""
Cells(r + 1, 1) = Fname
Fname = Dir
r = r + 1
Loop
End Sub
Đúng là từ Excel 2007 trở đi, chức năng FileSearch đã bị MS bỏ rồi... Tuy nhiên cũng không nên dùng hàm Dir, nó chẳng làm được gì hay ho đâu ---> Vì nếu phải dùng nó, tôi thà dùng công thức (trong macro4) còn hay hơn!
Chuẩn nhất là dùng FileSystemObject (đã nói nhiều trên diễn đàn rồi)
Hôm nay nhân tiên, tặng bạn 1 cách khác mà tôi thường dùng (dùng lệnh DOS)
Code chỉ có vầy:
Mã:
Function GetListFile(ByVal Folder As String, ByVal Search As String, ByVal InSub As Boolean)
  Dim sComm As String, tmpFile
  On Error GoTo ExitSub
  If Right(Folder, 1) <> "\" Then Folder = Folder & "\"
  Folder = """" & Folder & """"
  With CreateObject("Scripting.FileSystemObject")
    tmpFile = .GetTempName
    sComm = "DIR " & Folder & "*" & Search & "* /ON /B /A-D " & IIf(InSub, "/S", " ") & " >" & tmpFile
    CreateObject("Wscript.Shell").Run "cmd /c " & sComm, 0, True
    GetListFile = Split(.OpenTextFile(tmpFile, 1).ReadAll, vbCrLf)
  End With
  Kill tmpFile
ExitSub:
End Function
Cách dùng xem trong file

Capture.JPG

Xem file
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Bạn thử code sau

Mã:
Sub Test()
 Dim strPathFile, strFile, strPath As String
 Dim r As Integer
 [COLOR=#ff0000]strPath = "e:\" 'Duong dan can lay ten file[/COLOR]
 strFile = Dir(strPath & "*.xls")
    Do While Len(strFile) > 0
        strPathFile = strPath & strFile
        Cells(r + 1, 1) = strPathFile
        strFile = Dir()
        r = r + 1
    Loop
   
End Sub

Cách làm này cũng đã giải quyết được vấn đề mình đang cần, cảm ơn bạn
 
Upvote 0
Đúng là từ Excel 2007 trở đi, chức năng FileSearch đã bị MS bỏ rồi... Tuy nhiên cũng không nên dùng hàm Dir, nó chẳng làm được gì hay ho đâu ---> Vì nếu phải dùng nó, tôi thà dùng công thức (trong macro4) còn hay hơn!
Chuẩn nhất là dùng FileSystemObject (đã nói nhiều trên diễn đàn rồi)
Hôm nay nhân tiên, tặng bạn 1 cách khác mà tôi thường dùng (dùng lệnh DOS)
Code chỉ có vầy:
Mã:
Function GetListFile(ByVal Folder As String, ByVal Search As String, ByVal InSub As Boolean)
  Dim sComm As String, tmpFile
  On Error GoTo ExitSub
  If Right(Folder, 1) <> "\" Then Folder = Folder & "\"
  Folder = """" & Folder & """"
  With CreateObject("Scripting.FileSystemObject")
    tmpFile = .GetTempName
    sComm = "DIR " & Folder & "*" & Search & "* /ON /B /A-D " & IIf(InSub, "/S", " ") & " >" & tmpFile
    CreateObject("Wscript.Shell").Run "cmd /c " & sComm, 0, True
    GetListFile = Split(.OpenTextFile(tmpFile, 1).ReadAll, vbCrLf)
  End With
  Kill tmpFile
ExitSub:
End Function
Cách dùng xem trong file


Xem file

Cách làm của anh thật hay, mình đang nghiên cứu để áp dụng vào nhu cầu thực tế
 
Upvote 0
Cách làm của anh thật hay, mình đang nghiên cứu để áp dụng vào nhu cầu thực tế
Có thể bạn thật sự thây hay (hoặc không) nhưng tôi đoán chưa chắc bạn hiểu được vì sao tôi khuyên bạn không nên dùng hàm DIR
Không riêng gì hàm DIR mà hầu hết các hàm của VB đều có 1 nhược điểm là không hổ trợ Unicode
Thử tưởng tượng file, folder của bạn được người ta đặt tên bằng tiếng Việt có dấu, lúc này bạn chạy code dùng hàm DIR xem nó ra kết quả gì?
Lập trình là phải lường trước những tình huống có thể xảy ra, nếu không sẽ có lúc gặp lỗi đáng tiếc mà chính bản thân cũng không tài nào hiểu được đó là lỗi gì
Vậy đi nha! Từ từ mà cảm nhận
 
Upvote 0
Những gi anh nói thật chính xác. Mình luôn áp dụng những gì anh hướng dẫn và cải tiến lại code đã viết trước đó cho công viêc tốt hơn. Đúng là mình luôn gặp sự cố vơi tiếng việt có dâu. Nhưng chắc phải mất thêm 1 thơi gian dài mới hiểu thấu đáo. Giờ chỉ biết copy code từ diễn đàn về và mò mẫm chỉnh sửa lại để sử dụng thôi. Cảm ơn anh đã chỉ giáo
 
Upvote 0
Những gi anh nói thật chính xác. Mình luôn áp dụng những gì anh hướng dẫn và cải tiến lại code đã viết trước đó cho công viêc tốt hơn. Đúng là mình luôn gặp sự cố vơi tiếng việt có dâu. Nhưng chắc phải mất thêm 1 thơi gian dài mới hiểu thấu đáo. Giờ chỉ biết copy code từ diễn đàn về và mò mẫm chỉnh sửa lại để sử dụng thôi. Cảm ơn anh đã chỉ giáo
Không hiểu cũng không sao, chỉ cần biết áp dụng!
Cú pháp hàm GetListFile là:
GetListFile(Đường dẫn của thư mục, kiểu file muốn lấy, có lấy file trong thư mục con không)
Ví dụ
Arr = GetListFile("D:\Excel, "*.xls", True) ---> Nghĩa là lấy toàn bộ kiểu file xls trong thư mục D:\Excel, bao gồm cả thư mục con... Kết quả cho vào biến Arr
Arr = GetListFile("D:\Software", "*", FALSE) ---> Nghĩa là lấy tất cả các file (bất cứ loại file nào) trong thư mục D:\Software, không bao gồm cả thư mục con... Kết quả cho vào biến Arr
Hàm này sẽ trả về kết quả là 1 mảng chứa các phần tử là đường dẫn của các file ---> Từ mảng kết quả này, bạn muốn làm gì tiếp tùy ý thôi
 
Upvote 0
Web KT

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

Back
Top Bottom