Доброго дня, первый раз на вашем ресурсе(та и в принципе первый раз задаю вопрос на просторах). вопрос скорее всего тривиальный, но на русскоязычных источниках ответа не нашел, есть таблица, в которой в одной из вкладок задается месяц отчета, после чего нажимается кнопка Start и как бы пользователь должен облокотится на стул и подождать пару минут. тем временем макрос обновляет sql запросы на трех вкладках (даты в нем), после чего с использованием query обращается в oracle, вытягивает информацию, вставляет ее во вкладки с названием data_..., к которым справа прикреплена формула создающая ключ из нескольких ячеек строки, который в последующем используется для суммесли и впр во вкладке "отчет", которая по итогу вырезается и как значение сохраняется в папке для просмотра правления.
Private Function requery_get_sql(pp$) Dim sql$, s As Worksheet, r% Set s = ThisWorkbook.Worksheets("sql_" & pp) If Application.Calculation = xlCalculationManual Then _ s.Calculate r = 1 Do r = r + 1 Loop While (s.Cells(r - 1, 2).Text <> "SQL Start";) sql = "" Do While s.Cells(r, 2).Text <> "SQL End" If s.Cells(r, 2).Text <> "" Then _ sql = sql & s.Cells(r, 2).Text & " " r = r + 1 Loop requery_get_sql = sql
End Function
Sub requery_sql(ByVal sql$, r$) Worksheets("data_" & r).Select With ActiveSheet.ListObjects(1) .QueryTable.CommandText = sql .Refresh End With
Application.DisplayAlerts = False BookOut.SaveAs path & "MSB_1131_1280_" & dat_end & ".xlsx" Application.DisplayAlerts = True BookOut.Close End Sub
проблема возникает на этапе, после выгрузки данных из oracle. прикрепленные формулы не обновляются(следовательно ключ не обновляется), следовательно через суммесли не попадают во вкладку "отчет" использовал несколько вариантов Calculate и т.д. - не помогло. обновление не происходит. (работаю в office 2007) в 2003 офисе таких проблем не происходило и нормально обновляло. подскажите как быть и где я профан))
Максим Зеленский,не помогло, не обновляется. при чем если после всего макроса просто нажать F9 все красиво заполняется правильными цифрами, но форма то уже была сохранена пустой и отправлена((
помню где-то встречалась с такой проблемой, не помню, как обошла... попробуйте в With вынести сам QueryTable, чтобы его рефрешить:
Код
Sub requery_sql(ByVal sql$, r$)
Worksheets("data_" & r).Select
With ActiveSheet.ListObjects(1).QueryTable
.CommandText = sql
.Refresh
End With
или укажите его внутри:
Код
Sub requery_sql(ByVal sql$, r$)
Worksheets("data_" & r).Select
With ActiveSheet.ListObjects(1)
.QueryTable.CommandText = sql
.QueryTable.Refresh
End With
(иначе пока не вспомню)... но обновляя QueryTable, а не ListObject - у меня обычно ок (насколько помню)... (xl2010)
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
JeyCi,к сожалению не помогло((( так надеялся) а выбить себе 2010 офис очень тяжело(( постоянно колупать мозг всем и несколько месяцев ожидания лицензии
ujin написал: а выбить себе 2010 офис очень тяжело
не надо - они достаточно схожи по части умных таблиц... дело может быть ещё в чём-то... успехов с вариантом поста№7... либо его прикрутите к моему пост№4 (если сработает) ?...
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
anyarceva,вы чудо, отлично все заработало, без изменения кода, а только с добавлением этой строки) - полтора дня лазил по просторам - только от вас о этой команде узнал. ОГРОМНЕЙШЕЕ СПАСИБО!!!!!
Если проблема в том, что обновление еще не завершено, а код пошел дальше, то попробуйте снять флажок асинхронности выполнения запроса:
Код
Sub requery_sql(ByVal sql$, r$)
Worksheets("data_" & r).Select
With ActiveSheet.ListObjects(1)
.QueryTable.BackgroundQuery = False ' <-- выполнять не асинхронно
.QueryTable.CommandText = sql
.Refresh ' <-- теперь код будет ждать завершения обновления
End With
End Sub
Sub requery_sql(ByVal sql$, r$) Worksheets("data_" & r).Select With ActiveSheet.ListObjects(1).QueryTable .CommandText = sql .Refresh Application.CalculateUntilAsyncQueriesDone End With
End Sub
файл приложить не могу - много конфиденциальной информации)) а видоизменять ее - суть будет потеряна)