我需要一个能够根据单元格值选择多个切片器项的VBA代码。这是用于制作每周报告,因此目标单元格将是C17,格式为" YYYYWW" (即2018年的第3周将是201803)并由用户输入。这就是我所说的endDate。 Excel本身然后计算开始周,默认情况下在endDate之前30周。随着单元格C17的值发生变化,宏应该自动触发。
所以,举个例子," 201803"进入C17并且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
附近。所以问题是,我猜,覆盖切片器项目选择。
答案 0 :(得分:0)
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