Как мне заставить Excel автоматически выбирать последнюю неделю с помощью time slicer в VBA?

#excel #vba

#excel #vba

Вопрос:

У меня есть 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
 

приведенный выше код обновляет сводные таблицы, сохраняет, а затем автоматически закрывает excel. Что я могу добавить к нему, чтобы автоматически выбирать самый текущий time slicer?

Комментарии:

1. Найдите максимальное (новейшее) значение из исходных данных, затем перебирайте slicercachelevel.sliceritem s и выберите значение с эквивалентным именем

2. Можете ли вы указать ожидаемую строку недели для соответствия?

Ответ №1:

итак, следующее было предоставлено другим пользователем с другого форума, и на случай, если кто-то столкнется с подобной ситуацией, я хотел бы опубликовать код, который сработал для меня:

  Private Sub Workbook_Open()

 SVAL = Format(Date, "ww")
 SVAL = Format(Date, "YYYY") amp; 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