Excel Macro listing all files within the contained

2019-08-06 02:46发布

问题:

I have a macro already however i need it to also hyperlink the files in column U along with the file list in column A.

Here is my code right now, how can i add the hyperlinking feature? i don't mind if I have to add another module either.

Sub ListFilesAndSubfolders()

  Dim FSO As Object
  Dim rsFSO As Object
  Dim baseFolder As Object
  Dim file As Object
  Dim folder As Object
  Dim row As Integer
  Dim name As String

  'Get the current folder
  Set FSO = CreateObject("scripting.filesystemobject")
  Set baseFolder = FSO.GetFolder(ThisWorkbook.Path)
  Set FSO = Nothing

  'Get the row at which to insert
  row = Range("A65536").End(xlUp).row + 1

  'Create the recordset for sorting
  Set rsFSO = CreateObject("ADODB.Recordset")
  With rsFSO.Fields
    .Append "Name", 200, 200
    .Append "Type", 200, 200
  End With
  rsFSO.Open

  ' Traverse the entire folder tree
  TraverseFolderTree baseFolder, baseFolder, rsFSO
  Set baseFolder = Nothing

  'Sort by type and name
  rsFSO.Sort = "Type ASC, Name ASC "
  rsFSO.MoveFirst

  'Populate the first column of the sheet
  While Not rsFSO.EOF
    name = rsFSO("Name").Value
    If (name <> ThisWorkbook.name) Then
      Cells(row, 1).Formula = name
      row = row + 1
    End If
    rsFSO.MoveNext
  Wend

  'Close the recordset
  rsFSO.Close
  Set rsFSO = Nothing

End Sub

Private Sub TraverseFolderTree(ByVal parent As Object, ByVal node As Object, ByRef rs As Object)

  'List all files
  For Each file In node.Files

    Dim name As String
    name = Mid(file.Path, Len(parent.Path) + 2)

    rs.AddNew
    rs("Name") = name
    rs("Type") = "FILE"
    rs.Update
  Next

  'List all folders
  For Each folder In node.SubFolders
    TraverseFolderTree parent, folder, rs
  Next

End Sub

prompt replies would be very welcome as my project deadline is only a few weeks off.

thank you!

回答1:

You'll have to add the file.Path to your record set and then when you want to link them in your loop try something like this:

ActiveSheet.Hyperlinks.Add Anchor:=Cells(row, 1), Address:=file.Path, TextToDisplay:=name

Edit

After rs.AddNew add this line:

rs("Path") = file.Path

Add one more append:

With rsFSO.Fields
  .Append "Path", 200, 200
  .Append "Name", 200, 200
  .Append "Type", 200, 200
End With

Now change this part of your code like this:

  While Not rsFSO.EOF
    name = rsFSO("Name").Value
    path = rsFSO("Path").Value
    If (name <> ThisWorkbook.name) Then
      ActiveSheet.Hyperlinks.Add Anchor:=Cells(row, 1), Address:=path, TextToDisplay:=name
      row = row + 1
    End If
    rsFSO.MoveNext
  Wend

You might have to add the definition at the top of your code like this:

dim path as string