代码之家  ›  专栏  ›  技术社区  ›  Mauro

在使用条件运行循环时,如何跳过13错误(类型不匹配)?

  •  1
  • Mauro  · 技术社区  · 8 年前

    我有以下代码来删除第8列等于0、第4列长度为12个字符的行:

    Sub deletezeros()
    
    Dim i As Integer
    Dim isin As String
    Dim valor As Long
    Dim longitud As Long
    
    Worksheets("2. Con.EMISION").Activate
    
    For i = 200 To 1 Step -1
    
        isin = Cells(i, 4).Value
        longitud = Len(isin)
        valor = Cells(i, 8).Value
    
        If valor = 0 And longitud = 12 Then
            Rows(i & ":" & i).Delete
        End If
    
    Next i
    
    End Sub
    

    问题是,当循环到达某一行时 valor 内容不适合长变量

    13错误:Tpyes不匹配

    有没有一种方法可以让循环跳过这个循环重复,在这种情况下,它可以使用条件或其他东西来保持循环而不停止?

    1 回复  |  直到 8 年前
        1
  •  2
  •   K.Dᴀᴠɪs    8 年前

    您可以使用 isNumeric 检查它是否是一个数字。如果它返回 True ,然后跳过它。否则您可以继续。

    此外,我强烈建议您摆脱 .Activate 并声明您的工作表,然后改用该声明。

    请参见下面的代码修改:

    Sub deletezeros()
    
        Dim i As Integer
        Dim isin As String
        Dim valor As Long
        Dim longitud As Long
    
        'Declare your worksheet
        Dim ws As Worksheet
        Set ws = ThisWorkbook.Worksheets("2. Con.EMISION")
    
        'Avoid using .Activate in lieu of using ws
        Worksheets("2. Con.EMISION").Activate
    
        'Use With ws (optional) for better code clarity
        With ws
            For i = 200 To 1 Step -1
                If IsNumeric(.Cells(i, 4)) = False Then
                    isin = .Cells(i, 4).Value
                    longitud = Len(isin)
                    valor = .Cells(i, 8).Value
    
                    If valor = 0 And longitud = 12 Then
                        .Rows(i & ":" & i).Delete
                    End If
                End If
            Next i
        End With
    End Sub