Включая данные предыдущей недели из кодекса VBA Go Forward Forward 8/4 - PullRequest
0 голосов
/ 06 сентября 2018

Я запускаю этот код еженедельно и пытаюсь получить данные с 8/4 до текущего. Месяц август проходил там, где в отчете появлялась каждая предыдущая неделя, но теперь, когда это сентябрь, данные за август исчезли. Можете ли вы помочь мне указать направление изменения кода для включения данных каждой предыдущей недели, начиная с 8/4 и далее?

Function getDates(Optional forDate As String = "1/31/1999") As String Dim rst As Recordset
getDateRange = vbNullString


If forDate = "1/31/1999" Then
    forDate = DateAdd("d", -1, Date)
End If

If DatePart("d", DateAdd("d", 1, forDate)) = 1 Then
eom = True
End If

Set rst = CurrentDb.OpenRecordset("SELECT Day, FiscalMonth, FiscalYear from tbl_Calendar where FiscalYear = (SELECT FIscalYear from tbl_Calendar where day = #" & _
Format(forDate, "Short Date") & "#) and FiscalMonth = (SELECT FiscalMonth from tbl_Calendar where day = #" & _
Format(forDate, "Short Date") & "#)")


If rst.EOF Then Exit Function
rst.MoveLast
rst.MoveFirst
getDates = CStr(rst.Fields("day").Value) & ";"
rst.MoveLast
If DateDiff("d", rst.Fields("day").Value, forDate) < 0 Then
    eom = "False"
Else
    eom = rst.Fields("FiscalMonth").Value & ", " & rst.Fields("FiscalYear").Value
End If
getDates = getDates & IIf(DateDiff("d", rst.Fields("day").Value, forDate) < 0, CStr(forDate), CStr(rst.Fields("day").Value)) & ";" & eom
rst.Close
Set rst = Nothing

End Function

1 Ответ

0 голосов
/ 06 сентября 2018

Во-первых, всегда обрабатывайте даты как даты , а не строки, не числа, не исключения.

Затем, чтобы найти прим предыдущей недели, вы можете использовать:

PrimoPreviousWeek = DateWeekFirst(DateAdd("ww", -1, Date()))

с помощью:

Public Function DateWeekFirst( _
  ByVal datDate As Date, _
  Optional ByVal lngFirstDayOfWeek As VbDayOfWeek = vbUseSystemDayOfWeek) _
  As Date

' Returns the first date of the week of datDate.
' lngFirstDayOfWeek defines the first weekday of the week.

  DateWeekFirst = DateAdd("d", vbSunday - Weekday(datDate, lngFirstDayOfWeek), datDate)

End Function

Также используйте специальное форматирование строковых выражений для значений даты:

Set rst = CurrentDb.OpenRecordset("SELECT Day, FiscalMonth, FiscalYear from tbl_Calendar where FiscalYear = (SELECT FIscalYear from tbl_Calendar where day = #" & _
Format(forDate, "yyyy\/mm\/dd") & "#) and FiscalMonth = (SELECT FiscalMonth from tbl_Calendar where day = #" & _
Format(forDate, "yyyy\/mm\/dd") & "#)")

Затем выполните полное переписывание вашего кода, чтобы использовать тип данных Дата и никаких строк.

...