Итак, у меня есть запрос ms с параметром (назовем его «qry_Accounting»), и я связал этот параметр с полем, связанным с поле со списком. Таким образом, я могу фильтровать свои данные с помощью combobox.старые данные при обновлении сводной таблицы, связанной с запросом ms с параметром
Затем я создал сводную таблицу на основе запроса ms. Обычно я должен видеть данные, связанные с элементом, выбранным в поле со списком. Я вижу, что когда я изменяю элемент, выбранный в поле со списком, данные изменяются в «qry_Accounting». Мне пришлось создать кнопку, так что, когда я изменю выбранный элемент и нажмем на кнопку, он обновит сводную таблицу.
Моя проблема: у меня всегда есть данные из предыдущего выбранного элемента в сводной таблице и только эти данные. Я действительно не понимаю, что происходит. Если я создаю новую сводную таблицу, у нее будут правильные данные, но поведение будет продолжаться, когда я изменю элемент, я все равно всегда сохраняю предыдущие данные, и я не получаю новые данные.
Еще одна вещь. Если я вручную обновляю таблицу, она будет работать. Он будет работать даже для нескольких сводных таблиц, когда я обновляю один из них, если они все связаны с одной и той же таблицей qry_Accounting.
Как я могу отобразить правильные данные, не спрашивая у пользователя постоянно обновляться вручную?
PS: Я уже изменил свойство «Количество элементов для сохранения за поле» на «none».
После некоторых вопросов в комментарии здесь больше моего кода (при нажатии на кнопку, чтобы применить изменения COMBOBOX):
Sub Button5_Click()
'If the buffer place (O4) is different from the combo linked cell (F4) then
'assign the value from F4 to O4.
'the table will then be updated because as soon as O4 value changes the
'table is updated (the parameter is taken from O4)
If Sheets("base_pivot").Range("O4").Value <> Sheets("base_pivot").Range("F4").Value Then
Sheets("base_pivot").Range("O4").Value = Sheets("base_pivot").Range("F4").Value
'We wait 5 seconds to avoid access denied problems
Application.Wait (Now + #12:00:05 AM#)
'we ask for a refresh of the pivot tables explicitely
RefreshPivotTables ActiveWorkbook
'we ask for a refresh of all data.
ActiveWorkbook().RefreshAll
End If
End Sub
Sub RefreshPivotTables Код
Sub RefreshPivotTables(wb As Workbook)
Dim ws As Worksheet
Dim pt As PivotTable
Dim pi As PivotItem
Dim pf As PivotField
For Each ws In wb.Worksheets
For Each pt In ws.PivotTables
pt.PivotCache().Refresh
pt.RefreshTable
Next
Next
End Sub
Кроме этого все автоматически. Запрос ms имеет параметр, поэтому, как только обновляется значение O4, новые данные загружаются в таблицу. Итак, единственное, что нужно сделать, чтобы обновить движок.
Вы пропускаете ** «средний-человек» ** для 'PivotTable', и это 'PivotCache', вам нужно обновить' PivotCache' с новым обновленным «диапазоном данных», и только после того, как вы сможете использовать 'pt.RefreshTable' –
Hey There Shai Rado, спасибо за ваш ответ. Я проверил онлайн, и, согласно Microsoft, это только чтение. https://msdn.microsoft.com/en-us/library/office/ff834938(v=office.15).aspx –
Что такое только чтение? PivotCache? –