尝试按内部名称激活工作表会导致“索引超出范围错误”



我在 VBA 中使用一个非常简单的函数时遇到了麻烦:

我正在使用 2 个工作表(计算和绘图(。所以现在我想在必要时激活工作表,用(名称(而不是名称(在工作表的属性中指定(调用它们,以使我的工作表"防白痴"。我不想使用工作表名称,而是使用工作表(名称(,因此当用户更改前端的工作表名称时,执行的代码仍然有效。

F.e. 我的"计算"工作表的名称为"计算",但(名称(为"calc":

Worksheets("calc").Activate(抛出索引范围错误(

calc.Cells()(工作正常(

(name).Activate可以解决问题。在我的示例中,它将是:

calc.Activate

感谢@TimWilliams

编辑:此属性称为 CodeName 并且是只读的!

https://learn.microsoft.com/en-us/office/vba/api/excel.worksheet.codename

如果您尝试以编程方式更改它,则会引发此错误:

https://support.microsoft.com/en-us/help/282830/programmatic-access-to-office-vba-project-is-denied

因此,如果您允许访问 VBA 项目,则只能以编程方式更改它,出于安全原因,默认情况下不允许这样做!

尝试:

Option Explicit
Sub test()
    ThisWorkbook.Worksheets("Sheet1").Activate '<- Activate sheet using the name shown outside
    ws1.Activate '<- Activate sheet using the name shown in the VBA Editor
End Sub

最新更新