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

时间:2018-06-05 14:03:06

标签: excel vba excel-vba excel-2013 powerpivot

再次提出一个VBA问题,我认为这不应该太难,除非我已经浏览过互联网,而且似乎没有其他人似乎有这个问题。

我有一个通过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错误。

模块中没有任何地方引用文件名或文件路径。它们甚至被保存在相同的路径中,就像单独的月份一样,并且所有的工作表都被命名为相同。我假设它被嵌入某个我无法找到的地方,需要进行驱魔来解决它。

有人请帮助我失去我留下的那种微小的理智,你看到我跳出办公室窗外的新闻。谢谢!!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

powerquery数据模型很脆弱,并且在重命名表时会产生不可预测的后果。另外,如果您要编写模型构建脚本,则添加表的顺序很重要。尽管可以同时添加表(多核处理),并且通常效果很好,但有时生成的模型会在某个地方丢失表引用,并且会出现此错误。更改加载顺序以确保大文件的良好分离。

如果您使用的是powerquery,则应制定计划,不时进行干净的数据模型重建。

相关问题