Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.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宏复制工作表和计数+;1._Excel_Vba - Fatal编程技术网

Excel VBA宏复制工作表和计数+;1.

Excel VBA宏复制工作表和计数+;1.,excel,vba,Excel,Vba,我试图在工作表概述上创建宏。此工作表应复制并重命名为测试1。如果我返回到概览工作表并再次启动宏,ws的新名称应该是test2,依此类推 我已经尝试了使用Count和if-then的解决方案,但它不起作用。当前它运行一次,然后它说ws已经存在: Sub CopyWs() Dim NewName As String ActiveSheet.Copy Before:=ActiveSheet NewName = "Test " & WsNo + 1 WsNo = WsNo + 1 A

我试图在工作表
概述
上创建宏。此工作表应复制并重命名为
测试1
。如果我返回到概览工作表并再次启动宏,
ws
的新名称应该是
test2
,依此类推

我已经尝试了使用
Count
和if-then的解决方案,但它不起作用。当前它运行一次,然后它说
ws
已经存在:

Sub CopyWs()

Dim NewName As String

ActiveSheet.Copy Before:=ActiveSheet

NewName = "Test  " & WsNo + 1

WsNo = WsNo + 1

ActiveSheet.Name = NewName

End Sub

我不确定这是否是您想要的,但我在过去遇到过类似的问题,我使用以下方法来解决它

    Dim worksheetName As String
    worksheetName = "Test 1"
    worksheetNumber = 2
    CheckName:
        For Each ws in Sheets
            ' If the desired worksheet name exists
            If ws.name = worksheetName Then
                ' Change the worksheetName to be Test x+1 and increment worksheetNumber
                worksheetName = "Test " & worksheetNumber
                worksheetNumber = worksheetNumber + 1
                GoTo CheckName ' return to the CheckName label and start again
            End If
        Next ws
从本质上讲,我们所做的是循环当前工作簿中的每个工作表,并检查其中是否有与我们要插入的工作表同名的工作表。如果他们这样做了,我们将名称更改为新名称并再次检查;如果没有,我们就有了新名字

编辑:另外,我建议将上述代码放入一个以工作表名称为参数的函数中,这样您就可以轻松地更改所需的名称,如下所示:

    Function worksheetName(desiredName As String) As String
        Dim worksheetName As String
        worksheetName = desiredName
        ' rest of code follows ...
    End Function
然后可以这样称呼它:

    NewName = worksheetName("Test")