我目前有一个1381行128列的工作表(info类型按行,国家/地区按列)。在数据上方,我有几个按钮,它们只隐藏属于某个组或部分的特定行。我被要求允许多个节保持可见,我所做的是插入1列,用节名称填充它,仅在该行上使用“格式化为表”,从该表创建切片器,这允许我使用切片器隐藏/取消隐藏具有相同节名称的行。问题是,如果我以这种方式使用它,它会非常慢,我从切片器或过滤器中选择一个部分,它需要2-3分钟来处理……我将表转换为正常范围,生成了过滤器,它几乎是即时的,但如果我这样做,我会失去切片器功能。
我在转换为表的唯一列上使用的唯一公式是:
=CHOOSE(--SWITCH_REG+1,OffChar,OnChar) & " " & "Site contracting"每个部分的"SWITCH_“和结束字符串都会发生变化,但它们都是手动生成的,所以我不明白为什么该表如此缓慢。
表过滤器太慢了,我是不是做错了什么?
发布于 2020-02-18 20:17:51
我通过以下步骤解决了这个问题:
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
Dim rngTableAll As Range, filterField, arrFilterValues
Dim firstCol, lastCol, sectionI
'UPDATE FILTER WHEN SLICER IS UPDATED
If Target.NAME = "CatPiv" Then
With Inputs_03
Set rngTableAll = .Range("_FilterDatabase")
filterField = 1
arrFilterValues = GETSLICERITEMS_ARRAY("Slicer_SubCat")
rngTableAll.AutoFilter Field:=filterField, Criteria1:=arrFilterValues, Operator:=xlFilterValues, VisibleDropDown:=False
'HIDE ARROWS 'CAREFULL, IT'S SLOW
' Application.Calculation = xlCalculationManual
' For filterField = 2 To rngTableAll.Columns.Count - 2
' rngTableAll.AutoFilter Field:=filterField, VisibleDropDown:=False
' Next
' Application.Calculation = xlCalculationAutomatic
End With
End If
End Sub
Public Function GETSLICERITEMS_ARRAY(SlicerName As String)
'https://www.excelforum.com/excel-general/1178647-trigger-event-on-slicer-selection-update.html
Dim arrItems, strItems
strItems = GETSLICERITEMS(SlicerName)
arrItems = Split(strItems, ", ")
GETSLICERITEMS_ARRAY = arrItems
End Function如何获取切片器项目:'https://www.excelforum.com/excel-general/1178647-trigger-event-on-slicer-selection-update.html
https://stackoverflow.com/questions/60260902
复制相似问题