[英]Selecting multiple slicer items based on a cell value
我需要一個VBA代碼,該代碼能夠根據單元格值選擇多個切片器項目。 這是用於制作每周報告,因此目標單元格為C17,其格式為“ YYYYWW”(即2018年的第三周為201803),並由用戶輸入。 這就是我所說的endDate。 然后,Excel本身會計算開始的一周,默認情況下,它是endDate前30周。 隨着單元格C17的值更改,宏應自動觸發。
因此,例如,在C17中輸入“ 201803”,然后excel計算出值“ 201725”並將其插入G17。 在C17中輸入新值會觸發該宏,該宏通過讀取單元格C17(endDate)和G17(startDate)的值開始。 然后,宏將取消選擇所有切片器項目(僅使用一個切片器),並選擇等於endDate或startDate或介於兩個值之間的那些項目。 由於2017年有52周,因此應將“ 201753”改寫為“ 201801”。 我知道這不是理想的解決方案,因為它每年需要更新,但這是我想出的最好的解決方案。
我幾乎沒有學過用C進行編程的知識,但這是我在VBA中編寫的第一批代碼之一,因此任何指針都將受到贊賞。 這是我到目前為止所得到的:
Private Sub Worksheet_Change(ByVal Target As Range)
' 18.01.2018 Oscar E.
Dim startDate As Long
Dim endDate As Long
Dim n As Long
Dim i As Long
If Target.Address = "$C$3" Then
endDate = Range("C17").Value
startDate = Range("G17").Value
With ActiveWorkbook.SlicerCaches("Slicer_YYYYWW")
.ClearManualFilter
For n = startDate To endDate
If n = 201753 Then
n = 201801
End If
.SlicerItems(n).Selected = True
Next
End With
End If
End Sub
現在,我得到一個
運行時錯誤“ 1004”:應用程序定義或對象定義的錯誤
在.SlicerItems(n).Selected = True
接近結尾處。 因此,我想問題是覆蓋了切片器項目的選擇。
SlicerItems必須為Stirng。 但是當.ClearManualFilter選中所有項目時。 不能選擇所有項目。
Dim startDate As Long
Dim endDate As Long
Dim n As Long
Dim i As Long
Dim strN As String
Dim sl As SlicerItem
If Target.Address = "$C$3" Then
endDate = Range("C17").Value
startDate = Range("G17").Value
With ActiveWorkbook.SlicerCaches("Slicer_YYYYWW")
.ClearManualFilter
For n = startDate To endDate
If n = 201753 Then
strN = CStr(201801)
End If
Next
For Each sl In .SlicerItems
If sl.Name = strN Then
sl.Selected = True
Else
sl.Selected = False
End If
Next
End With
End If
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.