1

Есть ли способ перечислить все воскресенье и субботу для данного года (например, 2013) в Access? Я попытался найти и увидеть, что VBA может добиться цели. Я хочу, чтобы у меня была форма, в которой пользователь должен ввести [Дата начала] и [Дата окончания]. Я хочу рассчитать [Рабочие дни] = [Дата окончания] - [Дата начала] - (любое воскресенье и суббота между ними, если они доступны). Поэтому я думаю о том, чтобы сначала перечислить все воскресенье и субботу в этом году, а затем как-то попытаться вычислить [Рабочие дни]. Любые идеи будут оценены. Спасибо. >. <

Хорошо, мне удалось придумать простую функцию, которая может отследить субботу за определенный период времени. ха-ха, думаю, я могу решить это сам

Private Sub Command38_Click()
    str = FindWeekend(#6/3/2013#, #6/17/2013#)
    MsgBox str
End Sub


Public Function FindWeekend(ByVal StartDate As Date, ByVal EndDate As Date) As String
    Dim Weekend() As Date
    Dim i, k As Integer

    i = 0

    Do Until StartDate = EndDate
        If Weekday(StartDate) = 7 Then
            ReDim Preserve Weekend(i)
            Weekend(i) = StartDate
            i = i + 1
        End If
        StartDate = StartDate + 1
        MsgBox StartDate
    Loop

    'Convert stored value to string to debug
    For k = 0 To UBound(Weekend)
        FindWeekend = FindWeekend & Format(Weekend(k), "dd-mm-yyyy") & ","
    Next k

End Function

1 ответ1

1

Если вы ищете рабочие дни в справочнике разработчика Access, он дает вам код, который будет выполнять этот расчет за вас

[Воспроизводится для потомков]

Function Work_Days(BegDate As Variant, EndDate As Variant) As Integer
   Dim WholeWeeks As Variant
   Dim DateCnt As Variant
   Dim EndDays As Integer

   On Error GoTo Err_Work_Days

   BegDate = DateValue(BegDate)
   EndDate = DateValue(EndDate)
   WholeWeeks = DateDiff("w", BegDate, EndDate)
   DateCnt = DateAdd("ww", WholeWeeks, BegDate)
   EndDays = 0

   Do While DateCnt <= EndDate
      If Format(DateCnt, "ddd") <> "Sun" And Format(DateCnt, "ddd") <> "Sat" Then
         EndDays = EndDays + 1
      End If
      DateCnt = DateAdd("d", 1, DateCnt)
   Loop

   Work_Days = WholeWeeks * 5 + EndDays

Exit Function

    Err_Work_Days:

    ' If either BegDate or EndDate is Null, return a zero
    ' to indicate that no workdays passed between the two dates.

    If Err.Number = 94 Then
        Work_Days = 0
        Exit Function
    Else
' If some other error occurs, provide a message.
    MsgBox "Error " & Err.Number & ": " & Err.Description
    End If

End Function

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .