excel-vba 工作表.Name,.Index或.CodeName

示例

我们知道,“最佳实践”指示范围对象应明确引用其父级工作表。可以通过其.Name属性,数字.Index属性或.CodeName属性来引用工作表,但是用户可以通过简单地拖动名称标签或双击同一标签上的工作表并双击来重命名工作表队列。输入不受保护的工作簿。

考虑一个标准的三个工作表。您已按顺序将三个工作表重命名为星期一,星期二和星期三,并编写了引用这些工作表的VBA子过程。现在考虑一个用户来确定星期一属于工作表队列的末尾,然后另一个用户来确定工作表名称在法语中看起来更好。您现在有了一个带有工作表名称标签队列的工作簿,其外观类似于以下内容。

      

如果您使用了以下工作表引用方法之一,则您的代码现在将被破坏。

'reference worksheet by .Name
with worksheets("Monday")
    'operation code here; for example:
    .Range(.Cells(2, "A"), .Cells(.Rows.Count, "A").End(xlUp)) = 1
end with

'reference worksheet by ordinal .Index
with worksheets(1)
    'operation code here; for example:
    .Range(.Cells(2, "A"), .Cells(.Rows.Count, "A").End(xlUp)) = 1
end with

原始订单和原始工作表名称均已受损。但是,如果您使用了工作表的.CodeName属性,则子过程仍然可以运行

with Sheet1
    'operation code here; for example:
    .Range(.Cells(2, "A"), .Cells(.Rows.Count, "A").End(xlUp)) = 1
end with

下图显示了VBA项目窗口([Ctrl] + R),其中按.CodeName然后按.Name列出工作表(在方括号中)。它们的显示顺序不变。顺序.Index按照它们在工作表窗口的名称选项卡队列中显示的顺序获取。

      

重命名.CodeName并不常见,但这并非不可能。只需打开VBE的“属性”窗口([F4])。

工作表.CodeName在第一行中。工作表的.Name位于第十位。两者都是可编辑的。