Excel 2013 - ошибка времени выполнения 1004 Обновить таблицу запросов BackgroundQuery: = False

У меня возникла проблема с Excel 2013 при обновлении QueryTable с BackGroundQuery, установленным на False (для наших целей BackgroundQuery должно быть установлено на false). Когда предоставляется запрос, который не возвращает данных, возникает ошибка времени выполнения 1004, наиболее распространенной причиной отсутствия возвращаемых данных является отсутствие записей для определенного временного интервала или для определенного ресурса.

Я и мои коллеги пытались обойти эту проблему, но пока не нашли решения, и далее мы не нашли ничего, что указывало бы на изменение в том, как Excel обрабатывает обновление таблиц запросов.

Образец кода, чтобы увидеть, что происходит в VBA:

    Dim sql As String
    sql = "SELECT 1 WHERE 1=0"
    Sheet1.QueryTables(1).sql = sql
    Sheet1.Activate
    Sheet1.Range("b11").Select
    Sheet1.QueryTables(1).Refresh BackgroundQuery:=False

При обновлении мы получаем ошибку. Изменение условия Where на 1 = 1 приводит к успешному запуску.

Мы запускаем эти отчеты из среды C # таким образом, что нам нужно дождаться заполнения данных и сохранить отчет. Выявление ошибки и продолжение работы также не является приемлемым решением, поскольку это очень общая ошибка в довольно критическом месте.

Также в Excel 2007 и 2010 нет этой проблемы.

Любая помощь по этому вопросу будет очень признательна.


person user2980800    schedule 11.11.2013    source источник
comment
Разве 1 ​​= 0 не всегда возвращает нулевой результат?   -  person Automate This    schedule 12.11.2013
comment
да. Это был образец запроса, чтобы другие могли легко воспроизвести проблему, которую мы наблюдаем.   -  person user2980800    schedule 12.11.2013
comment
Понятно, теперь я понимаю, что вы говорите. Извините   -  person Automate This    schedule 12.11.2013
comment
Можно ли использовать событие RefreshComplete и запустить его в фоновом режиме?   -  person Dick Kusleika    schedule 12.11.2013


Ответы (1)


Спасибо всем за отзывы и идеи. Мы нашли обходной путь, который для нас не имеет большого значения.

Мы обнаружили, что эта проблема присутствовала только в Excel 2013 в таблицах запросов, к которым были применены фильтры до обновления QueryTable.

Наша работа просто удалила фильтрацию с листа, на котором QueryTable вызывает обновление с BackgroundQuery, установленным на false, а затем применяет фильтры к нашему диапазону внешних данных.

Пример:

    Sheet3.AutoFilterMode = False
    Sheet3.QueryTables(1).Refresh BackgroundQuery:=False
    Sheet3.Range("ExternalData_3").AutoFilter

Это решение работает для наших нужд, и я надеюсь, что любой, кто столкнется с этой проблемой, найдет эту работу полезной.

person user2980800    schedule 12.11.2013