2012-06-19 65 views
0

我从电子表格模块调用一个函数,该函数在另一个工作表中进行一些处理并返回一个整数。然后,我想在调用该函数的表格中的单元格中写入该整数。我收到错误400,我想我没有正确处理工作表之间的切换。VBA,错误400,在电子表格之间切换

你能帮我解决吗?从子

Function lastNonZero(Rng As Range) As Integer 

i = 19 
Do While ActiveCell.Value = 0 
    ActiveCell.Offset(0, -1).Activate 
    i = i - 1 
Loop 
lastNonZero = i 
End Function 

提取物,位于表A的模块:

For j = startRow To startRow + (nRows - 1) 
     Worksheets("B").Select 
     Range("Y" & j).Activate 
     k = lastNonZero(Worksheets("B").Range("Y" & j)) 
     Worksheets("A").Range("BZ" & j) = k 
Next j 
+0

您的意思是for循环位于Sheet A上的Sub中? – assylias

+0

确切地说,这就是我的意思,非常感谢您的帮助 – Eva

+0

你在哪一行得到错误?作为参数传递给'lastNonZero'的范围从未在函数中使用,这可能不是您的意思。 – assylias

回答

0

尝试更换与Range("Y" & j)行:

Worksheets("B").Range("Y" & j).Activate 

当你调用一个表的模块中Range(xxx),它指的是该表中的范围,无论是否被选中。但是,如果未选中工作表并尝试选择/激活范围,则将返回错误,因为您无法选择不是活动工作表的工作表上的范围。

ps:这不会改变在下一行(k = lastNonZero(Worksheets("B").Range("Y" & j)))中,参数未在lastNonZero函数中使用的事实)。

+0

我会在几分钟内尝试一次,如果它有效,那么就给出点数,谢谢你的帮助,你是正确的最后一行,我忘了删除函数中的参数,这是没有必要了 – Eva

+0

是的它现在工作一切正常,谢谢很多 – Eva