我有很多这样的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!
答案 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
(它确定了关于问题的位置)。