AW: Dynamisch Excel Tabellenblätter adden
21.02.2021 22:39:10
Werner
Hallo,
so, und um einer möglichen weiteren Rückfrage wegen "verbotener Zeichen" im Blattname bzw. mehr als 31 Zeichen beim Blattnamen, jetzt noch mal neu mit einer Function /von Udo hier aus dem Forum).
Verbotene Zeichen werden durch Unterstriche ersetzt und der Blattname wird auf 31 Zeichen gekürzt.
Ein Punkt im Battnamen wäre zwar zulässig. Ich lass ihn aber trotzdem ersetzen, damit Excel da nicht ein Datum daraus macht.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim strBlattname As String
If Target.Count = 1 Then
If Target.Column = 1 And Target.Row > 1 Then
If Target "" Then
If Target = Target.Offset(, 1) Or Target.Offset(, 1) = "" Then
strBlattname = Target
strBlattname = LegalSheetName(strBlattname)
For Each Worksheet In ThisWorkbook.Worksheets
If CStr(Worksheet.Name) = strBlattname Then
MsgBox "Hinweis: Das Blatt " & strBlattname & " gibt es schon."
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
Exit Sub
End If
Next Worksheet
Worksheets.Add after:=Worksheets(Sheets.Count)
ActiveSheet.Name = strBlattname
ActiveSheet.Range("A1") = "Inhaber"
ActiveSheet.Range("B1") = "Kontostand"
Application.EnableEvents = False
Target.Resize(1, 2) = strBlattname
Application.EnableEvents = True
Else
strBlattname = Target
strBlattname = LegalSheetName(strBlattname)
For Each Worksheet In ThisWorkbook.Worksheets
If CStr(Worksheet.Name) = strBlattname Then
MsgBox "Hinweis: Das Blatt " & strBlattname & " gibt es schon."
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
Exit Sub
End If
If CStr(Worksheet.Name) = CStr(Target.Offset(, 1)) Then
Worksheet.Name = strBlattname
Application.EnableEvents = False
Target.Resize(1, 2) = strBlattname
Application.EnableEvents = True
Exit For
End If
Next Worksheet
End If
End If
End If
End If
End Sub
Function LegalSheetName(strName As String) As String
Dim arrNotAllowed As Variant, n As Integer
'#### von Udo aus'm Pott ####
'Im Tabellennamen nicht zulässige Zeichen
arrNotAllowed = Array(":", ".", "\", "/", "?", "*", "[", "]")
'unerlaubte Zeichen durch "_" ersetzen
For n = 0 To UBound(arrNotAllowed)
strName = Replace(strName, arrNotAllowed(n), "_")
Next
'Namen auf 31 Zeichen begrenzen
LegalSheetName = Left(strName, 31)
End Function
Gruß Werner