我对vba编码非常陌生,就像昨天刚开始学习它一样,我对这里做错了有疑问。
我正在尝试编写代码,以在某个范围内找到某个单词,检查相邻单元格上的值,在另一个范围内查找这些值,如果找不到,请执行一些操作,然后返回到寻找下一场比赛的第一个范围。
ive设法在插入第二个.find之前使循环正常工作,但是一旦添加它就会中断循环?它给了我`运行时错误91:对象变量或未设置块变量。
我尝试将变量的数据类型从numpy.einsum()
更改为Range
,并从String
更改为String
我尝试了Range
,只是尝试了Set variable =
作为变量
我在到达循环之前释放了第二个variable =
变量
我已经走了很多行
再次,我对此很陌生,如果有人可以帮助我,请非常感激
有问题的行是.Find()
,它在第一个子例程中工作正常,但在第二个子例程中返回错误
Loop While cred.Address <> firstcred
上面的代码返回运行时错误'91':对象变量或With块变量未设置。如何修复此代码,使其正常运行?
答案 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