我的语法问题如下。我一直在收到运行时错误。 请指教。
Dim a As Date Dim b As Date Dim c As Double
If Val(txtStart.Text) = Null Or Val(txtEnd.Text) = Null Then
Cells(eRow, 6).Value = txtEffort.Value
Else
a = Format(txtStart.Text, "hh:mm AMPM")
b = Format(txtEnd.Text, "hh:mm AMPM")
c = Abs(b - a) * 24
Cells(eRow, 6).Value = c
End If`
非常感谢您的及时回复!谢谢!
答案 0 :(得分:0)
根据发布的代码判断,时间正在进行比较。
出现问题是因为Abs
需要一个数字,但事实上,从字符串中减去一个字符串,这会导致抛出异常。
如果a
和b
是字符串变量,其值为" 16:00"后来被格式化为" 4:00",我建议实现一个函数来计算以分钟计的时间,然后是它们的差异。
这是功能:
Function ConvertToMinutes(ByVal time_str As String) As Integer
ConvertToMinutes = 0
On Error GoTo Ende
splts = Split(time_str, ":")
ConvertToMinutes = CInt(splts(0)) * 60 + CInt(splts(1))
Ende:
On Error GoTo 0
End Function
然后,代码看起来像
a = Trim(Format(txtStart.Text, "hh:mm AMPM"))
b = Trim(Format(txtEnd.Text, "hh:mm AMPM"))
C = Abs(ConvertToMinutes(b) - ConvertToMinutes(a)) * 24
请调整计算,以便获得所需的结果。
答案 1 :(得分:0)
您不能将看似日期,时间或日期时间的文本投放到Format
函数中,而不将它们转换为实际日期。
a = Format(CDate(txtStart.Text), "hh:mm AMPM")
b = Format(CDate(txtEnd.Text), "hh:mm AMPM")
您还可以使用TimeValue
。 DateValue
函数只能看到文本字符串的日期部分。 CDate
同时查看日期和时间。
<强>附录:强>
c = Abs(b - a) * 24
会遇到同样的问题。 Format
函数的输出是文本,因此 a &amp; b 现在将成为时间的文本表示。你需要用c = Abs(TimeValue(b) - TimeValue(a)) * 24
将它们转换回代表时间的双打。
您没有提供太多详细信息。可能有更好的方法来做到这一点。