当我的变量有错误时,VBA对象必填错误,不知道如何解决

时间:2018-06-21 03:21:20

标签: excel vba excel-vba

我正在遍历命名范围以检查是否有任何单元格错误,如果是,请突出显示它们。条件取决于两列,并且当两者均为错误(#NA)时,代码将不起作用。我该如何解决?

当sCharacter和sCheck为

For i = 10 To 16

    sCharacter = ws_Sheet1.Range("A" & i)
    sCheck = ws_Sheet2.Range("B" & i)

    If IsError(sCharacter) And IsError(sCheck) Then
        ws_Sheet1.Range("D" & i).Interior.Color = RGB(255, 255, 0)
        ws_Sheet1.Range("E" & i).Interior.Color = RGB(255, 255, 0)

    Else
    End If

    If IsError(sCharacter) And sCheck = "Y" Then
        ws_Sheet1.Range("D" & i).Interior.Color = RGB(255, 255, 0)
        ws_Sheet1.Range("E" & i).Interior.Color = RGB(255, 255, 0)
    Else
    End If

Next i

2 个答案:

答案 0 :(得分:1)

这样的事情呢? (从您的原始代码稍作修改,包括将sCharactersCheck更改为rCharacterrCheck,并将它们分别声明为Range。)

Sub Test()
    Dim l As Long
    Dim ws_Sheet1 As Worksheet, ws_Sheet2 As Worksheet
    Dim rCharacter As Range, rCheck As Range

    Set ws_Sheet1 = Sheets("Sheet1")
    Set ws_Sheet2 = Sheets("Sheet2")

    For l = 10 To 16

        Set rCharacter = ws_Sheet1.Range("A" & l)
        Set rCheck = ws_Sheet2.Range("B" & l)

        If IsError(rCharacter) And IsError(rCheck) Then
            ws_Sheet1.Range("D" & l & ":E" & l).Interior.Color = RGB(255, 255, 0)
        End If

        If IsError(rCharacter) And rCheck.Text = "Y" Then
            ws_Sheet1.Range("D" & l & ":E" & l).Interior.Color = RGB(255, 255, 0)
        End If

    Next l
End Sub

答案 1 :(得分:1)

重新键入用于检查变体错误的变量,将使您可以使用IsError()函数来检查错误。使用Cstr()将变量转换为字符串将使您能够测试字符串值而不会引发Error 13 Type mismatch错误。

Error Code Demo

Sub Demo()
    Dim vCharacter As Variant, vCheck As Variant
    Dim ws_Sheet1 As Worksheet, ws_Sheet2 As Worksheet
    Set ws_Sheet1 = Sheet1
    Set ws_Sheet2 = Sheet2

    For i = 10 To 16
        vCharacter = ws_Sheet1.Range("A" & i)
        vCheck = ws_Sheet2.Range("B" & i)

        If IsError(vCharacter) And (IsError(vCheck) Or CStr(vCheck) = "Y") Then
            ws_Sheet1.Range("D" & i).Resize(1, 2).Interior.Color = RGB(255, 255, 0)
        End If

    Next i
End Sub