#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