编译错误:Excel中的预期函数或变量

时间:2018-08-14 13:04:53

标签: excel vba excel-vba

我有一个函数,该函数应该花一些时间,例如05:00:00并用当前时间(以及另一个可选时间)检查它,并且如果参数中的时间已经过去,那应该是返回同一时间,但第二天返回。

例如,如果tm = 05:00:00现在= 2018-08-14 12:00:00,则该函数应返回2018-08-15 05:00:00,但是如果时间还没有过去,例如。 tm = 19:00,即现在2018-08-14 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上,我得到了错误:

  

编译错误:

     

期望的函数或变量

我需要一些帮助来弄清楚为什么会发生这种情况以及如何解决它。

1 个答案:

答案 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