【问题标题】:VBA: Referencing a Worksheet in the Active WorkbookVBA:在活动工作簿中引用工作表
【发布时间】:2018-03-22 07:13:48
【问题描述】:

虽然这看起来很基本,但当我尝试在宏的工作簿上的某个工作表中选择一个单元格时,我不断收到一条错误消息。有谁知道为什么这不起作用?我收到错误消息运行时错误“1004”。 工作表名称为“Sheet1”,我的代码如下:

 Application.ActiveWorkbook.Worksheets("Sheet1").Range("N2").Select

【问题讨论】:

  • 先选择工作表Sheets("Sheet1").Select
  • Application.Goto (ActiveWorkbook.Sheets("Sheet1").Range("N2")) support.microsoft.com/en-us/help/291308/…
  • 你的代码还在做什么?你能把整个事情发过来吗?在此之前可能会发生一些事情,这会给您带来问题。那么最好回顾一下how to avoid using select
  • 谢谢大家,第一个建议奏效了。我将不得不尝试 Goto 命令以备将来使用。我将代码更改为 Sheets("Sheet1").Select Range("N2").Select
  • @luke Application.Goto (ActiveWorkbook.Sheets("Sheet1").Range("N2")) 等价于Application.Goto ActiveWorkbook.Sheets("Sheet1").Range("N2").Value。我想你的意思是说Application.Goto ActiveWorkbook.Sheets("Sheet1").Range("N2")

标签: vba excel


【解决方案1】:

在不需要时使用ActiveWorkbook 是一种不好的做法。将工作簿和工作表设置为可以调用的实际变量总是更好。我认为您的代码正在激活另一个工作簿,然后尝试在它找不到的工作表中选择一个范围。

Sub TryThis()

    Dim wbk As Workbook
    Dim ws As Worksheet

    Set wbk = Workbooks("myWorkbook.xlsm")
    Set ws = wbk.Worksheets("Sheet1")

    'Now when we say "ws." it is actually "Workbooks("myWorkbook.xlsm").Worksheets("Sheet1")."

    'This is okay to start with but it's better to work with the cells directly
    ws.Select
    Range("N2").Select
    Selection = "myText"

    'This is much faster and you won't have to worry about what is currently selected
    ws.Range("N2") = "myText"

End Sub

【讨论】:

  • 不回答问题,不管Active 通常是不好的做法
  • Application.Goto (Workbooks("myWorkbook.xlsm").Sheets("Sheet1").Range("N2"))
猜你喜欢
  • 2016-11-08
  • 1970-01-01
  • 1970-01-01
  • 2021-08-29
  • 1970-01-01
  • 2019-03-03
  • 2017-09-16
  • 1970-01-01
  • 2023-04-05
相关资源
最近更新 更多