VBA получить рабочие дни между двумя датами - PullRequest
0 голосов
/ 01 июля 2019

Итак, у меня есть код, который распечатывает дни "пн-вс". Один день в каждой камере. Что я и хочу. Но в настоящее время он начинается с K и заканчивается на Q, я хочу, чтобы он начинался с начального дня в правильной ячейке.

Так, если начальная дата - 2019-07-03, которая является средой. Он должен начинаться с буквы «M» вместо «K» Кроме того, остановитесь в воскресенье. Поэтому если начальная дата и конечная дата больше недели, она должна автоматически останавливаться после воскресенья.

Dim FirstDate As Date
Dim LastDate As Date
Dim NextDate As Date
Dim DateOffset As Range
Dim DateIter As Date

FirstDate = Source.Range("J" & cell.Row).Value
LastDate = Source.Range("K" & cell.Row).Value
Set DateOffset = Target.Range("K" & LastRow + 1)

For DateIter = FirstDate To LastDate
    DateOffset.Value = DateIter
    Set DateOffset = DateOffset.Offset(0, 1)
Next DateIter

              End With

            End If

        Next cell

enter image description here

EDIT:

Попробую, но иногда он работает, а иногда нет ..

FirstDate = Source.Range("J" & cell.Row).Value
LastDate = Source.Range("K" & cell.Row).Value
Set DateOffset = Target.Range("K" & LastRow + 1)



For DateIter = FirstDate To LastDate
'    DateOffset.Value = DateIter
'    Set DateOffset = DateOffset.Offset(0, 1)

If Weekday(DateIter, vbMonday) = 2 Then

Call anmalan_demo.Details(.Range("K" & LastRow + 1), "Må")


End If

If Weekday(DateIter, vbTuesday) = 3 Then

Call anmalan_demo.Details(.Range("L" & LastRow + 1), "Ti")

End If

If Weekday(DateIter, vbWednesday) = 4 Then

Call anmalan_demo.Details(.Range("M" & LastRow + 1), "On")

End If

If Weekday(DateIter, vbThursday) = 5 Then

Call anmalan_demo.Details(.Range("N" & LastRow + 1), "Tor")

End If

If Weekday(DateIter, vbFriday) = 6 Then

Call anmalan_demo.Details(.Range("O" & LastRow + 1), "Fre")

End If

If Weekday(DateIter, vbSaturday) = 7 Then

Call anmalan_demo.Details(.Range("P" & LastRow + 1), "Lö")

End If

If Weekday(DateIter, vbSunday) = 1 Then

Call anmalan_demo.Details(.Range("Q" & LastRow + 1), "Sö")

End If


Next DateIter

              End With

            End If

        Next cell

1 Ответ

0 голосов
/ 11 июля 2019

Это можно сделать с помощью функции листа NetworkDays() или NetworkDays.Intl(), как описано в этот URL или этот URL .

Если вы хотитеиспользуйте его в VBA, вам может потребоваться следующее:

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