Excel交叉过滤时崩溃

我有一个只读2013工作簿作为模板工具使用数据模型转到4启用切片器启用交叉过滤链接透视图。 当我在一个分割器上selectfilter选项时,我的工作簿会崩溃,并在另一个分割器上过滤掉所有选项。

也就是说,切片机1有一个选项A,B,C等等。

  • 选项A与切片机2上的子集1,2和3有关。
  • 选项B涉及切片机2上的子集4,5和6。

如果切片机2有任何选定的数据,我筛选切片机1排除该select的任何部分我的工作簿崩溃。

事情没有工作:

  • 我已经重build了图表,切片机和连接,仍然有同样的问题。
  • 我在另一个工作簿中构build了一个非常简单的模型,但无法重现这个问题。
  • 我closures了事件。
  • 我评论了我的VBA。

如果我非常小心,那么从切片机2中select共享切片机1关系的项目似乎是“有效的”,但是这里显然有些东西被打破了。

这种情况似乎只发生在切片机2的切片机1的相关子集中没有重叠时。如果选项A有一个子集1,2,3,4,5。 。 和选项B有一个3,4,5但没有1或2我不明白这个问题,它只有当所有的子集是独特的父母和select不重叠(如5号A =崩溃当5是B和A是唯一的)。 我找不到任何与此相关的已知问题。

事件查看器显示:

Faulting application name: EXCEL.EXE, version: 15.0.4797.1003, time stamp: 0x56bf05fc Faulting module name: msolap110_xl.DLL, version: 0.0.0.0, time stamp: 0x55b0c5bf 

我的问题是:

  1. “msolap110_xl.DLL”可能是问题还是更可能是症状的一部分?

  2. 我有没有处理数据透视图,切片机或数据模型以某种方式导致这种情况?

  3. 它可以修复吗?

相关程序devise:

 Private Sub myReloadDataModel() If Range("myHasPath").Value = "True" Then MsgBox "You need to enter a path to a valid target location.", vbOKOnly, "Bad Path" Else myUser = MsgBox("Are you sure you want Reload the Data Model with any csv data located in the target path?", vbOKCancel, "3. Load Data Model") If myUser = vbOK Then Application.ScreenUpdating = False Application.EnableEvents = False Application.Cursor = xlWait myTime01 = Time Sheets("Notes").Unprotect Sheets("2. Get Table").Unprotect ActiveWorkbook.RefreshAll ' ActiveWorkbook.Model.Refresh ' ActiveWorkbook.Connections("Query - myGetMasterSpan").Refresh x = ActiveWorkbook.Connections("Query - myGetMasterSpan").ModelTables.Item(1).RecordCount myTime02 = Time myTime03 = Format(myTime02 - myTime01, "HH:MM:SS") Sheets("2. Get Table").Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _ , AllowUsingPivotTables:=True Application.Cursor = xlDefault Application.EnableEvents = True Application.ScreenUpdating = True MsgBox Format(x, "#,##0") & " Records Loaded!" & vbNewLine _ & vbNewLine _ & "Total Update Time = " & myTime03, , "Update Completed" End If End If End Sub 

事件

 Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable) On Error Resume Next Application.ScreenUpdating = Fales Application.EnableEvents = False Sheets("2. Get Table").Unprotect Application.Run "mySlicerMagic" ActiveWorkbook.Connections("LinkedTable_Table6").Refresh Set myChart04 = Sheets("Flow Errors").ChartObjects("Chart 4").Chart myChart04.ChartTitle.Text = Range("myErrorsTitle") With myChart04.Axes(xlValue) .MinimumScale = Range("myMin_Scale") .MaximumScale = Range("myMax_Scale") End With Set myChart05 = Sheets("Flow Errors").ChartObjects("Chart 5").Chart myChart05.ChartTitle.Text = Range("myErrorsTitle") With myChart05.Axes(xlValue) .MinimumScale = Range("myMin_Zoom") .MaximumScale = Range("myMax_Zoom") End With Application.Run "myChart5Format" Set thisPulseChart_02 = Sheets("Pulse Analyzer").ChartObjects("Chart 2").Chart With thisPulseChart_02 .ChartTitle.Text = "Full Pulse Flow - " & Range("myErrorsTitle") End With With thisPulseChart_02.Axes(xlValue) .MaximumScale = Range("myMax_Scale") + 0.09 End With Set thisPulseChart_03 = Sheets("Pulse Analyzer").ChartObjects("Chart 3").Chart With thisPulseChart_03 .ChartTitle.Text = "Raw Pulse Flow by Pulse- " & Range("myErrorsTitle") End With Application.Run "myChart3Format" Application.EnableEvents = True Application.ScreenUpdating = True End Sub 

这个小组为我获得了select范围

 Private Sub mySlicerMagic() On Error GoTo 100 Set myX = ActiveWorkbook.SlicerCaches("Slicer_Pulse_Set").SlicerCacheLevels(1).SlicerItems For i = 1 To myX.Count If myX(i).Selected = True Then x = x + 1 If x = 1 Then myItemName01 = myX(i).SourceName End If myItemName02 = myX(i).SourceName End If Next Range("myPulseRange")(1, 1) = myItemName01 Range("myPulseRange")(2, 1) = myItemName02 100 End Sub