С Новым годом! Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.61/76: Рейтинг темы: голосов - 76, средняя оценка - 4.61
0 / 0 / 0
Регистрация: 01.10.2015
Сообщений: 7

Вывести список листов книги без ее открытия

01.10.2015, 11:01. Показов 16016. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
В ячейке прописан полный путь к книге, например C:\Excel\123.xlsx.
Возможно ли получить список листов данной книги без её открытия? Знаю только, как получить имена листов активной книги..
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.10.2015, 11:01
Ответы с готовыми решениями:

Список Листов Книги в ListBox или ComboBox. Активация
Как поместить список всех листов книги в ListBox, я нашёл. Private Sub UserForm_Initialize() Dim s As Worksheet For Each...

Обновлять книги excel без открытия
Здравствуйте! Понадобилась помощь. У меня тысячи файлов которые нужно обновлять. Но вот открывать каждый очень долго. Есть ли...

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

6
3946 / 2339 / 790
Регистрация: 02.11.2012
Сообщений: 6,214
01.10.2015, 11:30
вот в нете есть такой код
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
' Получить список имен листов и именованных диапазонов закрытой книги
Sub ZVI_GetExternalTables()
  ' Reference to Microsoft ActiveX Data Objects 2.8 Library
  Dim FileName$, s$, i&, rs&, x, Arr
  ' Choose an external file
  With Application.FileDialog(msoFileDialogFilePicker)
    .Filters.Add "Excel", "*.xls;*.xlsx", 1
    .InitialFileName = ThisWorkbook.Path
    .AllowMultiSelect = False
    If .Show = False Then Exit Sub
    FileName = .SelectedItems(1)
  End With
  ' Collect all table names of the external file
  With New ADODB.Connection
    .Provider = "Microsoft.Jet.OLEDB.4.0"
    .ConnectionString = "Data Source=" & FileName & ";Extended Properties=Excel 8.0;"
    .CursorLocation = adUseClient
    .Open
    With .OpenSchema(adSchemaTables)
      rs = .RecordCount
      ReDim Arr(1 To rs, 1 To 2)
      For i = 1 To rs
        Arr(i, 1) = i: Arr(i, 2) = Replace(.Fields("TABLE_NAME").Value, "$", "")
        .MoveNext
      Next
      .Close
    End With
    .Close
  End With
  ' Show list of tables
  With Range("A1:B1")
    .CurrentRegion.Resize(, 2).ClearContents
    .Value = Array("Tables", FileName)
    .Resize(rs - 1).Offset(1).Value = Arr
  End With
End Sub
корректируйте под себя или используйте как есть.
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
02.10.2015, 10:03
Vlad999, этот код требует подключения библиотеки Microsoft ActiveX Data Objects X.X Library.
У меня на 2007 этот код не работает с xlsx, но работает с xls.

Nik9tep, книга ведь все равно будет открываться, если не в Excel, то в другой программе. Так почему бы не открыть ее в Excel, не задействуя сторонние программы? Если не хотите видеть окно книги, используйте приемы отсюда: Как внести данные в книгу Excel, не открывая окно с книгой?
1
880 / 559 / 291
Регистрация: 21.11.2012
Сообщений: 1,553
02.10.2015, 14:21
Лучший ответ Сообщение было отмечено Nik9tep как решение

Решение

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
dim wb as Workbook
dim ws as worksheet
dim arr() as variant
dim i as integer
Set wb = GetObject("C:\Excel\123.xlsx")
 
if not wb is nothing then
    For Each ws In wb.Worksheets
         i = i + 1
         redim preserve arr(i)
         arr(i) = ws
    Next
end if
wb.close
0
0 / 0 / 0
Регистрация: 01.10.2015
Сообщений: 7
05.10.2015, 09:27  [ТС]
Всем спасибо.
0
0 / 0 / 0
Регистрация: 29.11.2014
Сообщений: 13
15.11.2018, 17:58
Всем привет,

прошу помощи, никак не получается настроить данный макрос.

есть два варианта: получить адрес файла с помощью
Visual Basic
1
2
3
4
FileName = GetFilePath("Выберите файл")
     If FileName = "" Then Exit Sub
     ActiveSheet.Range("A1") = FileName
    MsgBox "Выбран файл: " & FileName, vbInformation
записав путь в ячейку.

потом вытянуть по пути из файла список листов видимо какой-то частью кода
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Sub ZVI_GetExternalTables()
  ' Reference to Microsoft ActiveX Data Objects 2.8 Library
  Dim FileName$, s$, i&, rs&, x, Arr
  ' Choose an external file
  With Application.FileDialog(msoFileDialogFilePicker)
    .Filters.Add "Excel", "*.xls;*.xlsx", 1
    .InitialFileName = ThisWorkbook.Path
    .AllowMultiSelect = False
    If .Show = False Then Exit Sub
    FileName = .SelectedItems(1)
  End With
  ' Collect all table names of the external file
  With New ADODB.Connection
    .Provider = "Microsoft.Jet.OLEDB.4.0"
    .ConnectionString = "Data Source=" & FileName & ";Extended Properties=Excel 8.0;"
    .CursorLocation = adUseClient
    .Open
    With .OpenSchema(adSchemaTables)
      rs = .RecordCount
      ReDim Arr(1 To rs, 1 To 2)
      For i = 1 To rs
        Arr(i, 1) = i: Arr(i, 2) = Replace(.Fields("TABLE_NAME").Value, "$", "")
        .MoveNext
      Next
      .Close
    End With
    .Close
  End With
  ' Show list of tables
  With Range("A1:B1")
    .CurrentRegion.Resize(, 2).ClearContents
    .Value = Array("Tables", FileName)
    .Resize(rs - 1).Offset(1).Value = Arr
  End With
End Sub
далее нужно чтобы список записывался в конкретный столбец начиная с ячейки G2 в текущей книге, к примеру.

второй способ:
используя этот же макрос из поста выше сразу указывать файл, вытягивать список и записать в ту же G3 ячейку в текущей книге.

Комбинировал по разному, так и не заработало.
Как лучше сделать?
0
0 / 0 / 0
Регистрация: 29.11.2014
Сообщений: 13
21.11.2018, 14:01
Сам в итоге разобрался. если кому пригодится.
Макрос просит указать файл из которого нужно вытянуть названия листов и записывает в столбец.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Sub GetFilePath_GetNameList()
     Dim ws As Worksheet
     Dim wb As Workbook, sShName As String, n As Integer, i As Integer
     Dim Array_Var() As String
          FileName = GetFilePath("Выберите файл")
     If FileName = "" Then Exit Sub
     ActiveSheet.Range("A1") = FileName 'записываем путь выбранного файла в ячейку
      With Application
        .ScreenUpdating = 0 ' обращение к файлу будет происходить в фоновом режиме
        .EnableEvents = 0
        Set wb = .Workbooks.Open(FileName, False, True)
        For i = 1 To ActiveWorkbook.Worksheets.Count 'подсчет количества листов в указанном файле
        ActiveSheet.Cells(2 + i, 14).Value = ActiveWorkbook.Worksheets(i).Name 'запись названий листов по порядку в столбец начиная с 14 в данном случае
        Next i 'Поиск названий в цикле
       wb.Close 0
        .ScreenUpdating = 1
        .EnableEvents = 1
    End With
End Sub
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.11.2018, 14:01
Помогаю со студенческими работами здесь

Как в ListBox формы занести список листов любой книги?
Помогите, пожалуйста по вопросу - Как в ListBox формы занести список листов любой книги?

Сделать список листов книги не внизу, а сбоку (слева или справа)?
Возможно ли сделать список листов книги не внизу, а сбоку (слева или справа)? Иногда приходится работать с книгами, в которых очень...

Как получить доступ к проекту без открытия книги?
Открываю книгу, а мне - --------------------------- Microsoft Visual Basic --------------------------- Error accessing file. ...

Работа со StringGrid. Выдать список листов за дату, список листов с протяженностью более заданной...
Здравствуйте! Помогите доработать. Программа должна выдавать список листов за дату, список листов с протяженностью более заданной,...

Получить список листов в эксель файле без его полной загрузки + 1 вопрос
Здравствуйте, сейчас использую такой код: Dim objExcelOld As New Excel.Application ComboOld.Text = "Файл...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru