我有一个函数,该函数应该花一些时间,例如05:00:00并用当前时间(以及另一个可选时间)检查它,并且如果参数中的时间已经过去,那应该是返回同一时间,但第二天返回。
例如,如果tm = 05:00:00
现在= 2018-08-14 12:00:00
,则该函数应返回2018-08-15 05:00:00
,但是如果时间还没有过去,例如。 tm = 19:00
,即现在
我的功能是(在单独的模块中):
'Day Adjustment
Sub DayAdjust(tm As Double, Optional tm2 As Double = 0)
If tm2 = 0 Then
tm2 = DayAdjust(tm)
End If
If (Date + tm) < Now() Or (Date + tm) < tm2 Then
tm = (Date + 1 + tm)
End If
MsgBox tm
DayAdjust = tm
End Sub
调用该函数的代码是:
Dim schStart, schEnd As Double
schStart = Range("cdh_schStart").Value
schStartTime = DayAdjust(CDbl(schStart))
schEnd = Range("cdh_schEnd").Value
schEndTime = DayAdjust(schEnd, schStart)
单元格cdh_schStart
包含值05:00:00
,并且cdh_schEnd
的{{1}}的当前系统时间设置为08:00:00
。
在第三行2018-08-14 18:30:00
上,我得到了错误:
编译错误:
期望的函数或变量
我需要一些帮助来弄清楚为什么会发生这种情况以及如何解决它。
答案 0 :(得分:2)
您正在尝试使用schStartTime = DayAdjust(CDbl(schStart))
进行赋值,因此您的sub必须作为函数编写。确实,您的子程序中有一个返回值分配,但我想您是打字错误或没有意识到必须将其声明为函数。
通过@Rory势将tm2无限循环传递给零或未提供时的好点,默认值为零,因为该函数将递归调用而不会中断。您将需要找到适当的方法来处理此问题。
Public Function DayAdjust(tm As Double, Optional tm2 As Double = 0) As Variant
If tm2 = 0 Then
tm2 = DayAdjust(tm)
End If
If (Date + tm) < Now() Or (Date + tm) < tm2 Then
tm = (Date + 1 + tm)
End If
MsgBox tm
DayAdjust = tm
End Function