错误1004 - 文件复制/名称更改后,在OLAP多维数据集中找不到项目

问题描述 投票:1回答:2

我有一个通过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多维数据集中找不到该项。

当我把手表放在这一行时,两个表达式都是Variants,myArray填充了必要的信息。踢球者(我假设根)是在我的原始文件中。但我需要能够将每个月的工作簿另存为工作簿。

我需要一个4.30,5.31等文件。如果我在下个月保存工作簿,更改日期并运行一切,它的工作原理。但是,如果我关闭该文件,重新打开并尝试运行,我会收到1004错误。

在模块中没有任何地方引用文件名或文件路径。它们甚至被保存在相同的路径中,就像单独的月份一样,并且所有的工作表都被命名为相同。我假设它嵌入了我找不到的地方。

excel vba excel-vba excel-2013 powerpivot
2个回答
0
投票

我有同样的问题,但摆弄变量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

0
投票

我最近有这个错误,发现Delora Bradish很有帮助:重建数据模型并再次运行代码。

powerquery数据模型很脆弱,重命名表时会产生不可预测的后果。此外,如果要编写模型构建的脚本,则添加表的顺序很重要;虽然表可以同时添加(多核处理),并且它通常工作得很好,有时结果模型错过了某个地方的表引用,你得到这个错误。更改加载顺序以确保大文件的良好分离。

如果您正在使用电源查询,则应该有一个计划,以便不时地清理数据模型的重建。

© www.soinside.com 2019 - 2024. All rights reserved.