【发布时间】:2023-03-30 09:45:01
【问题描述】:
我需要一个能够根据单元格值选择多个切片器项目的 VBA 代码。这是用于制作每周报告,因此目标单元格将是 C17,格式为“YYYYWW”(即 2018 年的第 3 周将是 201803)并由用户输入。这就是我所说的结束日期。然后 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 上。所以问题是,我猜,覆盖切片器项目选择。
【问题讨论】: