【问题标题】:Error 1004 - item could not be found in OLAP cube after file copied/name changed错误 1004 - 文件复制/名称更改后在 OLAP 多维数据集中找不到项目
【发布时间】:2018-06-05 14:03:05
【问题描述】:

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

当我在这一行上加注时,两个表达式都是 V​​ariants 并且 myArray 已经填充了必要的信息。踢球者(我假设是根)是 这在我的原始文件中有效。但我需要能够“另存为”工作簿才能在每个月滚动。

我需要一个 4.30、5.31 等的文件。如果我将工作簿保存为下个月,更改日期并运行所有内容,它就可以工作。但如果我关闭该文件,重新打开并尝试运行,我会收到 1004 错误。

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

【问题讨论】:

  • 尝试使用工作表变量而不是 ActiveSheet。
  • 我也有这个问题。链接到 OLAP 多维数据集时,Excel 似乎存在一些错误。它似乎无法以编程方式可靠地设置 CurrentPageName。这很奇怪,因为当您将字段的过滤器放入数据透视表时,它必须运行相同的代码。解决莎拉的运气好吗?

标签: excel vba excel-2013 powerpivot


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    powerquery 数据模型很脆弱,重命名表时会产生不可预知的后果。此外,如果您正在编写模型构建脚本,那么添加表格的顺序很重要;尽管可以同时添加表(多核处理),并且通常工作得很好,但有时生成的模型会在某处丢失表引用,并且您会收到此错误。更改加载顺序以确保大文件的良好分离。

    如果您使用的是 powerquery,您应该有一个不时地干净重建数据模型的计划。

    【讨论】:

      猜你喜欢
      • 2021-02-17
      • 1970-01-01
      • 1970-01-01
      • 2016-06-09
      • 2018-09-30
      • 1970-01-01
      • 1970-01-01
      • 2012-06-04
      • 2012-07-11
      相关资源
      最近更新 更多