ackup erstellen wenn Zeilen gelöscht eurden

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: ackup erstellen wenn Zeilen gelöscht eurden
von: steffi-gott
Geschrieben am: 04.12.2015 06:11:42

Hallo
ich versuche nun schon seit gefühlter Ewigkeit ein Makro zu erstellen,
wenn ich in dem Arbeitsblatt mit der Maus Zeilen markiere ( 1 oder 2 oder 4 oder oder) und diese dann mit rechtslick über Maus löschen will soll mir ein Backup erstellt werden,
dieses löschen über Maus und rechtsklick muss so durchgeführt werden
folgenden Code habe ich dafür benutzen wollen und auch schon mit andere “Worksheet“ getestet,
entweder es klappt nicht oder es wird kein backup erstellet
könnte mir hier jemand weiter helfen
vielen Dank
besten Grüße
mein Sub:


Private Sub Worksheet_Change(ByVal Target As Range)
If Selection.Delete Then
Dim BackUpName$
Application.DisplayAlerts = False
BackUpName = "E:\’wird angepasst’ \_" & ThisWorkbook.Name & "_" &_
Date & "_" & Format(Time, "hhmmss") & "_" & ".xlsm"
ThisWorkbook.SaveCopyAs Filename:=BackUpName
End If
End Sub

Bild

Betrifft: AW: ackup erstellen wenn Zeilen gelöscht eurden
von: fcs
Geschrieben am: 04.12.2015 07:52:00
Hallo Steffi,
du musst den Rechte-Maus-Klick vor der Anzeige des Menüs abfangen.
Dann kann der weitere Ablauf gesteuert werden.
Statt des Rechte-Maus-Menüs wird hier eine Meldung angezeigt in der das Löschen bestätigt werden muss.
Der Löschbefehl steht dann im Makro.
Die Reihenfolge von Back-up und Löschen kannst du auch tauschen.
Gruß
Franz

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    Dim BackUpName$
    'Prüfen ob Zeilen selektiert sind
    If Target.Columns.Count = Me.Columns.Count Then
        If MsgBox("1. Back-up erstellen" & vbLf _
                & "2. Selektierte Zeilen löschen?", _
                vbQuestion + vbOKCancel + vbDefaultButton2, "Zeilen löachen") = vbOK Then
            Cancel = True
'erst Back-up
            With ThisWorkbook
                BackUpName = .Path & "\" _
                    & VBA.Replace(.Name, ".xls", Format(Now, """ ""YYYYMMDD hhmmss"".xls"""))
                .SaveCopyAs Filename:=BackUpName
            End With
'dann löschen
            Target.Delete
        Else
            Cancel = True 'Diese Code-Zeile weglassen, wenn Rechte-Maus-Menü _
                für Zeilen angezeigt werden soll - dann kann man aber ohne Backup _
                trotzdem löschen
        End If
    End If
End Sub


Bild

Betrifft: AW: ackup erstellen wenn Zeilen gelöscht eurden
von: steffi-gott
Geschrieben am: 05.12.2015 05:20:35
Hallo Franz
Danke für Deine Hilfe.
Dein Code ist mir zu kompliziert,
es sollen keine Meldungen angezeigt werden,
einfach nur Rechtsclick und Zellen löschen und dann speichern
ein Arbeitskollege gab mir mal folgenden Code zum Testen
das klappt auch nur bedingt, denn wenn ich eine einzelne Zelle kopieren will führt er immer ein Backup durch und das wars,
ich kann die kopierte Zelle dann nicht mehr einfügen,
das muss natürlich weiter funktionieren
Danke
BG

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Dim BackUpName$
Application.DisplayAlerts = False
UserID = Environ("Username")
BackUpName = "E:\.....
ThisWorkbook.SaveCopyAs Filename:=BackUpName
End Sub


Bild

Betrifft: AW: ackup erstellen wenn Zeilen gelöscht eurden
von: fcs
Geschrieben am: 07.12.2015 02:59:43
Hallo Steffi,
wenn du auf die Sicherheitsabfrage via Message-Box verzichten willst/kannst, dann kannst du folgendes versuchen, um bei markierten Zeilen nach Rechte-Maustasten-Klick die gewünschten Aktionen auszuführen.
Dann vergrößerst du aber erheblich das versehentliche Löschen, da die Makro-Aktionen nicht per Undo rückgängig gemacht werden können.
Gruß
Franz

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    Dim BackUpName$
    'Prüfen ob Zeilen selektiert sind
    If Target.Columns.Count = Me.Columns.Count Then
            Cancel = True
            Target.Delete
            With ThisWorkbook
                BackUpName = .Path & "\" _
                    & VBA.Replace(.Name, ".xls", Format(Now, """ ""YYYYMMDD hhmmss"".xls"""))
                .SaveCopyAs Filename:=BackUpName
            End With
    End If
End Sub


Bild

Betrifft: AW: ackup erstellen wenn Zeilen gelöscht eurden
von: steffi-gott
Geschrieben am: 08.12.2015 04:39:26
Hi,
Danke für deine Hilfe,
ich habe den Code wie folgt umgestellt
funktioniert eigentlich auch ganz gut,
nur wenn ich mal einige Zellen kopieren will und wieder einfügen (Z.Bsp. A10:Q10) hängt sich die Tabelle erstmal auf, also es braucht sehr lange bis ich dann weiter arbeiten kann,
das gleich tritt auch bei deinem Code auf,
nun habe ich mal versucht mit „before_leftclick“ und anderen Möglichkeiten, aber da passiert gar nix,
wie kann man dieses Problem beheben,

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    Dim BackUpName$
    'Prüfen ob Zeilen selektiert sind
    If Target.Columns.Count = Me.Columns.Count Then
    With ThisWorkbook
         UserID = Environ("Username")
         BackUpName = "E:\...\_" & ThisWorkbook.Name & "_" & _
         Date & "_" & Format(Time, "hhmmss") & "_" & UserID & "_" & ".xlsm"
         .SaveCopyAs Filename:=BackUpName
    End With
    End If
End Sub
Danke
BG

Bild

Betrifft: AW: Backup erstellen wenn Zeilen gelöscht werden
von: fcs
Geschrieben am: 08.12.2015 10:10:52
Hallo Steffi,
diese Wartezeit kann nicht mit diesem Makro zusammenhängen.
Bei meinen Tests - Tabellenblatt/Arbeitsmappe entält nur Werte, keine Formeln funktioniert das Makro ohne Probleme unter Windows 7 /Excel 2010. Auch das Kopieren von anderen Zellbereich läuft normal ohne Verzögerungen.
Solche Verzögerungen sind ein typisches Anzeichen, dass beim Einfügen/Ändern von Zellwerten umfangreiche Berechnungen oder andere Ereignismakros gestartet werden, z.B. Worksheet_Change oder Worksheet_Calculate.
Bei den Ereignismakros ist es dann ratsam, zu Beginn des Makros die Ereignismakros zu deaktiviern und am Ende wieder zu aktivieren. Den Berechnungsmodus setzt man entsprechend vorrübergend auf manuell.
Stören umfangreiche Berechnungen, dann vorher den Berechnungsmodus auf manuell setzen.
Nachfolgend ein Basis-Beispiel bei Makro-Lafzeit-Problemen.
Gruß
Franz

Private Sub Worksheet_Change(ByVal Target As Range)
    'Variablendeklaration
    Dim StstusCalc As Long
    
    'Makrobremsen lösen
    With Application
      statuscalc = .Calculation
      .Calculation = xlCalculationManual
      .EnableEvents = False
      .ScreenUpdating = False
    End With
' ab hier dann die weiteren Anweisungen des Makros
    '...
    '...
Beenden:  'Sprungadresse für Goto, wenn man das Makro vorzeitig abbrechen möchte
    'Makrobremsen zurücksetzen
    With Application
      statuscalc = .Calculation
      .Calculation = xlCalculationManual
      .EnableEvents = False
      .ScreenUpdating = False
    End With
End Sub


 Bild

Beiträge aus den Excel-Beispielen zum Thema "ackup erstellen wenn Zeilen gelöscht eurden"