Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1892to1896
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
Makro "Blatt löschen" mit Dialog
24.08.2022 10:53:40
Michael
Hallo Excel-Freunde,
ich würde gerne ein XActive-Button mit einem Makro versehen, dass das aktuelle Blatt löscht, ABER vor dem Löschen nochmal nach fragt, ob der Benutzer es wirklich löschen will. Leider habe ich keine Anhnung wo ich Anfangen soll ...

Private Sub()
ActiveSheet.delete
End Sub()
Vielen Dank für eure Unterstützung!
Grüße

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

Betreff
Datum
Anwender
Anzeige
Schon fertig...
24.08.2022 11:02:39
MCO
Hallo Michael!
Im Grunde bist du schon fertig:
Der Befehl löscht das aktive Blatt, das System sichert ab, dass du das auch wirklich möchtest. Warum willst du das künstlich erzeugen?
Das ginge dann so:

Private Sub Workbook_SheetBeforeDelete(ByVal Sh As Object)
Application.DisplayAlerts = False 'Die Systemwarnung unterdrückst du mit
antw = MsgBox("Möchtest du das Sheet " & Sh.Name & " wirklich löschen?", vbYesNo + vbQuestion)
If antw = vbYes Then Sh.Delete
'Achtung! Muss zwingend nachher wieder eingeschaltet werden:
Application.DisplayAlerts = True
End Sub
Gruß, MCO
Anzeige
Danke! .. kleine Zusatzfrage ..
24.08.2022 11:14:37
Michael
Hey MCO,
danke für deine schnelle Antwort. Dass das System das regelt hatte ich nicht auf dem Schirm.
Dennoch ist deine Variante mit der MessageBox und dem Blattnamen der gelöscht werden soll um einiges eleganter.
Ist es noch möglich eine "Sperre" einzubauen, die verhindert das letzte bzw. einzige Blatt zu löschen?
Sprich wenn ich Blatt 1, Blatt 2, Blatt 3 .. habe kann ich alle beliebig löschen, AUßER das letzte.
Danke für deine/eure Hilfe!
Gruß
AW: Danke! .. kleine Zusatzfrage ..
24.08.2022 11:21:47
MCO
Schreibe rein:

if activesheet.index = sheets.count then msgbox "löschen nicht erlaubt": exit sub 
Gruß, MCO
Anzeige
AW: Schon fertig...
24.08.2022 11:22:26
Michael
hier bekomme ich leider eine Fehlermeldung ... Ideen?

Private Sub CommandButton4_Click()
Workbook_SheetBeforeDelete(ByVal Sh As Object)
Application.DisplayAlerts = False 'Die Systemwarnung unterdrückst du mit
antw = MsgBox("Möchtest du das Sheet " & Sh.Name & " wirklich löschen?", vbYesNo + vbQuestion)
If antw = vbYes Then Sh.Delete
'Achtung! Muss zwingend nachher wieder eingeschaltet werden:
Application.DisplayAlerts = True
End Sub

AW: Schon fertig...
24.08.2022 11:38:10
Pierre
Hallo Michael,
da hast du aber bisschen was durcheinander geworfen:

Private Sub CommandButton4_Click()
Workbook_SheetBeforeDelete(ByVal Sh As Object)
wird nicht funktionieren. Entweder CommanButton4_Click() oder Workbook_SheetBeforeDelete(ByVal Sh As Object)
Gruß Pierre
Anzeige
noch ein Versuch
24.08.2022 12:06:49
Michael
Hallo Pierre,
ja ich habs gemekerkt. Danke! so wie der Code unten angezeigt wird, läuft er ... zwar nicht so elegant wie der Vorschlag von MCO aber er läuft.
Kann mir jemand den unten angegegeben Code um die Bedinung erweitern, dass das letzte Blatt nicht gelöscht werden kann? Wenn aktuell ein Benutzer auf die Schaltfläche "Blatt löschen" drückt und nur ein Tabellenblatt exisitert, dann öffnet sich der Debugger - für einen Nutzer nicht so schön ...

Private Sub CommandButton4_Click()
ActiveSheet.Delete
End Sub
Danke und Gruß
AW: Schon fertig...
24.08.2022 12:06:38
MCO
Das gehört in das Modul "Diese Arbeitsmappe" und wird automatisch ausgelöst durch das löschen eines Sheets.
Gruß, MCO
Anzeige
sorry für mein Unwissen .. probier ich aus!
24.08.2022 12:08:35
Michael
!
komme nicht weiter ...
24.08.2022 12:26:22
Michael
also ...
Habe das in der Arbeitsmappe:

Private Sub Workbook_SheetBeforeDelete(ByVal Sh As Object)
Application.DisplayAlerts = False 'Die Systemwarnung unterdrückst du mit
antw = MsgBox("Möchtest du das Blatt " & Sh.Name & " wirklich löschen?", vbYesNo + vbQuestion)
If antw = vbYes Then Sh.Delete
'Achtung! Muss zwingend nachher wieder eingeschaltet werden:
Application.DisplayAlerts = True
If ActiveSheet.Index = Sheets.Count Then MsgBox "löschen nicht erlaubt"
Exit Sub
End Sub
und der Code läuft beim XActive-Button:

Private Sub CommandButton4_Click()
ActiveSheet.Delete
End Sub
wenn ich jetzt ein Blatt mittels XActiveButton lösche, fragt micht erst das System, dann die MessageBox von MCO's Code und wenn ich in der MessageBox "Nein" drücke, wird das Blatt trotzdem gelöscht =D
Beim letzten Blatt kommt weiterhin die Fehlermeldung zum Debuggen ...
Ich bitte um weiteren Rat - Danke!
Gruß
Anzeige
AW: komme nicht weiter ...
24.08.2022 12:37:15
GerdL
Moin Michael,
dir wird es zu komplex. Dies allein und sonst nichts sollte doch deiner Anforderung genügen.

Private Sub CommandButton4_Click()
If Not ActiveSheet.Next Is Nothing Then ActiveSheet.Delete
End Sub
Gruß Gerd
Vergiss alles, mach es so:
24.08.2022 12:50:58
MCO

Private Sub CommandButton4_Click()
If ActiveSheet.Index = Sheets.Count Then MsgBox "löschen nicht erlaubt": Exit Sub
antw = MsgBox("Möchtest du das Blatt " & ActiveSheet.Name & " wirklich löschen?", vbYesNo + vbQuestion)
If antw = vbYes Then
ActiveWorkbook.Unprotect ""
Application.DisplayAlerts = False 'Die Systemwarnung unterdrückst du mit
ActiveSheet.Delete
Application.DisplayAlerts = True 'Achtung! Muss zwingend nachher wieder eingeschaltet werden:
ActiveWorkbook.Protect ""
End If
End Sub
Gruß, MCO
Anzeige
leider noch nicht am Ziel ...
24.08.2022 13:24:38
Michael
Wirklich vielen Dank für euer Engagement und eure schnellen Antworten!
leider läuft es noch nicht so wie es soll. Im Anhang findet ihr eine Beispieldatei (Blattschutz = 123) & Blatt "Datenbank" ist ausgeblendet
Mir ist auf- bzw. eingefallen, dass Gerds Code zwar prima läuft, aber der Fall "Nothing" nie eintreten wird, da ich ein Blatt Namens "Datenbank" für die Benutzerfreundlichkeit ausgeblendet habe. Dh auch hier kommt beim, wenn auch versehentlichen, Löschen des letzten Blattes immer eine Fehlermeldung. Wenn man diese Fehlermeldung abstellen könnte wäre es perfekt!
@MCO: dein Code spuckt gleich nach dem Löschen eine Fehlermeldung aus, auch wenn das mit der MessageBox jetzt deutlich besser funktioniert.
https://www.herber.de/bbs/user/154791.xlsm
Danke und Gruß!
Anzeige
AW: Blätter zählen
24.08.2022 14:04:22
GerdL
Aha, so sollte das verschwiegene zweite Blatt drinbleiben.

Private Sub CommandButton4_Click()
If Sheets.Count > 2 Then
ActiveSheet.Delete
Else
MsgBox "Nein!"
'oder schönere Botschaft! :-)
End If
End Sub
Gruß Gerd
Funktioniert! Danke!!
24.08.2022 14:13:42
Michael
Das war der letzte Schliff! Perfekt =) & für die MessageBox lass ich mir was passendes einfallen haha
Grüße

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige