Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何让Excel在VBA中使用时间切片器自动选择最近一周?_Excel_Vba - Fatal编程技术网

如何让Excel在VBA中使用时间切片器自动选择最近一周?

如何让Excel在VBA中使用时间切片器自动选择最近一周?,excel,vba,Excel,Vba,我有一个excel,每天自动更新前一天的销售信息。此报表具有时间切片器,可以选择一年中的不同周。目前,一旦打开excel,它将被刷新,另存为新的excel,然后通过电子邮件发送。我遇到的问题是,一旦excel包含新一周的数据,所选的原始周仍将显示。我想使用VBA自动选择最新的切片机 我做了一些研究,发现了一些代码,其他用户说可以,但对我来说不起作用: Sub test() Dim i As Long, n As Long With ActiveWorkbook.SlicerCa

我有一个excel,每天自动更新前一天的销售信息。此报表具有时间切片器,可以选择一年中的不同周。目前,一旦打开excel,它将被刷新,另存为新的excel,然后通过电子邮件发送。我遇到的问题是,一旦excel包含新一周的数据,所选的原始周仍将显示。我想使用VBA自动选择最新的切片机

我做了一些研究,发现了一些代码,其他用户说可以,但对我来说不起作用:

Sub test()
    Dim i As Long, n As Long

    With ActiveWorkbook.SlicerCaches("Week")
        n = .SlicerItems.Count

        For i = 1 To n - 1
            .SlicerItems(i).Selected = False
        Next i

        .SlicerItems(n).Selected = True
    End With
End Sub
Private Sub Workbook_Open()
    Dim today As Date
    today = Now
    Dim todayString As String
    todayString = Format$(today, "d mmm yyyy")
    Dim item As SlicerItem

    For Each item In ThisWorkbook.SlicerCaches("Week").SlicerItems
        If item.Name = todayString Then
            item.Selected = True
        Else
            item.Selected = False
        End If
    Next item

    ThisWorkbook.RefreshAll

End Sub
我也尝试过这段代码,但对我来说也不起作用:

Sub test()
    Dim i As Long, n As Long

    With ActiveWorkbook.SlicerCaches("Week")
        n = .SlicerItems.Count

        For i = 1 To n - 1
            .SlicerItems(i).Selected = False
        Next i

        .SlicerItems(n).Selected = True
    End With
End Sub
Private Sub Workbook_Open()
    Dim today As Date
    today = Now
    Dim todayString As String
    todayString = Format$(today, "d mmm yyyy")
    Dim item As SlicerItem

    For Each item In ThisWorkbook.SlicerCaches("Week").SlicerItems
        If item.Name = todayString Then
            item.Selected = True
        Else
            item.Selected = False
        End If
    Next item

    ThisWorkbook.RefreshAll

End Sub

上面的代码刷新透视表,保存,然后自动关闭excel。我可以添加哪些内容来自动选择最新的时间切片器?

因此,以下内容是由另一个论坛的另一位用户提供的,如果有人遇到类似情况,我想发布适用于我的代码:

 Private Sub Workbook_Open()

 SVAL = Format(Date, "ww")
 SVAL = Format(Date, "YYYY") & SVAL 

 With ActiveWorkbook.SlicerCaches("Slicer_slicername")
     .ClearManualFilter
     For Each oSlicerItem In .SlicerItems
         If oSlicerItem.Name = SVAL Then
             oSlicerItem.Selected = True
         Else
             oSlicerItem.Selected = False
         End If
     Next oSlicerItem
 End With
 End Sub

从源数据中找到您的最大(最新)值,然后循环通过
slicercachelevel.sliceritem
s并选择具有等效名称的值。您可以提供要匹配的预期周字符串吗?