Sebagai koreksi
saya sudah memnyempurnakan data script sebagai berikut
Sub Run_Continuous_Dynamic()
Dim ws As Worksheet
Dim monthList As Variant
Dim YearList As Variant
Dim i As Integer
Dim j As Integer
Dim minMonth As Integer
Dim maxMonth As Integer
Dim minYear As Integer
Dim MaxYear As Integer
Dim startTime As Double
Dim slicerMonthName As String
Dim slicerYearName As String
Dim isFirstRun As Boolean
' Nama slicer yang digunakan (sesuaikan dengan nama yang ada di lembar kerja Anda)
slicerMonthName = "Slicer_Month"
slicerYearName = "Slicer_Year"
' Mengambil referensi ke lembar kerja "Processing"
Set ws = ThisWorkbook.Sheets("Processing")
' Mengambil bulan terkecil dan terbesar dari sel H1 dan J1 (dalam bentuk numerik)
minMonth = CInt(ws.Range("H1").Value)
maxMonth = CInt(ws.Range("J1").Value)
' Mengambil tahun terkecil dan terbesar dari sel F1 dan G1
minYear = CInt(ws.Range("F1").Value)
MaxYear = CInt(ws.Range("G1").Value)
' Mengisi array MonthList dengan bulan dari MinMonth hingga MaxMonth (dalam bentuk teks)
monthList = Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December")
' Mengisi array YearList dengan tahun dari MinYear hingga MaxYear
ReDim YearList(minYear To MaxYear)
For i = minYear To MaxYear
YearList(i) = CStr(i)
Next i
' Pilih MinYear sebelum menjalankan loop
With ThisWorkbook.SlicerCaches(slicerYearName)
.ClearAllFilters
For Each Item In .SlicerItems
If CInt(Item.Name) = minYear Then
Item.selected = True
Else
Item.selected = False
End If
Next Item
End With
' Pilih MinMonth sebelum menjalankan loop
With ThisWorkbook.SlicerCaches(slicerMonthName)
For Each Item In .SlicerItems
If Item.Name = monthList(minMonth - 1) Then
Item.selected = True
Else
Item.selected = False
End If
Next Item
End With
isFirstRun = True
Do
For i = minMonth To maxMonth
With ThisWorkbook.SlicerCaches(slicerMonthName)
' Select item bulan yang sesuai
.SlicerItems(monthList(i - 1)).selected = True
If i > minMonth Then
.SlicerItems(monthList(i - 2)).selected = False
End If
startTime = Timer
Do While Timer < startTime + 3 ' Menunggu sekitar 3 detik
DoEvents
Loop
End With
Next i
' Pilih Next Year dan kembali ke MinMonth setelah mencapai MaxMonth
If i > maxMonth Then
' Menunggu 3 detik setelah max month terpilih
startTime = Timer
Do While Timer < startTime + 3
DoEvents
Loop
' Pilih Next Year
With ThisWorkbook.SlicerCaches(slicerYearName)
.ClearAllFilters
.SlicerItems(CStr(minYear)).selected = False
.SlicerItems(CStr(minYear + 1)).selected = True
End With
' Kembali ke MinMonth
With ThisWorkbook.SlicerCaches(slicerMonthName)
Dim selectedMonthItem As slicerItem ' Perbaikan: Menggunakan SlicerItem dengan huruf kapital
' Cari item bulan yang ingin dipertahankan terpilih
For Each slicerItem In .SlicerItems
If slicerItem.Name = monthList(minMonth - 1) Then
Set selectedMonthItem = slicerItem
Exit For
End If
Next slicerItem
' Deselect semua item bulan kecuali yang ingin dipertahankan terpilih
For Each slicerItem In .SlicerItems
If TypeName(slicerItem) = "SlicerItem" Then ' Periksa apakah objek adalah SlicerItem
If slicerItem.Name <> selectedMonthItem.Name Then
slicerItem.selected = False ' Perbaikan: Menggunakan Selected dengan huruf kapital
End If
End If
Next slicerItem
End With
i = minMonth ' Reset i ke MinMonth
End If
Loop
End Sub
namun terkendala ketika scrip mencapai max month, terdapat run time Error 1004, kemungkinan kesalahan loop kembali ke min month yang mana akan dilibatkan next slicer year