Как перезапустить результат обратно через цикл - PullRequest
0 голосов
/ 24 мая 2019

Я планирую проведение медицинских осмотров, и мне необходимо исключить праздничные дни из процесса составления расписания. Как перенести экзамены в праздничные дни на рабочие дни?

Я написал код для планирования медицинских осмотров на основе текущей даты истечения срока годности. Затем я получил цикл, который проверяет, является ли запланированная дата (Дата 1) государственным праздником, и переносит (Дата 2), если это государственный праздник. Проблема, с которой я сталкиваюсь, заключается в том, что я не могу поместить новую дату в начало цикла, чтобы проверить, является ли она также выходным днем.

    For p = 1 To UBound(PubHol)
        If MedDate(j, 1) = PubHol(p, 1) Then
            MedDate(j, 1) = ShiftMon(t - 2, ActCol)
        End If
    Next p

ShiftMon () - массив, содержащий доступные даты для планирования. ActCol - активный столбец в массиве в соответствии со смещением лиц.

MedDate () запускается через оператор if, чтобы проверить, соответствует ли он каким-либо значениям в PubHol (). Если это так, то он переносит человека на следующую самую раннюю дату, когда он находится на смене (массив ShiftMon: 't' - строка в списке смены).

Что мне нужно, так это снова запустить новую дату (t-2) в цикле, чтобы увидеть, является ли она выходным днем, и если это так, перенести на дату 't-3'. Это должно происходить до тех пор, пока запланированная дата не будет выходным днем.

1 Ответ

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

Используйте словарь, чтобы быстро проверить, являются ли даты государственными праздниками.Это один тип реализации.Также обратите внимание, что словарь может быть создан в менее ограниченной области, так что функция не всегда должна воссоздавать объект.

Function Tester(dt As Date) As Date
    Dim oPubHol As Object
    Dim medDate As Date

    medDate = dt

    Set oPubHol = CreateObject("Scripting.Dictionary")

    oPubHol.Add CDate("01/01/2019"), ""
    oPubHol.Add CDate("01/02/2019"), ""
    oPubHol.Add CDate("05/01/2019"), ""
    oPubHol.Add CDate("06/01/2019"), ""

    Do While oPubHol.exists(medDate)
        medDate = medDate - 1
    Loop

    Tester = medDate
End Function

РЕЗУЛЬТАТЫ:

? tester(cdate("01/02/2019"))
12/31/2018 

? tester(cdate("05/02/2019"))
5/2/2019 
...