时间线切片器Excel 2013 VBA

nzk0hqpo  于 2023-01-03  发布在  其他
关注(0)|答案(3)|浏览(165)

希望有人能帮忙
我试图调用一个时间线切片器值在vba中,这样我就可以控制其他切片器。我已经管理它从细胞,但我想知道它是否可以控制我的主切片器

Sub Slicer_Time_Change()

Dim startDate As Date, endDate As Date

startDate = Range("A1") 'Set slicer 1 start date as slicer selection instead
endDate = Range("B1")    'Set slicer 1 End date as slicer selection instead

ActiveWorkbook.SlicerCaches("NativeTimeline_Date1").TimelineState. _
SetFilterDateRange startDate, endDate

ActiveWorkbook.SlicerCaches )("NativeTimeline_Date2").TimelineState. _
SetFilterDateRange startDate, endDate

末端子组件
提前感谢!

cwdobuhd

cwdobuhd1#

我要亲自回答这个问题!

Sub Slicer_Time_Change()

'Gets data from master slicer selection
Set cache = ActiveWorkbook.SlicerCaches("NativeTimeline_Date1")
'Puts into cell
Cells(1, 1) = cache.TimelineState.startDate
Cells(1, 2) = cache.TimelineState.endDate

Dim startDate As Date, endDate As Date

startDate = Range("A1")
endDate = Range("B1")
'Takes data from cell and controls other slicers with date range
ActiveWorkbook.SlicerCaches("NativeTimeline_Date2").TimelineState. _
SetFilterDateRange startDate, endDate

End Sub
2w3kk1z5

2w3kk1z52#

我遇到了同样的问题。您的回答很有帮助,但我需要在主切片器更改时触发此操作。不幸的是,切片器没有事件,但它们影响的数据透视表有事件。下面的代码将在主切片器更改时更新所有其他时间线切片器,主切片器更改会相应地更改其数据透视表,然后数据透视表可用于触发对所有其他切片器的更改。

Private Sub Workbook_SheetPivotTableUpdate(ByVal Sh As Object, ByVal Target As PivotTable)

'   Description:Update Timeline Slicers from Master Slicer
'   Inputs:     Sh          PivotTable's worksheet
'               Target      PivotTable being changed/updated
'   Outputs:    *None
'   Requisites: *None
'   Example:    *None - This is an event handler found in ThisWorkbook module

'     Date   Ini Modification
'   10/19/16 CWH Initial Development

'   Declarations
    Const cRoutine      As String = "Workbook_SheetPivotTableUpdate"
    Dim oSlicer         As SlicerCache      'Current Slicer
    Const cSlicer       As Long = 1         'Master Slicer
    Dim dStartDate      As Date             'Start Date
    Dim dEndDate        As Date             'End Date
    Dim bCleared        As Boolean          'Filter Cleared Flag
    Dim bEvents         As Boolean          'Events Enabled Flag

'   Error Handling Initialization
    On Error GoTo ErrHandler

'   Prevent cascading events
    bEvents = Application.EnableEvents
    Application.EnableEvents = False

'   Get Master Slicer's dates
    Set oSlicer = ThisWorkbook.SlicerCaches(cSlicer)
    bCleared = oSlicer.FilterCleared
    If Not bCleared Then
        With oSlicer.TimelineState
            dStartDate = .FilterValue1
            dEndDate = .FilterValue2
        End With
    End If

'   Set All other Timeline Slicer Dates
    For Each oSlicer In ThisWorkbook.SlicerCaches
        If oSlicer.SlicerCacheType = xlTimeline And _
           oSlicer.Index <> cSlicer Then
            If bCleared Then _
                oSlicer.ClearAllFilters Else _
                    oSlicer.TimelineState.SetFilterDateRange _
                        StartDate:=dStartDate, EndDate:=dEndDate
        End If
    Next

ErrHandler:
    Select Case Err.Number
        Case Is = 0:                            'Do nothing
        Case Is = 9:                            'Do Nothing Master Slicer Missing
        Case Else:
            Select Case MsgBox(Prompt:=Err.Description, _
                               Buttons:=vbAbortRetryIgnore, _
                               Title:=cRoutine, _
                               HelpFile:=Err.HelpFile, _
                               Context:=Err.HelpContext)
                Case Is = vbAbort:  Stop: Resume    'Debug mode - Trace
                Case Is = vbRetry:  Resume          'Try again
                Case Is = vbIgnore:                 'End routine
            End Select
    End Select
'   Clean up: Resume responding to events
    Application.EnableEvents = bEvents

End Sub
nhaq1z21

nhaq1z213#

Option Explicit
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
    If Target = "TopElementOfSum" Then
        ActiveWorkbook.SlicerCaches("NativeTimeline_Date1").TimelineState.SetFilterDateRange ActiveWorkbook.SlicerCaches("NativeTimeline_Date").TimelineState.StartDate, ActiveWorkbook.SlicerCaches("NativeTimeline_Date").TimelineState.EndDate
        'NativeTimeline_Date1 to numer slidera w systemie nie jego nazwa, kiedys dlugo sie z tym jebalem bo nie wiedzialem co jest 5
    End If
End Sub

对我来说,只有SlicerCache(“NativeTimeline_Date”)引用时间线的内部编号,没有它们的名称。

相关问题