如何防止Excel数据透视表中的用户多选?

如何防止Excel数据透视表中的用户多选?,excel,filter,pivot-table,multi-select,slicers,Excel,Filter,Pivot Table,Multi Select,Slicers,我有一个基于日期的Excel数据透视表。我想强制用户使用1年和1年加1个季度的报告。在过滤器或切片器中是否有这样做的方法,或者我应该在VBA中强制执行它。我对Access和Word中的VBA非常熟悉,但对Excel中的VBA调用不多。 谢谢 有几种可能的方法。首先,这里有一些代码可以实现这一点: Option Explicit Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable) '--when pivot upd

我有一个基于日期的Excel数据透视表。我想强制用户使用1年和1年加1个季度的报告。在过滤器或切片器中是否有这样做的方法,或者我应该在VBA中强制执行它。我对Access和Word中的VBA非常熟悉,但对Excel中的VBA调用不多。
谢谢

有几种可能的方法。首先,这里有一些代码可以实现这一点:

Option Explicit

Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
'--when pivot update event triggered, checks whether a specified slicer
'    has more than one item selected.
'  If so, user is warned and optionally the last action can be undone.

 Dim bSlicerIsConnected As Boolean
 Dim pvt As PivotTable
 Dim slc As SlicerCache
 Dim sLastUndoStackItem  As String

 '--modify this to match your slicer's name
 Const sSLICER_NAME As String = "Slicer_Name3"

 sLastUndoStackItem = Application.CommandBars("Standard").FindControl(ID:=128).List(1)

 '--validate event was triggered by slicer or filter, not other pivot operation
 Select Case sLastUndoStackItem
   Case "Slicer Operation", "Filter"
      'continue
   Case Else
      'do nothing and exit
      GoTo ExitProc
 End Select

 '--validate specified slicer exists
 On Error Resume Next
 Set slc = ActiveWorkbook.SlicerCaches(sSLICER_NAME)
 On Error GoTo 0

 If slc Is Nothing Then
   GoTo ExitProc
 End If

 '--validate pvt that triggered event is connected to specified slicer
 For Each pvt In slc.PivotTables
   If pvt.Name = Target.Name Then
      bSlicerIsConnected = True
      Exit For
   End If
 Next pvt

 '--test how many items selected and take action if more than one
 If bSlicerIsConnected Then
   If slc.VisibleSlicerItems.Count > 1 Then
      '--option a: only warn user
      'MsgBox "Only one item may be selected" & vbCr _
      '  & "Please undo last selection."

      '--option b: warn user and undo
     ' MsgBox "Only one item may be selected"
      With Application
         .EnableEvents = False
         .Undo
      End With
   End If
 End If
ExitProc:
   Application.EnableEvents = True
End Sub
如果不需要VBA,则可以使用s,方法是创建第二个数据透视表,将感兴趣的字段作为报表过滤器(即页面字段),然后将生成的两个单元格有效地“修饰”为一种数据验证下拉列表。您需要使用公式检查是否只选择了一个项目(即,检查下拉列表是否没有显示“(全部)”