2013-07-19 87 views
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 
+0

你在哪裏定義和/或賦予'strWsName'的值? – Raybarg

+0

該行代碼錯了,應該刪除,謝謝指出。 –

+0

你是否想將新工作表名稱設置爲「Target.Text」? – Raybarg

回答

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 
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