【发布时间】:2017-10-05 13:24:39
【问题描述】:
我有一个电子表格 (x4),将几名员工的总工作时间加起来。一名员工的总数达到 24 小时。在我的函数中,由于 Excel 如何在内部表示小时数,因此等于 1。根据“小时数”的值,它会格式化单元格以显示每个人的总小时数:分钟。我检查过 - typename(hours)= double。当小时 = 1 时,我看不出为什么 hours>=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
【问题讨论】:
-
不推荐使用
Variant。如果您指定更强的变量类型,您将受益。 (此外,您在format_hours中缺少f- 使用Option Explicit来避免此类错误。) -
我刚刚发现我的变量“小时”有一个前导空格。删除它可以让逻辑按预期工作。那个空间是从哪里来的?
-
很难知道这个函数是如何被调用的。如果您将参数指定为数字而不是变体,那么您会更快地发现这一点。
-
也许你的问题是 24h = 1d+0h ?
-
其实如果这个函数是从工作表公式中调用的,那么参数有时会建议使用Variants,有时返回值会非常依赖使用情况。
Option Explicit我绝对同意。