一个函数返回一个MsgBox 10倍?

在Excelguru上find一个函数,我改变了一些东西,然后编辑一些东西。 这个想法是使用这个来注册工作时间和分钟。

有一件事在这我不明白:如果我在列中键入错误的时间reff我得到一个味精,它的错误,但它不会消失,除非我点击10次。 我不知道我在做什么错。 整个代码张贴和Im感谢任何帮助。

使用他的函数作为表格中公式的一部分: TimeValue($E2;$F2;"16:00";"18:00";B2;9;C2)

 Function TimeValue(FromTime As String, ToTime As String, StartTime As String, StopTime As String, Optional Weekday As String, Optional Daynr As Integer, Optional Holiday As String) Dim x As Long Dim F As Double Dim T As Double Dim Start As Double Dim Stopp As Double Dim Min As Long Dim Day As Integer Dim OverMid As Boolean Select Case LCase(Weekday) Case "mandag" Day = 1 Case "tirsdag" Day = 2 Case "onsdag" Day = 3 Case "torsdag" Day = 4 Case "fredag" Day = 5 Case "lordag" Day = 6 Case "sondag" Day = 7 Case "x" Day = 8 Case Else Day = 0 End Select OverMid = False If LCase(Holiday) = "x" Then Day = 8 If Len(FromTime) = 0 Or Len(ToTime) = 0 Then Exit Function End If If Len(FromTime) <> 5 Then MsgBox ("Use format TT:MM - From time is wrong:" & FromTime) Exit Function End If If Len(ToTime) <> 5 Then MsgBox ("Use format TT:MM - To time is wrong:" & ToTime) Exit Function End If F = Val(Left(FromTime, 2)) * 60 + Val(Right(FromTime, 2)) T = Val(Left(ToTime, 2)) * 60 + Val(Right(ToTime, 2)) Start = Val(Left(StartTime, 2)) * 60 + Val(Right(StartTime, 2)) Stopp = Val(Left(StopTime, 2)) * 60 + Val(Right(StopTime, 2)) If T = 0 Then T = 24 * 60 If T < F Then T = T + 24 * 60 OverMid = True End If If Stopp = 0 Then Stopp = 24 * 60 For x = F + 1 To T If x > Start And x <= Stopp Then Min = Min + 1 End If Next x If OverMid = True Then For x = 0 To Val(Left(ToTime, 2)) * 60 + Val(Right(ToTime, 2)) If x > Start And x <= Stopp Then Min = Min + 1 End If Next x End If 'If weekday is set, equal to day If Daynr <> 0 Then If Daynr <> 9 Then If Day <> Daynr Then Min = 0 End If If Daynr = 9 And (Day > 5) Then Min = 0 End If End If TimeValue = Min / 60 End Function 

和在床单中的子

 Private Sub Worksheet_Change(ByVal Target As Range) Dim streng As String Dim k As Long Dim r As Long k = Target.Column r = Target.Row If Cells(1, k) = "P" Then If Cells(r, k) = "x" Then Cells(r, 4) = "x" Else Cells(r, 4) = "" End If End If End Sub 

消息框实际上不属于UDF(用作电子表格function的VBA函数)。

而不是消息框,你可以使用如下代码:

 If Len(FromTime) <> 5 Then TimeValue = "Error! Use format TT:MM - From time is wrong:" & FromTime Exit Function 

也许:

 If Len(FromTime) <> 5 Then TimeValue = CVErr(xlErrValue) Exit Function 

这稍后会导致#VALUE! 在单元格中显示。 在电子表格中包含足够的文档,以便用户可以解释这些错误值。