我有一个通过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错误。
在模块中没有任何地方引用文件名或文件路径。它们甚至被保存在相同的路径中,就像单独的月份一样,并且所有的工作表都被命名为相同。我假设它嵌入了我找不到的地方。
我有同样的问题,但摆弄变量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
我最近有这个错误,发现Delora Bradish很有帮助:重建数据模型并再次运行代码。
powerquery数据模型很脆弱,重命名表时会产生不可预测的后果。此外,如果要编写模型构建的脚本,则添加表的顺序很重要;虽然表可以同时添加(多核处理),并且它通常工作得很好,有时结果模型错过了某个地方的表引用,你得到这个错误。更改加载顺序以确保大文件的良好分离。
如果您正在使用电源查询,则应该有一个计划,以便不时地清理数据模型的重建。