首页 > 解决方案 > 运行时错误:查看#N/A 字符串时显示 13

问题描述

我正在尝试运行以下代码以查找 A 列是否具有关键字“SUP ID”。SUP ID 的任何实例都将更新为相邻列上的数字1,其余的都将变为0。但是,在找到 #N/A 字时,出现错误 Run-Time Error '13': Type Mismatch

Sub m()

For i = 2 To 10
    If Cells(i, 1).Value = "SUP ID" Then
        Cells(i, 2).Value = 1
    Else
        Cells(i, 2).Value = 0
    End If
Next i

End Sub

在此处输入图像描述

标签: excelvba

解决方案


您将需要在现有 if 之前检查错误:

Sub m()    
    With ActiveSheet        'Better to use actual sheet: WorkSheets("Sheet1")
        'load with all `0`
        .range("B2:B10").Value = 0
        For i = 2 To 10
            If Not IsError(.Cells(i, 1)) Then
                If .Cells(i, 1).Value = "SUP ID" Then
                    .Cells(i, 2).Value = 1
                End If
            End If
        Next i
    End with        
End Sub

只需检查 9 个单元格即可快速运行,但随着范围的增加 vba 引用工作表的次数会减慢速度。

您可以使用数组来加速它。

Sub m()
    With ActiveSheet        'Better to use actual sheet: WorkSheets("Sheet1")
        Dim inputArr() As Variant
        inputArr = .Range("A2:A10").Value

        'Default of Integer is `0`
        Dim outputArr() As Integer
        ReDim outputArr(1 To UBound(inputArr, 1), 1 To 1) As Integer


        For i = LBound(inputArr, 1) To UBound(inputArr, 1)
            If Not IsError(inputArr(i, 1)) Then
                If inputArr(i, 1) = "SUP ID" Then
                    outputArr(i, 1) = 1
                End If
            End If
        Next i

        .Range("B2").Resize(UBound(inputArr, 1)).Value = outputArr
    End With
End Sub

推荐阅读