【问题标题】:Can't select/deselect an item on a Slicer - VBA无法选择/取消选择切片器上的项目 - VBA
【发布时间】:2018-07-18 14:00:50
【问题描述】:

问题在于,每当我运行宏时,切片器上都没有真正发生任何事情——我的意思是没有选择任何项目。我需要按月过滤 - 自动,具体取决于当前日期。代码有什么问题? 我需要强调我的数据透视表是在数据模型上创建的:

Sub Archive()

    Dim i As SlicerItem
    Dim ostWierszWS As Long
    Dim zakres As Range
    Dim zakres_ws As Range
    Dim WS As Worksheet

    Application.ScreenUpdating = False

    For Each i In ActiveWorkbook.SlicerCaches("Slicer_Month").SlicerItems
        If i.Value = Month(Now) Then
            i.Selected = True
        Else
            i.Selected = False
        End If
    Next i

    On Error Resume Next

    Set WS = Worksheets("Archive")
    Set zakres = Worksheets("aaa").Range("D7:D10")
    ostWierszWS = WS.Cells(Rows.Count, 3).End(xlUp).Row + 1
    Set zakres_ws = WS.Cells(ostWierszWS, 3)

    zakres.Copy
    zakres_ws.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:=xlPasteSpecialOperationNone, skipblanks:=False, Transpose:=True

    Set WS = Nothing

    Application.ScreenUpdating = True
    On Error GoTo 0
    Sheets("aaa").Activate
End Sub

【问题讨论】:

  • 你检查过 i.value 的实际样子吗?
  • 我认为是字符串,但不确定。当用“7”(七月)替换月份(现在)时,宏会起作用。当我输入 7 时,它不起作用。无论如何,宏现在适用于 i.Value=Month(now)。有趣的是,我创建了 2 个单独的电子表格 - 一个基于数据(放置在其中一张工作表中),第二个基于数据模型,并为两者使用了相同的宏。对于简单的数据,它适用 - 对于数据模型 - 不。也许这就是重点?
  • 您可以通过将宏步进到该行,然后在您的即时窗格中键入 ?TYPENAME(i.value) 并按 Enter 来获取类型。或者您可以将测试更改为:Cstr(i.Value) = CStr(Month(Now))

标签: excel vba


【解决方案1】:

好的,我深入研究了这个主题,现在知道 .SlicerCacheLevel.SlicerItems 让我进入切片器列表中的项目。现在的问题是我无法在切片器列表中选择特定月份。假设我们在一个列表中有 5 个元素(3 月、4 月、5 月、6 月、7 月),这意味着该数组由 5 个元素(1 到 5)组成。所以,如果我们现在有七月 (7),我无论如何都不能在切片器上选择 7。循环也行不通。如何解决?看我的代码:

Sub Archive()

Dim i As SlicerItem
Dim varrSlicerItems As Variant
Dim k As Long


    With ActiveWorkbook.SlicerCaches("Slicer_Month")

        ReDim varrSlicerItems(1 To .Slicers("Month").SlicerCacheLevel.SlicerItems.Count)

        For Each i In .Slicers(1).SlicerCacheLevel.SlicerItems
            k = k + 1
            varrSlicerItems(k) = i.Name
        Next i

        'and ERROR occurs here...
         .VisibleSlicerItemsList = Array(varrSlicerItems(Month(Date)))



    End With
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-14
    相关资源
    最近更新 更多