Hola! exorton.
El primer código mostrado -probablemente- lo tuvieses en el módulo de una hoja que NO era Hoja4, y de allí el error.
De todas formas ibas a tener problemas con:
Worksheets("Hoja4").Cells(b, 0)
pues no existe la fila "0".
_______________
El segundo código también es problemático en varias partes. Por ejemplo:
Dim Ficha As Integer (defines Ficha como un número entero)
Ficha = Sheets(i).Name (pero lo usas como un String)
Además no escribes en la columna A el nombre de la hoja de extracción.
_______________
Analiza esos detalles y analiza -también- una alternativa como:
Código PHP:
Sub ListadoDeTablas()
Dim i As Integer, actRow As Long
Application.ScreenUpdating = False
For i = 1 To Sheets.Count - 4
With Sheets(i)
With .Range(.[d9], .Cells(.[d9].End(xlDown).Row, .[d9].End(xlToRight).Column))
actRow = 1 + Sheets("Hoja4").Cells(Rows.Count, "B").End(xlUp).Row
.Copy Sheets("Hoja4").Cells(actRow, "B")
Sheets("Hoja4").Cells(actRow, "A").Resize(.Rows.Count) = Sheets(i).Name
End With
End With
Next
Application.ScreenUpdating = True
End Sub
Este código -lo ubiques donde lo ubiques- debería funcionar adecuadamente.
¿Comentas, por favor?
Saludos, Cacho R.