复制excel

时间:2018-02-27 20:50:54

标签: excel vba

我有一个模板(代码中的命名模板)和一个商店编号列表(代码中的命名列表)。我想创建一个与模板相同的新工作表,但用列表中的下一个数字替换一个单元格(E5)。我有这个代码但它似乎没有用。有任何想法吗? :

Sub CreateNewSheet()
    Dim MyCell As Range, MyRange As Range

    Set MyRange = Sheets("List").Range("A2") 'Must change tab name
    Set MyRange = Range(MyRange, MyRange.End(xlDown))

    For Each MyCell In MyRange
        Sheets("Template").Copy After:=Sheets(Sheets.Count) 'creates a new worksheet
        Sheets("List").Select
        MyCell.Select
        Selection.Copy
        Sheets(Sheets.Count).Select
        Range("E5").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Sheets(Sheets.Count).Name = MyCell.Value & "-" ' renames the new worksheet
            Range("E5").Select 'Puts driver name in cell


    Next MyCell
End Sub

1 个答案:

答案 0 :(得分:0)

你在这里覆盖了一件事的范围:

Set MyRange = Sheets("List").Range("A2") 'Must change tab name
Set MyRange = Range(MyRange, MyRange.End(xlDown))

当我认为您想要实际创建循环范围时。注意MyRange.End(xlDown)会将您带到范围中的最后一个非空白单元格,而不是最后一次使用的行。

所以,我已经改变了你的语法,找到了存储在变量中的最后一行,并用它来定义循环范围。

    lastRow = ws.Range("A2").End(xlDown).Row

    Set MyRange = ws.Range("A2:A" & lastRow)

然后我将List工作表放在一个变量中,这样你就不需要前后选择工作表了。

   Dim ws As Worksheet
   Set ws = ThisWorkbook.Worksheets("List")

这意味着每当您添加一张将成为活动表的工作表时,您只需引用访问MyCell值,因为它取决于它来自的工作表名称。

此,

Sheets(Sheets.Count).Name = MyCell.Value & "-"

在命名方面看起来有点狡猾。看起来没有完成。但是,这应该足以让你前进。

Option Explicit

Sub CreateNewSheet()

   Dim MyCell As Range
   Dim MyRange As Range
   Dim ws As Worksheet
   Dim lastRow As Long

   Set ws = ThisWorkbook.Worksheets("List")
   lastRow = ws.Range("A2").End(xlDown).Row

    Set MyRange = ws.Range("A2:A" & lastRow)
    Dim counter

    For Each MyCell In MyRange

        Sheets("Template").Copy After:=Sheets(Sheets.Count) 'creates a new worksheet
        ActiveSheet.Range("E5") = MyCell
        Sheets(Sheets.Count).Name = MyCell.Value & "-" ' renames the new worksheet

    Next MyCell
End Sub