Я хотел бы обратиться за помощью с функцией NetworkDays.
Меня интересует последний параметр, содержащий праздники. Пока мне удалось заставить его работать с диапазонами ячеек на листе, однако я бы хотел избежать ссылок на ячейки.
Есть ли возможность использовать массивы? Пока все мои попытки не увенчались успехом.
Я попытался определить:
Dim holidayDates() as Variant
holidayDates = Array(DateSerial(2023,1,1),DateSerial(2023,12,25))
и так далее со многими датами между ними
Тогда я бы позвонил
WorksheetFunction.NetworkDays(.Cells(3,3).Value, .Cells(3,3).Value, holidayDates)
чтобы проверить один день, является ли он выходным или праздничным днем. Однако этот подход не работает. Ячейка (3,3) содержит дату в непоследовательном формате, который отлично работает без параметра праздника.
Я также пробовал вместо этого использовать строку с последовательными значениями даты, разделенными запятыми, но это тоже не сработало. Например. DateSerial(2023,1,1) & "," & DateSerial(2023,12,25) и так далее.
Оба подхода были протестированы с обычным форматом даты, а также с функцией DateSerial.
Попробуйте использовать число, которое представляет дата (например: 41268 вместо Dec 15, 2012,).
Непонятно, что вы имеете в виду под «не работает». Ваш алгоритм и код здесь отлично работают и возвращают 0, если дата (дублированная как даты начала и окончания) находится в массиве holidayDates или если это выходной день.
Что именно вы подразумеваете под date in a non-serial format ? Даты хранятся в виде чисел. То, как они отформатированы, не должно иметь значения. Serial format не является одним из перечисленных вариантов формата ячейки.
@RonRosenfeld Непоследовательный формат даты может быть, например. 01.01.2024, я именно это и имел в виду.



Возвращаемое значение DateSerial (это тип даты) должно быть преобразовано в двойной тип.
Dim holidayDates() As Variant
holidayDates = Array(CDbl(DateSerial(2023, 1, 1)), CDbl(DateSerial(2023, 12, 25)))
With ActiveSheet
WorksheetFunction.NetworkDays .Cells(3, 3).Value, .Cells(3, 3).Value, holidayDates
End With
Кажется, здесь все работает без проблем, используя тип данных даты для праздничных дней.
Unable to get the NetworkDays property of the WorksheetFunction class мне вернули без CDbl. Странный.
Я скопировал/вставил ваш код, и он запустился без ошибок, без CDbl с C3 либо пустым, либо содержащим дату.
Разнообразие делектат.
@RonRosenfeld Привет, Черный кот, Рон, у меня была та же проблема/ошибка (извиняюсь, Рон, что не опубликовал сообщение раньше, я все еще новичок на форуме), что и у Черного кота, поэтому я разместил свой вопрос здесь. Я не думал, что серийный номер даты является параметром двойного типа для функции NetworkDays. Однако по какой-то странной причине сегодня он работает без CDbl. Это странно и я не знаю причины. Я хотел бы поблагодарить вас обоих, Рона и Черного кота — вы действительно решили мою проблему и спасли меня.
@Blackcat Добавляю и тебя. Спасибо!
«этот подход не работает» — чем результат отличается от ожидаемого?