Страницы: 1 2 След.
RSS
Разбор возникающей ошибки при обновлении PQ-запросов из иной книги
 
Доброго времени суток, уважаемые!
Будьте добры, светлые умы, пожалуйста, помогите разобрать ошибку, понять, в чем причина возникновения и решить проблему незавершения обновления PQ-запроса.
Спасибо!

Код
Feedback Type:
Frown (Error)

Error Message:
Исключение из HRESULT: 0x800A03EC

Stack Trace:
   в Microsoft.Mashup.Client.Excel.NativeExcelFunctionsBase.ValidateResult(Int32 result, Int32[] expectedValues)
   в Microsoft.Mashup.Client.Excel.Shim.NativeFillServices.PerformPostRefreshFixups(IWorkbook workbook, IListObject listObject, String[] columnNames, FillColumnType[] columnTypes, String[] previousColumnNames, FillColumnType[] previousColumnTypes, FillColumnType[] recordFieldTypes, Boolean removeBlankColumns, Boolean applyResultStyle)
   в Microsoft.Mashup.Client.Excel.Fill.PollingRefreshFillSession.CompleteRefresh(IWorkbook workbook, Boolean onTimer)
   в Microsoft.Mashup.Client.Excel.Fill.PollingRefreshFillSession.UpdateRefreshStatus(IWorkbook workbook, Boolean onTimer)
   в Microsoft.Mashup.Client.Excel.Fill.PollingRefreshFillSession.ResumeFill(Boolean onTimer)
   в Microsoft.Mashup.Client.Excel.PollingFillManager.<UpdateQueries>b__a(IFillSession fillSession)
   в Microsoft.Mashup.Client.UI.Shared.Model.QueriesUtilities.ForEachWithChangeScope[T](IEnumerable`1 items, Func`2 getQueries, Action`1 action)
   в Microsoft.Mashup.Client.Excel.Fill.FillManager.ForEachFillSessionByWorkbook(Action`1 action)
   в Microsoft.Mashup.Client.Excel.PollingFillManager.<OnFillUpdateTimerTick>b__6()
   в Microsoft.Mashup.Host.Document.ExceptionHandlerExtensions.HandleExceptions(IExceptionHandler exceptionHandler, Action action)

Stack Trace Message:
Исключение из HRESULT: 0x800A03EC

Invocation Stack Trace:
   в Microsoft.Mashup.Host.Document.ExceptionExtensions.GetCurrentInvocationStackTrace()
   в Microsoft.Mashup.Client.UI.Shared.FeedbackErrorInfo..ctor(String message, Exception exception, Nullable`1 stackTraceInfo)
   в Microsoft.Mashup.Client.Excel.Native.NativeUserFeedbackServices.ReportException(IWindowHandle activeWindow, IUIHost uiHost, FeedbackPackageInfo feedbackPackageInfo, Exception e, Boolean useGDICapture)
   в Microsoft.Mashup.Client.UI.Shared.UnexpectedExceptionHandler.<>c__DisplayClass1.<HandleException>b__0()
   в Microsoft.Mashup.Client.UI.Shared.UnexpectedExceptionHandler.HandleException(Exception e)
   в Microsoft.Mashup.Host.Document.ExceptionHandlerExtensions.HandleExceptions(IExceptionHandler exceptionHandler, Action action)
   в System.Windows.Forms.Timer.OnTick(EventArgs e)
   в System.Windows.Forms.Timer.TimerNativeWindow.WndProc(Message& m)
   в System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


Supports Premium Content:
True
Улыбнись.
 
Ну, вы, блин, даёте!
С таким обращением это в тех поддержку МС надо обращаться, и то с вас попросят текст запроса и исходники для воспроизведения ошибки.
Щас протру хрустальный шар!

Где файл, в котором воспроизводится ошибка? После добавления какого из шагов ошибка начала появляться? Прочитайте ваш пост с точки зрения отвечающего - вот вам лично достаточно информации?
Вот горшок пустой, он предмет простой...
 
PooHkrd, абсолютно логично! Но! Файла 2 и они весят более 0.1 мб.

Я не знаю уровня возможного уровня знаний местных гуру, и, надеясь искренне на чудо, отправил только лог ошибки. Файлы в общей сложности весят около 1.5 мб. Можно архивом их залить на форум или сразу удалят?
Улыбнись.
 
falmrom, вы не на все вопросы ответили.
Цитата
PooHkrd написал:
После добавления какого из шагов ошибка начала появляться?
Восстановите последовательность ваших действий до появления ошибки, т.е. вот при таких условиях запрос работал, а вот после этого выпала ошибка. Что изменилось?
Ваш большой файл не обязателен, достаточно примера на несколько строк, на которых ошибку можно поймать.
В редакторе запросов на предпросмотре ошибка появляется? Или только при запуске самого запроса уже вылетает?
Вот горшок пустой, он предмет простой...
 
PooHkrd, в редакторе запросов ошибки отсутствуют всегда и полностью.
Ошибка запроса возникает в месте выполнения кода, когда происходит переключение между различными книгами ( Первая книга содержит в себе запросы PQ, после их полного обновления она копирует полученную информацию во Вторую книгу. ) . Запросы обновляю с ожиданием окончания обновления кодом:
Код
ActiveWorkbook.RefreshAll 'ОБНОВИТЬ ВСЕ ЗАПРОСЫ
Application.CalculateUntilAsyncQueriesDone
Изменено: falmrom - 20.08.2019 10:28:06
Улыбнись.
 
А если обновлять ручками? То все норм?
Вот горшок пустой, он предмет простой...
 
PooHkrd, руками все норм, сами запросы ровные. Позвольте, я поделюсь файлами и укажу шаг, на котором возникает ошибка, после чего отсеется половина кода. Я уж извиняюсь за столь неясные формулировки. Ни разу не доводилось обсуждать какой-либо лаг не то что по онлайну, а просто вообще обсуждать с кем-либо. Увы, в этот раз, я ни гуглом не справляюсь, ни логикой. Прошу помощи. Спасибо

upd: то, что по ошибке ясно железно - ошибка возникает в ходе выполнения кода при копировании информации, которая получена путем обновления PQ-запросов, из Первой книги во Вторую

upd upd: при появлении ошибки, PQ не обновляется до конца, а висит в вечном обновлении.
Изменено: falmrom - 20.08.2019 10:52:01
Улыбнись.
 
PooHkrd, наблюдаю ошибку, только в том случае, если при запуске всего кода, выбран не тот лист, на который происходит выгрузка информации из PQ.
p.s. в коде прописан каждый этап выбора необходимой книги и листа, т.е. я постарался это исключить на этапе написание кода. Увы, PQ  ругается на лист. Я не понимаю этой логики программы.
Улыбнись.
 
Цитата
falmrom написал:
если при запуске всего кода, выбран не тот лист,
ну, видимо, нужен ВЕСЬ код. И на какой строке возникает ошибка? Т.е. при пошаговой отладке она тоже возникает, если выбран не тот лист? Или пошагово все ОК?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков, PooHkrd,

1) Для полной работоспособности потребуется загрузить на Вашу машину три файла. Два - прикреплены к сообщению (до 100 кб) , один (более 100 кб) на Я.Диске (ссылка внизу поста).
2) После успешной загрузки необходимо переместить все три файла в одну папку, имя которой не имеет значение.
3) Далее - необходимо открыть две книги (ОАО ХЛЕБ.xlsm) и (Отчеты по организациям 3.0 копия.zip)
4) После открытия в книге (ОАО ХЛЕБ.xlsm) нажмите на красную кнопку (форму с текстом «Сформировать отчет»)
5) Ожидайте несколько секунд
6) Наблюдайте ошибку

ps Файлы лишены эстетики в целях уменьшения веса. Лишнее постарался выкинуть.

Спасибо!

Ссылка на третий (большой) файл : https://yadi.sk/d/uhjnMFGRReSPgw
Изменено: falmrom - 20.08.2019 13:29:26
Улыбнись.
 
PooHkrd, Дмитрий(The_Prist) Щербаков, я приложил файлы. Если у вы располагаете временем и имеете желание, то буду благодарен вам, если вы ознакомитесь с кодом и дадите подсказку на тему того, в чем есть проблема. Спасибо!
Изменено: falmrom - 20.08.2019 12:51:19
Улыбнись.
 
Я в VBA ничем не помогу, из ваших слов следует, что запросы работают корректно, и проблема именно во взаимодействии VBA с таблицами, в которые выгружается результаты запросов. Да и к облакам у меня доступ заблочен.
Я бы вам рекомендовал либо попросить поменять наименование темы на более понятное и заманчивое для спецов по VBA. Либо начать новую тему. Боюсь что сюда могут заглянуть не все потенциальные помощники.
Изменено: PooHkrd - 20.08.2019 13:08:56
Вот горшок пустой, он предмет простой...
 
Администрация, пожалуйста, измените название темы на: «Взаимодействие VBA с таблицами, запросами PQ.»
Улыбнись.
 
Не появилось никакой ошибки, кроме ошибки, что путь для сохранения не найден(ссылается где-то на Ваш локальный или сетевой диск - начинается на vladlen).
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков, спасибо Вам за отзывчивость!
Я заменил файл. Он доступен по той же ссылке, что в посте со всеми файлами. Ошибки из-за локального доступа быть не должно.

Какая версия excel у Вас?

Я думаю, что ошибка возникает из-за того, что мой excel после обновления PQ-запросов автоматически открывает книгу, лист, на котором находится выгруженная информация, а потом выделяет таблицу, что вызывает ошибку.

Как отключить этот «автопереход» к выгруженным данным?
Улыбнись.
 
У Вас в кодах много обращений к ячейкам без указания родительского листа и книги - Вы просто надеетесь, что в момент обращения будет активен нужный лист, но вот беда - при работе с запросами часто после окончания обновления PQ сама активирует лист с итоговой таблицей. Поэтому для начала я бы на Вашем месте привел в порядок именно этот момент.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
falmrom написал:
Как отключить этот «автопереход» к выгруженным данным?
Никак.
Нужно либо открывать книги в разных копиях Экселя и тогда перехода быть не должно, либо иметь ввиду, что после обновления запроса переход точно будет, и сделать в макросе переход на нужный вам книгу/лист по окончании обновления таблицы.
Вот горшок пустой, он предмет простой...
 
Цитата
falmrom написал:
Как отключить этот «автопереход» к выгруженным данным?
никак. Но я написал как делать правильно - всегда обращайтесь к ячейкам и листам, используя не АКТИВНЫЙ лист/книгу, а конкретную ссылку или имена.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков, я принял это к сведению. Сейчас займусь корректировкой кода. После полного редактирования - отпишусь Вам о результате! Спасибо!
НО! Почему происходит это автопереключение ПОСЛЕ обновления запросов? Я же указал в коде, что нужно подождать обновления запроса и только потом продолжить работу дальнейшей части кода.
Улыбнись.
 
Дмитрий(The_Prist) Щербаков, вопрос почти по теме: какая максимально коротка форма ссылки на ячейку с указанием книги, листа, ячейки? Что-то типа «[A1:A5]», только + книга+лист
Улыбнись.
 
Цитата
falmrom написал:
какая максимально коротка форма ссылки на ячейку
а зачем Вам максимально короткая? Может лучше, максимально правильная? :)
По сути просто создаете переменную для книги, для листа, для ячейки, а потом к ним обращаетесь:
Код
Dim wbMain as workbook,wsMain as worksheet,rMain as range
set wbMain = Application.workbooks("Основная книга.xlsm")
set wsMain = wbMain.Sheets("Нужный лист")
set rMain = wsMain.Range("A1")
это имеет смысл в случаях, когда надо обращаться к конкретным листам и книгам неоднократно в коде.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Доброе время суток.
Цитата
Дмитрий(The_Prist) Щербаков написал:
Может лучше, максимально правильная?
Вот, вот. Перефразируя известного оратора.
Если не определяется: что, где, когда, то получается - как всегда :)
Изменено: Андрей VG - 20.08.2019 16:12:31
 
Дмитрий(The_Prist) Щербаков, Андрей VG, использование with - неуместно? Самое лучше решение - создание переменных ?
Изменено: falmrom - 20.08.2019 16:21:56
Улыбнись.
 
Дмитрий(The_Prist) Щербаков, Андрей VG, в общем, результат не достигнут. Я грешу на избитую тему «Как дождаться, пока PQ обновится полностью», ведь даже после выполнения макроса, запросы в статусе обновления. Перепробовал кучу всяких комбинация с PQ, но ничего не отрабатывает так, как хотелось бы. PQ игнорирует любые команды ожидания выполнения обновления.
Думаю, что все-таки нужно как-то тормознуть макрос на время обновления запросов. У кого-либо есть идея-фикс на тему того, как это возможно осуществить ?

upd:
Я пробовал :

1) DoEvents
2) Application.CalculateUntilAsyncQueriesDone
3) Application.wait

Галочки с «Фоновое обновление» убраны.
Изменено: falmrom - 20.08.2019 16:21:17
Улыбнись.
 
А вот эту галку в свойствах таблицы сняли?
Вот горшок пустой, он предмет простой...
 
PooHkrd, свойства всех моих таблиц идентичны тем, что на Вашем скрине. =(
Улыбнись.
 
Уберите галочку и попробуйте снова. Время обновления таблицы сильно сократится.
Вот горшок пустой, он предмет простой...
 
PooHkrd, убрал галочки. Заметных изменений не наблюдается
Улыбнись.
 
Я бы предложил вместо RefreshAll обновлять конкретные запросы:
Код
ListObjects(1).QueryTable.Refresh BackgroundQuery := False

Как-то так, на память пишу. Тогда отключение фонового обновления приводит к тому, что vba ждет окончания.
Либо может быть в настройках соединений поотключать фоновоевыполнение запроса
Изменено: Максим Зеленский - 21.08.2019 09:33:39
F1 творит чудеса
 
Максим Зеленский, я изначально и использовал именно этот алгоритм в коде ( ВЫключаю фоновое обновление конкретного запроса - Обновляю конкретный запрос ).
Нюанс в том, что даже при выключенном фоновом обновлении, происходит ФОНОВОЕ обновление.
Изменено: falmrom - 21.08.2019 09:51:52
Улыбнись.
Страницы: 1 2 След.
Наверх