我有一个函数,它应该花一个时间,例如,05:00:00 并用当前时间(以及可选的另一个时间(检查它,如果参数中的时间已经过去了,它应该返回相同的时间,但第二天。
例如,如果tm = 05:00:00
和 now =2018-08-14 12:00:00
,则函数应返回2018-08-15 05:00:00
,但如果时间尚未过去,则 ex。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
08:00:00
当前系统时间设置为2018-08-14 18:30:00
。
在第 3 行,schStartTime = DayAdjust(CDbl(schStart))
,我收到错误:
编译错误:
预期函数或变量
我需要一些帮助来弄清楚为什么会发生这种情况以及如何解决它。
您正在尝试使用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