2014-07-11 5 views
1

Я много долго превосходят формулу, как этотVBA Функция в Excel Возвращение VALUE

IF(ISNUMBER(E6),IF(E6<standard_hour,0,IF(((E6-standard_hour)*24*60)>90,2,CEILING(((E6-standard_hour)*24*60)/30*0.5,0.5))),VLOOKUP(E6,Refer,2,FALSE)) 

Поскольку я использую эту формулу много в таблице, я решил сделать собственную функцию для этого. Это функция

Function morning_check(start_hour) 
    Dim sheet As Worksheet 
    Set sheet = ActiveWorkbook.Sheets("Setup") 

    If WorksheetFunction.IsNumber(start_hour) Then 
     If start_hour < sheet.Range("E1").Value Then 
      morning_check = 0 
     Else 
      If ((start_hour - sheet.Range("E1").Value) * 24 * 60 > 90) Then 
       morning_check = 2 
      Else 
       morning_check = Application.WorksheetFunction.Ceiling(((start_hour - sheet.Range("E1")) * 24 * 60)/30 * 0.5, 0.5) 
      End If 
     End If 
    Else 
     morning_check = Application.WorksheetFunction.VLookup(start_hour, sheet.Range("Refer"), 2, False) 
    End If 

End Function 

вход этой функции может быть строка (пример: «TS») или времени (например, 7:00)

Использование строки в качестве ввода, эта функция работать корректно, но когда я использую время, просто бросаю #Value!

+0

Какая строка является источником ошибки? Excel следует выделить его, если вы выберете Debug. –

+0

Его выделение первая строка – l1th1um

ответ

1

Ваша ошибка исходит из следующих строк:

Set standard_hour = TimeValue(sheet.Cells("E1")) 
Set user_hour = TimeValue(start_hour) 

Set в VBA используется для создания объекта, в то время как вы просто пытаетесь установить переменную. Вот почему вы получаете сообщение об ошибке «Object Required».

Просто оставьте слово Set, и вы сможете продолжить свою отладку.

В качестве следствия (если ваша копия Excel вела себя как моя), Excel выделил первую строку желтого цвета (что не помогло), но также автоматически выбирает текст standard_hour (который идентифицировал местоположение на проблема).

+0

Привет, я редактирую свой код, и теперь он не бросает ошибку снова, но он все еще не работает для non string (первая ветвь IF) – l1th1um

+0

Просто игнорируйте, теперь все работает нормально. на последнем шаге я забыл форматировать свою ячейку: D. В любом случае, спасибо за объяснение. Это мой первый раз, используя VBA – l1th1um