首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数返回MsgBox 10次?

函数返回MsgBox 10次?
EN

Stack Overflow用户
提问于 2015-12-21 14:11:05
回答 1查看 102关注 0票数 1

精益师上找到了一个函数,我在其中更改了一些内容,并将编辑更多内容。我们的想法是用这个来登记工作时间和分钟。

这里有一件事我不明白:如果我在reff列中输入了错误的时间,我会得到一个消息,它是错误的,但是它不会消失,除非我点击它10次。我看不出我做错了什么。整个代码都被发布了,我很感谢你的帮助。

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

代码语言:javascript
复制
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

还有床单上的潜艇

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-21 14:40:10

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

您可以使用以下代码来代替消息框:

代码语言:javascript
复制
If Len(FromTime) <> 5 Then
        TimeValue = "Error! Use format TT:MM - From time is wrong:" & FromTime
        Exit Function

或者也许:

代码语言:javascript
复制
If Len(FromTime) <> 5 Then
       TimeValue = CVErr(xlErrValue)
       Exit Function

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34397668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档