嵌套IF语句后,循环不再起作用

时间:2019-05-17 20:23:31

标签: excel vba

我对vba编码非常陌生,就像昨天刚开始学习它一样,我对这里做错了有疑问。

我正在尝试编写代码,以在某个范围内找到某个单词,检查相邻单元格上的值,在另一个范围内查找这些值,如果找不到,请执行一些操作,然后返回到寻找下一场比赛的第一个范围。

ive设法在插入第二个.find之前使循环正常工作,但是一旦添加它就会中断循环?它给了我`运行时错误91:对象变量或未设置块变量。

我尝试将变量的数据类型从numpy.einsum()更改为Range,并从String更改为String

我尝试了Range,只是尝试了Set variable =作为变量

我在到达循环之前释放了第二个variable =变量

我已经走了很多行

再次,我对此很陌生,如果有人可以帮助我,请非常感激

有问题的行是.Find(),它在第一个子例程中工作正常,但在第二个子例程中返回错误

Loop While cred.Address <> firstcred

上面的代码返回运行时错误'91':对象变量或With块变量未设置。如何修复此代码,使其正常运行?

1 个答案:

答案 0 :(得分:0)

在循环中运行“查找”会使您的主代码难以维护,如果您需要在多个地方执行此操作,则最好的方法是将其分解为一个单独的函数。

例如。您可以执行以下操作:

sub subname1()

    Dim hits as Collection, hit 

    Set hits = FindAll(Range("credeb"), "crédito")

    if hits.Count > 0 then
        for each hit in hits
            hit.Offset(0, -2).Resize(1,2).Interior.Color = vbYellow
        next hit
    end if

End Sub

查找所有匹配项的功能:

'return all cells in "rng" which match "val", as a Collection
'  (edit the Find method parameters as needed)
Public Function FindAll(rng As Range, val As String) As Collection

    Dim rv As New Collection, f As Range
    Dim addr As String

    'best to be explicit about exactly what you want Find to do...
    Set f = rng.Find(what:=val, after:=rng.Cells(rng.Cells.Count), _
        LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, _
        SearchDirection:=xlNext, MatchCase:=False)
    If Not f Is Nothing Then addr = f.Address()

    Do Until f Is Nothing
        rv.Add f
        Set f = rng.FindNext(after:=f)
        If f.Address() = addr Then Exit Do
    Loop

    Set FindAll = rv
End Function