Нужен код VB для отображения списка рабочих листов в файле Excel, отображения их в списке в форме доступа - PullRequest
0 голосов
/ 29 марта 2012

Я создаю форму в Access, которая позволит пользователю выбрать файл Excel, а затем выбрать лист для импорта.У меня есть код, который позволяет пользователю выбрать файл Excel, и он сохраняет имя файла в элементе управления в форме.

Теперь я хочу отобразить имена рабочих листов, которые находятся в этом файле.Я знаю, как выполнить импорт, но я не знаю, как получить имена рабочих листов в файле и сохранить их либо в таблице, либо в списке в форме, чтобы пользователь мог выбрать один из них.К сожалению, хотя все файлы Excel должны иметь стандартные имена для рабочих листов, некоторые из них отключены, и поэтому я хочу их отобразить.

Я использую Office 2007.

Ответы [ 3 ]

2 голосов
/ 29 марта 2012

В моем тестировании использование каталога 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.

Обратите внимание, что при таком подходе будут перечислены как именованные диапазоны, так и рабочие таблицы.Если это проблема для вас, вы можете различить их в зависимости от того, содержит ли имя знак доллара («$») в конце.Листы имеют знак доллара;именованных диапазонов нет.

2 голосов
/ 29 марта 2012
Set oWkb = oXLApp.Workbooks.Open(FileName)
For Each oSh In oWkb.Worksheets
   MsgBox oSh.Name
Next

oXLApp будет экземпляром приложения Excel, которое вы можете получить, используя Set oXLApp = CreateObject("Excel.Application").

Убедитесь, что вы закрыли свою рабочую книгу, когда закончили получать названия листов. Я бы, вероятно, сохранил их в коллекции или массиве (вместо MsgBox oSh.Name), чтобы вы могли собрать их, закрыть рабочую книгу и отобразить их в своей форме, используя содержимое коллекции.

1 голос
/ 29 марта 2012

Что-то вроде этого?

Dim wb As Excel.Workbook
Dim ws As Excel.Worksheet

Set wb = Excel.Workbooks.Open("C:\MyBook.xls") ' Or whatever

For Each ws In wb.Worksheets
    Debug.Print ws.Name
    ' This prints the name in the Immediate window.
    ' You'll want to do something useful with them instead.
Next ws

Чтобы использовать это, необходимо установить ссылку на библиотеку объектов Excel: Инструменты> Ссылки> установить галочку рядом с Microsoft Excel xx.0 Object Library.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...