Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Evaluate / 16 сообщений из 16, страница 1 из 1
21.07.2007, 15:11:43
    #34675018
redsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Evaluate
Почему не работает так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
' если Книга4.xls закрыта
Sub form2()
  Dim qwe As String
  
  qwe = [vlookup(A1, 'C:\[Книга4.xls]Лист1'!$C$4:$J$22, 2, false)]
   
  MsgBox qwe
End Sub
или так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
' если Книга4.xls закрыта
Sub form2()
  Dim qwe As String
  
  qwe = Evaluate("=vlookup(A1, 'C:\[Книга4.xls]Лист1'!$C$4:$J$22, 2, false)")
   
  MsgBox qwe
End Sub
НО работает:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
' если Книга4.xls ОТКРЫТА
Sub form1()
  Dim qwe As String
  
  qwe = [vlookup(A1, [Книга4.xls]Лист1!$C$ 4 :$J$ 22 ,  2 , false)]
  
  MsgBox qwe
End Sub
т.е. как правильно записать функцию Evaluate, чтобы при этом Книга4.xls, на которую ссылаемся, была закрыта?
...
Рейтинг: 0 / 0
21.07.2007, 15:35:05
    #34675041
KL (XL)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Evaluate
redsky...как правильно записать функцию Evaluate, чтобы при этом Книга4.xls, на которую ссылаемся, была закрыта?


Никак :-( Насколько я понимаю, формулы могут считывать значения из закрытых книг только когда они внесены в ячейку.

Тут либо MS Query, либо ADO, либо что-то в таком роде: /topic/346974&hl=executeexcel4macro#3238038

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
21.07.2007, 16:43:47
    #34675089
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Evaluate
KL (XL) redsky...как правильно записать функцию Evaluate, чтобы при этом Книга4.xls, на которую ссылаемся, была закрыта?


Никак :-( Насколько я понимаю, формулы могут считывать значения из закрытых книг только когда они внесены в ячейку.

Тут либо MS Query, либо ADO, либо что-то в таком роде: /topic/346974&hl=executeexcel4macro#3238038

KL
[MVP - Microsoft Excel]

+1

я сам долго мучался, потом понял что никак и остановился на 2 вариантах:
1) подставлять всё таки в ячейку Эксель, но только сразу ограничение - нельзя использовать в пользовательской функции на листе!
2) ADO - вместо ВПР в этом случае сразу в строке запроса условие задаёшь!
...
Рейтинг: 0 / 0
21.07.2007, 16:55:24
    #34675093
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Evaluate
2redsky

Ё-маё, так мы же это с тобой и проходили уже!!!

туточки ;)
...
Рейтинг: 0 / 0
21.07.2007, 17:12:00
    #34675097
redsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Evaluate
Deggasad 2redsky

Ё-маё, так мы же это с тобой и проходили уже!!!

туточки ;)

Тогда я не рассматривал функцию Evaluate. Сейчас появилась (наивная) мысль, что она может помочь. А то через ADO долговато считает (2000 ячеек - 3 минуты). Но всё-равно,- считает:).

Думаю, вопрос исчерпан. Всем спасибо.
...
Рейтинг: 0 / 0
21.07.2007, 17:53:05
    #34675115
KL (XL)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Evaluate
redsky...А то через ADO долговато считает (2000 ячеек - 3 минуты). Но всё-равно,- считает:)...

Здесь что-то не так - процедура изъятия данных (даже из 50000 ячеек) должна занимать ну максимум секунду даже на маломощной машине. Может покажешь код и опишешь поподробнее ситуацию?

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
21.07.2007, 18:08:38
    #34675125
redsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Evaluate
KL (XL)Здесь что-то не так - процедура изъятия данных (даже из 50000 ячеек) должна занимать ну максимум секунду даже на маломощной машине. Может покажешь код и опишешь поподробнее ситуацию?


http://www.sql.ru/forum/actualthread.aspx?tid=443671&hl=ado#4313096
...
Рейтинг: 0 / 0
21.07.2007, 18:24:04
    #34675137
redsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Evaluate
KL (XL)Здесь что-то не так - процедура изъятия данных (даже из 50000 ячеек) должна занимать ну максимум секунду даже на маломощной машине
Вполне может быть и так:
Для рассчёта 1 значения анализируется диапазон C4:X450 (а это 9900 ячеек).
Следовательно: 2000 значений * 9900 ячеек = 19 800 000 ячеек.
19 800 000 / 50 0000 = 396 сек.
396 сек / 60 = 6,6 мин. (на маломощной машине).
...
Рейтинг: 0 / 0
22.07.2007, 13:10:55
    #34675488
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Evaluate
redsky Deggasad 2redsky

Ё-маё, так мы же это с тобой и проходили уже!!!

туточки ;)

Тогда я не рассматривал функцию Evaluate. Сейчас появилась (наивная) мысль, что она может помочь. А то через ADO долговато считает (2000 ячеек - 3 минуты). Но всё-равно,- считает:).

Думаю, вопрос исчерпан. Всем спасибо.

1) ну да, это ведь я рассматривал, но так как не получилось. то и не упоминал!

Я думаю что можно и побыстрее сделать, возможно задачу пересмотреть немного!
...
Рейтинг: 0 / 0
22.07.2007, 15:08:16
    #34675597
Дмит
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Evaluate
Я так понял у Вас 2000 файлов для анализа?
Но код по моему не слишком оптимизирован. Удалите всё лишнее в циклах.
Может быть создавать обьединённые запросы в SQL или ещё какую-нибудь мутотень.
Можно посмотреть рабочие материалы (min)? Может быть поможем.
...
Рейтинг: 0 / 0
22.07.2007, 15:36:56
    #34675617
KL (XL)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Evaluate
redskyВполне может быть и так:
Для рассчёта 1 значения анализируется диапазон C4:X450 (а это 9900 ячеек).
Следовательно: 2000 значений * 9900 ячеек = 19 800 000 ячеек.
19 800 000 / 50 0000 = 396 сек.
396 сек / 60 = 6,6 мин. (на маломощной машине). redsky http://www.sql.ru/forum/actualthread.aspx?tid=443671&hl=ado#4313096 Ну конечно, если для каждого из 2000 искомых значений, устанавливать соединение, вытаскивать массив, осуществолять поиск и возвращать результат, то да.

Вот тут уже излагались все известные варианты с использованием формул:
http://groups.google.com/group/microsoft.public.excel.worksheet.functions/msg/ac443753560f0075?dmode=source&hl=en

Думаю, весь подход надо пересматривать и почти точно отказываться от пользовательских функций вытаскивающих данные из др. книг.

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
22.07.2007, 16:05:32
    #34675633
redsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Evaluate
ДмитЯ так понял у Вас 2000 файлов для анализа?
Но код по моему не слишком оптимизирован. Удалите всё лишнее в циклах.
Может быть создавать обьединённые запросы в SQL или ещё какую-нибудь мутотень.
Можно посмотреть рабочие материалы (min)? Может быть поможем.
Попробую прикрепить файл.
1) "0 Balance" надо разместить на диск C:/
2) В документе Н13 измените дату в ячейке "С3" на 22.06.2007
...
Рейтинг: 0 / 0
22.07.2007, 23:23:57
    #34675893
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Evaluate
Я уже в предыдущий раз говорил по-моему, ну да повторюсь:
Быстрее всего, по-моему, будет сделать формирование макросом текста формулы и запихивать её в ячейку. Запускать это всё дело по событию Private Sub Worksheet_Change(ByVal Target As Range)
Только нужно обработки всякие поставить. Типа пересчитывать только изменённые ячейки.
Как сделать формулу мы уже обсуждали, можно посмотреть по вышеуказаанной ссылке!
Ранее вы сказали что идея эта не подходит так как сложная структура файла (тут могу ошибаться, но по-моему так), но в присланном примере сложной структуры нетути, пользовательская функция забита в один столбец, переменные размещены либо в постоянном месте, либо смещены относительно результирующей на одно и то же кол-во ячеек - это не идеальный вариант для обработки по событию. Воообщим вот...
...
Рейтинг: 0 / 0
23.07.2007, 03:09:19
    #34676030
redsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Evaluate
DeggasadРанее вы сказали что идея эта не подходит так как сложная структура файла (тут могу ошибаться, но по-моему так), но в присланном примере сложной структуры нетути, пользовательская функция забита в один столбец, переменные размещены либо в постоянном месте, либо смещены относительно результирующей на одно и то же кол-во ячеек - это не идеальный вариант для обработки по событию. Воообщим вот...
Это был один из пары десятков файлов, где используется формула. В других структура вовсе иная и колличество формул такого типа варьируется (где 10, где 150, а где и 1500). Главное, что она работает, а уже улучшение этой формулы не должно занимать больше времени, чем она приносит его экономию :).
...
Рейтинг: 0 / 0
23.07.2007, 07:36:44
    #34676103
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Evaluate
redsky DeggasadРанее вы сказали что идея эта не подходит так как сложная структура файла (тут могу ошибаться, но по-моему так), но в присланном примере сложной структуры нетути, пользовательская функция забита в один столбец, переменные размещены либо в постоянном месте, либо смещены относительно результирующей на одно и то же кол-во ячеек - это не идеальный вариант для обработки по событию. Воообщим вот...
Это был один из пары десятков файлов, где используется формула. В других структура вовсе иная и колличество формул такого типа варьируется (где 10, где 150, а где и 1500). Главное, что она работает, а уже улучшение этой формулы не должно занимать больше времени, чем она приносит его экономию :).

Я же просто мнение высказываю, а решать вам.
Может например структуру исходных файлов пересмотреть
...
Рейтинг: 0 / 0
23.07.2007, 22:02:41
    #34678530
Дмит
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Evaluate
Конечно в формуле листа (на листе их немеренно) нельзя открывать файл, искать значение, закрывать файл.
Это займёт кучу времени, что и происходит.

По этому моё предложение:
окрыть файлы один раз (например на событие измененмия ячеек с датами С2:С3),
извлечь данные (хотя бы в дополнительный лист) и
потом уже анализировать их (наверно лучше стандартными формулами Excel'я)
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Evaluate / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]