在Excel中重命名工作表并引用另一个工作表VBA

时间:2016-09-17 11:46:19

标签: excel vba excel-vba

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

forChild

它为最后一行写入类型不匹配错误。你能帮忙吗?

3 个答案:

答案 0 :(得分:6)

接受关于最大代码简化的Socii挑战最短代码是:

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

答案 1 :(得分:4)

使用TreeSet块可以大大简化代码:

With

请参阅此帖子以获取进一步阅读以及其他一些添加新工作表的方法:How to Add a Named Sheet at the end of all excel sheets

答案 2 :(得分:3)

其他答案是正确和有效的,但我想补充一点关于代码出了什么问题的解释,以及为什么他们的代码是要走的路。单行通常看起来很神秘而且令人生畏,好像它们对自己的好处太聪明了,所以理解它们以便有效地使用它们对于良好的编码至关重要。

类型不匹配错误是由于Sheets()函数期望String(工作表的名称),但您传递的是ActiveSheet,这是{ {1}}对象。由于它已经是Sheet,您可以直接使用它并直接更改其Sheet属性:

Name

但更好的是,当它必须模仿典型的用户交互时,Excel会非常慢,您可以手动执行相同的操作,例如在引用之前选择工作表。您应该完全删除以下行

ActiveSheet.Name = ufjulneve

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

最后,除非您需要在其他地方再次引用Sheets("TABLAK")的值,否则您也可以按照其他人的建议将其删除,另外两行保留

ActiveSheet

因为这仍然是指Sheets("MENU").Range("B2").Value,所以在面对后来的变化时会变得迟钝(如果你错误地在两者之间添加另一条改变了纸张选择的行之后会发生什么呢?)那么单行则是最好的方法:

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