从模板创建新电子表格

时间:2013-07-19 04:47:54

标签: excel vba

我正在开发代码,只要文本输入到A列中的任何行,就会创建模板电子表格的副本。电子表格需要在输入的文本后命名。

目前我有以下代码,问题是它没有在我输入的文字后命名新的电子表格。

代码如下:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim wsNew As Worksheet
    If Target.Cells.Count > 1 Then Exit Sub

    On Error Resume Next
    If Not Intersect(Target, Range("A1:A10")) Is Nothing Then
        Set wsNew = Sheets(Target.Text)
        If wsNew Is Nothing Then 
            Worksheets("Template").Copy After:=Worksheets(Worksheets.Count)
        End If
        'name new sheet code here

    End If
End Sub

2 个答案:

答案 0 :(得分:0)

像这样:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim wsNew As Worksheet
    If Target.Cells.Count > 1 Then Exit Sub

    On Error Resume Next
    If Not Intersect(Target, Range("A1:A10")) Is Nothing Then
        Set wsNew = Sheets(Target.Text)
        If wsNew Is Nothing Then 
            Worksheets("Template").Copy After:=Worksheets(Worksheets.Count)
        End If
        'name new sheet
        Worksheets(Worksheets.Count).Name = Target.Text
    End If
End Sub

编辑:

用户可以清空A1:A10中的单元格,这将创建名为“模板(2)”的新标签。您还应该检查:

If Len(Target.Cells.Text) = 0 Then Exit Sub

答案 1 :(得分:0)

我建议这样的事情来创建基于具有所需名称的模板的工作表 - 但是在测试和清理建议的工作表名称后首先是无效字符

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim wsNew As Worksheet
    Dim strSht As String

    If Target.Cells.Count > 1 Then Exit Sub

    If Not Intersect(Target, Range("A1:A10")) Is Nothing Then
        On Error Resume Next
        Set wsNew = Sheets(Target.Text)
        On Error GoTo 0
        If wsNew Is Nothing Then
        If ValidSheetName(Target.Value) Then
        strSht = Target.Value
        Else
        strSht = CleanSheetName(Target.Value)
        End If
        End If
        Worksheets("Template").Copy After:=Worksheets(Worksheets.Count)
        ActiveSheet.Name = strSht
    End If
End Sub

字符串清理代码1

Function ValidSheetName(strIn As String) As Boolean
    Dim objRegex As Object
    Set objRegex = CreateObject("vbscript.regexp")
    objRegex.Pattern = "[\<\>\*\\\/\?|]"
    ValidSheetName = Not objRegex.test(strIn)
End Function

字符串清理代码2

Function CleanSheetName(strIn As String) As String
    Dim objRegex As Object
    Set objRegex = CreateObject("vbscript.regexp")
    With objRegex
        .Global = True
        .Pattern = "[\<\>\*\\\/\?|]"
        CleanSheetName = .Replace(strIn, "_")
    End With
End Function