slicer dynamic selected

34 views
Skip to first unread message

Dayat Nor

unread,
Apr 9, 2024, 1:53:18 AMApr 9
to Milis Belajar-Excel
Mohon pencerahan terkait data scrip macro yang saya buat

saya ingin dynamic selected pada slicer Month dan slicer Year

dimana pada clicer month terdapat batasan min month sampai max month berjalan ketika sampai ke max month maka akan kembali ke min month, namun sebelum slicer year akan berpindah ke tahun berikutnya, baru kemudian di lanjutjan selected month

tujuan saya adalah agar menampilkan data per bulan sesuat tahun terpilih, kemudian bulan max telah tarcapai untuk di tampilkan maka tahun akan memilih tahun berikutnya dan berhenti, kemudian dilanjutkan loop bulan min secara berkelanjutan ( dynamic selected)

catatan tahun jika sudah mencapai max maka akan kembali ke tahun terkecil 

saya ingin menggunakan 1 script saya yang bisa menjalankan 2 fungsi tahunan>mont to Month




salam analis



Nor Hidayat
slicer dynamic selected.xlsm

Dayat Nor

unread,
Apr 13, 2024, 1:37:52 AMApr 13
to milis Belajar-Excel
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

Mr. Kid

unread,
Apr 19, 2024, 6:12:01 PMApr 19
to Milis Belajar-Excel
Coba buat table referensi bulan (kolom Month dan M) di sebuah sheet, lalu dijadikan pivot filter (di-hide berisi min max terpilih) diberi slicer Month (di sheet tampilan ke user)
Di tabel data, tambahkan kolom nBulan (nomor bulan dari data Month), dan kolom filter bulan

Di sheet tanpilan ke user, buat pivot table untuk semua layout output yang dibutuhkan, diberi slicer Year

Di VB Editor event sheet referensi, buat prosedur event change berdasar cells pivot filter, yang isinya untuk me-refresh pivot cache salah satu layout pivot yang ditampilkan ke user


Regards,
Kid





--
You received this message because you are subscribed to the Google Groups "milis Belajar-Excel" group.
To unsubscribe from this group and stop receiving emails from it, send an email to milis-belajar-e...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/milis-belajar-excel/CAAVu%2BmpkdE54K%2BtV1N2efyQay6p-3zQHeHdt0wMnNUbOJdc5tg%40mail.gmail.com.
re-slicer dynamic selected.xlsm

Dayat Nor

unread,
Apr 23, 2024, 12:42:09 AMApr 23
to Mr. Kid, Milis Belajar-Excel
Terimakasih Mr.Kid - script sudah bisa saya selesesaikan
Mr. Kids - moderator yang selalu exist selama milis ini, semoga selalu diberikan kesehatan.

Dear kawan kawan
Salam kenal, saya sebenarnya user lama forum ini, dulu saya bergabung sejak 2008 dan sempat berganti account. saya mesih ingat sama 1 orang yang saya anggap guru online saya di group ini. yaitu Alm - Siti Vi Di gorup ini
Seingat saya beliau menyamar menjadi seorang perempuan yang tujuannya meramaikan forum ini, orangnya kocak kalau menjelaskan, banyak contoh vba, dan script macro yang beliau buat 
Alfatihah saya panjatkan Doa ke beliau, semoga amal beliau yang telah memberikan kontribusi dan membatu bahkan mendidik user di forum ini menjadi amal yang tak kunjung putus. Amin Amin ya Robbal alamin
Semoga milis ini terus bisa membantu sesama.

zainul ulum

unread,
Apr 24, 2024, 9:29:02 AMApr 24
to Dayat Nor, milis Belajar-Excel
Berarti Mas Dayat ikut challenge Excel mingguan dong (kalo admin waktu itu nyebutnya celeng)



Reply all
Reply to author
Forward
0 new messages