На спредшите есть одна единственная формула (от Bloomberg Add-in)
=BDP("MSFXCAD Index", "PX_LAST"). Если запустить Excel, то это хозяйство соединяется с Bloomber терминалом и по инет получает одно число. Может занять 10-20 секунд, пока значение формулы будет получено. Надо сделать следующее:
1) запустить Excel из командного файла (например, start excel myfile.xls /e)
2) Excel должен получить данные (обновить значение формулы), записать это значение в текстовый файл (типа, "2009-09-04", "1.1094").
3) автоматически закрыться.
Сделал так:
WorkBook_On_Open :
1) Проверяем пока значение в ячейке с формулой <> "#N/A ...."
2) Пишем в файл значение ячейки с формулой
3) Application.Quit
Результат - не работает. В файле постоянно "#N/A ...." вместо данных.
Такое ощущение, что пока исполняется код WorkBook_On_Open, обновление формул блокировано. Значение (вместо "#N/A ...." ) получается только по выходу из WorkBook_On_Open. Если же прямо из WorkBook_On_Open вызвать Application.Quit, то в файле оказывается "#N/A ...." .
Как быть?
про Excel
Правила форума
Пожалуйста, ознакомьтесь с правилами данного форума
Пожалуйста, ознакомьтесь с правилами данного форума
-
- Маньяк
- Сообщения: 2803
- Зарегистрирован: 29 май 2003, 22:29
- Откуда: Магадан - Миссиссага
-
- Житель
- Сообщения: 915
- Зарегистрирован: 09 мар 2003, 22:46
Re: про Excel
Скорее всего все события и формулы еще не активизированы в этот момент.
Есть также Activate event для worksheet, но поскольку Excel работает как STA (single thread) я думаю тоже ничего не получится. Но, можно попытаться активизировать таймер средствами VBA, и на нем уже проверять значение.
Есть также Activate event для worksheet, но поскольку Excel работает как STA (single thread) я думаю тоже ничего не получится. Но, можно попытаться активизировать таймер средствами VBA, и на нем уже проверять значение.
-
- Маньяк
- Сообщения: 2803
- Зарегистрирован: 29 май 2003, 22:29
- Откуда: Магадан - Миссиссага
Re: про Excel
Пробовал. Тоже самое. Т.е. надо сделать как-то так, чтобы Excel открылся, повисел, пока не получит данные, затем хорошо было бы какой-то On_... зацепить (типа эвента на завершение обновления флрмул), чтобы оттуда написать в файл и позвать Quit.ura писал(а):Скорее всего все события и формулы еще не активизированы в этот момент.
Есть также Activate event для worksheet, ... я думаю тоже ничего не получится.
Может быть хорошей идеей. Будет прикольно если получится.ura писал(а): Но, можно попытаться активизировать таймер средствами VBA, и на нем уже проверять значение.
- AlexANB
- Маньяк
- Сообщения: 2904
- Зарегистрирован: 17 фев 2003, 18:47
- Откуда: Ontario
Re: про Excel
Совершенно верно. Пока исполняется VBA код, пересчет самой таблицы и формул в ней даже не начинается. Или то, или другое, одновременно они не работают.vg писал(а):Результат - не работает. В файле постоянно "#N/A ...." вместо данных.
Такое ощущение, что пока исполняется код WorkBook_On_Open, обновление формул блокировано.
Можно в код VBA этой страницы включить пустую функцию:
Public Sub Worksheet_Calculate()
On Error Resume Next
End Sub
В этом случае при любом изменении состояния любой клетки с формулой пересчет таблицы состоится. Но думаю, все равно потребуется крутиться в цикле с проверками, пока результат не будет получен.
-
- Маньяк
- Сообщения: 2803
- Зарегистрирован: 29 май 2003, 22:29
- Откуда: Магадан - Миссиссага
Re: про Excel
Клёво. Надо попробовать во вторник. Если этот "колбяк" срабатывает на каждое обновление ячейки, то можно проверять один раз, и если результат число - записывать в файл и звать Quit. Спасибо.AlexANB писал(а):Совершенно верно. Пока исполняется VBA код, пересчет самой таблицы и формул в ней даже не начинается. Или то, или другое, одновременно они не работают.vg писал(а):Результат - не работает. В файле постоянно "#N/A ...." вместо данных.
Такое ощущение, что пока исполняется код WorkBook_On_Open, обновление формул блокировано.
Можно в код VBA этой страницы включить пустую функцию:
Public Sub Worksheet_Calculate()
On Error Resume Next
End Sub
В этом случае при любом изменении состояния любой клетки с формулой пересчет таблицы состоится. Но думаю, все равно потребуется крутиться в цикле с проверками, пока результат не будет получен.
-
- Маньяк
- Сообщения: 2803
- Зарегистрирован: 29 май 2003, 22:29
- Откуда: Магадан - Миссиссага
Re: про Excel
Вот ещё вроде есть такое Application OnTime (http://msdn.microsoft.com/en-us/library/bb223501.aspx) & event AfterCalculate.
Прошу прощения за бывший глупый вопрос. Попробую это + то, что ты написал (не знаю, что будет проще. Может и твоё.)
Public Sub Worksheet_Calculate()
On Error Resume Next
End Sub
Прошу прощения за бывший глупый вопрос. Попробую это + то, что ты написал (не знаю, что будет проще. Может и твоё.)
Public Sub Worksheet_Calculate()
On Error Resume Next
End Sub
-
- Житель
- Сообщения: 915
- Зарегистрирован: 09 мар 2003, 22:46
Re: про Excel
Там кстати кажется есть event на простое изменение содержимого любой ячейки.
Т.е. по идее он должен сработать, если это не та ячейка которая мониторится, то жди себе дальше...
Т.е. по идее он должен сработать, если это не та ячейка которая мониторится, то жди себе дальше...
-
- Маньяк
- Сообщения: 2803
- Зарегистрирован: 29 май 2003, 22:29
- Откуда: Магадан - Миссиссага
Re: про Excel
Сделал с использованием event AfterCalculate.
Спасибо всем!
Спасибо всем!