我有这个Do While循环:
Sub TEST_LOOP()
Dim i As Integer
i = 2
Do While Cells(i, 3) <> "" And _
Int(Mid(Cells(i, 3), 12, 2)) = 21
Value = Value + Cells(i, 4)
i = i + 1
Loop
End Sub
我收到一条错误消息:
“运行时错误'13':类型不匹配。
发生问题是因为当循环到达第一个空单元格(i = 7
)时
然后将Int函数应用于空值Mid(Cells(i, 3), 12, 2
不会给出任何结果)。因此,我想知道一旦有问题的单元格不满足两个条件,即是否不为空,并且涉及到21小时,是否有一种有效的方法退出循环。
答案 0 :(得分:1)
您需要首先检查单元格值是否为日期,然后继续。看看是否有帮助:
Sub TEST_LOOP()
Dim i As Long, ws As Worksheet
Set ws = ActiveSheet
For i = 2 To lastRow(ws, "C")
If isDate(ws.Cells(i, 3)) Then
If Int(Mid(ws.Cells(i, 3), 12, 2)) = 21 Then
Value = Value + ws.Cells(i, 4)
End If
End If
Next i
End Sub
Function lastRow(ws As Worksheet, Optional col As Variant = 1) As Long
With ws
lastRow = .Cells(.Rows.Count, col).End(xlUp).Row
End With
End Function
问题在于,在IF()
或Do While
语句中,所有内容都会得到评估-即使前一条语句返回FALSE
。因此,您需要先检查您的单元格是否为日期,然后才能继续操作。