【发布时间】: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))