从数字创建列表,然后从列表创建工作表

时间:2015-01-07 04:52:00

标签: vba excel-vba excel

有人可以帮我解决以下问题:如果用户在名为“数据”的工作表中将“10”放入B6,那么B7向下将计算到数字,例如B7为“1”,B8为“2”,B9为“3”,依此类推 然后,用户在这些数字的右侧放置一个值,然后单击屏幕上的按钮,从名为“ML”的模板表创建以下新表。 例如B6为“1”,C6为“3”,则创建4张(“ML”的副本),称为“1.1”,“1.2”和“1.3” B7为“2”,C7为“5”,然后创建5张(“ML”的副本),称为“2.1”,“2.2”,“2.3”,“2.4”和“2.5”

图片说明问题

enter image description here

1 个答案:

答案 0 :(得分:0)

我将所有代码都放到了一个Worksheet_Change事件宏中。这可能比您预期的更自动。应该添加错误控制以避免尝试创建具有重复名称的工作表。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Target.Address = "$B$6" Then
        Application.EnableEvents = False
        With Target.Offset(1, 0)
            Range(.Cells(1), .Cells(1).End(xlDown)).ClearContents
            .Value = 1
            .Resize(Target.Value, 1).DataSeries _
              Rowcol:=xlColumns, Type:=xlLinear, Step:=1
        End With
        Target.Offset(0, 1).Activate
    ElseIf Not Intersect(Target, Columns("C")) Is Nothing Then
        If Target.Row > 6 And Application.Count(Target.Offset(0, -1).Resize(1, 2)) = 2 Then
            On Error GoTo Fìn
            Application.EnableEvents = False
            Dim w As Long
            For w = 1 To Target.Value
                Sheets.Add(after:=Sheets(Sheets.Count)).Name = _
                  Target.Offset(0, -1) & Chr(46) & w
            Next w
            Me.Activate
        End If
    End If
Fìn:
    Application.EnableEvents = True
End Sub

如果您更喜欢按钮来创建其他工作表,并且无法删除相关的代码部分,请回发显示您自己的工作(注意任何产生错误的行)。如上所述,绝对应该解决重复工作表名称的错误控制。