Search Directory Structure in Access VBA

J

joseph micheli

I would like to search a directory structure for all .mdb files and write the
file path of each one to a table. I want to start at the highest level of
the drive and search all subdirectories without specifying the subdirectory
names. Does anyone have any suggestions?

Thanks.
 
A

Albert D. Kallal

This code will work...

Sub dirTest()

Dim dlist As New Collection
Dim startDir As String
Dim i As Integer
Dim strType As String


startDir = "C:\Documents and Settings\Albert\My Documents\"
strType = "*.mdb"

Call FillDir(startDir, dlist, strType)

MsgBox "there are " & dlist.Count & " in the dir"

' lets printout the stuff into debug window for a test

For i = 0 To dlist.Count
Debug.Print dlist(i)
Next i


End Sub


Sub FillDir(startDir As String, dlist As Collection, sType As String)

' build up a list of files, and then
' add add to this list, any additinal
' folders

Dim strTemp As String
Dim colFolders As New Collection
Dim vFolderName As Variant

strTemp = Dir(startDir & sType)

Do While strTemp <> ""
dlist.Add startDir & strTemp
strTemp = Dir
Loop

' now build a list of additional folders
strTemp = Dir(startDir, vbDirectory)

Do While strTemp <> ""
If GetAttr(startDir & strTemp) = vbDirectory Then
If (strTemp <> "..") And (strTemp <> ".") Then
colFolders.Add strTemp
End If
End If
strTemp = Dir
Loop

' now process each folder (recursion)
For Each vFolderName In colFolders
Call FillDir(startDir & vFolderName & "\", dlist, sType)
Next vFolderName

End Sub


Of couse, you need to change:

For i = 1 To dlist.Count
Debug.Print dlist(i)
Next i
to;
dim rstData as dao.recordset
set rstData = currentdb.OpenRecordSet("tblFiles")
for i = 1 to dlist.count
rstData.Addnew
rstData!MyFile = dlist(i)
rstData.Update
next i
rstData.Close

The above example uses recursion...and will "walk" all directories below the
one you start.....
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top