Excel VBA – 逻辑失败

我有一个电子表格(x4),加起来几个员工的总工作时间。 一名员工的总数达到24小时。 在我的函数中,由于Excel在内部表示小时的方式,等于1.根据“小时”的值,然后格式化单元格以显示每个人的总小时数:分钟。 我已经检查了 – typename(hours)= double。 我不明白为什么hours> = 1在小时= 1时不等于“真”。如果我为该人员添加1分钟的电子表格值,它是否按预期工作?

Public Function format_hours(hours As Variant) As Variant If hours >= 1 Then format_hours = Application.Text(hours, "[hh]:mm") ElseIf hours > 0 Then format_hours = Format(hours, "hh:mm") Else format_hours = 0 End If End Function 

问题是Hours as VariantHours as Variant 可能String ,而不是date/双重forms。 既然你永远不会明确地检查/将其转换为date/双,那么在你的If hours >= 1 Then它可能不会做你期望的隐式转换和比较。

解决scheme:使用明确的转换和比较。 隐含的吸引,因为它们不可避免地产生这样的神秘的错误。