识别工作表而不是其名称

时间:2014-11-27 11:03:06

标签: excel excel-vba vba

可以通过名称来标识工作表,例如:

Dim mysheet As Worksheet
Set mysheet = ThisWorkbook.Sheets("My Sheetname")

现在我想知道是否可以通过名称来识别工作表,例如通过某些唯一ID或某些属性或其他任何内容来识别。

我的问题如下:

请参阅上面的代码段:如果用户更改了工作表的名称(例如,从“我的工作表名称”更改为“您的工作表名称”),则该代码段显然将不再有效。

2 个答案:

答案 0 :(得分:5)

This是一篇非常好的文章,解释说最好使用SheetID(也称为代号)代替Sheet名称。

引用:

  

Codename属性是Excel用于标识的内部名称   每张纸。与Worksheet.Name属性不同,代号仍然存在   无论工作表名称或工作表顺序如何,都是一样的。

也可以更改代码名称,使其更具描述性:

ThisWorkbook.VBProject.VBComponents("Sheet1").Name = "Revenue_Actuals"

然后

Revenue_Actuals.Range("C2").value = 10

工作正常。

使用代号(例如Sheet1.Range("C1").value)是一个好主意,但是如上所述更改代码名称​​在运行时并不是一些开发人员认为的好习惯(例如,请参阅上面链接的文章。)

使用工作表索引是另一种方法,但我个人更喜欢代码名称。

最后,this article列出了可以引用工作表或工作簿的许多方法。

我希望这有帮助!

答案 1 :(得分:1)

你可以通过索引来访问它们,例如对于第二张表

Set mysheet = ThisWorkbook.Sheets(2)