![]()
Sub test() Dim myDir As String, fn As String, i As Long, s(1) Dim cn As Object, rs As Object, x As Long Const wsName As String = "owssvr" With Application.FileDialog(msoFileDialogFolderPicker) If .Show Then myDir = .SelectedItems(1) & "\" End With If myDir = "" Then Exit Sub fn = Dir(myDir & "*.xlsx") Set cn = CreateObject("ADODB.Connection") Set rs = CreateObject("ADODB.Recordset") cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & myDir & fn & ";Extended Properties=""Excel 12.0;""" With Sheets("expected output") .[a1].CurrentRegion.ClearContents s(0) = Filter(Sheets("Column header").[transpose(if(a1:a1000<>"",a1:a1000))], False, 0) .[a1].Resize(, UBound(s(0)) + 1) = s(0) Do While fn <> "" s(1) = Cols("'" & myDir & "[" & fn & "]" & wsName & "'", s(0)) If s(1) <> "" Then rs.Open "Select " & s(1) & " From " & _ "`Excel 12.0;DataBase=" & myDir & fn & "`.`" & wsName & "$`;", cn x = .Evaluate("max(if(" & .[a1].Address & "<>"""",row(" & .[a1].CurrentRegion.Address & ")))") .Range("a" & x + 1).CopyFromRecordset rs rs.Close End If fn = Dir Loop End With End Sub Function Cols(fn, s) As String Dim e, x, flg As Boolean If IsError(ExecuteExcel4Macro(fn & "!r1c1")) Then Exit Function For Each e In s x = ExecuteExcel4Macro("match(""" & e & """," & fn & "!r1:r1,0)") If IsError(x) Then Cols = Cols & ", Null" Else Cols = Cols & ", `" & Replace(e, ".", "#") & "`": flg = True End If Next If Not flg Then Exit Function If InStr(Cols, "`") = 3 Then Cols = Mid$(Cols, 3) Else Cols = Mid$(Cols, 2) End Function
Bookmarks