Excel中的VBA函数返回VALUE

时间:2014-07-11 14:49:18

标签: excel-vba vba excel

我有很多这样的excel公式

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

此函数的输入可以是字符串(例如:&#34; TS&#34;)或时间(例如:07:00)

使用String作为输入,此功能正常工作,但是当我使用时间时,它只是抛出#Value!

1 个答案:

答案 0 :(得分:1)

您的错误来自以下几行:

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

Set用于创建对象,而您只是尝试设置变量。这就是为什么你得到一个&#34; Object Required&#34;错误。

只需删除Set这个词即可,您应该可以继续进行调试。

作为调查问题(如果你的Excel副本表现得像我的那样),Excel突出显示黄色的第一行(这没有用),但它也自动选择了文本standard_hour(它确定了关于问题的位置)。