Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Makro rückgängig machen

Makro rückgängig machen
11.02.2013 17:49:18
mike49
Hallo zusammen,
wie kann man ein ausgeführtes Makro rückgänig machen. Also ein Undo einfügen oder so?
Gruß
mike49

Anzeige

22
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro rückgängig machen
11.02.2013 17:59:34
Martin
Hallo Mike,
eine Makro kann nicht rückgängig gemacht werden. Du kannst aber eine manuelle Aktion mit...
Application.Undo
...wieder rückgängig machen.
Viele Grüße
Martin

AW: Makro rückgängig machen
11.02.2013 18:25:58
mike49
Hallo Martin,
wie macht man das. Kannst du mir die Vorgehensweise kurz beschreiben?
Gruß
mike49

Anzeige
Habs' hingekriegt . . .
11.02.2013 19:26:52
mike49
mit diesem Makro in einem Modul:
Sub Rückgägig()
FName = ActiveWorkbook.FullName
Application.ScreenUpdating = False
Workbooks.Open Filename:=FName
Application.ScreenUpdating = True
End Sub

Allerding flackert immer noch der Bildschirm, trotz Application.ScreenUpdating. Habe ich das vielleicht an der falschen Stelle eingefügt?
Gruß
mike49

Anzeige
AW: Habs' hingekriegt . . .
11.02.2013 19:29:22
Hajo_Zi
warum muss ActiveWorkbook. nochmal geöffnet werden?

AW: Habs' hingekriegt . . .
11.02.2013 19:47:35
mike49
Hallo Hajo,
wie wär's eleganter, damit die zuvor gemachten Änderungen rückgänig gemacht werden. Kenne mich mit VBA nicht so aus.
Gruß
mike49

Anzeige
AW: Habs' hingekriegt . . .
11.02.2013 19:51:48
Hajo_Zi
Hallo mike,
Warum nicht wie vorgeschlagen mit Undo, Makro Befehle können nicht rückgängig gemacht werden.
Gruß Hajo

AW: Habs' hingekriegt . . .
11.02.2013 19:54:07
mike49
Hallo Hajo,
leider weiß ich nicht wie man das macht.
Gruß
mike49

Anzeige
AW: einfach kopieren
11.02.2013 19:57:42
Hajo_Zi
hallo Mike,
ist es so kompliziert die Zeile aus dem Forum zu kopieren und im Code einzufügen wo Du es Rückgängig machen willst?
Gruß Hajo

AW: einfach kopieren
11.02.2013 20:18:23
mike49
Hallo Hajo,
anscheinend habe ich es nicht genau genug erklärt. Es soll nicht eine Aktion rückgänig gemacht werden, sondern das Tabellenblatt, das mit dem Makro geändert wurde, wieder hergestellt werden. Das funktioniert mit dem Makro:
Sub Rückgägig()
FName = ActiveWorkbook.FullName
Application.ScreenUpdating = False
Workbooks.Open Filename:=FName
Application.ScreenUpdating = True
End Sub

allerdings mit dem flackernden Bildschirm.
Natürlich könnte man die geänderte Datei beim Schließen auch nicht speichern ;)
Gruß
mike49

Anzeige
Vorsicht, du hast da was falsch verstanden!
11.02.2013 20:39:58
Klaus
Hallo Mike,
dein Makro macht aber nichts rückgängig! Es macht nichts anderes, als die Datei vom letzten Save wieder zu öffnen. Da kannst du genauso gut ohne zu speichern schließen, wie du selbst geschrieben hast.
Nimm mal diese Extremsituation:
- ich öffne die Datei
- ich arbeite 2h intensiv in der Datei ohne zu speichern
- ich führe dein Makro X aus
- ich führe dein angeblich-rückgängig Makro aus
2h meiner Arbeit sind jetzt futsch und du bist schuld! :-)
Besser: Füge in das Makro eine Save-Routine ein, die deine Datei unter "Dateiname_TTMMJJJJ_HHMM" speichert.
Grüße,
Klaus M.vdT.

Anzeige
Vorsicht, du hast da was falsch verstanden!
11.02.2013 20:55:06
mike49
Hallo Klaus,
das habe ich verstanden.
Mit diesem Makro wird mein Inhaltsverzeichnis sortiert:
Sub SortierenTitel()
Dim wksOriginal As Worksheet, wksSort As Worksheet
Dim wbk As Workbook
Dim lngZeileMax As Long, lngZeile As Long, intPos As Integer
Dim strBS As String
Set wbk = ActiveWorkbook
Set wksOriginal = ActiveSheet
Application.ScreenUpdating = False
'temporäres Blatt zum Sortieren anlegen
wbk.Worksheets.Add after:=wbk.Sheets(wbk.Sheets.Count)
Set wksSort = wbk.Sheets(wbk.Sheets.Count)
'Originaldaten in temporäres Blatt kopieren
With wksOriginal
lngZeileMax = .Cells(.Rows.Count, 1).End(xlUp).Row
.Range(.Cells(2, 1), .Cells(lngZeileMax, 3)).Copy _
Destination:=wksSort.Cells(1, 1)
.Range(.Cells(2, 5), .Cells(lngZeileMax, 7)).Copy _
Destination:=wksSort.Cells(1 * (lngZeileMax - 1) + 1, 1)
.Range(.Cells(2, 9), .Cells(lngZeileMax, 11)).Copy _
Destination:=wksSort.Cells(2 * (lngZeileMax - 1) + 1, 1)
End With
With wksSort
'Sortieren nach Titel
With .Range(.Cells(1, 1), .Cells(3 * (lngZeileMax - 2), 3))
.Sort Key1:=.Range("B1"), order1:=xlAscending, Header:=xlNo
End With
'nicht benutzte Zeilen löschen
.Range(.Cells(.Rows.Count, 1).End(xlUp), _
.Cells(.Rows.Count, 2).End(xlUp).Offset(1, 2)).ClearContents
'1. Buchstabe im Titel fett, wenn 1. Buchstabe wechselt
strBS = ""
For lngZeile = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row
If strBS  Left(.Cells(lngZeile, 2).Text, 1) Then
.Cells(lngZeile, 2).Characters(1, 1).Font.Name = "Arial Black"
strBS = Left(.Cells(lngZeile, 2).Text, 1)
End If
Next
'Daten wieder ins Original kopieren
.Range(.Cells(1, 1), .Cells(lngZeileMax - 1, 3)).Copy _
Destination:=wksOriginal.Cells(2, 1)
.Range(.Cells(1 * (lngZeileMax - 1) + 1, 1), .Cells(2 * (lngZeileMax - 1), 3)).Copy _
Destination:=wksOriginal.Cells(2, 5)
.Range(.Cells(2 * (lngZeileMax - 1) + 1, 1), .Cells(3 * (lngZeileMax - 1), 3)).Copy _
Destination:=wksOriginal.Cells(2, 9)
'temporäres Blatt wieder löschen
Application.DisplayAlerts = False
.Delete
Application.DisplayAlerts = True
End With
wksOriginal.Activate
Application.ScreenUpdating = True
End Sub

Ich möchte nun, nachdem ich das sortierte Blatt ausgedruckt habe, den ursprünglichen Zustand des Blattes wiederherstellen. Wie würdest du das machen?
Gruß
mike49

Anzeige
AW: Vorsicht, du hast da was falsch verstanden!
11.02.2013 21:21:38
Klaus
Ich möchte nun, nachdem ich das sortierte Blatt ausgedruckt habe, den ursprünglichen Zustand des Blattes wiederherstellen. Wie würdest du das machen?
Ich würd das Blatt in ein neues, leeres Blatt kopieren und von dort aus damit was-auch-immer machen, statt im Original rumzuwursten und dann eine halbgare Alibi-Rückgängig Funktion zu benutzen. Andererseits: wenns funktioniert, muss es nicht repariert werden :-)
Grüße,
Klaus M.vdT.

Anzeige
AW: Vorsicht, du hast da was falsch verstanden!
11.02.2013 21:30:45
mike49
Hallo Klaus,
das wäre eine Lösung.
Könnte man auch so verfahren, dass das Makro das sortierte Blatt in eine neue Tabelle (Tabelle 2)innerhalb der Mappe schreibt? So würde das Originalblatt bleiben.Wie müsste dann das SortierenTitel-Makro lauten?
Gruß
mike49

sheets.add
12.02.2013 08:05:58
Klaus
Hallo Mike,
ein neues sheet innerhalb der Tabelle erstellst du mit "sheets.add". Praktischerweise liegt dieses dann auch gleich im Focus, dH es ist das "Active Sheet".
Also ganz grob so (aus dem Ärmel, ungetestet)
sub SortiereInNeuerTabelle()
dim wksNew as worksheet
sheets.add
set wksNew = activesheet
sheets("[URSPRUNGSTABELLE]").cells.copy
wksnew.range("A1").pastespecial
[DEIN SORTIERMAKRO, referenziert auf wksNew]
wksnew.print
wksnew.delete
end sub
Den Kniff mit dem wksNew braucht es eigentlich nicht, aber ich referenziere nur sehr ungerne auf "active sheet" ... da kann zu schnell was schief gehen.
Grüße,
Klaus M.vdT.

Anzeige
sheets.add
12.02.2013 14:05:05
mike49
Hallo Klaus,
so wäre es im Prinzip prima. Aber leider krieg ich das mit dem Makro nicht hin.
Ich würde gerne mal die Datei hochladen und dich bitten, dir das mal anzuschauen.
https://www.herber.de/bbs/user/83870.xlsm
Gruß
mike49

Anzeige
Sorry, ist mir zu viel
13.02.2013 09:10:03
Klaus
Hallo Mike,
ich hab mir die Funktion deines Sortierenmakros nicht angeschaut.
Sub SortiereInNeuerTabelle()
Dim wksNew As Worksheet
Dim wksOld As Worksheet
Set wksOld = Sheets("Tabelle1") 'ANPASSEN
Sheets.Add
Set wksNew = ActiveSheet
wksOld.Cells.Copy
wksNew.Range("A1").PasteSpecial
SortierenTitel
wksNew.Print
application.displayalerts = false
wksNew.Delete
application.displayalerts = true
End Sub
Grüße,
Klaus M.vdT.

Anzeige
Betreff war falsch: Gelöst
13.02.2013 09:25:29
Klaus
Hi Mike,
der Betreff meines letzten Beitrags ist natürlich falsch, da hatte ich geträumt ich währ in einem anderen Beitrag.
Grüße,
Klaus M.vdT.

AW: Betreff war falsch: Gelöst
13.02.2013 13:13:12
mike49
Hallo Klaus,
danke, dass du dich der Sache nochmals angenommen hast.
Es klappt im Prinzip. Es kommt aber die Meldung: Laufzeitfehler '438. Objekt unterstützt diese Eigenschaft oder Methode nicht.
Im Debugger ist die Zeile "wksNew.Print" gelb unterlegt.
Gruß
mike49

Anzeige
Flüchtigkeitsfehler
13.02.2013 13:20:35
Klaus
Hi Mike,
hab die Syntax nicht richtig im Kopf gehabt.
wksNew.PrintOut sollte funktionieren.
oder
wksNew.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
oder
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
(das letzte ist 1:1 der Code aus dem Makrorekorder)
Grüße,
Klaus M.vdT.

Anzeige
AW: Flüchtigkeitsfehler
13.02.2013 13:49:25
mike49
Hallo Klaus,
die durch das Makro erzeugte sortierte Tabelle soll nicht gleich ausgedruckt, sondern nur neben der bestehenden Tabelle 1 erzeugt werden und die Seiteneinstellungen beibehalten werden.
Habe die Codes ausprobiert. Mit den vorgeschlagen Codezeilen wird jedesmal die sortierte, 1-seitige Tabelle gleich als mehrseitige ausgedruckt, weil die Seiteneinstellungen nicht 1:1 übernommen werden.Es wird keine sortierte Tabelle 2 im Reiter sichtbar.
Gruß
mike49

Anzeige
AW: Flüchtigkeitsfehler
13.02.2013 13:54:54
Klaus
Hallo Mike,
du hast innerhalb dieses Threads, genau genommen hier:
https://www.herber.de/forum/messages/1298795.html
explizit die Aufgabe gestellt, dass das sortierte Blatt gedruckt werden soll. Diese Aufgabe habe ich gelöst. Vom Übernehmen der Seiteneinstellungen, das Blatt nebeneinander stellen oder das Blatt zu behalten war keine Rede.
Ich habe keine Lust, jetzt die nächste Aufgabe zu lösen und dann ändert sich die Aufgabe wieder: dann wären schon zwei meiner Ansätze für den Wind, und dafür ist mir meine Zeit zu schade.
Grüße,
Klaus M.vdT.

Anzeige
AW: Flüchtigkeitsfehler
13.02.2013 14:42:31
mike49
Hallo Klaus,
ich hatte geschrieben:
"Ich möchte nun, nachdem ich das sortierte Blatt ausgedruckt habe, den ursprünglichen Zustand des Blattes wiederherstellen."
Ich verstehe das so, dass ich das sortierte Blatt ausdrucke und nicht das Sortiermakro den Druckprozess anstoßen soll.Ich dachte auch, dass bei der 1:1 Kopie in ein neues Blatt die Seiteneinstellungen übernommen werden.
Ich werde nun die mit meinem Sortiermakro erstellte Tabelle ausdrucken oder unter einem neuen Namen abspeichern und später ausdrucken. Die Originaltabelle sichere ich durch Nichtspeichern beim Schließen. Ist zwar ein wenig umständlich aber ich kann damit leben.
Wie dem auch sei. Ich danke ich dir für deine Bemühungen.
Gruß
mike49
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Makro rückgängig machen in Excel


Schritt-für-Schritt-Anleitung

Um ein Excel-Makro rückgängig zu machen, gibt es einige Ansätze. Beachte jedoch, dass die Funktion Application.Undo nur für manuelle Aktionen in Excel funktioniert, nicht für Makros. Gehe folgendermaßen vor, um Änderungen in Excel rückgängig zu machen:

  1. Makro erstellen: Öffne den VBA-Editor (Alt + F11) und erstelle ein neues Modul.

  2. Code einfügen: Füge den folgenden Code in das Modul ein:

    Sub Rückgängig()
       FName = ActiveWorkbook.FullName
       Application.ScreenUpdating = False
       Workbooks.Open Filename:=FName
       Application.ScreenUpdating = True
    End Sub
  3. Makro ausführen: Wenn du das Makro ausführst, wird die aktuelle Arbeitsmappe erneut geöffnet, was alle nicht gespeicherten Änderungen zurücksetzt.


Häufige Fehler und Lösungen

  • Excel rückgängig geht nicht: Wenn du versuchst, ein Makro rückgängig zu machen, wird dies nicht funktionieren, da Excel keine Undo-Funktion für Makros bietet. Du kannst nur manuelle Änderungen mit Application.Undo zurücksetzen.

  • Flackern des Bildschirms: Wenn dein Bildschirm während der Ausführung des Makros flackert, kannst du sicherstellen, dass Application.ScreenUpdating = False zu Beginn des Makros gesetzt ist, und am Ende wieder auf True zurückgesetzt wird.

  • Laufzeitfehler: Wenn du beim Ausführen des Makros auf einen Laufzeitfehler stößt, überprüfe, ob das aktive Blatt oder die verwendeten Objekte korrekt referenziert sind.


Alternative Methoden

Es gibt alternative Methoden, um Änderungen in Excel rückgängig zu machen:

  • Manuelles Speichern: Speichere häufig unter verschiedenen Dateinamen, um jederzeit zu einer früheren Version zurückzukehren.

  • Kopieren in ein neues Blatt: Erstelle ein neues Blatt, kopiere die Daten dorthin und bearbeite das neue Blatt, während das Original unverändert bleibt.

  • VBA-Prozeduren: Schreibe VBA-Prozeduren, die spezifische Änderungen zurücksetzen, anstatt das gesamte Arbeitsblatt neu zu laden.


Praktische Beispiele

Um den ursprünglichen Zustand eines Arbeitsblattes wiederherzustellen, könntest du den folgenden Code verwenden:

Sub SortiereInNeuerTabelle()
    Dim wksNew As Worksheet
    Dim wksOld As Worksheet
    Set wksOld = Sheets("Tabelle1") ' ANPASSEN
    Sheets.Add
    Set wksNew = ActiveSheet
    wksOld.Cells.Copy
    wksNew.Range("A1").PasteSpecial
    ' Hier kannst du dein Sortiermakro aufrufen
    ' SortierenTitel
    ' wksNew.PrintOut ' Kommentar entfernen, um das Blatt zu drucken
    Application.DisplayAlerts = False
    wksNew.Delete
    Application.DisplayAlerts = True
End Sub

Dieses Makro kopiert die Daten von „Tabelle1“ in ein neues Blatt, wo du die Änderungen vornehmen kannst, ohne das Original zu beeinflussen.


Tipps für Profis

  • Versionierung: Nutze die Funktion „Speichern unter“, um verschiedene Versionen deiner Datei zu sichern. So kannst du bei Bedarf auf ältere Versionen zurückgreifen.

  • Makro-Optimierung: Minimiere die Bildschirmaktualisierungen während der Ausführung von Makros, indem du Application.ScreenUpdating = False verwendest.

  • Fehlerbehandlung: Implementiere in deinen Makros Fehlerbehandlungsroutinen, um unerwartete Laufzeitfehler abzufangen und den Benutzer zu informieren.


FAQ: Häufige Fragen

1. Kann ich ein ausgeführtes Makro rückgängig machen?
Nein, Excel bietet keine Möglichkeit, Makros rückgängig zu machen. Du kannst nur manuelle Änderungen zurücksetzen.

2. Wie kann ich Änderungen in Excel rückgängig machen?
Verwende die Funktion Application.Undo für manuelle Eingaben oder speichere regelmäßig, um auf vorherige Versionen zurückzugreifen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige