范围缺失值检查中的运行时错误91

时间:2018-07-07 21:31:21

标签: excel vba excel-vba

我正在尝试检查一个单元格值是否出现在两个范围内,如果存在,请将相同的值放入第三个单元格中。我正在使用类似数独的谜题来测试代码。当我要检查值“ 3”是否在范围内时,我在第一条“ if”语句中收到了运行时错误91代码。任何帮助。

从“ D26”开始的测试数据如下所示:

1   4       9   6   3   5   2   8
2       8   1   7   4   3   6   9
    6   9   2   5   8   1   4   7
1   4       9   6   3   5   2   8
2       8   1   7   4   3   6   9
    6   9   2   5   8   1   4   7
1   4       9   6   3   5   2   8
2       8   1   7   4   3   6   9
    6   9   2   5   8   1   4   7

和相关代码:

For r = 26 To 34
    For a = 1 To 9


        Set row1 = Range(Cells(r, 4), Cells(r, 12)).Find(What:=a)
        Set row2 = Range(Cells(r + 1, 4), Cells(r + 1, 12)).Find(What:=a)
        Set row3 = Range(Cells(r + 2, 4), Cells(r + 2, 12)).Find(What:=a)


        If row1 = a And row3 = a And row2 Is Nothing Then

            If WorksheetFunction.CountA(Range(Cells(r + 1, 4), Cells(r + 1, 6))) = 2 Then
                nextfree = Range(Cells(r + 1, 4), Cells(r + 1, 6)).Cells.SpecialCells(xlCellTypeBlanks).Column
                Worksheets("Sheet1").Cells(r + 1, nextfree).Value = a
            End If

        ElseIf row1 = a And row2 = a And row3 Is Nothing Then
            If WorksheetFunction.CountA(Range(Cells(r + 2, 4), Cells(r + 2, 6))) = 2 Then
                nextfree = Range(Cells(r + 2, 4), Cells(r + 2, 6)).Cells.SpecialCells(xlCellTypeBlanks).Column
                Worksheets("Sheet1").Cells(r + 2, nextfree).Value = a
            End If

        ElseIf row2 = a And row3 = a And row3 Is Nothing Then
            If WorksheetFunction.CountA(Range(Cells(r + 2, 4), Cells(r + 2, 6))) = 2 Then
                nextfree = Range(Cells(r + 2, 4), Cells(r + 2, 6)).Cells.SpecialCells(xlCellTypeBlanks).Column
                Worksheets("Sheet1").Cells(r + 2, nextfree).Value = a
            End If

        End If

    Next a
    r = r + 2
Next r
End Sub

1 个答案:

答案 0 :(得分:1)

该代码的问题是StackSet返回一个Find,但是如果未找到搜索词,则该方法返回Range

Nothing个测试If,但是在测试数据的第3行中,数字3不存在。因此,范围对象row3 = arow3。由于没有,测试无效。

(请注意,该测试具有误导性,因为您并未真正测试Nothing-代码正在测试Range。但是VBA掩盖了这一点,Range.Value是默认设置属性,这就是为什么乍一看不清楚错误的逻辑的原因。)

以下代码将分配给三个附加变量,并且Value语句测试

If