Код VBA, который учитывается, исключает праздничные и выходные дни между начальной и конечной датой - PullRequest
0 голосов
/ 12 июня 2018

Я использовал приведенный ниже код для подсчета фактических рабочих дней, исключая выходные.В базе данных доступа есть таблица для выходных и код написан таким образом, чтобы исключить день из подсчета, если это выходной.Когда я запускаю код, я получаю сообщение об ошибке 2950: зарезервированная ошибка.

У меня нет опыта связывания доступа к Excel, но я включил его из инструмента> ссылки Библиотека объектов MS Access 14.0


Public Function WorkingDays(StartDate As Date, EndDate As Date) As Integer
'-- Return the number of WorkingDays between StartDate and EndDate
Error GoTo err_workingDays

Dim intCount As Integer

If IsDate(StartDate) And IsDate(EndDate) Then
 If EndDate >= StartDate Then

  intCount = 0
  Do While StartDate < EndDate
     StartDate = StartDate + 1

      If Weekday(StartDate, vbMonday) <= 5 And IsNull(DLookup("[Holiday]", "tblHolidays", _
        "[HolDate] = " & Format(StartDate, "\#mm\/dd\/yyyy\#;;;\N\u\l\l"))) Then

        intCount = intCount + 1

     End If
  Loop
  WorkingDays = intCount + 1
   Else
      WorkingDays = -1  
   End If
Else
   WorkingDays = -1  
End If

 exit_workingDays:
   Exit Function

err_workingDays:
   MsgBox "Error No:    " & Err.Number & vbCr & _
   "Description: " & Err.Description
   Resume exit_workingDays

End Function

1 Ответ

0 голосов
/ 13 июня 2018

Вы можете добавить ссылки на Access и DAO:

  • Библиотека объектов Microsoft Access 16.0
  • Движок базы данных Microsoft Office 16.0 Access Библиотека объектов

Затемвключите этот код в свою рабочую книгу:

Public Function IsLookupDate(ByVal SomeDate As Date) As Boolean

    Dim db          As DAO.Database
    Dim rs          As DAO.Recordset
    Dim rsLookup    As DAO.Recordset

    Dim Filter      As String

    Set db = DAO.Workspaces(0).OpenDatabase("d:\path\holidays.accdb")
    Set rs = db.OpenRecordset("tblHolidays", dbOpenDynaset)
    rs.FindFirst "[Date] = #" & Format(SomeDate, "yyyy\/mm\/dd") & "#"

    IsLookupDate = Not rs.NoMatch

End Function

Затем, чтобы проверить выходной:

IsHoliday = NameOfYourWorkbook.IsLookupDate(StartDate)

Конечно, ускорите это, включив его в свой цикл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...