2014-02-17 22 views
0

Я делаю короткий расчет в VBA, который подсчитывает количество вторников, четвергов, суббот и воскресенья через два временных интервала. Я продолжаю получать различные ошибки, но, насколько мне известно, код звучит. Буду признателен за любую помощь или изменения. В частности, я думаю, что мой DatePart() может быть испорченоОшибка Visual Basic/Access 424 Требуемый объект

Public Function ModWeekdays(ByRef NotificationDate As Date, ByRef OrderDate As Date, ByRef PlacementDate As Date, ByRef ReleaseDate As Date) As Integer 
    Dim numWeekdays As Integer 
    Dim totalDays As Integer 
    Dim totaldays2 As Integer 
    Dim WeekendDays As Integer 
    Dim WeekendDays2 As Integer 
    numWeekdays = 0 
    WeekendDays = 0 
    WeekendDays2 = 0 

    'totalDays = DateDiff(Day, NotificationDate, OrderDate) + 1 

    'for i as integer = 1 to totalDays 

     If DatePart(Day, NotificationDate) = 1 Then 
      WeekendDays = WeekendDays + 1 
     End If 
     If DatePart(dateinterval.Weekday, startDateNotificationDate) = 3 Then 
      WeekendDays = WeekendDays + 1 
     End If 
     If DatePart(dateinterval.Weekday, NotificationDate) = 5 Then 
      WeekendDays = WeekendDays + 1 
     End If 
     If DatePart(dateinterval.Weekday, NotificationDate) = 7 Then 
      WeekendDays = WeekendDays + 1 
     End If 
      NotificationDate = DateAdd("d", 1, NotificationDate) 
      '/////////////////////////////////////////////////////////////////////////// 

    totaldays2 = DateDiff(dateinterval.Day, PlacementDate, ReleaseDate) + 1 

     If DatePart(dateinterval.Weekday, PlacementDate) = 1 Then 
      WeekendDays2 = WeekendDays2 + 1 
     End If 
     If DatePart(dateinterval.Weekday, PlacementDate) = 3 Then 
      WeekendDays2 = WeekendDays2 + 1 
     End If 
     If DatePart(dateinterval.Weekday, PlacementDate) = 5 Then 
      WeekendDays2 = WeekendDays2 + 1 
     End If 
     If DatePart(dateinterval.Weekday, PlacementDate) = 7 Then 
      WeekendDays2 = WeekendDays2 + 1 
     End If 
      PlacementDate = DateAdd("d", 1, PlacementDate) 

         numWeekdays = WeekendDays + WeekendDays2 

         Dim MyReturnVal As Integer 
MyReturnVal = ModWeekdays(NotificationDate, OrderDate, PlacementDate, ReleaseDate) 


End Function 
+0

Какие ошибки вы получаете? Что вы сделали, что заставляет вас думать, что есть ошибки? Мы не можем читать ваши мысли. – enderland

+0

Когда я пытаюсь скомпилировать его, есть многочисленные ошибки. первое, с чем я столкнулся, это то, что «день» в DatePart() выделен, и есть сообщение об ошибке, указывающее, что требуется 424 объект – NavyNuke

ответ

0

Вы должны прочитать MS документации -

DATEPART (интервал, дата [, firstdayofweek [, firstweekofyear]])

DatePart синтаксис функции имеет эти именованные аргументы:

интервал Требуется. Строковое выражение, которое является интервалом времени, которое вы хотите вернуть.

дата Обязательный параметр. Значение Variant (Date), которое вы хотите оценить.

firstdayofweek Дополнительно. Константа, указывающая первый день недели. Если не указано, воскресенье считается.

firstweekofyear Дополнительно. Постоянная, указывающая первую неделю года. Если не указано, первая неделя считается неделей, в которой происходит 1 января.

Настройки

Промежуток аргумент имеет следующие параметры:

Параметр Описание

yyyy Year 
q Quarter 
m Month 
y Day of year 
d Day 
w Weekday 
ww Week 
h Hour 
n Minute 
s Second 

Первая проблема строка кода исправляется

, целью которых
'If DatePart(Day, NotificationDate) = 1 Then 
    If DatePart("w", NotificationDate) = 1 Then 

также для оставшееся, введите «w» или «d», если это то, что вы хотите.

Наконец, проверьте правильность входных аргументов. Мой пример args быстро вызвал ошибку «из памяти» из-за рекурсивного характера алгоритма. tkx

+0

Спасибо, я попробую его – NavyNuke

Смежные вопросы