В моем тестировании использование каталога ADOX для получения имен рабочих листов выглядит значительно быстрее, чем открытие экземпляра приложения Excel для перечисления коллекции WorkSheets
.
Public Sub List_WorksheetsAdox(ByVal pWorkBook As String)
Dim cat As Object 'ADOX.Catalog
Dim cn As Object 'ADO.Connection
Dim strConnect As String
Dim tbl As Object 'ADOX.Table
strConnect = "Provider=" & _
CurrentProject.Connection.Provider & ";" & _
"Data Source='" & pWorkBook & "';" & _
"Extended Properties=Excel 8.0;"
Set cn = CreateObject("ADODB.Connection")
cn.Open strConnect
Set cat = CreateObject("ADOX.Catalog")
Set cat.ActiveConnection = cn
For Each tbl In cat.Tables
Debug.Print tbl.Name
Next tbl
Set tbl = Nothing
Set cat = Nothing
cn.Close
Set cn = Nothing
End Sub
Этот подход будет включать знак доллара послеимя каждого листа, которое может быть не тем, что вы хотите.Вы можете легко его удалить.
Я тестировал в Excel 8.0 для своей книги формата xls 2003.Похоже, что для формата Excel 2007 для расширенных свойств потребуется «Excel 12.0».Вы можете найти более подробную информацию на ConnectionStrings.com .
Как и в других ответах, вы захотите сделать что-то более полезное с tbl.Name
, отличным от Debug.Print
it.
Обратите внимание, что при таком подходе будут перечислены как именованные диапазоны, так и рабочие таблицы.Если это проблема для вас, вы можете различить их в зависимости от того, содержит ли имя знак доллара («$») в конце.Листы имеют знак доллара;именованных диапазонов нет.