【问题标题】:VBA, Error 400, switching between spreadsheetsVBA,错误 400,在电子表格之间切换
【发布时间】:2012-06-19 09:49:58
【问题描述】:

我从电子表格模块调用一个函数,该函数在另一张表中进行一些处理并返回一个整数。然后,我想将该整数写入工作表中调用该函数的单元格中。我收到错误 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

从位于 Sheet 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

【问题讨论】:

  • 您的意思是 for 循环在位于工作表 A 上的 Sub 中吗?
  • 没错,就是这个意思,非常感谢您的帮助
  • 您在哪一行得到错误?作为参数传递给lastNonZero 的范围从未在函数中使用,这可能不是您想要做的。
  • 在我调用函数之前,我已经在该行中得到了错误,即Range("Y" & j).Activate........之后函数的输入在工作表 B 和函数处理应在工作表 B 中完成并返回一个整数,然后该整数应写入工作表 A 中的单元格

标签: vba excel


【解决方案1】:

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

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

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

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

【讨论】:

  • 我会在几分钟内尝试,如果可行,然后给你积分,谢谢你的帮助,你对最后一行的看法是对的,我忘了删除函数中的参数, 没必要了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多