在我正在创建的工作簿中,我创建了一个过程,该过程循环遍历几个工作表,清除了一些范围++,为新的一年准备工作簿。但是,我想在工作表中设置一个给定的单元格,例如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
的任何内容,但我假设错误的原因我会变得相同。
现在,我的问题是 - 有没有办法在非活动工作表中设置活动单元格而不先激活它?如果没有,是否会激活工作簿中的每个工作表来设置活动单元是非常耗费资源的?我想我可以自己查看后者,但任何输入都会很有趣。
答案 0 :(得分:1)
无需select
单元格,而是激活它。试试这个:
替换:
ws.Range("F5").Select
用这个:
Application.Goto ws.Cells(1), 1 'This activates ws and scrolls to place cell `A1` at the top of the window
Application.Goto ws.Range("F5") 'This selects Cell `F5`