Как заставить Excel автоматически выбирать самую последнюю неделю, используя ограничитель времени в VBA? - PullRequest
2 голосов
/ 18 апреля 2019

У меня есть 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. Что я могу добавить к нему, чтобы автоматически выбрать самый текущий временной срез?

1 Ответ

0 голосов
/ 01 мая 2019

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

 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...