Thanks, Norie. I just read about that and I also revised the code. Here is the initial sub:
Sub ListFilesInFolders()

    Dim strPath As String
    Dim sht As Worksheet
    Dim LastRow As Long
    
    
        Range("A:C").ClearContents
        Range("A1").Value = "Folder Name"
        Range("B1").Value = "File Name"
        Range("C1").Value = "File Short Path"
        Range("D1").Value = "File Type"
        Range("A1").Select
        
        strPath = GetFolder
        
        Dim OBJ As Object, Folder As Object, File As Object
        
        Set OBJ = CreateObject("Scripting.FileSystemObject")
        Set Folder = OBJ.GetFolder(strPath)
        
        Call ListFiles(Folder)
        
        Dim SubFolder As Object
        
        For Each SubFolder In Folder.SubFolders
            Call ListFiles(SubFolder)
            Call GetSubFolders(SubFolder)
        Next SubFolder

End Sub
The relative functions:
Sub GetSubFolders(ByRef SubFolder As Object)

Dim FolderItem As Object
On Error Resume Next
For Each FolderItem In SubFolder.SubFolders
    Call ListFiles(FolderItem)
    Call GetSubFolders(FolderItem)
Next FolderItem

End Sub

Function GetFolder() As String
    Dim fldr As FileDialog
    Dim sItem As String
    Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
    With fldr
        .Title = "Select a Folder"
        .AllowMultiSelect = False
        .InitialFileName = Application.DefaultFilePath
        If .Show <> -1 Then GoTo NextCode
        sItem = .SelectedItems(1)
    End With
NextCode:
    GetFolder = sItem
    Set fldr = Nothing
End Function