根据Excel中的列表自动创build工作表

我正试图实现以下。

在范围A5:A50中的“主”工作表上input值时,会运行一个macros,该macros会创build一个与该值相同名称的新工作表,然后将该模板复制到新工作表中。

除此之外,我还想将主工作表中input值旁边的值复制到这个新的工作表中,以便自动进行计算。

例如,我在A5中input“1”,在B5中input“2”。 我想创build一个名称为“1”的新工作表,从“模板”工作表中复制模板,并将B5的值复制到名为“1”的新工作表中。

我有以下代码,但它也试图复制模板工作表与macros运行,这将导致错误,因为名称为“模板”的工作表已经存在。

Sub CreateAndNameWorksheets() Dim c As Range Application.ScreenUpdating = False For Each c In Sheets("Master").Range("A5:A50") Sheets("Template").Copy After:=Sheets(Sheets.Count) With c ActiveSheet.Name = .Value .Parent.Hyperlinks.Add Anchor:=c, Address:="", SubAddress:= _ "'" & .Text & "'!A1", TextToDisplay:=.Text End With Next c Application.ScreenUpdating = True End Sub 

用鼠标右键单击主工作表的名称选项卡并select查看代码 。 当VBE打开时,将以下内容粘贴到标题为Book1 – Master(Code)的窗口中。

 Private Sub Worksheet_Change(ByVal target As Range) If Not Intersect(target, Rows("5:50"), Columns("A:B")) Is Nothing Then On Error GoTo bm_Safe_Exit Application.ScreenUpdating = False Application.EnableEvents = False Application.DisplayAlerts = False Application.Calculation = xlCalculationManual Dim r As Long, rw As Long, w As Long For r = 1 To Intersect(target, Rows("5:50"), Columns("A:B")).Rows.Count rw = Intersect(target, Rows("5:50"), Columns("A:B")).Rows(r).Row If Application.CountA(Cells(rw, 1).Resize(1, 2)) = 2 Then For w = 1 To Worksheets.Count If LCase(Worksheets(w).Name) = LCase(Cells(rw, 1).Value2) Then Exit For Next w If w > Worksheets.Count Then Worksheets("Template").Visible = True Worksheets("Template").Copy after:=Sheets(Sheets.Count) With Sheets(Sheets.Count) .Name = Cells(rw, 1).Value2 .Cells(1, 1) = Cells(rw, 2).Value End With End If With Cells(rw, 1) .Parent.Hyperlinks.Add Anchor:=Cells(rw, 1), Address:="", _ SubAddress:="'" & .Value2 & "'!A1", TextToDisplay:=.Value2 End With End If Next r Me.Activate End If bm_Safe_Exit: Worksheets("Template").Visible = xlVeryHidden Me.Activate Application.Calculation = xlCalculationAutomatic Application.DisplayAlerts = True Application.EnableEvents = True Application.ScreenUpdating = True End Sub 

请注意,这取决于你有一个名为模板的工作表,以生成新的工作表。 它也保持模板工作表xlVeryHidden这意味着,如果你试图取消隐藏,它将不会显示出来。 进入VBE并使用属性窗口(例如F4)将可见性设置为可见。

这个例程应该能够存活多个值到A2:B50中,但是它会放弃列A中已经存在的build议工作表名称。 任何行的列A和列B都必须有值,才能继续。

目前没有检查非法工作表名称字符。 你可能想熟悉这些,并添加一些错误检查。