Sub test()
Dim myDir$, myList(), x
Const wsName$ = "INVOICES"
myDir = "D:\REPORT\DATA"
On Error Resume Next
x = Dir(myDir, vbDirectory)
On Error GoTo 0
If x = "" Then MsgBox "Wrong path", vbCritical: Exit Sub
myList = SearchFiles(myDir, "*.xls*", 0, myList())
On Error Resume Next
x = UBound(myList)
On Error GoTo 0
If IsEmpty(x) Then MsgBox "No file found": Exit Sub
GetData myList, wsName
End Sub
Sub GetData(myList, wsName$)
Dim i&, ii&, e, f$, x, fn$, n&, a(), t&
For i = 1 To UBound(myList, 2)
e = myList(1, i)
If (UCase$(e) Like "*\PAID*") + (UCase$(e) Like "*\RECEIVED*") Then
n = n + 1: ReDim Preserve a(1 To 5, 1 To n)
a(1, n) = n: fn = myList(2, i)
a(2, n) = Left$(fn, InStrRev(fn, ".") - 1): a(3, n) = myList(3, i)
a(4, n) = 0: a(5, n) = 0
t = 4 + IIf(UCase$(fn) Like "*PAID*", 0, 1)
f = "'" & Left$(e, InStrRev(e, "\")) & "[" & fn & "]" & wsName & "'!"
a(t, n) = ExecuteExcel4Macro("vlookup(""NET""," & f & "C2:c5,4,false)")
End If
Next
With Sheets("files").[a1].CurrentRegion.Offset(1)
.Borders.LineStyle = xlNone
.Font.Bold = False
.Interior.ColorIndex = xlNone
.ClearContents
.Cells(0, 1).Copy .Cells(n + 1, 1)
With .Resize(n)
.Value = Application.Transpose(a)
.Rows(.Rows.Count + 1) = Array("TOTAL", "", "", "=sum(r2c:r[-1]c)", "=sum(r2c:r[-1]c)")
.Resize(.Rows.Count + 1).Columns("c:e").NumberFormatLocal = "#,##0.00;-#,##0.00;-;@"
.Resize(.Rows.Count + 1).Borders.Weight = 2
End With
.Parent.UsedRange.HorizontalAlignment = xlCenter
End With
End Sub
Function SearchFiles(myDir$, myFileName$, n&, myList()) As Variant
Dim fso As Object, myFolder As Object, myFile As Object
Set fso = CreateObject("Scripting.FileSystemObject")
For Each myFile In fso.GetFolder(myDir).Files
If (Not myFile.Name Like "~$*") * (myFile.Name <> ThisWorkbook.Name) _
* (myFile.Name Like myFileName) Then
n = n + 1
ReDim Preserve myList(1 To 3, 1 To n)
myList(1, n) = myDir & "\" & myFile.Name
myList(2, n) = myFile.Name
myList(3, n) = Month(myFile.DateLastModified)
End If
Next
For Each myFolder In fso.GetFolder(myDir).SubFolders
SearchFiles = SearchFiles(myFolder.Path, myFileName, n, myList)
Next
SearchFiles = myList
End Function