Как автофильтровать с помощью переменной (WEEKNUM) - PullRequest
1 голос
/ 05 мая 2019

Я пытаюсь создать макрос, который фильтрует таблицу по номеру текущей недели.

Я установил переменную ThisWeek, чтобы дать мне номер текущей недели:

Dim ThisWeek As Variant

ThisWeek = "=WeekNum(TODAY())"

В результате получается номер недели, а в фильтруемом мной столбце содержится список номеров недель (с отображением результата формулы WEEKNUM в соответствии с датами в другом столбце)

Однако я не могу получить критерии для принятия переменной со следующим кодом:

Sheet2.ListObjects("Table3").Range.AutoFilter Field:=10, Criteria1:=ThisWeek

Я искал в Интернете пару часов и перепробовал множество переменных, в том числе:

Sheet2.ListObjects("Table3").Range.AutoFilter Field:=10, Criteria1:=">=" & ThisWeek, Operator:=xlAnd, Criteria2:="<=" & ThisWeek

Я также пытался изменить тип переменной на целое число.

Но не повезло ... любая помощь очень ценится!

Спасибо

Ответы [ 3 ]

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

В VBA вы должны использовать Date() вместо СЕГОДНЯ (), а чтобы получить номер недели, используйте DatePart().

Вы должны проверить, как номера недель учитываются в вашей стране,и адаптируйте параметр firstweekofyear этой функции.

В Европе, например, используйте DatePart("ww", Date, vbMonday, vbFirstFourDays) в VBA.
Соответствующая функция номера недели в вашем рабочем листе - WEEKNUM (..., 21).

Dim ThisWeek As Integer
ThisWeek = DatePart("ww", Date, vbMonday, vbFirstFourDays)
Sheet2.ListObjects("Table3").Range.AutoFilter Field:=10, Criteria1:=ThisWeek
0 голосов
/ 05 мая 2019

Также может быть оценено (не уверен, нужна ли часть "=" &):

ThisWeek = "=" & [WeekNum(TODAY())]
0 голосов
/ 05 мая 2019

Лучший метод, который я могу использовать для AutoFilter, - это разрешить TODAY () ( Date в VBA) до даты начала и окончания, а затем использовать аргументы Criteria1 и Criteria2 AutoFilter с Operator:=xlAnd. Найти предыдущее воскресенье (или любое другое значение DOW) и следующую субботу - непростая задача для VBA с использованием функции Weekday(<date>, [<optional vbDayOfWeek>]) и небольшой математики.

Функции «День недели» и «Дата» используются для постоянного разрешения динамических дат, таких как второе воскресенье мая или третий понедельник ноября.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...