微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否有原因仅在包含“MsgBox休息日”时才起作用?

如何解决是否有原因仅在包含“MsgBox休息日”时才起作用?

我不确定为什么此代码只能在包含看似无关紧要的 MsgBox 行的情况下才能正常运行。如果我尝试在注释掉“MsgBox (offdays)”行的情况下运行此代码,我会收到错误消息

“运行时错误‘13’:类型不匹配”。

传递到代码中的字符串采用字符串形式(例如:Jun 0902:00 AM),并位于数据表的第一列中。我试图确定这些数据表的第一列是否按从上到下的顺序排列,(例如:Cell(1,1) = Dec 31,Cell(2,1) = Jun 20,Cell(3,1) ) = 1 月 1 日)。出于某种原因,只有在包含 MsgBox(offdays) 行时,代码才能正常工作。显然,手动关闭数以千计的 msgBox 是不可行的,我还没有找到不同的解决方法,我也不确定为什么这会改变它的工作方式。任何建议表示赞赏。

当前代码版本:

Public Sub validSheetVerifier()

Dim sheetcounter As Integer

If VALIDSHEetoRDER = True Then
    MsgBox ("Valid Sheet Order")
    For sheetcounter = 4 To Worksheets.Count
        Worksheets(sheetcounter).Select
        Call SEQUENTIALDATECHECK(ActiveSheet)
        MsgBox ("Valid Sheet")
    Next
Else
    MsgBox ("error invalidsheetorder")
End If
    
End Sub

Function VALIDSHEetoRDER() As Boolean

If Worksheets(1).Name = "DATA" And Worksheets(2).Name = "TEST" And Worksheets(3).Name = "RESULTS" Then
    VALIDSHEetoRDER = True
Else
    VALIDSHEetoRDER = False
End If

End Function

Function SEQUENTIALDATECHECK(currentsheet As Worksheet) As Boolean

Dim rowcounter As Integer
Dim nextrow As Integer
Dim offdays As Integer

    For rowcounter = 2 To TOLASTROW(currentsheet)
        nextrow = rowcounter + 1
        offdays = WorksheetFunction.Days(TOMATCHDAY(rowcounter),TOMATCHDAY(rowcounter + 1))
        ' MsgBox (offdays)
        If offdays < 0 Then
            MsgBox ("error " & ActiveSheet.Name & " row: " & rowcounter)
        Else
        End If
    Next

End Function

Function TOLASTROW(currentsheet As Worksheet) As Integer
    
    TOLASTROW = currentsheet.Cells(Rows.Count,1).End(xlUp).Row
    
End Function

Function TOMATCHSTRING(currentrow As Integer) As String

    TOMATCHSTRING = Cells(currentrow,1)

End Function

Function TOMATCHDAY(currentrow As Integer) As Date

Dim matchday As String
    
    matchday = Left(TOMATCHSTRING(currentrow),6)
    
    TOMATCHDAY = CDate(matchday)

End Function

编辑:部分样本数据集

六月 0902:00 上午
六月 0806:35 上午
六月 0806:00 上午
六月 0803:40 上午
六月 0801:55 上午
六月 0706:35 上午
六月 0706:00 上午
六月 0703:40 上午
六月 0701:55 上午
六月 0407:00 上午
六月 0405:40 上午
六月 0405:05 上午
六月 0404:00 上午
六月 0402:30 上午
六月 0402:00 上午
六月 0306:30 上午
六月 0306:05 上午
六月 0305:00 上午
六月 0303:35 上午
六月 0303:05 上午
六月 0302:05 上午
六月 0102:35 PM
六月 0101:20 下午
六月 0111:45 上午
六月 0111:15 上午
六月 0109:55 上午
六月 0109:20 上午
六月 0107:45 上午
3006 年 5 月 30:55 上午
5 月 3006:00 上午
3005 年 5 月:10 点
5 月 3003:40 上午

解决方法

我的猜测是它只能与消息框一起“工作”,因为您没有遍历整个工作表直到您运行数据的末尾。因为您在日期比较中使用 rowcounter + 1,所以当 rowCounter = TOLASTROW(currentsheet) 时,最后一个“日期”单元格将为空。

那会给你类型不匹配错误。

将循环更改为

For rowcounter = 2 To TOLASTROW(currentsheet) - 1

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。