再次提出一个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错误。
模块中没有任何地方引用文件名或文件路径。它们甚至被保存在相同的路径中,就像单独的月份一样,并且所有的工作表都被命名为相同。我假设它被嵌入某个我无法找到的地方,需要进行驱魔来解决它。
有人请帮助我失去我留下的那种微小的理智,你看到我跳出办公室窗外的新闻。谢谢!!
答案 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,则应制定计划,不时进行干净的数据模型重建。