Ошибка 1004 - не удалось найти элемент в кубе OLAP после копирования файла / изменения имени - PullRequest
0 голосов
/ 05 июня 2018

У меня есть рабочая книга, которая подключается к моделям данных через PowerPivot, а полученные сводные таблицы фильтруются на основе заданного массива, собранного в процессе различий.

Sub AccrualPivot()

'Filter the data for the accrual entries that have been made.
Dim myArray() As Variant
Dim myR As Range

Sheets("Tables").Activate
Sheets("Tables").Range("JournalNum1").Select
Set myR = Sheets("Tables").Range("JournalNum1")

ReDim myArray(0 To myR.Cells.Count - 1)

Sheets("Data").Select
ActiveSheet.PivotTables("AccrualPivot").PivotFields( _
    "[Query].[DataEntry].[DataEntry]").ClearAllFilters
ActiveSheet.PivotTables("AccrualPivot").PivotFields( _
    "[Query].[JournalNum].[JournalNum]").ClearAllFilters

For i = 0 To myR.Cells.Count - 1
    myArray(i) = "[Query].[JournalNum].&[" & myR.Cells(i + 1).Value & "]"
Next i

'ERROR THROWS HERE    
ActiveSheet.PivotTables("AccrualPivot").PivotFields( _
    "[Query].[JournalNum].[JournalNum]").VisibleItemsList = myArray

'This filters out the Data entries, which need to be included in a separate pivot.
ActiveSheet.PivotTables("AccrualPivot").PivotFields( _
    "[Query].[DataEntry].[DataEntry]").CurrentPageName = _
    "[Query].[DataEntry].&[0]"
End Sub

Ошибка в указанной строке:

Ошибка времени выполнения '1004': элемент не может быть найден в кубе OLAP.

Когда я помещаю часы в эту строку, оба выражения являются вариантами иmyArray заполнен необходимой информацией.Кикер (и я предполагаю, что корень) заключается в том, что это работает в моем исходном файле. Но мне нужно иметь возможность сохранять как рабочую книгу, чтобы пролонгировать каждый месяц.

Мне нужен файл на 4.30, 5.31 и т. Д. Если я сохраняю рабочую книгу как следующий месяц, меняю даты и запускаю все, это работает.Но если я закрываю этот файл, снова открываю и пытаюсь запустить, я получаю ошибку 1004.

Нигде в модуле я не ссылаюсь на имя файла или путь к файлу.Они даже сохраняются по одному и тому же пути, как отдельные месяцы, и все листы называются одинаково.Я предполагаю, что это где-то встроено, что я не могу найти.

Ответы [ 2 ]

0 голосов
/ 22 мая 2019

Недавно я обнаружил эту ошибку и нашел Делора Брэдиш полезной: перестройте модель данных и снова запустите код.

Модель данных powerquery хрупка, и при переименовании таблицы возникают непредсказуемые последствия.Кроме того, если вы пишете сценарий построения модели, порядок, в котором добавляются таблицы, имеет значение;хотя таблицы могут добавляться одновременно (многоядерная обработка), и это обычно работает просто отлично, иногда получающаяся модель где-то пропускает ссылку на таблицу, и вы получаете эту ошибку.Измените порядок загрузки, чтобы обеспечить хорошее разделение больших файлов.

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

0 голосов
/ 14 марта 2019

У меня была такая же проблема, но возня с переменной UpdateStr заставила ее работать.
Возможно, есть более чистый способ сделать это, но ... у меня это сработало!

Sub FormatTables()

    Dim i As Integer
    Dim UpdateStr As String
    Dim MySheet As Worksheet
    Dim pt As PivotTable
    Dim pf As PivotField

    On Error Resume Next
    For i = 1 To ActiveWorkbook.Worksheets.Count
       Set MySheet = ActiveWorkbook.Worksheets(i)
       If Left(MySheet.name, 7) = "looking for specific sheet names to modify the pivots" Then
          For Each pt In MySheet.PivotTables
             For Each pf In pt.PivotFields

' I am looping through all fields as I'm doing multiple pivot filtering, and setting different fields to other values... but in this example I only include one field.

                If pf.Caption = "CoverageYear" Then
                   With pf
                      .ClearAllFilters
                      UpdateStr = Left(pf.Value, InStrRev(pf.Value, ".")) & "&[2019]"
                      .CurrentPageName = UpdateStr
                   End With
                End If
             Next
             pt.RefreshTable
          Next
       End If
    Next i
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...