我有一个模板(代码中的命名模板)和一个商店编号列表(代码中的命名列表)。我想创建一个与模板相同的新工作表,但用列表中的下一个数字替换一个单元格(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
答案 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