工作表隐藏时无法看到表格的命名范围

工作表隐藏时无法看到表格的命名范围

我正在尝试通过 VBA 访问命名范围:

Set rng = selectionSht.Parent.Names(rangeName).RefersToRange

但是,此特定命名范围映射到隐藏工作表上的表格。当工作表被隐藏时,命名范围会从我转到时显示的命名范围列表中消失Formulas->Name Manager,但当我取消隐藏工作表时,它会重新出现在列表中。这不会发生在引用静态范围的其他命名范围上——这似乎只是与表格相对应的命名范围的问题。

当工作表隐藏时,上面的 VBA 代码行返回:

Run-time error '1004':
Application-defined or object-defined error

当工作表隐藏时,如何使该命名范围可读?

答案1

您无法直接执行您想要的操作。在 VBA 中,如果某个单元格对用户不可见,则 VBA 也看不到它。例如,如果您将单元格的宽度设置为 0,VBA 会将其视为不可见,因此您无法访问它,类似于上面的情况。

保持单元格/行/列隐藏的同时完成任务的方法是执行以下操作:

  1. 转动Application.ScreenUpdating = False
  2. .Show您所引用的隐藏区域
  3. 对给定的单元格执行你需要做的任何操作
  4. .Hide你工作的领域
  5. 重新开启Application.ScreenUpdating = True

从用户的角度来看,由于屏幕更新已关闭,单元格/行/列从未显示,但您仍然可以完成任务。

答案2

与其他答案相反,您可以访问隐藏工作表上的范围。您只需正确引用它们。无需使用RefersToRangeNames

将范围作为范围而不是名称引用。使用完全限定的名称,从工作簿开始。

Set rng = Workbooks("BookName").Sheets("SheetName").Range("RangeName")

此示例使用 VBA 对象命名(而不是 Excel 命名),并假定您已重命名 VBAProject:

Set rng = MyProject.Sheet1.Range("rangename")

建议不要将隐藏的工作表命名为“selectionSht”。“Selection”表示可见。

相关内容