Сообщение будет показано после одобрения модератором.

Страницы: 1
RSS
макрос. создать массив из данных закрытой книги
 
Добрый вечер.  
 
Интересует сабж. ХОтел бы создать макрос, который обращался бы к закрытой книге, брал со второго листа таблицу от 2.1 до 4.6, помещал её в массив.    
Помогите
 
Поиск по: ADO
KL
 
{quote}{login=KL}{date=16.09.2010 08:47}{thema=}{post}Поиск по: ADO{/post}{/quote}  
сложновато найти будет, да и разобраться. Достать данные из закрытой книги так сложно? ужас, блин
 
{quote}{login=широкарека}{date=16.09.2010 09:04}{thema=Re: }{post}{quote}{login=KL}{date=16.09.2010 08:47}{thema=}{post}Поиск по: ADO{/post}{/quote}  
сложновато найти будет, да и разобраться. Достать данные из закрытой книги так сложно? ужас, блин{/post}{/quote}  
 
а нельзя написать макрос открытия и закрытия книги, из которой нужно достать значения?  
тогда, думаю. задача упростится...  
Или принципиально, чтобы книга не открывалась?
 
Готовые решения:  
 
<EM>http://www.rondebruin.nl/ado.htm</EM>  
<EM>http://www.erlandsendata.no/english/index.php?d=envbadacwbdbado</EM>  
 
Вот еще способ, но нужно делать цикл, так как метод ExecuteExcel4Macro позволяет вытягивать только одно значение за каждое обращение:  
 
<EM>http://spreadsheetpage.com/index.php/tip/a_vba_function_to_get_a_value_from_a_closed_file/</EM>
KL
 
{quote}{login=Diana Tailor}{date=16.09.2010 09:13}{thema=Re: Re: }{post}{quote}{login=широкарека}{date=16.09.2010 09:04}{thema=Re: }{post}{quote}{login=KL}{date=16.09.2010 08:47}{thema=}{post}Поиск по: ADO{/post}{/quote}  
сложновато найти будет, да и разобраться. Достать данные из закрытой книги так сложно? ужас, блин{/post}{/quote}  
 
а нельзя написать макрос открытия и закрытия книги, из которой нужно достать значения?  
тогда, думаю. задача упростится...  
Или принципиально, чтобы книга не открывалась?{/post}{/quote}  
 
Пока тут гуглил, можно сделать со скринаптейтинг'ом = false, пожалуй так и поступлю.  
 
А можно в массив поместить диапазон данных без использования циклов? (глупый вопрос, знаю, но везде написано назное)  
 
Про адо обязательно почитаю, спасибо за ссылки
 
{quote}{login=широкарека}{date=16.09.2010 08:45}{thema=макрос. создать массив из данных закрытой книги}{post}... макрос, который обращался бы к закрытой книге, брал со второго листа таблицу от 2.1 до 4.6, помещал её в массив...{/post}{/quote}Что такое от "от 2.1 до 4.6", можете выложить пример закрытой книги?
 
Может A2:F4? :-)
 
{quote}{login=ZVI}{date=16.09.2010 11:03}{thema=Re: макрос. создать массив из данных закрытой книги}{post}{quote}{login=широкарека}{date=16.09.2010 08:45}{thema=макрос. создать массив из данных закрытой книги}{post}... макрос, который обращался бы к закрытой книге, брал со второго листа таблицу от 2.1 до 4.6, помещал её в массив...{/post}{/quote}Что такое от "от 2.1 до 4.6", можете выложить пример закрытой книги?{/post}{/quote}  
 
имел ввиду диапазон от cells(2,1) до (4.6)
 
>> имел в виду диапазон от cells(2,1) до (4.6)  
 
Приложил пример быстрого считывания внешних данных в VBA-массив, а также в массив ячеек листа без использования ADO.  
 
Книга с внешними данными может быть как открытой (загруженной в excel), так и закрытой (не загруженной).
 
Немного подправил код.  
Нужно распаковать архив, загрузить MasterWb.xls  и нажать кнопку Run
 
{quote}{login=ZVI}{date=17.09.2010 01:45}{thema=Считывание внешних данных в массив без ADO}{post}Немного подправил код.  
Нужно распаковать архив, загрузить MasterWb.xls  и нажать кнопку Run{/post}{/quote}  
мудрён макрос, будем разбираться. Спасибо. Массив можно сделать и динамическим, верно?
 
{quote}{login=река}{date=17.09.2010 04:48}{thema=Re: Считывание внешних данных в массив без ADO}{post}...Массив можно сделать и динамическим, верно?{/post}{/quote}Массив закрытой книги не должен быть динамическим, чтобы на него можно было ссылаться извне. Как вариант, можно при сохранении книги с динамическим диапазоном с помощью Workbook_BeforeSave автоматически создавать нединамическую копию диапазона.
 
{quote}{login=ZVI}{date=17.09.2010 01:07}{thema=}{post}{quote}{login=река}{date=17.09.2010 04:48}{thema=Re: Считывание внешних данных в массив без ADO}{post}...Массив можно сделать и динамическим, верно?{/post}{/quote}Массив закрытой книги не должен быть динамическим, чтобы на него можно было ссылаться извне. Как вариант, можно при сохранении книги с динамическим диапазоном с помощью Workbook_BeforeSave автоматически создавать нединамическую копию диапазона.{/post}{/quote}  
ZVI,  
а мжно поподробнее про: Workbook_BeforeSave автоматически создавать нединамическую копию диапазона
 
Я в своей работе делал так (прилагаю пример, размер 23 664). Брал инфу из какой-то книги по VBA Excel.
 
Владимир, мне кажется лучше приучить себя пользоваться Option Explicit )
 
Владимир, а какую смысловую нагрузку несут вот эти 2 строки  
 
fm = Formula  
и  
.Formula = fm  
 
Если и необъявленная переменная formula всегда равна Empty и переменная fm всегда равна Empty ?  
 
Или я пропустил что-то?
 
{quote}{login=}{date=18.09.2010 01:12}{thema=}{post}Владимир, мне кажется лучше приучить себя пользоваться Option Explicit ){/post}{/quote}  
:-)  
Это Вы про fm = .Formula , но без точки перед Formula? - Согласен, конечно!  
Хотя эта строчка и отладочный атавизм, так как ищется пустая ячейка без какой-либо формулы ;-)  
 
Дмитрий, спасибо, что выручаете, а то мое время - немного до, и много после полуночи. Только, я бы все же использовал Workbook_BeforeSave, а не Workbook_BeforeClose, так как можно сначала сохранить книгу, а затем закрыть её без сохранения.
 
{quote}{login=}{date=18.09.2010 01:25}{thema=}{post}Владимир, а какую смысловую нагрузку несут вот эти 2 строки  
 
fm = Formula  
и  
.Formula = fm  
 
Если и необъявленная переменная formula всегда равна Empty и переменная fm всегда равна Empty ?  
 
Или я пропустил что-то?{/post}{/quote}  
Это остатки отладки.  
Сначала у меня было так:  
With Sheets(1).Cells(1, 1)  
 fm = .Formula  
 .Formula = "=ToArray('" & ThisWorkbook.Path & "\[ExternalWb.xls]Лист2'!A2:F4)"
 .Formula = fm  
End With  
 
Т.е. ячейка A1 использовалась как вспомогательная, но в ней в общем случае могло что-то быть, поэтому, сначала предполагалось сохранить формулу A1, затем вписать в неё формулу со ссылкой на диапазон закрытой книги, а затем вернуть запомненную формулу. Если бы в ячейке была не формула, а число, то все бы сработало в этом случае тоже корректно.  
 
Но в опубликованном варианте в качестве вспомогательной ищется пустая ячейка в столбце A, поэтому запоминать и восстанавливать формулу пустой ячейки не имеет смысла. Откорректированный вариант приложен.
 
Ясно, спасибо!
 
Подскажите, а как добавить в этот макрос считывание с нескольких книг?
 
{quote}{login=GYV}{date=05.02.2011 03:42}{thema=Re: }{post}Подскажите, а как добавить в этот макрос считывание с нескольких книг?{/post}{/quote}  
Подскажите, пожалуйста, как сделать, чтобы макрос брал путь из ячейки. И как должен выглядень путь?
Страницы: 1

Сообщение будет показано после одобрения модератором.

Наверх