我不知道为什么这段代码只在包含一个看似无关紧要的MsgBox行的情况下才能正常运行。如果我尝试使用注释掉的"MsgBox (Offday)“行运行这段代码,我将收到
“运行时错误'13':类型不匹配”。
传递到代码中的字符串以字符串形式存在(例如: Jun 0902:00 AM),并驻留在数据表的第一列中。我试图确定这些数据表的第一列是否从上到下依次排列(例如:单元格(1,1) =12月31日,单元格(2,1)=六月20,单元格(3,1)=1月1)。由于某些原因,只有在包含MsgBox(休假日)行时,代码才能正常工作。显然,手动关闭数千个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
编辑:部分样本数据集
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
五月三时五十分
五月三时四十分
发布于 2021-06-09 08:44:06
我猜想它只对消息框“有效”,因为您没有在整个工作表中运行到数据的末尾。因为在日期比较中使用的是rowcounter + 1
,所以当rowCounter
= TOLASTROW(currentsheet)
时,最后一个" date“单元格将为空。
这将给出类型不匹配错误。
将循环更改为
For rowcounter = 2 To TOLASTROW(currentsheet) - 1
https://stackoverflow.com/questions/67907395
复制相似问题