VBA,错误400,在电子表格之间切换

时间:2012-06-19 09:49:59

标签: excel vba excel-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模块中的Sub中提取:

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

1 个答案:

答案 0 :(得分:1)

尝试将Range("Y" & j)行替换为:

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

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

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