Страницы: 1
RSS
VBA. Можно ли не открывая книгу перебрать в цикле названия листов?
 
Если книга открыта, то можно так:  
   Dim Book, iArray() As String  
   iBook = "Test.xls"  
   With Application.Workbooks.Item(iBook)  
       For x = 1 To .Sheets.Count  
           ReDim Preserve iArray(x)  
           iArray(x) = .Sheets.Item(x).Name  
       Next x  
   End With  
 
Есть ли способ обработать закрытую книгу? Передача переменной iBook полного пути не помогла.
 
Жаль....  
спасибо в любом случае, The_Prist
 
С помощью ADO можно получить список листов и именованных диапазонов закрытой книги.  
Пример приложен, распакуйте архив, загрузите ZVI_GetExternalTables.xls  и нажмите кнопку Run.    
После выбора файла, например, приложенного External_Data.xls и нажатия Ok в столбцах A:B будет выведен список его листов и диапазонов.
 
{quote}{login=The_Prist}{date=16.02.2010 09:10}{thema=}{post}Здравствуйте, Владимир.  
Круто.  
А данные с листов можно таким способом вытащить или не стоит и пытаться?{/post}{/quote}Добрый вечер, Дмитрий.  
Данные тоже можно вытащить из закрытой книги через ADODB, но нужно либо жестко задавать в запросе диапазон ячеек, либо, что удобнее, использовать именованный диапазон, но только не динамический. Вместо динамического удобнее автоматически создавать копию имени по событию сохранения книги и его уже использовать в запргосах. Смешанные типы данных, например числа и строки, из одного столбца не выводятся, в этом случае выводятся данные того типа, который чаще встречается в 1-х восьми (1...16 - зависит от значения в реестре) строках такого столбца.  
При работе с открытой книгой с помощью таких запросов, к сожалению, возникают так называемые "утечки памяти", впрочем, для разовых запросов это не критично.
 
Здорово, но у меня на 2003 часть листов пропускает и выгружает взамен имена диапазонов. Наверное "TABLE_NAME" не только листы но и именованные диапазоны, вполнелогично...
 
Присоединяюсь к благодарностям.  
Нужно будет обязательно в этом разобраться.
 
Уважаемый ZVI, может вы поможете. Прошк прощение за дублирование темы  но как по аналогии с приведенным примером можно получить данные из таблиц БД PARADOX с (паролем). Зарнее благодарен!
 
{quote}{login=The_Prist}{date=17.02.2010 01:46}{thema=}{post}Константин, не надо делать так. То, что Вы написали в эту тему свой вопрос прежде всего неуважение к автору этой темы. Во-вторых это нарушение правил. Из-за того, что Вы будете в разных темах задавать свой вопрос решение быстрее не придет.  
 
Хотите привлечь внимание к своей теме - периодически пишите туда новое сообщение  - "Up".{/post}{/quote} Просто я подозреваю, что ответ на мой вопрос очень похож на пример, который разместил ZVI. Отличаться будут только парметры подключения. Надеюсь автор сообщения не расценил это как неуважение,т.к. на свой вопрос он ответ уже получил.
 
Константин, следуя Вашей логие, если автор вопроса получил ответ, то можно в этой теме создавать свои?
 
{quote}{login=ZVI}{date=16.02.2010 08:05}{thema=Получить список имен листов и именованных диапазонов закрытой книги}{post}С помощью ADO можно получить список листов и именованных диапазонов закрытой книги.  
Пример приложен, распакуйте архив, загрузите ZVI_GetExternalTables.xls  и нажмите кнопку Run.    
После выбора файла, например, приложенного External_Data.xls и нажатия Ok в столбцах A:B будет выведен список его листов и диапазонов.{/post}{/quote}  
Простите, переношу макрос в свой модуль, пытаюсь запустить, получаю ругательство  
на строку With New ADODB.Connection  
---------------------------  
Microsoft Visual Basic  
---------------------------  
Compile Error:  
 
User-defined type not defined  
---------------------------  
??   ???????  
---------------------------  
 
Заменяю это безобразие на  
 Dim cn  
 Set cn = CreateObject("ADODB.Connection")  
 ' Collect all table names of the external file  
 With cn  
 
Получаю ругательство на строку .CursorLocation = adUseClient  
Run-time error '3001'  
----------  
Аргументы имеют неверный тип, выхлдя за пределы допустимого диапазона или балблабла..  
 
Что я упустил??((
 
adUseClient    
 
видать эта часть неверна. буковка "r" не пропущена?  
adUserClient
 
{quote}{login=Kostix}{date=06.12.2011 02:39}{thema=Re: Получить список имен листов и именованных диапазонов закрытой книги}{post}... Что я упустил?{/post}{/quote}  
Вы не установили ссылку на: VBE - Tools - References - Microsoft ActiveX Data Object 2.8 Library  
 
Посмотрите в файле ZVI_GetExternalTables.xls, как она там установлена
 
{quote}{login=Jack}{date=06.12.2011 02:53}{thema=}{post}adUseClient    
 
видать эта часть неверна. буковка "r" не пропущена?  
adUserClient{/post}{/quote}  
Нет, там всё правильно.  
Если установить ссылку на библиотеку ADO (C:\Program Files\Common Files\System\ado\msado15.dll) как показано в моем предыдущем сообщении, то константа adUseClient = 3
Страницы: 1
Наверх