Lấy danh sách tên file có trong 1 thư mục

Liên hệ QC

anhtuan1066

Thành viên gạo cội
Tham gia
10/3/07
Bài viết
5,802
Được thích
6,905
- Ko biết chủ đề này đã có chưa (Search ko thấy)
- Ko biết chủ đề này đặt ở đây có hợp lý ko? (nếu ko hợp, nhờ Mod chuyển dùm)
----------------------------------------------------------------------
Đây là 2 đoạn code khá đơn giãn, thích hợp cho những bạn mới tiếp cận với VBA
1> Lấy danh sách tên các file có trong thư mục hiện hành (thư mục chứa file Excel mà ta đang chạy)
PHP:
Option Explicit
Sub SeachFiles1()
  Dim i As Long, MyDir As String
  Range("A1").CurrentRegion.Offset(1).ClearContents
  MyDir = ThisWorkbook.Path
  With Application.FileSearch
    '.SearchSubFolders = True    '<--- Tim ca trong thu muc con
    .LookIn = MyDir              '<--- Tim trong thu muc này
    .Filename = "*.*"            '<--- Kieu file can tìm
    If .Execute() > 0 Then
      For i = 1 To .FoundFiles.Count
        [A65536].End(xlUp).Offset(1) = Replace(.FoundFiles(i), MyDir & "\", "")
      Next i
    End If
    MsgBox .FoundFiles.Count & " files found."
  End With
End Sub
Nếu cho đoạn .SearchSubFolders = True vào luôn thì nó sẽ tìm luôn trong các thư mục con
2> Lấy danh sách tên file trong 1 thư mục nào đó tùy ta chọn
PHP:
Option Explicit
Sub SeachFiles2()
  Dim i As Long
  Range("A1").CurrentRegion.Offset(1).ClearContents
  With Application.FileDialog(3)
    .AllowMultiSelect = True: .Show
    For i = 1 To .SelectedItems.Count
      [A65536].End(xlUp).Offset(1) = .SelectedItems(i)
    Next i
    MsgBox .SelectedItems.Count & " files Selected "
  End With
End Sub
Đã có hướng dẩn trong file, các bạn có thể từ đây tùy biến theo ý muốn! Chẳng hạn tạo thêm Hyperlink hay gì gì đó
2 đoạn code này đều có trong mục Help của Excel VBA, tôi chỉ chỉnh sửa lại đôi chút! Các bạn cứ bôi đen chử FileSearch hoặc FileDialog rồi bấm F1 sẽ thấy
Lưu ý: Đoạn code 1 ko hổ trợ Excel 2007 (đơn giãn vì nó chả biết Application.FileSearch nghĩa là cái gì)
 

File đính kèm

  • SearchFiles_01.xls
    28 KB · Đọc: 1,640
Lần chỉnh sửa cuối:
Mình cũng bổ xung thêm 1 sự lựa chọn:

1/Liệt kê toàn bộ các thư mục có trong Path chỉ định:

Sub ShowFolderList()
Myfolder = "C:\WINDOWS"


Dim fs, f, f1, s, sf
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFolder(Myfolder)
Set sf = f.SubFolders
For Each f1 In sf
s = s & f1.Name
s = s & vbCrLf
Next
MsgBox s
End Sub
2/Liệt kê tất cả các File có trong Path chỉ định:

Sub ShowFileList()
MyFolder = "C:\WINDOWS"
Dim fs, f, f1, fc, s
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFolder(MyFolder)
Set fc = f.Files
For Each f1 In fc
s = s & f1.Name
s = s & vbCrLf
Next
MsgBox s

End Sub
 

File đính kèm

  • Xem Thu Muc.xls
    24 KB · Đọc: 1,062
Lần chỉnh sửa cuối:
Upvote 0
Mình cũng bổ xung thêm 1 sự lựa chọn:

1/Liệt kê toàn bộ các thư mục có trong Path chỉ định:



2/Liệt kê tất cả các File có trong Path chỉ định:
Cãm ơn anh Sealand!
Có điều code này thấy ngắn gọn thật nhưng chẳng đơn giãn tí nào! (ít nhất nó cũng khó hiểu hơn mấy đoạn "củ chuối" em trình bày ở trên)
Để hiểu được nó, mấy bạn lính mới chắc còn phải vò đầu bứt tóc nhiều lần (trong đó chắc chắn có em)
Hi... hi...
 
Upvote 0
Bạn đừng so sánh làm mình buồn, vì chính bạn là 1 trong những người mình ngưỡng mộ nhất từ khi gia nhập diễn đàn này. Và cũng khó so sánh, vì code của mình là code mãu trong Help của Microsoft mà. Mình muốn tham gia thêm để tất cả các bạn khi cần mà không nhớ thì có thể tìm thấy ở đây mà thôi. Mong sao Topic đem lại nhiều lợi ích cho mọi người.
Mong luôn được sự trợ giúp của bạn.
Thân Sealand.
 
Upvote 0
Lần chỉnh sửa cuối:
Upvote 0
Dựa vào code ở bài #1, tôi làm tiếp thí nghiệm như sao:

1> Code ở trong sheet
PHP:
Private Sub Com1_Click()
  UserForm1.Show
End Sub
--------------
2> Code trong UserForm
PHP:
Private Sub Com2_Click()
 Dim i As Long, MyDir As String, FName As String
 MyDir = ThisWorkbook.Path
 ListBox1.Clear
 With Application.FileSearch
   .LookIn = MyDir
   .FileName = "*.xls"
   If .Execute() > 0 Then
     For i = 1 To .FoundFiles.Count
       FName = Replace(.FoundFiles(i), MyDir & "\", "")
       If FName <> ThisWorkbook.Name Then
         ListBox1.AddItem FName
       End If
     Next
   End If
 End With
End Sub
PHP:
Private Sub Com3_Click()
  ThisWorkbook.Activate
  Unload Me
End Sub

PHP:
Private Sub ListBox1_Click()
  Workbooks.Open FileName:=ThisWorkbook.Path & "\" & ListBox1.Value
End Sub

Thí nghiệm trên lấy toàn bộ file .xls cho vào ListBox. Khi ta chọn vào 1 Item trong ListBox thì nó sẽ mở file đó
Tuy nhiên tôi rất ngạc nhiên: Khi mở file bằng cách chọn vào ListBox, 1 vài file trong đó có Macro, nhưng lại thấy chẳng cảnh báo gì
Vậy là sao?
Tôi đang có ý tưởng điều khiển các file con bằng 1 file chủ, chỉ cho phép người dùng thao tác trên file chủ, như vậy dù không muốn thì macro cũng đã được Enable
Các bạn nghĩ sao về hiện tượng này?
 

File đính kèm

  • SearchFiles_ByUserForm.xls
    32 KB · Đọc: 712
Upvote 0
Thí nghiệm trên lấy toàn bộ file .xls cho vào ListBox. Khi ta chọn vào 1 Item trong ListBox thì nó sẽ mở file đó
Tuy nhiên tôi rất ngạc nhiên: Khi mở file bằng cách chọn vào ListBox, 1 vài file trong đó có Macro, nhưng lại thấy chẳng cảnh báo gì
Vậy là sao?
Tôi đang có ý tưởng điều khiển các file con bằng 1 file chủ, chỉ cho phép người dùng thao tác trên file chủ, như vậy dù không muốn thì macro cũng đã được Enable
Các bạn nghĩ sao về hiện tượng này?


Những file khác được mở sau, trong khi UserForm còn mở. Do đó, theo em nghĩ, chức năng Enable của Macro sẽ tự động mở!

Anh hãy thử với code mở file sau để thấy sự khác biệt! Mục đích code này là tạo sự riêng biệt giữa hai file excel.
[highlight=vb]
Private Sub ListBox1_Click()
Dim myFile, myPath
myPath = ThisWorkbook.Path & "\" & ListBox1.Value
myFile = Shell("C:\Program Files\Microsoft Office\Office11\Excel.exe " & myPath, vbNormalFocus)
'Workbooks.Open FileName:=ThisWorkbook.Path & "\" & ListBox1.Value
End Sub
[/highlight]
 
Lần chỉnh sửa cuối:
Upvote 0
- Ko biết chủ đề này đã có chưa (Search ko thấy)
- Ko biết chủ đề này đặt ở đây có hợp lý ko? (nếu ko hợp, nhờ Mod chuyển dùm)
----------------------------------------------------------------------
Đây là 2 đoạn code khá đơn giãn, thích hợp cho những bạn mới tiếp cận với VBA
1> Lấy danh sách tên các file có trong thư mục hiện hành (thư mục chứa file Excel mà ta đang chạy)
PHP:
Option Explicit
Sub SeachFiles1()
  Dim i As Long, MyDir As String
  Range("A1").CurrentRegion.Offset(1).ClearContents
  MyDir = ThisWorkbook.Path
  With Application.FileSearch
    '.SearchSubFolders = True    '<--- Tim ca trong thu muc con
    .LookIn = MyDir              '<--- Tim trong thu muc này
    .Filename = "*.*"            '<--- Kieu file can tìm
    If .Execute() > 0 Then
      For i = 1 To .FoundFiles.Count
        [A65536].End(xlUp).Offset(1) = Replace(.FoundFiles(i), MyDir & "\", "")
      Next i
    End If
    MsgBox .FoundFiles.Count & " files found."
  End With
End Sub
Nếu cho đoạn .SearchSubFolders = True vào luôn thì nó sẽ tìm luôn trong các thư mục con
2> Lấy danh sách tên file trong 1 thư mục nào đó tùy ta chọn
PHP:
Option Explicit
Sub SeachFiles2()
  Dim i As Long
  Range("A1").CurrentRegion.Offset(1).ClearContents
  With Application.FileDialog(3)
    .AllowMultiSelect = True: .Show
    For i = 1 To .SelectedItems.Count
      [A65536].End(xlUp).Offset(1) = .SelectedItems(i)
    Next i
    MsgBox .SelectedItems.Count & " files Selected "
  End With
End Sub
Đã có hướng dẩn trong file, các bạn có thể từ đây tùy biến theo ý muốn! Chẳng hạn tạo thêm Hyperlink hay gì gì đó
2 đoạn code này đều có trong mục Help của Excel VBA, tôi chỉ chỉnh sửa lại đôi chút! Các bạn cứ bôi đen chử FileSearch hoặc FileDialog rồi bấm F1 sẽ thấy
Lưu ý: Đoạn code 1 ko hổ trợ Excel 2007 (đơn giãn vì nó chả biết Application.FileSearch nghĩa là cái gì)

Bác Anh Tuấn giúp e thêm tí:
Sau khi e bấm vào nút Search File 1 nó sẽ liệt kê toàn bộ danh sách tên file trong thư mục. E muốn danh sách đó là hyperlink có được ko bác? Tức là khi e bấm vào tên file trong list nó sẽ mở đc file đó ra. Bác giúp e với nhé
Thanks.
 
Upvote 0
Mình cũng bổ xung thêm 1 sự lựa chọn:

1/Liệt kê toàn bộ các thư mục có trong Path chỉ định:

2/Liệt kê tất cả các File có trong Path chỉ định:
Sao em click vào xem, liệt kê ra hết các file rồi mà không copy được danh sách các file? Cho em hỏi em muốn save lại danh sách file dưới dạng txt hoặc xsl thì làm sao?
 
Upvote 0
Cái chủ đề này dường như giống giống với "núp lùm" em đang gặp...
Em cần tìm một đoạn code dạng như sau ( theo 2 bước ):
1/ Search contain trong 1 thư mục ( file có dạng *.pdf )
2/ Sau khi thấy file chứa ký tự như mong muốn sẽ rename theo tên có sẵng.
VD: Search trong C:\Users\NDK nếu có file pdf nào chứa chữ 123 sẽ rename thành "Invoice No.123.pdf"
Các tiền bối hổ trợ zùm em... Em tìm wài trong Google mà cũng không thấy.
Xin đa tạ... Chúc mọi người buổi tối zui zẻ !!!
 
Upvote 0
Cái chủ đề này dường như giống giống với "núp lùm" em đang gặp...
Em cần tìm một đoạn code dạng như sau ( theo 2 bước ):
1/ Search contain trong 1 thư mục ( file có dạng *.pdf )
2/ Sau khi thấy file chứa ký tự như mong muốn sẽ rename theo tên có sẵng.
VD: Search trong C:\Users\NDK nếu có file pdf nào chứa chữ 123 sẽ rename thành "Invoice No.123.pdf"
Các tiền bối hổ trợ zùm em... Em tìm wài trong Google mà cũng không thấy.
Xin đa tạ... Chúc mọi người buổi tối zui zẻ !!!

Tìm 1 file nào đó rồi rename thành tên khác ta dùng Scripting.FileSystemObject là xong!
Ví dụ thế này:
Mã:
Sub Main()
  Dim FSO As Object
  Dim OldFile As String, NewFile As String
  OldFile = "[COLOR=#ff0000]D[/COLOR]:\Users\NDK\123.pdf"
  NewFile = "[COLOR=#ff0000]D[/COLOR]:\Users\NDK\Invoice No.123.pdf"
  Set FSO = CreateObject("Scripting.FileSystemObject")
  If FSO.FileExists(OldFile) Then
    If Not FSO.FileExists(NewFile) Then
      FSO.MoveFile OldFile, NewFile
    Else
      MsgBox "File '" & NewFile & "' dang ton tai!"
    End If
  Else
    MsgBox "File '" & OldFile & "' không ton tai!"
  End If
End Sub
Lưu ý rằng: Với Windows 7, việc thao tác copy, xóa, đổi tên file, folder nằm trên ổ C (ổ đĩa chứa HĐH) sẽ không dễ thực hiện vì vướng phải cơ chế bảo vệ (UAC)
 
Upvote 0
Tìm 1 file nào đó rồi rename thành tên khác ta dùng Scripting.FileSystemObject là xong!
Ví dụ thế này:
Mã:
Sub Main()
  Dim FSO As Object
  Dim OldFile As String, NewFile As String
  OldFile = "[COLOR=#ff0000]D[/COLOR]:\Users\NDK\123.pdf"
  NewFile = "[COLOR=#ff0000]D[/COLOR]:\Users\NDK\Invoice No.123.pdf"
  Set FSO = CreateObject("Scripting.FileSystemObject")
  If FSO.FileExists(OldFile) Then
    If Not FSO.FileExists(NewFile) Then
      FSO.MoveFile OldFile, NewFile
    Else
      MsgBox "File '" & NewFile & "' dang ton tai!"
    End If
  Else
    MsgBox "File '" & OldFile & "' không ton tai!"
  End If
End Sub
Lưu ý rằng: Với Windows 7, việc thao tác copy, xóa, đổi tên file, folder nằm trên ổ C (ổ đĩa chứa HĐH) sẽ không dễ thực hiện vì vướng phải cơ chế bảo vệ (UAC)

Dạ. Em xin đa tạ anh NDU !!!...
Em sẽ lưu ý vụ ổ C và cho các em nó vào nằm trong ổ D cho ổn...
Have a nice day ALL !!!

Ồ... sau khi reply thì mới thấy có gì đó không ổn anh ơi...
Ý em muốn là search text contain trong files chứ không phải search tìm file name. Vì cơ chế trong win7 nó cho search contain luôn anh ơi. Cái text "123" nó nằm trong file, chứ không phải là tên file.
Cái zụ rename tên file cũ thành tên file mới thì em học trên diễn đàn làm được rồi...
Mong anh hổ trợ thêm một chút nữa... hj... Thanks
 
Lần chỉnh sửa cuối:
Upvote 0
Ồ... sau khi reply thì mới thấy có gì đó không ổn anh ơi...
Ý em muốn là search text contain trong files chứ không phải search tìm file name. Vì cơ chế trong win7 nó cho search contain luôn anh ơi. Cái text "123" nó nằm trong file, chứ không phải là tên file.
Cái zụ rename tên file cũ thành tên file mới thì em học trên diễn đàn làm được rồi...
Mong anh hổ trợ thêm một chút nữa... hj... Thanks

Tìm text trong file, lại là file PDF rồi sửa thành cái khác nữa chứ... Ẹc... Ẹc... e rằng không phải chuyện dễ
(Với file PDF, bạn mở file và tự sửa bằng tay text này thành text khác đã là chuyện khó nhai rồi)
 
Upvote 0
Tìm text trong file, lại là file PDF rồi sửa thành cái khác nữa chứ... Ẹc... Ẹc... e rằng không phải chuyện dễ
(Với file PDF, bạn mở file và tự sửa bằng tay text này thành text khác đã là chuyện khó nhai rồi)

Dạ. Em biết là khó nên mấy tháng nay em lang thang trên mạng mà không tìm ra. Em thấy bên A-pdf họ có cái engine gì đó làm được...
Mà trình độ em có hạn nên không ngâm cứu ra. Anh qua cái link bên dưới ngâm cứu thử xem bằng VBA mình làm được hông nha.
http://www.a-pdf.com/faq/how-to-set...s-which-contain-split-characters-in-names.htm
 
Upvote 0
Chào mọi người. Em có một vấn đề nhờ anh, chị, em giúp dùm.
Em cần so sánh tên của một cột( VD: Cột A có: 123, 124, 125...) với tên của các thư mục có tên tương tự trong thư mục nhất định( VD: Trong ổ C:\, có các thư mục 123, 124, 125...). Em muốn có công cụ để so sánh và tìm ra tên nào trong cột A đã dc tạo thư mục tương ứng trong ổ C:\ hay chưa.
Ý tưởng của em là liệt kê ra tất cả các thư mục trong ổ chỉ định vào excel sau đó sẽ so sanh nó với cột A và count nó. Nhưng em tìm hiểu vẫn không biết cách nào liệt kê tên các thư mục ra excel. Ở trên có bác kia liệt kê ra msgbox nhưng như vậy không so sánh dc. Mong cao nhân giúp em với. Cảm ơn rất nhiều ạ.
 
Upvote 0
Chào mọi người. Em có một vấn đề nhờ anh, chị, em giúp dùm.
Em cần so sánh tên của một cột( VD: Cột A có: 123, 124, 125...) với tên của các thư mục có tên tương tự trong thư mục nhất định( VD: Trong ổ C:\, có các thư mục 123, 124, 125...). Em muốn có công cụ để so sánh và tìm ra tên nào trong cột A đã dc tạo thư mục tương ứng trong ổ C:\ hay chưa.
Ý tưởng của em là liệt kê ra tất cả các thư mục trong ổ chỉ định vào excel sau đó sẽ so sanh nó với cột A và count nó. Nhưng em tìm hiểu vẫn không biết cách nào liệt kê tên các thư mục ra excel. Ở trên có bác kia liệt kê ra msgbox nhưng như vậy không so sánh dc. Mong cao nhân giúp em với. Cảm ơn rất nhiều ạ.
Có bài mà bạn không tìm
Danh sách File và Thư mục
 
Upvote 0
Web KT
Back
Top Bottom