在excel vba中复制和重命名多个工作表

时间:2015-05-18 15:23:01

标签: excel vba excel-vba

每次单击按钮时,我都会使用以下代码复制主副本。

当我将复制命令放在for循环中时,它会生成所有20个工作表。

但是我想在每次点击一个按钮时生成一张表,并命名为1,2 ..等等。

我已将复制命​​令放在for循环之外

它完美地完成了第一张纸。在下一次单击我得到错误400。 生成这些工作表并重命名它们的任何帮助都将是

    Sub NewSheets()

Dim i As Integer
Dim ws As Worksheet
Dim sh As Worksheet
Set ws = Sheets("Template")
Set sh = Sheets("Sheets Insert")
Application.ScreenUpdating = 0

Sheets("Master").Copy After:=sh

For i = 20 To 2 Step -1
'Sheets("Master").Copy After:=sh   
ActiveSheet.Name = i


Next

End Sub

2 个答案:

答案 0 :(得分:2)

  

我想在每次点击按钮时生成一张表,并命名为1,2 ..等等。

然后根本不要使用循环。只需在按钮上单击一个新工作表,并将工作表命名为正确的数字(1,2,3等)。所以将你的sub改为:

Sub NewSheets()

Dim i As Integer
Dim ws As Worksheet
Dim sh As Worksheet
Set ws = Sheets("Template") ' Note that you are never using this...

Set sh = Sheets(Sheets.Count) ' This will be the last sheet in the Workbook
Application.ScreenUpdating = 0

Sheets("Master").Copy After:=sh 

' change 3 to be the number of static sheets you have in the Workbook.
Sheets(Sheets.Count).Name = Sheets.Count - 3 ' change 3 to the proper number

End Sub

答案 1 :(得分:0)

我想我明白你需要做什么。您的问题是因为在不声明全局变量的情况下无法以这种方式循环。

要获得我认为你想要做的工作 - 首先你需要声明一个全局变量 - 就在模块的顶部:

Global iter As Integer

在这种情况下,它只是我的迭代速记 - 你可以随意调用它。

    Sub NewSheets()

Dim i As Integer
Dim ws As Worksheet
Dim sh As Worksheet
Set ws = Sheets("Template")
Set sh = Sheets("Sheets Insert")
Application.ScreenUpdating = 0

Sheets("Master").Copy After:=sh
If iter = 0 Then
    iter = 1
End If

ActiveSheet.Name = iter
iter = iter + 1

If iter = 20 Then
    iter = 1
End If

End Sub

这使您的代码更容易,因为您不需要进行物理循环。

这是第一次改变0到1 - 然后将计算添加新工作表直到它达到20(请记住这不会重复使用这些名称)