Acesse a lista de 2007 todos os domingos e sábados em um ano?

1

Existe alguma maneira de listar todos os domingos e sábados para um determinado ano (2013, por exemplo) no Access? Eu tentei procurar e ver que o VBA poderia fazer o truque. O que eu quero é que eu tenha um formulário que peça ao usuário para inserir [data de início] e [data de término]. Quero calcular os [Dias úteis] = [Data final] - [Data inicial] - (qualquer domingo e sábado entre se disponível). Então, estou pensando em listar todos os domingos e sábados naquele ano primeiro, depois, de alguma forma, tentando calcular os [dias úteis]. Qualquer ideia seria apreciada. Obrigado. >. <

Ok, eu consegui criar uma função simples que pode rastrear o sábado em um período de tempo. haha acho que eu posso resolver isso sozinho

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
    
por user224174 03.06.2013 / 03:57

1 resposta

1

Se você pesquisar por dias úteis na referência do desenvolvedor do Access, ele fornecerá o código que fará esse cálculo para você

[Reproduzido para a posteridade]

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
    
por 03.06.2013 / 20:21