Ich habe mal wieder ein Problem mit meiner Prozedur, weil mir immer neue Dinge einfallen, die man noch hinzufügen könnte.
Meine Prozedur erschafft aus einer Zeile einer Tabelle per Klick auf einen Button ein neues Tabellenblatt in einer anderen Datei. Es gibt dem neuen Tabellenblatt (dieses entsteht durch Kopieren einer Vorlage) einen neuen Namen. Bevor das neue Tabellenblatt eingefügt wird, überprüft die Prozedur ob es den zukünftigen Blattnamen schon gibt. Falls der Name schon vorhanden ist, öffnet sich eine InputBox und die Prozedur sagt: Hey diesen Namen gibt es schon, bitte trage einen neuen ein. Im Eingabefeld steht bereits der Name, der in der Datei schon vorgekommen ist. Dies soll die Eingabe erleichtern, in dem man z. B. nur noch eine Zahl oder ein anderes Unterscheidungsmerkmal dahinter schreiben muss. Also z. B. gibt es den Namen Mustermann GmbH schon. Die InputBox erscheint und im Eingabefeld steht schon Mustermann GmbH, so dass der Benutzer nur noch ein Unterscheidungsmerkmal dahinter eintragen und mit OK bestätigen muss.
Mein Problem besteht jetzt darin, dass wieder ein bereits vorhandener Name eintragen werden könnte in die InputBox. Bis jetzt bricht dann immer die Prozedur ab und man muss alles händisch reparieren.
Damit so etwas aber nicht mehr passiert und die Prozedur ebenfalls die Eingabe in die Inputbox überprüft, brauche ich eure Hilfe.
Also kurz gesagt möchte ich, dass die Prozedur die Eingabe in die InputBox kontrolliert, sich eine MessageBox öffnet, die einem sagt, dass man sich einen anderen Namen ausdenken soll, und dass man dann wieder in die InputBox einen anderen Namen eintragen kann. Dies soll solange funktionieren, bis ein korrekter Name eintragen wurde.
Hier der problematische Teil meiner Prozedur:
Dim wbNeuanlaufEinkaufsteil As Workbook
Dim wbFormulare As Workbook
Dim wsBasis As Worksheet
Dim wsVorlage As Worksheet
Dim i As Integer
Dim Blatt As Object
Dim Blattname As String
Dim Vorhanden As Boolean
Dim Blattna As String
'Dimensionierung der letzten Zelle der Spalte A
Dim LZa As Long
'Dimensionierung der Spalte A
Dim SpalteA As String
'letzte beschriebene Zelle in der jeweiligen Spalte finden
SpalteA = "A"
LZa = ActiveSheet.Cells(Rows.Count, SpalteA).End(xlUp).Row
Set wbFormulare = Workbooks.Open("Pfadname")
'vor dem Kopieren muss ein Name definiert werden, damit die Prozedur überprüfen kann, ob der Name schon vorhanden ist
'in Blattna wird der Name festgelegt, den das neu kopierte Tabellenblatt haben soll
Blattna = Workbooks("NeuanlaufEinkaufsteil").Worksheets("Basis").Range("A" & LZa)
'jetzt wird überprüft ob der Name schon vorhanden ist
For Each Blatt In Sheets
If Blatt.Name = Blattna Then
Vorhanden = True 'ist Vorhanden true, dann öffnet sich eine InputBox, die nach einem neuen Namen fragt
i = Sheets.Count
Sheets("Vorlage").Copy After:=Sheets(i)
ActiveSheet.Name = InputBox("Der Tabellenname ist bereits vergeben. Bitte tragen Sie hier einen neuen Namen ein:" & vbLf & "Zum Beispiel:" & vbLf & " Lieferant(1)", "Achtung", Workbooks("NeuanlaufEinkaufsteil").Worksheets("Basis").Range("A" & LZa))
'hier hab ich versucht die Kontrolle einzubauen
MsgBox "Bitte geben Sie einen anderen Namen ein.", vbOKOnly, "Name existiert bereits"
End If
Next
If Vorhanden = False Then 'ist vorhanden false, dann setzt die Prozedur den Namen ein ohne weiter nachzufragen
i = Sheets.Count
Sheets("Vorlage").Copy After:=Sheets(i) 'hier wird das Tabellenblatt "Vorlage" kopiert und hinten angehangen
ActiveSheet.Name = Workbooks("NeuanlaufEinkaufsteil").Worksheets("Basis").Range("A" & LZa) 'das ist der Name, wenn der Tabellenname noch nicht vorhanden ist
End If
'hier wird eine Variable definiert, die den Namen des aktiven Blattes trägt
'die Variable ist da, weil der Blattname immer anders ist
Blattname = ActiveSheet.Name