HERBERS Excel-Forum - das Archiv
Blatt automatisch löschen ....
WalterK

Hallo,
Meine Mappe "Zusammenfassung" hat mehrere Blätter.
Aus anderen Mappen werden über "verschieben/kopieren" Blätter in diese Mappe kopiert.
Wird ein Blatt mit dem Namen "Aufstellung" hinein kopiert, soll geprüft werden, ob in der Mappe "Zusammenfassung" ein solches Blatt schon vorhanden ist. Wenn ja, soll zuerst das "alte" Blatt "Aufstellung" gelöscht werden und dann das neue Blatt "Aufstellung" hinein kopiert werden.
Kann mir jemand behilflich sein.
Servus, Walter

Kopiertes Blatt aus Zielmappe löschen
NoNet

Hallo Walter,
folgende Lösung sollte bei EINEM kopierten Blatt funktionieren :
Kopiere diesen VBA-Code in die Mappe "Zusammenfassung" in das Klassenmodul "DieseArbeitsmappe" im VBA-Editor :
Dim intBlattAnzahl
Private Sub Workbook_WindowActivate(ByVal Wn As Window)
Dim shDummy
If ThisWorkbook.Sheets.Count > intBlattAnzahl Then
On Error Resume Next
Err.Clear
Set shDummy = Sheets(Left(ActiveSheet.Name, Len(ActiveSheet.Name) - 4))
If Err = 0 Then
Application.DisplayAlerts = False
Sheets(Left(ActiveSheet.Name, Len(ActiveSheet.Name) - 4)).Delete
ActiveSheet.Name = Left(ActiveSheet.Name, Len(ActiveSheet.Name) - 4)
Application.DisplayAlerts = True
End If
On Error GoTo 0
End If
End Sub
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
intBlattAnzahl = ThisWorkbook.Sheets.Count
End Sub
Gruß, NoNet
PS : Das funktioniert allerdings nur, wenn EIN Blatt kopiert wurde (dieses ist dann das aktuelle Blatt), falls mehrere Blätter kopiert wurden, versagt das Makro, da nicht feststellbar ist, WELCHE Blätter hinein kopiert wurden (Excel bietet dazu leider kein Ereignis und kein passendes Objekt !).
Klappt wunderbar ...
WalterK

Hallo NoNet,
... genau so sollte es sein (die Blätter werden auch nur einzeln hinein kopiert).
Besten Dank und Servus, Walter
Jetzt funktioniert es doch noch nicht ganz...
WalterK

Hallo NoNet,
ich habe es jetzt an meiner Originaldatei ausprobiert.
Der Code funktioniert, solange der Blattname höchstens 27 Stellen lang ist. Bei 28 Stellen funktioniert der Code nicht mehr (darauf muss man erst einmal kommen!?!).
Mein Blattname hat 29 Stellen und der ist so vorgegeben.
Lässt sich da etwas machen?
Danke und Servus, Walter
Ich hatte es fast befürchtet...
NoNet

Hallo Walter,
als ob ich geahnt hätte : Beim Erstellen des Codes war mir diese Begrenzung schon klar :
Da Tabellenblätter maximal 31 Zeichen lang sein dürfen und der VBA-Code den Zusatz " (2)" der kopierten Blätter "abschneidet", lag es nahe, dass Blätter mit mehr als 27 Zeichen im Namen Probleme bereiten würden. Ich hatte nur gehofft, dass Deine Blattnamen deutlich kürzer sind....
Das Problem mit mehr als27 Zeichen lässt sich nicht zu 100% lösen, da man ja nicht erahnen kann, wie das Blatt zuvor hieß ;-). Wenn allerdings zumindest die ersten 27 Stellen eindeutig sind, dann sollte folgender angepasster Code "passen" :
Dim intBlattAnzahl
Private Sub Workbook_WindowActivate(ByVal Wn As Window)
Dim shDummy, shTemp, strShName As String
If ThisWorkbook.Sheets.Count > intBlattAnzahl Then
On Error Resume Next
Err.Clear
strShName = Left(ActiveSheet.Name, Len(ActiveSheet.Name) - 4)
If Len(strShName) < 27 Then
Set shDummy = Sheets(strShName)
Else
Err = 1
For Each shTemp In Sheets
If UCase(shTemp.Name) Like UCase(strShName) & "*" And _
shTemp.Name <> ActiveSheet.Name Then
strShName = shTemp.Name
Set shDummy = shTemp
Err = 0
Exit For
End If
Next
End If
If Err = 0 Then
Application.DisplayAlerts = False
shDummy.Delete
ActiveSheet.Name = strShName
Application.DisplayAlerts = True
End If
On Error GoTo 0
End If
End Sub
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
intBlattAnzahl = ThisWorkbook.Sheets.Count
End Sub
Gruß, NoNet
Besten Dank, jetzt funktionierts. Servus, Walter
WalterK

AW: Jetzt funktioniert es doch noch nicht ganz...
fcs

Hallo Walter,
da ist bei dem Makro in der Form dann nichts zu machen, die Zeichenzahl für Tabellenblattnamen ist auf 31 begrenzt.
Beim Kopieren gleicher Blattnamen fügt Excel ja automatisch die Zählnummer in Klammern ein. Wird dabei die max. Namenslänge erreicht, dann werden Zeichen des Namens überschrieben. Das wird dir hier zum Verhängnis.
Um das zu umgehen müßtest du anders kopieren. Nämlich das zu kopierende Blatt "holen" statt es in die Datei "reinzuschmeissen". Dann kann man vor dem Einfügen des geholten Blattes prüfen ob ein Blatt gleichen Namens schon vorhanden ist. Das ist allerdings etwas aufwendiger in der Programmierung.
Gruß
Franz