【发布时间】:2018-05-01 18:42:28
【问题描述】:
下面的代码给出了一个奇怪的结果。 切片器有 22 个选项(顶部的 #1 到底部的 #22)。
如果我当前选择了#12,然后运行代码,它将选择切片器选项 1-12。如果 X = 当前选择的切片器选项的编号,代码将选择 1 - X,并且下面的选项保持未选中状态。以上只是一个示例,并不意味着显示一个自然的或期望的起点。
其他可能相关的信息: 多选 = 真, 倒数第二个选项 = "", 最后一个选项-“空白”
我想要代码做的是选择倒数第三个选项,这是第一个(从底部)不是空白或空数据的选项。这解释了注释掉的行。
但是,我无法弄清楚为什么下面的代码没有取消选择所有选项。
Sub Slicer()
Dim WB As Workbook
Set WB = ThisWorkbook
Dim i As Integer
Dim n As Integer
With WB.SlicerCaches("Slicer_Processed_date")
n = .SlicerItems.Count
For i = 1 To n
If .SlicerItems(i).Selected = True Then
.SlicerItems(i).Selected = False
End If
Next i
'.SlicerItems(n - 2).Selected = True
End With
End Sub
【问题讨论】:
-
根据其中项目的位置而不是名称来过滤切片器似乎很奇怪。您能否进一步详细说明您的意图?
-
上述宏是一个较大宏的子过程。有问题的切片器项目是日期,宏只需要选择最近的日期。我对 VBA 中的日期没有太多经验,因此由于缺乏经验,这可能是一项乏味的工作。最近的日期(在 .refreshall 之后)将始终是倒数第三个选项,所以我使用了它。我并没有确定我的方法,只是在使用我所知道的。绝对愿意以更直接的方法解决上述问题!
-
好的。正如任何一位出色的电视厨师都会说的那样……“这是我之前准备的”:stackoverflow.com/questions/39004607/…
-
可能需要一些调整,我可能有机会进行调整,但这应该能让你或其他读者开始。
-
不幸的是,我不懂很多代码,虽然我想。我绝对可以调整以下答案以使用我的(打开#1,关闭其余选项,打开所需的选项(#n-2),然后关闭#1)。这应该会产生一致的结果,但必须检查以确保每月 1 日正常工作。您是否知道这种方法是否会比您上面链接的更直接的方法慢?切片器是一个月度跟踪器,所以它最多有 22 个日期(一个月的工作日)。