所以我有一个程序,我认为上次检查它时工作但显然不是。我遇到的问题是24:00和小时检查。是的,显然是一个经典问题。当进入24:00并且我使用=小时(A1),其中A1有24:00,我得到0的答案,那部分我很好。我甚至还有一些其他的代码,如果timehour = 0,那么timehour = 24,我继续从那里开始,一切都很好。
今天当我进入24:00并在VBA中使用小时功能时,它返回了运行时错误“13”:类型不匹配而不是0。
excel中的单元格E4和E5具有经过验证的数据列表,供用户在01:00,02:00,03:00,...,24:00的下拉列表中进行选择。全部格式化为文本。如果用户在设置中选择了12小时时钟,则时间列在凌晨1:00,凌晨2:00,凌晨3:00,......,11:00 PM,12:00 AM。
Private Sub Set_Work_Hours()
Dim setStartHour As Integer
Dim setEndHour As Integer
Dim sht As Worksheet
'setting the worksheet to be working with
Set sht = ThisWorkbook.Worksheets("Daily")
sht.Activate
'hardcode location of start and end times from daily sheet
setStartHour = Hour(Cells(4, 5).Value)
setEndHour = Hour(Cells(5, 5).Value)
Call Display_Work_Hours(setStartHour, setEndHour)
End Sub
当我从列表中选择24:00时,我在setStartHour或setEndHour处收到错误。 在电子表格的另一个单元格中,我有公式= HOUR(E4)和= HOUR(E5),并且当选择24:00时它们都返回0。
为什么HBA的VBA版本没有返回零?
澄清问题。 为什么我从excel公式到VBA函数得到两个不同的结果?
Private Sub Set_Work_Hours()
Dim setStartHour As Integer
Dim setEndHour As Integer
Dim sht As Worksheet
'setting the worksheet to be working with
Set sht = ThisWorkbook.Worksheets("Daily")
sht.Activate
'hardcode location of start and end times from daily sheet
If Cells(4, 5).Value = "24:00" Then
setStartHour = 0
Else
setStartHour = Hour(Cells(4, 5).Value)
End If
If Cells(5, 5).Value = "24:00" Then
setEndHour = 0
Else
setEndHour = Hour(Cells(5, 5).Value)
End If
Call Display_Work_Hours(setStartHour, setEndHour)
End Sub
答案 0 :(得分:1)
只是扩展我的评论。 Excel将日期和时间存储为序列号。序列号的整数部分是自19/1/19以来的天数,小数部分是小时数。
当您将小时数用作字符串(例如“24:00”)时,Excel会将其转换为序列号,在本例中为1.0
或1/1/1900 0:00
。 VBA不会隐式转换这样的无效时间,这就是您看到错误的原因。在VBA中表示"24:00"
的正确方法是"00:00"
。
答案 1 :(得分:0)
作为一般性建议,为什么不在UNIX后的UNIX时间运行所有DateTime变量,只需转换为电子表格上的用户可读日期?
这种方式没有错误!!
从人类可读日期转换为纪元
DateDiff("s", "01/01/1970 00:00:00", time field)
如何获取当前的纪元时间
DateDiff("s", "01/01/1970 00:00:00", Now())