错误:对象工作表的方法行失败

时间:2014-07-14 17:13:10

标签: excel-vba vba excel

我有一个用户收到此错误"对象工作表的方法行失败"。代码在我的机器上正常工作。但是用户得到了错误。我无法轻松访问用户的计算机,所以我希望有人可以猜到这个错误。

Set wsB = wbB.Worksheets(1)
If Not wsB Is Nothing Then
    Dim EmpCount As Long
    EmpCount = wsB.Cells(wsB.Rows.Count, 1).End(xlUp).Row '<<Error here
End If

我已经使用此错误梳理了许多网页,其中一些指向不合格的引用。但这不是问题。对于我的具体问题,我无法找到任何其他暗示。

我不认为这里应该有版本问题但是fyi:我有Excel 2007;用户拥有Excel 2010。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

糟糕! [红脸]我终于明白了。

我在问题中的代码遗漏了很多东西;我的实际代码看起来更像是这样:

Dim wbB As Workbook
Dim wsB As Worksheet
Dim i As Long

For i = 1 To 10

    If needOpen Then
        Set wbB = Workbooks.Open(FileNames(i))
        Set wsB = wbB.Worksheets(1)
    End If

    If Not wsB Is Nothing Then
        Dim EmpCount As Long
        EmpCount = wsB.Cells(wsB.Rows.Count, 1).End(xlUp).Row '<<Error here
        wbB.Close (False)
    End If

Next

现在您可以发现错误。我没有把wsB设置为空,所以即使在工作簿关闭之后,变量也不是什么都没有。所以它试图计算不存在的工作表上的行。

只需将其添加到每个循环的末尾即可解决问题:

Set wbB = Nothing
Set wsB = Nothing

总而言之,Rows.Count不依赖于工作簿/工作表是否处于活动状态,但它确实需要一个实际工作表来计算实际行数。