如何解决是否有原因仅在包含“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 举报,一经查实,本站将立刻删除。