Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: wenn bestimmtes Tabellenblatt existiert-löschen

wenn bestimmtes Tabellenblatt existiert-löschen
Karsten
Hallo,
Ich möchte per VBA-Code herausfinden ob eine Tabellenblatt mit einem bestimmten Namen (z.B. "XXX") existiert. Wenn nein, dann soll es erstellt werden, wenn ja dann soll es ohne Nachfrage gelöscht werden.
Könnte mir jemand dabei helfen?
Danke
Karsten
Anzeige
AW: wenn bestimmtes Tabellenblatt existiert-löschen
06.10.2010 12:16:41
welga
Hallo,
vllt so:
Sub test()
Dim ws As Worksheet
Dim srstr As String
Dim a As Boolean
a = False
srstr = InputBox("Tabellennamen")
Application.ScreenUpdating = False
Application.DisplayAlerts = False
For Each ws In ThisWorkbook.Worksheets
If ws.Name = srstr Then a = True
Next
If a Then
Sheets(srstr).Delete
Else
Sheets.Add after:=ThisWorkbook.Sheets.Count
Sheets(ThisWorkbook.Sheets.Count).Name = srstr
End If
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub

Gruß
Anzeige
AW: wenn bestimmtes Tabellenblatt existiert-löschen
06.10.2010 12:21:41
welga
Sorry muss natürlich so heißen:
Sheets.Add after:=Sheets(ThisWorkbook.Sheets.Count)
AW: wenn bestimmtes Tabellenblatt existiert-löschen
06.10.2010 12:37:46
Karsten
Hallo welga,
es ging auch nicht und Rudi war schneller.
Nochmal Danke
Gruß
Karsten
AW: wenn bestimmtes Tabellenblatt existiert-löschen
06.10.2010 12:17:32
Rudi
Hallo,
Function SheetExists(sName As String) As Boolean
Dim sh
For Each sh In Sheets
If sh.Name = sName Then
SheetExists = True
Exit Function
End If
Next
End Function
Sub ttx()
Const sName As String = "xxx"
If SheetExists(sName) Then
Application.DisplayAlerts = False
Sheets(sName).Delete
Application.DisplayAlerts = True
Else
Worksheets.Add
ActiveSheet.Name = sName
End If
End Sub

Gruß
Rudi
Anzeige
In der UDF fehlt ein LCase() oder UCase() _oT
06.10.2010 12:22:13
NoNet
_oT : "Tabelle2" "tabelle2"
Mopperkopp
06.10.2010 12:25:25
Rudi
sollt er halt den Namen richtig schreiben ;-)
Gruß
Rudi
AW: wenn bestimmtes Tabellenblatt existiert-löschen
06.10.2010 12:36:30
Karsten
Hallo Rudi,
allerbesten Dank. Dafür hätte ich lange gebraucht und es doch nicht hingekriegt.
Gruß
Karsten
Anzeige
die Function sollte man
06.10.2010 12:48:23
Rudi
wirklich wie von NoNet bemerkt korrigieren:
Function SheetExists(sName As String) As Boolean
Dim sh
For Each sh In Sheets
If LCase(sh.Name) = LCase(sName) Then
SheetExists = True
Exit Function
End If
Next
End Function

Gruß
Rudi
Tabellenblatt per VBA löschen oder erstellen
06.10.2010 12:20:40
NoNet
Hallo Karsten,
hier ein Code-Beispiel :
Sub TabLoeschenErstellen()
Const strshName = "Tabelle2" 'Der Name des zu überprüfenden Blattes
Dim shTmp As Object
On Error Resume Next 'Bei Fehler : Fortfahren im Code
Set shTmp = Sheets(strshName)
If shTmp Is Nothing Then
Worksheets.Add.Name = strshName
Else
Application.DisplayAlerts = False 'Nicht nachfragen
shTmp.Delete
Application.DisplayAlerts = True 'Nicht nachfragen
End If
Set shTmp = Nothing
End Sub
Gruß, NoNet
Anzeige
AW: Tabellenblatt per VBA löschen oder erstellen
06.10.2010 12:40:09
Karsten
Hallo NoNet,
danke für die Mühe, aber ich habe nun Rudis Code drinn.
Gruß
Karsten
;

Forumthreads zu verwandten Themen

Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Tabellenblatt mit VBA prüfen und löschen


Schritt-für-Schritt-Anleitung

Um zu prüfen, ob ein Tabellenblatt existiert und es gegebenenfalls zu löschen, kannst du folgenden VBA-Code verwenden:

Function SheetExists(sName As String) As Boolean
    Dim sh
    For Each sh In Sheets
        If LCase(sh.Name) = LCase(sName) Then
            SheetExists = True
            Exit Function
        End If
    Next
End Function

Sub ttx()
    Const sName As String = "xxx" ' Hier den Namen des Tabellenblatts anpassen
    Application.DisplayAlerts = False
    If SheetExists(sName) Then
        Sheets(sName).Delete
    Else
        Worksheets.Add.Name = sName
    End If
    Application.DisplayAlerts = True
End Sub

Dieser Code überprüft, ob ein Tabellenblatt mit dem Namen "xxx" existiert. Falls ja, wird es gelöscht; falls nicht, wird ein neues Tabellenblatt erstellt.


Häufige Fehler und Lösungen

  1. Fehler: "Subscript out of range"

    • Lösung: Stelle sicher, dass der Name des Tabellenblatts korrekt geschrieben ist und dass keine Leerzeichen am Ende vorhanden sind.
  2. Fehler: "Cannot delete sheet"

    • Lösung: Überprüfe, ob das Blatt geschützt ist. Du musst den Schutz entfernen, bevor du es löschen kannst.
  3. Problem mit Groß-/Kleinschreibung

    • Lösung: Verwende LCase() oder UCase() in deiner Funktion, um die Groß-/Kleinschreibung zu ignorieren.

Alternative Methoden

Eine einfache Alternative, um ein Tabellenblatt zu löschen, ist die Verwendung von On Error Resume Next:

Sub TabLoeschenErstellen()
    Const strshName = "Tabelle2"
    Dim shTmp As Object
    On Error Resume Next
    Set shTmp = Sheets(strshName)
    If shTmp Is Nothing Then
        Worksheets.Add.Name = strshName
    Else
        Application.DisplayAlerts = False
        shTmp.Delete
        Application.DisplayAlerts = True
    End If
    Set shTmp = Nothing
End Sub

Mit dieser Methode wird der Code bei einem Fehler fortgesetzt, was die Handhabung von nicht existierenden Tabellenblättern erleichtert.


Praktische Beispiele

Hier sind einige praktische Anwendungen des Codes:

  • Tabellenblatt für Monatsberichte: Du kannst monatlich ein neues Tabellenblatt erstellen, indem du den Namen dynamisch anpasst (z.B. "Bericht_Januar").
  • Datenbereinigung: Verwende den Code in einem Makro, um alte, nicht mehr benötigte Tabellenblätter automatisch zu löschen.

Tipps für Profis

  • Fehlerbehandlung: Implementiere eine umfassende Fehlerbehandlung in deinem VBA-Code, um unerwartete Probleme zu vermeiden.
  • Screen Updating: Setze Application.ScreenUpdating = False, bevor du mehrere Änderungen vornimmst, um die Leistung zu verbessern.
  • Sicherheitskopien: Bevor du ein Tabellenblatt löschst, erstelle eine Sicherheitskopie, um Datenverlust zu vermeiden.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass ein Benutzer nicht versehentlich ein Tabellenblatt löscht? Du kannst den Benutzer um Bestätigung bitten, bevor du das Löschen durchführst, indem du MsgBox verwendest.

2. Funktioniert dieser Code in Excel 365? Ja, der Code ist mit Excel 365 sowie anderen Versionen von Excel kompatibel.

3. Was passiert, wenn ein Tabellenblatt mit einem ähnlichen Namen existiert? Der Code prüft auf exakte Übereinstimmung des Namens, daher wird nur das genau benannte Blatt betroffen sein.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige