Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 15.10.2008, 18:30   #1
KozakMamaj
 
Регистрация: 15.10.2008
Сообщений: 8
По умолчанию Получение пользовательской функцией данных с закрытой книги

Возможно ли получение пользовательской функцией данных с закрытой книги. (Если диапазон ячеек закрытой книги не передается как параметр) ?
KozakMamaj вне форума
Старый 16.10.2008, 05:02   #2
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Т.е. Вы сами не знаете, какие данные (путь к файлу, имя файла, лист, диапазон ячеек) Вам нужны?
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Старый 16.10.2008, 06:50   #3
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Тоже хотелось бы узнать...

К примеру, есть файл Excel (имя и путь известны, например "c:\data.xls"), надо перенести в массив значения известного диапазона (например, "a1:e20")

Как это лучше сделать, не открывая файл "c:\data.xls"?

Понимаю, что можно создать временную книгу, прописать в ней ссылки на ячейки "a1:e20" файла "c:\data.xls", принудительно обновить ссылки, после чего считать в массив диапазон уже из временной книги.

Может, есть более простой \ эффективный способ?
EducatedFool вне форума
Старый 16.10.2008, 07:27   #4
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

В VBA Excel нет возможности получить данные из закрытой рабочей книги. Но эту проблему можно решить с помощью макроса XLM. Это позволит присвоить данные переменной, не создавая и удаляя ссылки, т.е. без использования ячеек листа. Например, решить задачу, поставленную EducatedFool (только не указан рабочий лист), можно так:
Код:
Sub GetValue()

    Dim arg As String, i As Long, j As Long
    For i = 1 To 20
        For j = 1 To 5
            arg = "'C:\[data.xls]Лист1'!" & Range(Cells(i, j).Address).Range("A1").Address(, , xlR1C1)
            Cells(i, j) = ExecuteExcel4Macro(arg)
        Next
    Next
    
End Sub
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Старый 16.10.2008, 08:17   #5
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

SAS888, спасибо большое! Буду пользоваться.

Вот только вопрос: файл "c:\data.xls" состоит из нескольких листов,
и с каждого надо считывать около 1000 ячеек (диапазон "a1:e200")

Что будет быстрее: не открывая файл, читать по одному значению в цикле Вашей функцией, или всё-таки открыть файл, одной строкой скинуть диапазон в массив, и закрыть файл?
EducatedFool вне форума
Старый 16.10.2008, 08:32   #6
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
Что будет быстрее: не открывая файл, читать по одному значению в цикле Вашей функцией, или всё-таки открыть файл, одной строкой скинуть диапазон в массив, и закрыть файл?
Это зависит от того, что из себя представляет "закрытый" файл. Он может очень долго открываться.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Старый 16.10.2008, 11:31   #7
KozakMamaj
 
Регистрация: 15.10.2008
Сообщений: 8
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Т.е. Вы сами не знаете, какие данные (путь к файлу, имя файла, лист, диапазон ячеек) Вам нужны?
Именно. Заранее это неизвесно (До использования функции). Для простоты можно считать что нужно чтобы пользовательская функция выводила значение одной ячейки из закрытой книги, заранее неизвесно из какой.
KozakMamaj вне форума
Старый 16.10.2008, 11:41   #8
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Не понятно, а когда становится известно? Можно по-подробнее? У меня на компе их тысячи. Из всех получать?
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Старый 16.10.2008, 11:44   #9
KozakMamaj
 
Регистрация: 15.10.2008
Сообщений: 8
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Не понятно, а когда становится известно? Можно по-подробнее?
Адрес нужной ячейки передается параметром в функцию, наверно лучше всего в виде строки.
KozakMamaj вне форума
Старый 16.10.2008, 11:46   #10
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Какую из "кучи" книг выбирать? Есть критерии?
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получение/Отправка данных в интернет sklazer Работа с сетью в Delphi 13 11.01.2009 16:26
Получение типа данных Proof БД в Delphi 2 14.05.2008 20:38
Получение данных из blob поля vvviperrr БД в Delphi 1 28.04.2008 00:05
Получение данных от php скрипта.. Sanich Работа с сетью в Delphi 5 20.12.2007 16:41
форма отправки данных с функцией прикрепления файлов zetrix PHP 0 29.10.2006 20:24