VBA Makro Rückgänig machen
#1
Guten Morgen,

ich verwende in meiner Tabelle ein Makro welches auf klick alle markierten Zeilen in ein bestimmtes Tabellenblatt kopiert. Da die Tabelle nicht von mir alleine genutzt wird kann es vorkommen das ein Mitarbeiter
Trotz vorheriger Sicherheitsfrage die Falschen Zellen Verschiebt. Jetzt stehe ich vor dem Problem das man von einem Makro verursachte Aktionen nicht unmittelbar Rückgänig machen kann.

Meine Idee wäre als Rückgänigoption auf die letzte Autosave Datei dieser Excel zuzugreifen, leider weiß ich nicht wie ich dies per VBA umsetzten kann.

Hier das Makro welches ich zum Verschieben nutzte.  

Sub Transfer()
'
' Daten_Sdt_Aktive_zu_Passiv Makro
'
'
If MsgBox("Haben Sie alle zu verschiebenden Zeilen markiert?" & Chr(10) & "Diese Aktion kann nicht rückgängig gemacht werden!", vbYesNo) = vbYes Then
    ActiveSheet.Unprotect
    Selection.Cut
    Sheets("Übersicht_Eins_Abgeschlossen").Select
    Range("A3").Select
    Dim Spalte As Range
    Set Spalte = ActiveCell.EntireColumn
    Spalte.Find("", ActiveCell, xlFormulas, xlWhole, xlByColumns, xlNext).Select
'Suchrichtung umkehren mit xlPrevious statt xlNext
    Set Spalte = Nothing
    ActiveSheet.Paste
    ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
    Sheets("Übersicht_Eins_Pers").Select
    Selection.Delete Shift:=xlUp
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowFormattingCells:=True, AllowFormattingColumns:=True, AllowSorting _
        :=True, AllowFiltering:=True
Else
MsgBox "Transfer abgebrochen"
End If
End Sub


Gruß

David
Top
#2
Moin,

ohne deinen VBA-Code erfasst zu haben:
Rückgängig nach VBA-Code geht in Word, in Excel nicht.
Wenn es Excel sein muss, dann speichere explicit eine Kopie bevor der user die Datei bearbeitet - zb automatisch beim öffnen - an einem speziellen Ort mit Datum und username im Dateinamen ab.
Hat user nix versaut, kannste ja die Kopie später kicken.
Top
#3
Danke für die Schnelle Antwort,

auf eine ähnliche Idee bin ich auch gekommen, da gibt es für mich ein Problem durch das Speichern ändert sich auch der Speicherort d.h. wenn der Nutzer dieses Makro nutzt und alles Richtig macht drückt er am ende normal auf Speichern. Genau hier wäre ja das Problem er Speichert nicht die Eigentliche Datei sondern das Backup welches durch das Makro angelegt wurde.
Top
#4
Moin und nur am Rande!
Man kann auch ein Makro per Strg+z oder der "Rückgängig"-Schaltfläche zurücksetzen.
Dafür gibt es Application.OnUndo
https://msdn.microsoft.com/de-de/VBA/Exc...thod-excel

Ich habe mal ein simples Beispiel angehangen.
Allerdings ist dies bei größeren Projekten durchaus schwierig.


Gruß Ralf


Angehängte Dateien
.xlsm   Rückgängig.xlsm (Größe: 15,69 KB / Downloads: 1)
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#5
Leider Funktioniert bei meiner Anwendung die Rückgängig Funktion nicht da das Makro Blattübergreifend arbeitet.
Top
#6
Das eine hat mit dem anderen nix zu tun!
Ich habe an einem simplen Beispiel gezeigt, DASS es geht.
Dies bedingt aber eine sehr aufwändige Programmierung.
Besser ist es allemal, beim Öffnen eine Sicherungsdatei anzulegen.
(wie Dir ja Wastl bereits schrieb)

Mal frei nach Schnauze:
In einem allgemeinen Modul:
Public Timestamp$

In DieseArbeitsmappe:
Private Sub Workbook_Open()
Dim Dateiname$
With ThisWorkbook
  Dateiname = Mid(.Name, 1, Len(.Name) - 5)
  Timestamp = Format(Now, "_yymmdd_hhmmss")
  .SaveCopyAs Dateiname & Timestamp & ".xlsm"
End With
End Sub

Dann hast Du immer die aktuellste Datei verfügbar.

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#7
Ich habe in meiner PERSONAL.xlsb ein Makro, welches zu den Standardfunktionen von OpenOffice gehört.
Es lädt die Datei mit dem Stand der letzten Speicherung neu.
Ist natürlich wirkungslos, wenn der "Murks" zwischenzeitlich durch den Anwender gespeichert wurde.
Aber so hast Du zwei Varianten, mit denen Du arbeiten kannst:

Sub NeuLaden()
'Shortcut Strg+Umschalt+N 
Dim Pfad$
Application.DisplayAlerts = False
With ActiveWorkbook
  Pfad = .FullName
  If .Saved Then Exit Sub
  If Dir(Pfad) <> "" Then
    .Close False
  Else
    MsgBox .FullName & " wurde noch nicht gespeichert!"
    Exit Sub
  End If
End With
Workbooks.Open Pfad
End Sub
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#8
ich werde das mal ausprobieren mir geht es hauptsächlich darum unmittelbar nach dem verschieben die Aktion rückgängig zu machen wenn jemand das erst nach 2 Stunden weiter Arbeiten auffällt müssen die Daten halt aufwendig hündisch zurückgeholt werden.
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste