2014-11-26 3 views
1

Я пытаюсь захватить вывод RTD в VBA. Проблема заключается в том, что иногда для возврата данных требуется несколько секунд, поэтому, когда я запускаю цикл за половину времени, когда он неправильно возвращает 0. По-видимому, RTD работает асинхронно. Как я могу заставить его работать синхронно, чтобы он ожидал правильного вывода?Excel RTD в VBA

Если я поместил формулу в ячейку, она обычно возвращается мгновенно, иногда она занимает секунду. Если я пытаюсь выполнить цикл в VBA, он переходит к следующему значению слишком быстро и возвращает ложные срабатывания, потому что он не ждет возвращения данных. Я пробовал RTD.RefreshData, и он не загружается достаточно быстро, чтобы не отставать от моего цикла. (Моя цель состоит в том, чтобы перебрать тысячи полей с помощью RTD и именно поэтому мне нужно это сделать)

+0

Есть несколько Google вещей плавающей вокруг на этом: http://stackoverflow.com/questions/12856979/how-to-refresh-load-rtd-bloomberg-function-bdh-in-excel-in-vba – Chrismas007

+0

@ Chrismas007 Я прочитал их все, я я получаю некоторые идеи, но я не нашел ссылку с реальным ответом на этот вопрос. Я думаю о нескольких хакерских обходных решениях, но проблема здесь в скорости. Причина, по которой мне нужно сделать это в VBA, - это, в частности, потому, что я хочу объединить тысячи полей. – CodeCamper

ответ

1

насчет ожидания в цикле для условия должны быть выполнены:

Do Until Cells(1, 1) <> "" ' use plausible condition 
    Application.Wait (Now + TimeValue("0:00:01")) 
Loop 
+0

Если у него 1000, это было бы последним средством. –

+0

@PortlandRunner Точно, 1 секунда займет слишком много времени. Я действительно езжу на велосипеде по тысячам полей. Иногда это всего 100, но в других случаях оно достигает 10000. Это динамическая система, которую я создаю. К сожалению, у меня нет доступа к самой базе данных, и я имею доступ только через RTD. Так что было бы неплохо, если бы там был какой-то хак. Могу ли я как-то переопределить IRTDUpdateEvent, чтобы выполнить это? Я даже не уверен. На данный момент я думаю о том, чтобы поместить одну формулу RTD в 1 лист и просто обнаружить изменение и выбросить пробелы. * Пересекает пальцы * – CodeCamper

Смежные вопросы