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

ackup erstellen wenn Zeilen gelöscht eurden

ackup erstellen wenn Zeilen gelöscht eurden
04.12.2015 06:11:42
steffi-gott
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

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ackup erstellen wenn Zeilen gelöscht eurden
04.12.2015 07:52:00
fcs
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

Anzeige
AW: ackup erstellen wenn Zeilen gelöscht eurden
05.12.2015 05:20:35
steffi-gott
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

Anzeige
AW: ackup erstellen wenn Zeilen gelöscht eurden
07.12.2015 02:59:43
fcs
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

Anzeige
AW: ackup erstellen wenn Zeilen gelöscht eurden
08.12.2015 04:39:26
steffi-gott
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

Anzeige
AW: Backup erstellen wenn Zeilen gelöscht werden
08.12.2015 10:10:52
fcs
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

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige