2016-11-18 123 views
1

我刚开始使用VBA for Excel,遇到了一个问题,我找不到解决方案。我想制作一个宏,它可以制作一份工作表副本并将副本重命名为单元格B8中指定的副本。现在,单元格B8包含一个字符串和一个值(基于公式),如下所示。小区B8的包含文本和公式值的Excel单元格的VBA Handeling

内容

enter image description here

我怎么VBA使用的名称(字符串和数字)作为新的工作表的名称?

Sub NewFunction() 

Dim counter As Integer 

Sheets(1).Copy After:=Sheets(1) 

ActiveSheet.name = Sheets(1).Range("B8").CStr 

End Sub 

在此先感谢!

+0

变化'.CStr'到'.Value' –

+0

我试过了。这是行不通的。 – bgaard

+0

当你尝试它时,你会收到什么错误信息? – CRUTER

回答

1

例如,您不能在表格名称中使用“/”。它可能会出错,但Excel会忽略它。

其次,您正在更改错误表单上的名称。您添加了新工作表,然后参考旧工作表。

第三,不需要使用.CStr作为单元格的值是你想要的,并且因为这是默认属性,所以也不需要使用.Value。

+0

上帝,我觉得很愚蠢。非常感谢。 – bgaard

+0

1)我不'认为第二个建议是正确的:在Copy()'方法后,新工作表成为_active_一个,而后者和_old_工作表在单元格“B8”中具有相同的信息,所以'ActiveSheet.name =表格(1).Range(“B8”)'会起作用(提供了一个有效的工作表名称正在使用)2)关于第三个建议,我只想强调的不是没有_“不需要使用.CStr”_ ,但它不能被使用,因为'Cstr'不是'Range'对象的属性或方法 – user3598756

+0

没错,B8在两者上都应该是相同的。 – Rdster

0

你几乎没有

Sheets(1).Copy After:=Sheets(1) 
ActiveSheet.name = Replace(Replace(Replace(Replace(Range("B8"), "\", "-"), "/", "-"), "?", "-"), "*", "-") 

其中

  • Worksheet对象Copy()方法,新的工作表成为活跃一个

  • 的VBA Replace()方法chain是以确保你不是使用禁用的字符为你的新工作表名称牛逼

仍有可能重名的问题,可通过特定的功能来处理,你可以找到在这里,如果你搜索

+0

感谢您的回复,这是一个聪明的方法! – bgaard

相关问题