2

我正在开发代码,只要将文本输入到 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
4

2 回答 2

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
于 2013-07-19T05:02:35.063 回答
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
于 2013-07-20T02:15:35.977 回答