【问题标题】:Can I set a cell in a sheet as the selected one, without activating the sheet?我可以在不激活工作表的情况下将工作表中的单元格设置为选定单元格吗?
【发布时间】: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 提供的答案。

标签: vba excel


【解决方案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`

Application.Goto Method (Excel)

【讨论】:

  • 嗯,我想它比使用 Activate 为我节省了一行代码,但除非我读错了文档,否则这也会激活工作表?
  • 当然,它会激活工作表(永远不要说它不会)。不同的是,它允许您滚动窗口并将您想要向用户显示的单元格很好地放置在友好的显示中。使用 select 尝试像AA100 这样的单元格,您会看到不同之处。
猜你喜欢
  • 1970-01-01
  • 2022-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多