以下代码段给出了一个"对象变量或者没有设置块变量"错误
cIndx = wsMain.Range(Cells(i, begCol), Cells(i, endCol)).Find("Churn", MatchCase:=True, LookIn:=xlFormulas, Lookat:=xlWhole)
If Not cIndx Is Nothing Then
If wsMain.Cells(i, statusCol) = "Active" Then
wsMain.Cells(i, cIndx.Column) = " "
End If
End If
第一行是罪魁祸首。到目前为止,我的研究表明它与我为Range编制索引的方式有关,但官方文档说明了我尝试的可能性。我已经查看了我在这里找到的所有帖子,其标题与我的标题相同,但它们似乎都没有直接适用于我的情况。任何见解都非常感谢。如果更多上下文有帮助,很乐意发布周围的代码。
还好奇我是否可以这样做:
With wsMain
cIndx = .Range(Cells(i, begCol), Cells(i, endCol)).Find("Churn", MatchCase:=True, LookIn:=xlFormulas, Lookat:=xlWhole)
If Not cIndx Is Nothing Then
If .Cells(i, statusCol) = "Active" Then
.Cells(i, cIndx.Column) = " "
End If
End If
End With
产生与上述相同的错误
答案 0 :(得分:1)
在常规代码模块中,没有合格工作表的Cells()
将始终引用活动表,因此您需要限定这些调用。
在为对象类型变量赋值时,还需要使用Set。
Set cIndx = wsMain.Range(wsMain.Cells(i, begCol), wsMain.Cells(i, endCol)).Find( _
"Churn", MatchCase:=True, LookIn:=xlFormulas, Lookat:=xlWhole)
If Not cIndx Is Nothing Then
If wsMain.Cells(i, statusCol) = "Active" Then
wsMain.Cells(i, cIndx.Column) = " "
End If
End If
答案 1 :(得分:1)
因为cindx是一个范围我认为你会发现语法应该是:
Set cindx = .Range(Cells(i, begCol), Cells(i, endCol)).Find("Churn", MatchCase:=True, LookIn:=xlFormulas, Lookat:=xlWhole)`
这对我有用