Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1548to1552
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

Implementieren eines "Löschen" Buttons

Implementieren eines "Löschen" Buttons
20.03.2017 14:29:58
Rainer
Hallo zusammen, das unten stehende Programm wird bei mir in einer Excelanwendung ausgeführt wenn ich Excel schließe.
Dabei ist anzumerken, dass durch die Prozedur alle während des arbeitens extra erzeugten Sheets, die nicht im VBA Code im Array hinterlegt sind, gelöscht werden beim beenden des Programmes. Das untenstehende Programm funktioniert auch wie gewünscht.
Allerdings ist es nun so, dass ich einen Button zusätzlich implementieren soll, der wie die Prozedur beim schließen, die manuell erzeugten Sheets löscht. Das Programm ansich soll aber geöffnet bleiben.
Hat jemand dazu eine Idee wie dies umzusetzen ist?
Danke vorab!
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Erzeugte kundenspezifische Tabellen die nicht in der Liste sind entfernen
Dim Arr_wks()
Dim wks As Worksheet
Dim i As Integer
Dim weg_damit As Boolean
Dim blatt_obj As Object
'   Ausschalten der Bildschirmanimation
Application.ScreenUpdating = False
'   Alle Blätter zur Bearbeitung entsperren
ActiveWorkbook.Unprotect Password:=getPw()
For Each blatt_obj In Sheets
If blatt_obj.Name  Sheets("Tabelle1").Name Then
If blatt_obj.Visible = False Then
blatt_obj.Visible = True
End If
End If
blatt_obj.Protect UserInterfaceOnly:=False, DrawingObjects:=False, Contents:=False,  _
Scenarios:=False, Password:="123456"
Next blatt_obj
'   Array der Arbeitsblätter die NICHT gelöscht werden sollen
Arr_wks = Array("Tabelle1", "Tabelle2", "Tabelle3")
'   For-Schleife durchläuft alle Elemente von links nach rechts im Array, ist i im Array  _
vorhanden wird "weg_damit" auf false gesetzt und die For-Schleife abgebrochen
For Each wks In ThisWorkbook.Worksheets
For i = LBound(Arr_wks) To UBound(Arr_wks)
If wks.Name  Arr_wks(i) Then
weg_damit = True
Else
weg_damit = False
Exit For
End If
Next i
If weg_damit = True Then
wks.Visible = xlSheetVisible
Application.DisplayAlerts = False
wks.Delete
Application.DisplayAlerts = True
'   löschen des Arbeitsblatts ohne Nachfrage
End If
weg_damit = False
Next wks
'   Alle Blätter bis auf Tabelle1 wieder ausblenden und sperren
ActiveWorkbook.Unprotect Password:="123456"
For Each blatt_obj In Sheets
If blatt_obj.Name  Sheets("Tabelle1").Name Then
If blatt_obj.Visible = True Then
blatt_obj.Visible = False
End If
End If
blatt_obj.Protect UserInterfaceOnly:=True, DrawingObjects:=True, Contents:=True,  _
Scenarios:=True, Password:=getPw()
Next blatt_obj
ActiveWorkbook.Protect Password:=getPw()
ThisWorkbook.Save 'Datei speichern
Application.ScreenUpdating = True
End Sub

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Einfach in Button Code?
20.03.2017 15:24:24
Max2
Hallo,
drücke ALT+F11 und erstelle ein neues Modul.
Kopiere dann alles bis auf

"Private Sub Workbook_BeforeClose(Cancel As Boolean)" 

in das Modul.
Nenne den Sub wie du möchtest... z.B.
Sub loesch_button()
Code
Code
Code
End Sub
Wenn du bereits einen Button erstellt hast auf deinem Sheet, dann mache einen
Rechtsklick auf ihn und weiße ihm ein Makro zu ("Makro zuweisen").
möchtest du den Code direkt in den Button schreiben, dann mache wieder rechtsklick auf den Button
und gehe auf "Makro zuweisen" und drücke rechts oben auf "Neu".
Es öffnet sich der Code des Buttons und du kopierst dort einfach den oben stehenden Code rein.
(Bis auf "Private Sub Workbook_BeforeClose(Cancel As Boolean)" )
Anzeige
AW: Einfach in Button Code?
20.03.2017 16:10:24
Rainer
Dank dir! Funktioniert gut und ist ja eigentlich ganz einfach.. ;)
Kein Problem u. Danke für Rückmeldung... owT
20.03.2017 17:38:06
Max2

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige