我有一个用户收到此错误"对象工作表的方法行失败"。代码在我的机器上正常工作。但是用户得到了错误。我无法轻松访问用户的计算机,所以我希望有人可以猜到这个错误。
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。
感谢您的帮助。
答案 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不依赖于工作簿/工作表是否处于活动状态,但它确实需要一个实际工作表来计算实际行数。