2016-01-06 135 views
1

我想根据我们在Excel中使用VBA定期使用的模板动态生成自定义数量的工作表。多次动态复制工作表并在Excel中使用VBA重命名

我已经创建了一个“概述”页面,我们可以在其中输入一个用于命名新工作表的范围,但随后想使用隐藏的“主”工作表来生成这些新工作表的内容。

我下面的代码根据范围生成正确数量的页面并复制我们的主模板页面,但不会将两者合并,并将它们留在单独的页面中。

Sub test() 
Dim MyNames As Range, MyNewSheet As Range 

Set masterSheet = ThisWorkbook.Worksheets("Master") 
Set MyNames = Range("A1:A6").CurrentRegion ' load range into variable 

For Each MyNewSheet In MyNames.Cells ' loop through cell range 
    masterSheet.Copy ThisWorkbook.Sheets(Sheets.Count) 'copy master template sheet 
    Sheets.Add.Name = MyNewSheet.Value 
Next MyNewSheet 

MyNames.Worksheet.Select ' move selection to original sheet 
End Sub 

正如你看到的,代码生成两个命名(空白)工作表,并复制我的主人的工作表,默认为命名为“主()”。 enter image description here

+2

我觉得你只是NEET与此'ActiveSheet.name = MyNewSheet.Value' – Fadi

+0

不知道,但昏暗的WS作为excel.worksheet替换该行'Sheets.Add.Name = MyNewSheet.Value':集ws = masterSheet.Copy ThisWorkbook.Sheets(Sheets.Count):ws.name = mynewsheet.value –

+0

@DanBeard,不客气,我张贴这个答案 – Fadi

回答

2

所以我们只需要更换这行:通过列表

ActiveSheet.Name = MyNewSheet.Value 
1

循环,如果表不存在复制的工作表:与此订单

Sheets.Add.Name = MyNewSheet.Value 

Sub CopyMaster() 
    Dim ws As Worksheet, sh As Worksheet 
    Dim Rws As Long, rng As Range, c As Range 
    Set sh = Sheets("Overview") 
    Set ws = Sheets("Master") 

    With sh 
     Rws = .Cells(Rows.Count, "A").End(xlUp).Row 
     Set rng = .Range(.Cells(1, 1), .Cells(Rws, 1)) 
    End With 
    For Each c In rng.Cells 
     If WorksheetExists(c.Value) Then 
      MsgBox "Sheet " & c & " exists" 
     Else: 
      ws.Copy After:=Worksheets(Worksheets.Count) 
      Worksheets(Worksheets.Count).Name = c.Value 

     End If 
    Next c 
End Sub 
Function WorksheetExists(WSName As String) As Boolean 
    On Error Resume Next 
    WorksheetExists = Worksheets(WSName).Name = WSName 
    On Error GoTo 0 
End Function 
相关问题