首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >这是否只有在包含"MsgBox (休假日)“时才起作用?

这是否只有在包含"MsgBox (休假日)“时才起作用?
EN

Stack Overflow用户
提问于 2021-06-09 15:36:57
回答 1查看 57关注 0票数 0

我不知道为什么这段代码只在包含一个看似无关紧要的MsgBox行的情况下才能正常运行。如果我尝试使用注释掉的"MsgBox (Offday)“行运行这段代码,我将收到

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

传递到代码中的字符串以字符串形式存在(例如: Jun 0902:00 AM),并驻留在数据表的第一列中。我试图确定这些数据表的第一列是否从上到下依次排列(例如:单元格(1,1) =12月31日,单元格(2,1)=六月20,单元格(3,1)=1月1)。由于某些原因,只有在包含MsgBox(休假日)行时,代码才能正常工作。显然,手动关闭数千个msgbox是不可行的,而且我还没有找到一个不同的解决方法,我也不知道为什么这会改变它的工作方式。如有任何建议,敬请见谅。

目前版本的代码:

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

编辑:部分样本数据集

6月0902:00

6月0806:35

6月0806:00

6月0803:40

6月0801:55

6月0706:35

6月0706:00

6月0703:40

上午7时55分

6月0407:00

0405:40

6月0405:05

6月0404:00

6月0402:30

6月0402:00

6月0306:30

6月0306:05

6月0305:00

6月0303:35

6月0303:05

6月0302:05

6月0102:35

6月0101:20

6月0111:45

6月0111:15

6月0109:55

6月0109:20

6月0107:45

五月三时零六分55分

5月3:006:00

五月三时五十分

五月三时四十分

EN

回答 1

Stack Overflow用户

发布于 2021-06-09 16:44:06

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

这将给出类型不匹配错误。

将循环更改为

For rowcounter = 2 To TOLASTROW(currentsheet) - 1

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

https://stackoverflow.com/questions/67907395

复制
相关文章

相似问题

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