【发布时间】:2015-11-02 22:12:30
【问题描述】:
在我正在创建的工作簿中,我创建了一个程序,该程序循环通过几个工作表清除一些范围++,为新的一年准备工作簿。但是,我想在工作表中设置一个给定的单元格,例如F5 在移动到下一个工作表之前作为活动的,因为这是用户在移动到工作表时最有可能开始输入数据的地方。
但是,尝试将 .Select 和 .Activate 都放入下面代码的第 5 行失败并出现 Select / Activate method of Range class failed。
For Each ws In ThisWorkbook.Worksheets
If InStr(1, ws.CodeName, "Veke_", vbTextCompare) > 0 And Len(ws.CodeName) = 7 Then
Call lås_opp_ark(ws)
Call oppdater_ark_for_nytt_år(ws, førsteSkiftIVeka(dato))
ws.Range("F5").Select
Call lås_ark(ws)
End If
Next ws
试图弄清楚为什么这不起作用,我最终遇到了this documentation-page from Microsoft,它指出:
在成功使用 Selection 属性之前,您必须激活工作簿、激活或选择工作表,然后使用 Select 方法选择区域(或其他对象)。
我的意思是在活动工作表之外的任何东西上使用Select 都不起作用。该页面没有明确说明有关Activate 的任何内容,但我认为我遇到错误的原因是相同的。
现在,我的问题是 - 有没有办法在非活动工作表中设置活动单元格而不先激活它?如果没有,激活工作簿中的每个工作表以设置活动单元格是否会占用大量资源?我想我可以自己检查后者,但任何输入都会很有趣。
【问题讨论】:
-
不 - 你必须激活每张纸。
-
@Rory Darn。好吧,我想这就是我要去做的,然后 =/
-
如果您不想在循环中间激活每个工作表。循环完成后,您总是可以编写更多代码,在第一次循环后设置每个工作表中的活动单元格。这将在最后运行得非常快,并且不会摆脱你的循环。您可以遍历每个
ws并使用@EEM 提供的答案。