【问题标题】:Range fails if sheet is not selected [duplicate]如果未选择工作表,则范围失败[重复]
【发布时间】:2020-04-05 12:13:59
【问题描述】:

我有这段代码应该可以正常工作

Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Auswertung")
...
ws.Range(Cells(2, 2), Cells(lastRow, lastCol)).NumberFormat = "0"

但是,如果未选择工作表,则会失败。错误 1004,对象的 Methode Range 失败。

如果我把它改成

ws.Select
ws.Range(Cells(2, 2), Cells(lastRow, lastCol)).NumberFormat = "0"

它有效。

为什么?在 VBA 中我想避免 select

【问题讨论】:

  • 你也需要符合Cells...ws.Cells
  • @braX 为什么在使用 select 时不需要限定它?
  • @theVBE-it'srightforme 否则Cells指的是 ActiveSheet,可能是错误的工作表。
  • Unqualified Cells / Range 对象总是指向 ActiveSheet。选择“Auswetung”时,细胞指向它。如果选择了另一张工作表,则它指向该工作表。您收到错误的原因是您尝试使用另一张纸上的单元格 ([ActiveSheet.]Cells(2,2)) 在 ws (ws.Range) 上创建一个范围
  • 使用:With ws .Range(.Cells(2, 2), .Cells(lastRow, lastCol)).NumberFormat = "0" End with

标签: excel vba


【解决方案1】:

您也需要限定Cells...Cells 引用不会自动假定它引用与您的ws.Range 相同的工作表,就像您期望的那样。它使用假定的 ActiveSheet 与您的 Range 对象不同。

选项 1:

ws.Range(ws.Cells(2, 2), ws.Cells(lastRow, lastCol)).NumberFormat = "0"

选项 2:

With ws
  .Range(.Cells(2, 2), .Cells(lastRow, lastCol)).NumberFormat = "0"
End With

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-26
    • 1970-01-01
    • 2015-05-05
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多