Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim s As SlicerItem, c As SlicerCache
If Intersect(Target, Range("D1:D2")) Is Nothing Or Target.Count > 1 Then Exit Sub
With Application
.ScreenUpdating = False
.EnableEvents = False
For Each c In ActiveWorkbook.SlicerCaches
c.Delete
Next c
Set c = ThisWorkbook.SlicerCaches.Add(Me.PivotTables(1), "Date")
c.Slicers.Add Me, , "Date", "Date", Range("C10").Top, Range("C10").Left, 130, 180
For Each s In c.SlicerItems
s.Selected = Not (CDate(s.Value) < Range("D1").Value Or CDate(s.Value) > Range("D2").Value)
Next s
c.Delete
.EnableEvents = True
.ScreenUpdating = True
End With
End Sub