Option Explicit
'
Sub ScrapeAllSheetNamesFromWorkbook()
' ' Works with .xlsx & .xlsm files
Dim tbl As Object
Dim SheetNamesList As Object
Dim conexion As Object, objCat As Object
Dim LastUsedColumnInRowA As String
Dim LastUsedColumnInRowAPlus1 As Long
Dim SourceSheetName As String
Dim UserSelectedFile As String
'
Do While UserSelectedFile <> "False"
UserSelectedFile = Application.GetOpenFilename("Excel workbooks (*.xls*), *.xls*") ' ask user for file to get sheet names from
'
If UserSelectedFile = "False" Then Exit Sub ' If User exited then exit this sub
'
Set SheetNamesList = CreateObject("System.Collections.ArrayList") ' Create SheetNamesList
'
Set conexion = CreateObject("ADODB.CONNECTION")
Set objCat = CreateObject("ADOX.Catalog")
Set tbl = CreateObject("ADOX.Table")
'
conexion.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & UserSelectedFile & "; Extended Properties=""Excel 12.0; HDR=YES"";"
'
Set objCat.ActiveConnection = conexion
'
For Each tbl In objCat.Tables ' Establish tbl loop to get sheet names
SourceSheetName = tbl.Name ' Save SourceSheetName
SourceSheetName = Replace(SourceSheetName, "'", "") ' Remove 's from SourceSheetName
SourceSheetName = Replace(SourceSheetName, "$", "") ' Remove $ from end of SourceSheetName
'
SheetNamesList.Add SourceSheetName ' Append SourceSheetName to SheetNamesList
Next ' Loop back for next sheet name
'
LastUsedColumnInRowA = Split(Cells(1, Cells(1, Columns.Count).End(xlToLeft).Column).Address, "$")(1) ' Returns column letter
'
Range(LastUsedColumnInRowA & "1") = UserSelectedFile ' Display workbook name to sheet
'
LastUsedColumnInRowAPlus1 = Cells(1, Columns.Count).End(xlToLeft).Column + 1 ' Returns a column #
'
Cells(1, LastUsedColumnInRowAPlus1).Resize(1, SheetNamesList.Count).Value = SheetNamesList.ToArray ' Display SheetNamesList to sheet horizontally
Loop
'
' Code CleanUp
conexion.Close
Set objCat = Nothing
Set conexion = Nothing
End Sub