Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.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 创建新图纸并在循环中重命名它们_Excel_Vba - Fatal编程技术网

Excel 创建新图纸并在循环中重命名它们

Excel 创建新图纸并在循环中重命名它们,excel,vba,Excel,Vba,我正在使用Excel 2013。我有一个宏,可以添加新工作表并重命名它。但是,当我第二次运行宏时,它会抛出一个错误,因为有一个具有刚刚创建的名称的工作表。例如,我创建了一个工作表并将其命名为Account,下次运行宏时,我希望它是Account1,下次是Account2,依此类推。在没有看到其余代码的情况下,请参见下面的内容,假设您要创建10个新选项卡,从Account1开始,以Account10结束。它的工作原理是使用计数器变量从10开始倒计时,每次创建新选项卡时,它只是将计数器的值附加到sh

我正在使用Excel 2013。我有一个宏,可以添加新工作表并重命名它。但是,当我第二次运行宏时,它会抛出一个错误,因为有一个具有刚刚创建的名称的工作表。例如,我创建了一个工作表并将其命名为Account,下次运行宏时,我希望它是Account1,下次是Account2,依此类推。

在没有看到其余代码的情况下,请参见下面的内容,假设您要创建10个新选项卡,从Account1开始,以Account10结束。它的工作原理是使用计数器变量从10开始倒计时,每次创建新选项卡时,它只是将计数器的值附加到sheetname中

Sub Sheet_Creation()

    Dim counter As Integer

    For counter = 10 To 1 Step -1
        Sheets.Add.Name = "Account" & counter
    Next counter

End Sub

此过程将添加新工作表并正确命名:

Sub AddWS()
    Const WS_NAME = "Account"
    Dim c
    On Error Resume Next
    With Sheets.Add(, ActiveSheet)
        Do
            .Name = WS_NAME & c
            If Err = 1004 Then
                c = c + 1
                Err.Clear
            Else
                Exit Do
            End If
            DoEvents
        Loop
    End With
End Sub
注意:您可以通过编辑第一行来管理应用于新创建工作表的基本名称

更新

根据您的新要求,您需要能够使用问题中的基本名称“Account”访问稍后创建的最新工作表,请使用上述过程的此版本:

Sub AddWS()
    Const WS_NAME = "Account"
    Dim c
    On Error Resume Next
    With Sheets.Add(, ActiveSheet)
        Do
            .Name = WS_NAME & c
            If Err = 1004 Then
                c = c + 1
                Err.Clear
            Else
                Exit Do
            End If
            DoEvents
        Loop
        ThisWorkbook.Names.Add "Newest_" & WS_NAME, .Name
    End With
End Sub
现在,稍后当您希望选择该图纸时,可以使用以下代码:

Sheets([Newest_Account]).Select

上面的宏将创建名为Account的新工作表,其中=工作表总数。

我有一个宏,用于添加。。。我们不知道你在说什么宏。显示您正在使用的宏。你有没有试过改变什么,使名字不总是一样的?您尝试了什么,失败的原因是什么?您好,谢谢回复,这里是code-Sheets.Add.Name=Account。当我第一次运行宏时,它正在添加一个工作表并将其重命名为Account。但当我重新运行宏时,它会抛出一个错误,因为存在一个名为Account的现有工作表。我想要的是,每次运行宏时,请将其命名为Account1、account2等等。。希望我清楚。谢谢,这不是我想要的。您正在将工作表的总数附加到名称。OP仅在工作表已经存在且使用了名称时才需要数字。还有一个问题要问,请您也回答这个问题好吗?Sheets控件。选择范围F14。选择选择。复制SheetsAccount。选择范围A2。选择选择。粘贴特殊粘贴:=xlPasteValues,操作:=xlNone,SkipBlanks:=False,转置:=False Application.CutCopyMode=False--------正如您所看到的,我正在从名为Control的工作表复制一个单元格,并粘贴到新创建的名为Account的工作表中。如果重新运行宏,将创建一个新的工作表Account1,那么有没有办法动态更改它?这是我第一次运行宏-它将创建名为Account的工作表,上面的代码将正常工作。第二次运行宏时,将创建工作表Account1。现在我想要的是,上面的代码为Account1工作?i、 e Selection.copy SheetsAccount应根据创建的新图纸动态更改。如果新创建的工作表是Account5,那么代码应该选择工作表Account5,希望我很清楚。。thanks@SaranyaSuresh请看我答案底部的更新。
Private Sub CreateSheet()
    Dim ws As Worksheet
    With ActiveWorkbook
        Set ws = .Sheets.Add(After:=.Sheets(.Sheets.Count))
        ws.Name = "Account" & Worksheets.Count
    End With
End Sub