2016-02-25 5 views
0

надеясь кто-то может помочьTimeline Slicer Excel 2013 VBA

Я пытаюсь вызвать значение временной шкалы SLICER в 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 

End Sub

Большое спасибо заранее!

ответ

0

Ответьте на это сам!

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 
0

У меня была та же проблема. Ваш ответ помог, но мне это было необходимо, когда мастер-слайсер изменился. К сожалению, в slicers нет событий, но сводные таблицы, которые они влияют. В приведенном ниже коде будут обновлены все другие слайсеры временной шкалы при изменении главного слайсера, который, в свою очередь, изменит свою сводную таблицу, которая затем может использоваться для активации изменений ко всем другим слайсерам.

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 
Смежные вопросы