Ich habe eine Reihe von Zellen (speziell D6: D34), wo alle Werte in den Zellen eine entsprechende Tabelle haben. Da ich Arbeitsblätter nur manuell hinzugefügt habe, wenn ich einen neuen Wert hinzufüge (oder einen Zellenwert ändere), denke ich darüber nach, Private Sub Worksheet_Change(ByVal Target as Range)
zu verwenden, um die automatische Erstellung eines Arbeitsblatts zu ermöglichen, wenn sich die Zellen ändern. Dies ist, was ich versucht habe zu verwenden, aber jetzt bekomme ich einen Fehler, dass der "Blattname bereits existiert", wie es die ganze Spalte nach unten schaut. Ich habe versucht, mit Fehlerbehandlung über diejenigen, die existieren, zu überspringen, aber es endet mit der nächsten zu überprüfen, aber "Sheet1" und "Sheet2", etc. irgendwelche Vorschläge, wie Sie dies einrichten?Verwenden von Worksheet.Change-Ereignis, um ein neues Arbeitsblatt hinzuzufügen
Private Sub Worksheet_Change(ByVal Target As Range)
Dim hlValue As Range
For Each hlValue In Sheets(1).Range("D6:D34")
ActiveWorkbook.Sheets.Add after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = hlValue
Next
End Sub
Ich sollte auch sagen, dass, wenn einer der Zelle Wert gelöscht wird, sollte das Arbeitsblatt auch gelöscht werden. Eine Art von If CellValue <> Exist, Delete
? Ich konnte nichts finden, um zu prüfen, ob es neben ausgefallenen Funktionen existiert. Sollte ich einen von diesen verwenden?
EDIT: Okay, ich habe das jetzt. Dies sollte ausreichen.
Private Sub Worksheet_Change(ByVal Target As Range)
Application.DisplayStatusBar = True
Application.ScreenUpdating = False 'Run faster
Application.DisplayAlerts = False 'Just in case
Dim shtName As Variant
For Each shtName In Sheets(1).Range("D6:D34")
If WorksheetExists((shtName)) Then
'do nothing
Else
ActiveWorkbook.Sheets.Add after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = shtName
Application.StatusBar = "Creating new sheet for " & shtName 'Just in case it's running slowly
Sheets("Admin").Select
End If
Next
Application.StatusBar = "READY"
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
Function WorksheetExists(sName As String) As Boolean
WorksheetExists = Evaluate("ISREF('" & sName & "'!A1)")
End Function
Danke für die Erklärung, David! Ich schätze es sehr. Persönlich liebe ich die Verwendung von Fehlerbehandlung, so dass ich definitiv nicht stirnrunzelnd darauf bin. – dwirony