跳过类型不匹配

时间:2018-11-06 13:41:43

标签: excel vba loops error-handling skip

在“ Value =”行上,循环中有一些实例,我将遇到类型不匹配或单元格为空的情况。

有人可以解释一下如果数据集中有错误时,如何使用错误测试跳过这一步并继续执行我的循环吗?

谢谢!

Sub ExpDate()

Dim bRow As Double
Dim tRow As Double
Dim lCol As Double
Dim fCol As Double
Dim ListRow As Double

Dim Value As Date

With ThisWorkbook.Worksheets("Canadian")

bRow = Cells(Rows.Count, 5).End(xlUp).row
tRow = 5
fCol = 7

Do While tRow <= bRow
    lCol = Cells(tRow, Columns.Count).End(xlToLeft).Column

    Do While fCol <= lCol


        Value = Cells(tRow, fCol).Value

        ListRow = Cells(Rows.Count, 1).End(xlUp).row + 1
        Cells(ListRow, 1).Value = Value


    fCol = fCol + 1
    Loop

fCol = 7
tRow = tRow + 1
Loop


Range("A5:A1000").RemoveDuplicates Columns:=Array(1, 1), Header:=xlYes

End With

End Sub

2 个答案:

答案 0 :(得分:2)

几件事。

您只需要检查单元格是否包含日期即可。

user.is_staff = True用于整数变量,而不是Long

您的With语句是多余的,因为您需要在范围引用前面使用点-我已经添加了它们。

Double

答案 1 :(得分:0)

想象一下,您的输入看起来像第A列,并且您想将日期传递到第B列:

enter image description here

应该考虑两个问题-第3行和第5行中的单元格。可以很容易地检查第5行,只要这是一个错误并且?IsError(Cells(5,1)将返回{{1} }。但是,如果尝试检查True,则会出现问题。

一种快速解决问题的方法是使用专用的布尔函数,其中包含?IsError(Cdate("K")),如果On Error Resume Next会话中有任何特定错误,则返回True

CDate(value)

或者您可以使用Sub TestMe() Dim target As Range Dim myCell As Range Set target = Worksheets(1).Range("A1:A6") For Each myCell In target If IsCellDate(myCell) Then Dim someDate As Date someDate = myCell myCell.Offset(0, 1) = someDate End If Next End Sub Public Function IsCellDate(myData As Variant) As Boolean On Error Resume Next '- use this line really with caution! If IsError(CDate(myData)) Then IsCellDate = False Exit Function End If IsCellDate = True End Function 并避免使用this answer中的自定义功能。