Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1884to1888
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Löschen von Tabellen

Löschen von Tabellen
28.05.2022 18:26:01
Tabellen
Hallo,
ein kleines Problem.
Mit dem Makro sollen Tabelle2 und Tabelle1 gelöscht werden. Ist jetzt eine von beiden nicht vorhanden, gibt es einen Fehler.
wie könnte der Code lauten, es wird nur gelöscht, wenn auch auch die enstprechende Tabelle vorhanden ist?

Sub Tabelle1_Neu()
' es wird "Tabelle1"  und "Tabelle2" gelöscht
Application.DisplayAlerts = False
Sheets("Tabelle2").Delete    'Lösche"Tabelle2"
'Sheets("Tabelle1").Delete    'Lösche"Tabelle1"
Application.DisplayAlerts = True
End Sub
Grüße Nick

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Löschen von Tabellen
28.05.2022 18:32:06
Tabellen
Hallo Nik,
evtl. mit

On Error Resume Next
Servus
AW: Löschen von Tabellen Danke
28.05.2022 19:32:52
Tabellen
Danke- das ist es
AW: Löschen von Tabellen Danke
28.05.2022 19:40:59
Tabellen
Hi Nik,
mit On Error... unterdrückst du aber - jeden - auftretenden Fehler!
Besser fänd ich die Variante, vor dem Löschen prüfen, ob Blatt vorhanden, z Bsp so:

Sub Tabelle1_Neu()
Dim lsh1and2 As Worksheet
' es wird "Tabelle1"  und "Tabelle2" gelöscht
Application.DisplayAlerts = False
For Each lsh1and2 In Sheets
If lsh1and2.Name = "Tabelle1" Or _
lsh1and2.Name = "Tabelle2" Then
lsh1and2.Delete
End If
Next
Application.DisplayAlerts = True
End Sub
Ciao
Thorsten
Anzeige
AW: Löschen von Tabellen Danke
29.05.2022 09:40:05
Tabellen
Hallo, ja, das stimmt. Die next-Anweisung für sich allein sollte fein dosiert verwendet werden, weil sämtliche Codezeilen, die nach dieser Anweisung kommen und einen Laufzeitfehler auslösen würden, einfach übersprungen werden. Manche Laufzeitfehler (z.b Speichern) wären so gravierend, dass der Code in diesem Fall tatsächlich nicht weiter ausgeführt werden sollte. Eine offene resume next wäre in diesem Fall fatal.
Du kannst die next-Anweisung aber auch auf einzelne Codezeilen beschränken - auf genau die, die im Falle eines Fehlers einfach übersprungen werden dürfen - in deinem Falle also die Delete-Zeile.

Sub Tabelle1_Neu()
Dim lsh1and2 As Worksheet
' es wird "Tabelle1"  und "Tabelle2" gelöscht
Application.DisplayAlerts = False
' die next Anweisung wird vor die Zeile gesetzt, die einen Laufzeitfehler auslösen könnte
on error resume next
lsh1and2.Delete
on error goto 0
' anschließend wird mit goto 0 die next-Anweisung aufgehoben und für alle darauf folgenden Zeilen gilt die Standartfehlerbehandlung.
Application.DisplayAlerts = True
End Sub
Viele Grüße
Anton
Anzeige
AW: Bitte sehr & danke für die Rückmeldung! owt
29.05.2022 09:38:24
Herbert_Grom
,,,
AW: Löschen von Tabellen Danke
29.05.2022 09:41:10
Tabellen
Hallo Nik,
Thorsten hat recht, seine Version ist die sicherere. Nimm die.
Servus
AW: Löschen von Tabellen
28.05.2022 19:32:53
Tabellen

Application.DisplayAlert = false
unterdrückt nur Warnmeldungen und Sicherheitsabfragen ("Sind Sie sicher, dass sie die Datei überschreiben wollen?" usw), aber keine Fehlermeldungen.
AW: Sheet Exists
29.05.2022 10:22:42
GerdL
Moin

Sub Unit()
' es wird "Tabelle1"  und "Tabelle2" gelöscht
Application.DisplayAlerts = False
If Sheet_Exists("Tabelle1") Then Sheets("Tabelle1").Delete
If Sheet_Exists("Tabelle2") Then Sheets("Tabelle2").Delete
Application.DisplayAlerts = True
End Sub
Gruß Gerd

Public Function Sheet_Exists(strName As String, Optional ByVal WB As Variant, Optional a As Integer) As Boolean
If IsMissing(WB) Then Set WB = ActiveWorkbook
For a = WB.Sheets.Count To 1 Step -1
If WB.Sheets(a).Name = strName Then Exit For
Next
Sheet_Exists = CBool(a)
End Function

Anzeige
AW: Löschen von Tabellen
29.05.2022 10:51:58
Tabellen
Hallo,
Danke für Hinweise,
wenn ich das ganze nun so aufbaue?
Sollte jetzt Tabelle1 und oder Tabelle2 fehlen, wird die Warnung nur für diesen beiden Löschbefehle deaktiviert.
Da sind denke ich, weitere Fehler ausgeschlossen eigentlich ausgeschlossen.
Ich teste mal.
Gruß Nik

 Application.DisplayAlerts = False
' die next Anweisung wird vor die Zeile gesetzt, die einen Laufzeitfehler auslösen könnte
on error resume next
Sheets("Tabelle1").Delete
on error goto 0
' anschließend wird mit goto 0 die next-Anweisung aufgehoben und für alle darauf folgenden Zeilen gilt die Standartfehlerbehandlung.
on error resume next
Sheets("Tabelle2").Delete
on error goto 0
Application.DisplayAlerts = True

Anzeige
AW: Löschen von Tabellen
29.05.2022 10:54:53
Tabellen
Aber die von Torsten ist auch gut!
Danke erst mal
AW: Löschen von Tabellen
29.05.2022 11:07:11
Tabellen
Hallo, das ist auch das gute an der Programmierung - es gibt zahlreiche Möglichkeiten zum gleichen Ergebnis zu gelangen.
Die beiden Delete-Anweisungen lassen sich übrigens in einen gemeinsamen next resume - goto 0 Bereich packen - deine Variante funktioniert aber natürlich auch.
Viele Grüße
Anton
Das ist ein völlig legitimer Einsatz...
29.05.2022 10:59:37
{Boris}
Hi,
...von On Error Resume Next.
Die Blätter kannst Du in einem Abwasch löschen:

Application.DisplayAlerts = False
On Error Resume Next
Sheets("Tabelle1").Delete
Sheets("Tabelle2").Delete
On Error Goto 0
Application.DisplayAlerts = True
VG, Boris
Anzeige
AW: Das ist ein völlig legitimer Einsatz...
29.05.2022 11:16:37
Herbert_Grom
Hi Boris,
vielen Dank für deine Zustimmung. Das einzige, was ich noch hinzufügen hätte können/müssen ist eben das zweite "On Error goto 0" oder "goto errorhandler", etc. Aber sonst dachte ich, da ich ja den weiteren Code nicht kannte, dass es mit "on error resume next" schon klappen sollte.
Servus
AW: Das ist ein völlig legitimer Einsatz...
29.05.2022 11:26:33
{Boris}
Hi Herbert,
solange man mit On Error Resume Next sparsam und umsichtig vorgeht, spricht imho nix dagegen.
In der Formelwelt hat sich das Vorgehen seit der Einführung von WENNFEHLER übrigens eingebürgert - Fehler einfach wegbügeln ;-)
VG, Boris

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige