在Excel中参考另一个工作表VBA重命名工作表

我想通过引用另一个工作表中的单元格的值来重命名我新添加的工作表。 它看起来很简单,但不起作用。

Sheets("TABLAK").Select Sheets.Add Dim ujfulneve As String ujfulneve = Sheets("MENU").Range("B2").Value Sheets(ActiveSheet).Name = ufjulneve 

它为最后一行写入types不匹配错误。 你能帮我吗?

其他答案是正确和有效的,但我想补充一点解释,你的代码出了什么问题,为什么他们的代码是要走的路。 单线运动员往往看起来很神秘和令人生畏,就好像他们太聪明,以至于他们自己的能力不够好,所以要有效地理解他们,才能有效地使用他们,这对于良好的编码是至关重要的。

types不匹配错误是由于Sheets()函数需要一个String (表单的名称),但是您传递给它是一个Sheet对象的ActiveSheet 。 既然它已经是一个Sheet ,你可以直接使用它并更改它的Name属性:

 ActiveSheet.Name = ufjulneve 

但是,甚至比这更好的是,当Excel必须模仿典型的用户交互时,你会手动执行同样的操作,例如在引用它之前select工作表。 你应该删除下面的行

 Sheets("TABLAK").Select 

因为无论如何您select后都不会使用该工作表。 此外,稍后浏览代码时,如果您没有看到/意识到Sheets.Add自动select新创build的工作表,则可能会得到Sheets("TABLAK")ActiveSheet的错误印象,因为它刚被选中前面4行。

最后,除非需要引用Sheets("MENU").Range("B2").Value的值Sheets("MENU").Range("B2").Value再次在其他地方,您可以像其他人所build议的那样去除它,另外保留两行

 Worksheets.Add ActiveSheet.Name = Worksheets("MENU").Range("B2").Value 

既然这仍然是指ActiveSheet ,在面对后来的变化时变得容易(后来如果你错误地在这两个之间增加了一条改变表的select的话会发生什么?),那么一行就是最好的select:

 Worksheets.Add.Name = Worksheets("MENU").Range("B2").Value 

接受Socii挑战最大代码semplification 最短的代码是:

 Worksheets.add.Name = Worksheets("MENU").Range("B2").value 

使用With块可以简化代码:

 With Sheets.Add .Name = Sheets("MENU").Range("B2").Value End With 

看到这篇文章进一步阅读和添加一个新的工作表一些更多的方法: 如何添加一个名称表在所有Excel表