Ah, Bloomberg API ... многие проблемы.
Итак, когда вы выполняете запрос Bloomberg с помощью вызова функции, сайт вызова сотовой связи получает обратный вызов и обновляет данные.
Проблема в том, w.r.t. автоматизация, данные могут возвращаться по частям, и вы должны дождаться завершения, прежде чем продолжить обработку ваших данных.
Итак, есть 3 подхода к этому решению.
- Последний раз, когда я посмотрел, это тот, который рекомендует Bloomberg. У вас есть процедура, которая обновляет вызов формулы ячейки. У этого есть таймер и рекурсивно вызывает себя, пока данные не будут получены. Хитрость заключается в том, чтобы знать, когда данные были получены правильно. Область данных проверяется на наличие ошибок, которые говорят, что они еще не завершены.
- Другим решением является вызов вызова с использованием Application.Run, где вы создаете формулу в коде и вызывается с VBA. Это позволяет не заниматься функциями как таковыми на рабочем листе. Но фактически то же самое, что и 1.
- Вы можете установить ссылку на API Bloomberg и использовать COM для выполнения запроса. Это намного более чистый подход, и вы можете легко интегрировать его в свой код, эффективно создавая API вызовов данных Bloomberg.
Я бы предположил, если возможно, для варианта 3. Хотя немного больше усилий, текст кода становится намного чище. Варианты 1. и 2. могут быть сложными для отладки, когда ваши книги становятся более сложными с точки зрения структуры и т. Д.
Если вы ищете свою помощь в Bloomberg (когда-либо огромная старая справочная служба F1 F1 должна быть в состоянии указать вам в правильном направлении. Просто самая впечатляющая система помощи, когда-либо сделанная на мой взгляд!) У Bloomberg есть несколько примеров, демонстрирующих вышеописанные методы.
Итак, с проблемой и, наконец, ответить на ваш вопрос :) Я бы реструктурировал свой код, чтобы на самом деле выполнить вызов функции, изначально выполняющий Calcuation (который будет вызывать ваши запросы в Bloomberg). Затем введите рекурсивную функцию, которая вызывает себя до тех пор, пока в данных не будет ошибок. После этого вы копируете свои данные.
Надеюсь, что это поможет.