使用excel Range Find和FindNext迭代范围

时间:2018-06-10 08:45:19

标签: excel-vba vba excel

我在很长一段时间后回到VBA,并试图实现一个循环来查找多次出现的值。我有点挣扎,拖网。我找到了这个例子;

Sub Button1_Click()
    With Worksheets(1).Range("a1:a50")
        Set c = .Find(2, LookIn:=xlValues)
        If Not c Is Nothing Then
            firstAddress = c.Address
            Do
                c.Value = 99
                Set c = .FindNext(c)
            Loop While Not c Is Nothing And c.Address <> firstAddress
        End If
    End With
End Sub

这来自MSDN(https://msdn.microsoft.com/en-us/vba/excel-vba/articles/range-find-method-excel)所以我倾向于认为这是一个很好的例子。我重新设计它以适应我的应用程序,并出现错误。然后我尝试直接运行MSDN给出的示例。我得到了同样的错误,如下所示。这发生在

Loop While Not c Is Nothing And c.Address <> firstAddress

Error

任何人都可以对此有所了解。我很惊讶MSDN示例不起作用。

感谢您的期待

1 个答案:

答案 0 :(得分:1)

你会认为它会,但他们从不打扰纠正它。问题是你要删除2的所有实例,所以c最终是Nothing,代码试图检查Nothing的地址(因此错误)。你只需要检查c是否为Nothing。

顺便说一句,你可以使用查找和替换。

Sub Button1_Click()
    With Worksheets(1).Range("a1:a50")
        Set c = .Find(2, LookIn:=xlValues)
        If Not c Is Nothing Then
            Do
                c.Value = 99
                Set c = .FindNext(c)
            Loop While Not c Is Nothing
        End If
    End With
End Sub