Доступ к списку 2007 все воскресенье и субботу в год?

1107
user224174

Есть ли способ перечислить все воскресенье и субботу для данного года (например, 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
SeanC

Если вы ищете рабочие дни в справочнике разработчика 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 

Похожие вопросы