Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
包含文本和公式值的Excel单元格的VBA处理_Vba_Excel_Macros - Fatal编程技术网

包含文本和公式值的Excel单元格的VBA处理

包含文本和公式值的Excel单元格的VBA处理,vba,excel,macros,Vba,Excel,Macros,我刚开始使用VBA for Excel,遇到了一个无法解决的问题。我想制作一个宏,用于制作工作表的副本,并将副本重命名为单元格B8中指定的内容。现在,单元格B8包含一个字符串和一个值(基于公式),如下所示 细胞B8的含量 如何让VBA使用名称(字符串和数字)作为新工作表的名称 Sub NewFunction() Dim counter As Integer Sheets(1).Copy After:=Sheets(1) ActiveSheet.name = Sheets(1).Range

我刚开始使用VBA for Excel,遇到了一个无法解决的问题。我想制作一个宏,用于制作工作表的副本,并将副本重命名为单元格B8中指定的内容。现在,单元格B8包含一个字符串和一个值(基于公式),如下所示

细胞B8的含量

如何让VBA使用名称(字符串和数字)作为新工作表的名称

Sub NewFunction()

Dim counter As Integer

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

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

End Sub

提前谢谢

首先,不能在工作表名称中使用“/”。它可能会出错,但Excel将忽略它

第二,你把名字改错了。您添加了新工作表,然后引用了旧工作表

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

您就快到了

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

  • 工作表
    对象的
    Copy()
    方法之后,新工作表将变为活动工作表

  • VBA方法
    chain
    是为了确保新工作表名称没有使用禁止字符


仍然存在可能重复名称的问题,如果您搜索

.CStr
更改为
。Value
我已经尝试过了,您可以在这里找到一个特定的函数来处理这个问题。它不起作用。当您尝试它时,您收到了什么错误消息?1)我认为第二个建议不正确:在
Copy()
方法之后,新工作表变为活动工作表,而后者和旧工作表在单元格“B8”中具有相同的信息,因此
ActiveSheet.name=Sheets(1).Range(“B8”)
将起作用(如果使用的是有效的工作表名称)2)关于第三条建议,我只想强调的是,这并不是说“没有必要使用.CStr”,因为
CStr
不是
Range
objectTrue的属性或方法,B8在这两个方面应该是相同的。非常感谢您的评论,认为问题没有自满地解决。调用“B8”
(ActiveSheet.name=Sheets(1.Range(“B8”))
将使用
=“CO”&randtween(1;800)”
而不是单元格(CO 745)的实际字符串/值。感谢您的回复。这是一种聪明的方法!