运行时错误' 91' ...尝试索引多列

时间:2015-08-25 03:28:03

标签: vba excel-vba excel

以下代码段给出了一个"对象变量或者没有设置块变量"错误

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

产生与上述相同的错误

2 个答案:

答案 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)`

这对我有用